summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2022-05-10 15:22:32 +0200
committerMark Wielaard <mark@klomp.org>2022-05-10 15:22:32 +0200
commite06d1d2530fa5d7eb898f3114d282bd196315d55 (patch)
tree1db2efd48765f9dc4c7e72abd936f860c1a9c9c5
parente00652f54afca62c5facbaddebe21012acd43386 (diff)
parent059e690e896e37c16774047bd1fd0c9e608545b8 (diff)
Merge tag 'elfutils-0.187' into mjw/RH-DTSupstream/mjw/RH-DTS
elfutils 0.187 release
-rw-r--r--.mailmap25
-rw-r--r--AUTHORS106
-rw-r--r--AUTHORS.sh12
-rw-r--r--ChangeLog58
-rw-r--r--NEWS45
-rw-r--r--backends/ChangeLog18
-rw-r--r--backends/ppc_initreg.c66
-rw-r--r--backends/riscv_init.c21
-rw-r--r--backends/riscv_retval.c86
-rw-r--r--config/ChangeLog36
-rw-r--r--config/Makefile.am9
-rw-r--r--config/debuginfod.sysconfig1
-rw-r--r--config/elfutils.spec.in44
-rw-r--r--config/eu.am2
-rw-r--r--config/profile.csh.in25
-rw-r--r--config/profile.sh.in14
-rw-r--r--configure.ac118
-rw-r--r--debuginfod/ChangeLog265
-rw-r--r--debuginfod/Makefile.am4
-rw-r--r--debuginfod/debuginfod-client.c527
-rw-r--r--debuginfod/debuginfod.cxx821
-rw-r--r--debuginfod/debuginfod.h.in3
-rw-r--r--doc/ChangeLog48
-rw-r--r--doc/Makefile.am5
-rw-r--r--doc/debuginfod-client-config.7129
-rw-r--r--doc/debuginfod-find.134
-rw-r--r--doc/debuginfod.8154
-rw-r--r--doc/debuginfod_find_debuginfo.371
l---------doc/man31
l---------doc/man71
-rw-r--r--lib/ChangeLog66
-rw-r--r--lib/Makefile.am4
-rw-r--r--lib/color.c6
-rw-r--r--lib/dynamicsizehash.c2
-rw-r--r--lib/dynamicsizehash_concurrent.c2
-rw-r--r--lib/error.c75
-rw-r--r--lib/eu-config.h65
-rw-r--r--lib/fixedsizehash.h6
-rw-r--r--lib/libeu.h2
-rw-r--r--lib/printversion.c2
-rw-r--r--lib/system.h37
-rw-r--r--lib/xasprintf.c52
-rw-r--r--libasm/ChangeLog14
-rw-r--r--libasm/asm_align.c5
-rw-r--r--libasm/asm_begin.c3
-rw-r--r--libasm/asm_fill.c3
-rw-r--r--libasm/asm_newabssym.c2
-rw-r--r--libasm/asm_newcomsym.c2
-rw-r--r--libasm/asm_newscn.c2
-rw-r--r--libasm/asm_newscngrp.c2
-rw-r--r--libasm/asm_newsubscn.c2
-rw-r--r--libasm/asm_newsym.c2
-rw-r--r--libasm/disasm_begin.c2
-rw-r--r--libcpu/ChangeLog5
-rw-r--r--libcpu/Makefile.am10
-rw-r--r--libdw/ChangeLog73
-rw-r--r--libdw/Makefile.am1
-rw-r--r--libdw/dwarf.h17
-rw-r--r--libdw/dwarf_aggregate_size.c50
-rw-r--r--libdw/dwarf_arrayorder.c2
-rw-r--r--libdw/dwarf_begin_elf.c123
-rw-r--r--libdw/dwarf_bitoffset.c2
-rw-r--r--libdw/dwarf_bitsize.c2
-rw-r--r--libdw/dwarf_bytesize.c2
-rw-r--r--libdw/dwarf_decl_column.c2
-rw-r--r--libdw/dwarf_decl_file.c2
-rw-r--r--libdw/dwarf_decl_line.c2
-rw-r--r--libdw/dwarf_getpubnames.c5
-rw-r--r--libdw/dwarf_getsrclines.c38
-rw-r--r--libdw/dwarf_linecontext.c45
-rw-r--r--libdw/dwarf_linefunctionname.c52
-rw-r--r--libdw/dwarf_srclang.c4
-rw-r--r--libdw/libdw.h9
-rw-r--r--libdw/libdw.map6
-rw-r--r--libdw/libdwP.h16
-rw-r--r--libdwelf/ChangeLog16
-rw-r--r--libdwelf/dwelf_elf_begin.c2
-rw-r--r--libdwelf/dwelf_elf_e_machine_string.c2
-rw-r--r--libdwelf/dwelf_strtab.c5
-rw-r--r--libdwfl/ChangeLog178
-rw-r--r--libdwfl/core-file.c11
-rw-r--r--libdwfl/debuginfod-client.c14
-rw-r--r--libdwfl/dwfl_module_build_id.c4
-rw-r--r--libdwfl/dwfl_report_elf.c4
-rw-r--r--libdwfl/dwfl_segment_report_module.c182
-rw-r--r--libdwfl/image-header.c24
-rw-r--r--libdwfl/libdwflP.h1
-rw-r--r--libdwfl/link_map.c94
-rw-r--r--libdwfl/linux-kernel-modules.c2
-rw-r--r--libdwfl/linux-pid-attach.c2
-rw-r--r--libdwfl/offline.c8
-rw-r--r--libebl/ChangeLog9
-rw-r--r--libebl/eblobjnote.c4
-rw-r--r--libebl/eblobjnotetypename.c3
-rw-r--r--libebl/eblopenbackend.c2
-rw-r--r--libelf/ChangeLog86
-rw-r--r--libelf/common.h2
-rw-r--r--libelf/elf.h107
-rw-r--r--libelf/elf32_updatefile.c4
-rw-r--r--libelf/elf_begin.c44
-rw-r--r--libelf/elf_getarsym.c5
-rw-r--r--libelf/elf_getdata.c38
-rw-r--r--libelf/elf_getdata_rawchunk.c16
-rw-r--r--libelf/elf_getscn.c4
-rw-r--r--libelf/elf_newdata.c2
-rw-r--r--libelf/elf_newscn.c10
-rw-r--r--libelf/elf_readall.c2
-rw-r--r--libelf/elf_strptr.c4
-rw-r--r--libelf/elf_update.c2
-rw-r--r--libelf/gelf_xlate.c10
-rw-r--r--libelf/libelfP.h5
-rw-r--r--libelf/version_xlate.h73
-rw-r--r--m4/ChangeLog9
-rw-r--r--m4/biarch.m44
-rw-r--r--m4/zip.m42
-rw-r--r--po/ChangeLog12
-rw-r--r--po/de.po1216
-rw-r--r--po/es.po1222
-rw-r--r--po/ja.po2318
-rw-r--r--po/pl.po1214
-rw-r--r--po/uk.po1215
-rw-r--r--src/ChangeLog111
-rw-r--r--src/Makefile.am3
-rw-r--r--src/addr2line.c17
-rw-r--r--src/ar.c41
-rw-r--r--src/arlib.c8
-rw-r--r--src/elfclassify.c3
-rw-r--r--src/elfcompress.c5
-rw-r--r--src/elflint.c13
-rw-r--r--src/findtextrel.c59
-rw-r--r--src/nm.c31
-rw-r--r--src/objdump.c33
-rw-r--r--src/readelf.c323
-rw-r--r--src/size.c22
-rw-r--r--src/strings.c11
-rw-r--r--src/strip.c80
-rw-r--r--src/unstrip.c176
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/ChangeLog376
-rw-r--r--tests/Makefile.am94
-rw-r--r--tests/alldts.c5
-rw-r--r--tests/backtrace.c61
-rwxr-xr-xtests/debuginfod-subr.sh170
-rw-r--r--tests/elfcopy.c2
-rw-r--r--tests/nvidia_extended_linemap_libdw.c166
-rwxr-xr-xtests/run-alldts.sh2
-rwxr-xr-xtests/run-debuginfod-archive-groom.sh166
-rwxr-xr-xtests/run-debuginfod-archive-rename.sh103
-rwxr-xr-xtests/run-debuginfod-archive-test.sh87
-rwxr-xr-xtests/run-debuginfod-artifact-running.sh119
-rwxr-xr-xtests/run-debuginfod-dlopen.sh91
-rwxr-xr-xtests/run-debuginfod-duplicate-urls.sh56
-rwxr-xr-xtests/run-debuginfod-extraction-passive.sh77
-rwxr-xr-xtests/run-debuginfod-extraction.sh106
-rwxr-xr-xtests/run-debuginfod-fd-prefetch-caches.sh66
-rwxr-xr-xtests/run-debuginfod-federation-link.sh164
-rwxr-xr-xtests/run-debuginfod-federation-metrics.sh210
-rwxr-xr-xtests/run-debuginfod-federation-sqlite.sh202
-rwxr-xr-xtests/run-debuginfod-file.sh41
-rwxr-xr-xtests/run-debuginfod-find.sh677
-rwxr-xr-xtests/run-debuginfod-malformed.sh111
-rwxr-xr-xtests/run-debuginfod-negative-cache.sh83
-rwxr-xr-xtests/run-debuginfod-no-urls.sh41
-rwxr-xr-xtests/run-debuginfod-percent-escape.sh60
-rwxr-xr-xtests/run-debuginfod-query-retry.sh35
-rwxr-xr-xtests/run-debuginfod-regex.sh101
-rwxr-xr-xtests/run-debuginfod-response-headers.sh100
-rwxr-xr-xtests/run-debuginfod-sizetime.sh82
-rwxr-xr-xtests/run-debuginfod-tmp-home.sh126
-rwxr-xr-xtests/run-debuginfod-webapi-concurrency.sh69
-rwxr-xr-xtests/run-debuginfod-writable.sh88
-rwxr-xr-xtests/run-debuginfod-x-forwarded-for.sh63
-rwxr-xr-xtests/run-large-elf-file.sh11
-rwxr-xr-xtests/run-nvidia-extended-linemap-libdw.sh60
-rwxr-xr-xtests/run-nvidia-extended-linemap-readelf.sh120
-rwxr-xr-xtests/run-readelf-d.sh7
-rwxr-xr-xtests/run-readelf-fat-lto.sh53
-rwxr-xr-xtests/run-readelf-multi-noline.sh170
-rwxr-xr-xtests/run-strip-largealign.sh35
-rwxr-xr-xtests/run-varlocs-vars.sh93
-rw-r--r--tests/show-die-info.c2
-rw-r--r--tests/testfile-dwarf5-fat-lto.o.bz2bin0 -> 3101 bytes
-rw-r--r--tests/testfile-largealign.o.bz2bin0 -> 183 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf4-32.o.bz2bin0 -> 568 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf4-64.o.bz2bin0 -> 605 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf5-32.o.bz2bin0 -> 741 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf5-64.o.bz2bin0 -> 761 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf4-32.o.bz2bin0 -> 660 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf4-64.o.bz2bin0 -> 691 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf5-32.o.bz2bin0 -> 728 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf5-64.o.bz2bin0 -> 768 bytes
-rwxr-xr-xtests/testfile_multi_noline.bz2bin0 -> 3155 bytes
-rw-r--r--tests/testfile_nvidia_linemap.bz2bin0 -> 2365 bytes
-rw-r--r--tests/varlocs.c11
194 files changed, 11756 insertions, 5511 deletions
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 00000000..fd42169b
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1,25 @@
+# help out git with erroneous or incomplete email address mappings
+
+Piotr DrÄ…g <raven@fedoraproject.org>
+Domingo Becker <beckerde@fedoraproject.org>
+Ulrich Drepper <drepper@x201.akkadia.org>
+Ulrich Drepper <drepper@redhat.com.roland>
+Hyu_gabaru Ryu_ichi <hyuuga@fedoraproject.org>
+kiyoto hashida <khasida@fedoraproject.org>
+Claudio Rodrigo Pereyra Diaz <elsupergomez@fedoraproject.org>
+Gladys Guerrero <gguerrer@fedoraproject.org>
+Wei Liu <leahliu@fedoraproject.org>
+Michael Münch <micm@fedoraproject.org>
+Noah Sanci <nsanci@redhat.com>
+Noriko Mizumoto <noriko@fedoraproject.org>
+Cornelius Neckenig <tbull@fedoraproject.org>
+Francesco Tombolini <tombo@fedoraproject.org>
+Thomas Spura <tomspur@fedoraproject.org>
+Geert Warrink <warrink@fedoraproject.org>
+Yulia Poyarkova <ypoyarko@fedoraproject.org>
+Yuri Chornoivan <yurchor@fedoraproject.org>
+Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
+Daniel Cabrera <logan@fedoraproject.org>
+Thomas Canniot <mrtom@fedoraproject.org>
+Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> наб via Elfutils-devel <elfutils-devel@sourceware.org>
+
diff --git a/AUTHORS b/AUTHORS
index ef3c5430..45cb1f8d 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,104 @@
-For Now:
-Ulrich Drepper.
-Roland McGrath
+Aaron Merey
+Adam Markey
+Adrian Ratiu
+Ahelenia Ziemiańska
+Akihiko Odaki
+Alexander Cherepanov
+Alexander Kanavin
+Alexander Miller
+Alice Zhang
+Andreas Krebbel
+Andreas Schwab
+Andrei Homescu
+Anthony G. Basile
+Ben Woodard
+Chih-Hung Hsieh
+Claudio Rodrigo Pereyra Diaz
+Colin Cross
+Cornelius Neckenig
+Daniel Cabrera
+David Abdurachmanov
+Di Chen
+Dima Kogan
+Dimitris Glezos
+Dmitry V. Levin
+Dodji Seketeli
+Domingo Becker
+Eduardo Santiago
+Eli Schwartz
+Érico Nogueira
+Érico Rolim
+Filipe Brandenburger
+Florian Weimer
+Francesco Tombolini
+Frank Ch. Eigler
+Geert Warrink
+Gladys Guerrero
+Gustavo Romero
+Hayatsu Shunsuke
+H.J. Lu
+Hyu_gabaru Ryu_ichi
+Jakub Jelinek
+Jan Kratochvil
+Jan Pokorný
+Jason P. Leasure
+Jean Pihet
+Jeff Kenton
+Jim Wilson
+John M Mellor-Crummey
+John Ogness
+Jonathan Lebon
+Jonathon Anderson
+Jose E. Marchesi
+Josh Stone
+Joshua Watt
+Kevin Cernekee
+kiyoto hashida
+Konrad Kleine
+Kurt Roeckx
+Kyle McMartin
+Lei Zhang
+Lubomir Rintel
+Luca Boccassi
+Luiz Angelo Daros de Luca
+Mao Han
+Marek Polacek
+Mark Wielaard
+Martin Liska
+Masatake YAMATO
+Matt Fleming
+Matthias Klose
+Matthias Maennich
+Max Filippov
+Michael Forney
+Michael Münch
+Mike Frysinger
+Milian Wolff
+Namhyung Kim
+Noah Sanci
+Noriko Mizumoto
+Omar Sandoval
Petr Machata
+Pino Toscano
+Piotr DrÄ…g
+Ravi Bangoria
+Richard Henderson
+Roland McGrath
+Rosen Penev
+Ross Burton
+Saleem Abdulrasool
+Sergei Trofimovich
+Srđan Milaković
+Steven Chamberlain
+Thomas Canniot
+Thomas Spura
+Timm Bäder
+Tom Tromey
+Ulf Hermann
+Ulrich Drepper
+Wei Liu
+William Cohen
+Yonghong Song
+Yulia Poyarkova
+Yunlian Jiang
+Yuri Chornoivan
diff --git a/AUTHORS.sh b/AUTHORS.sh
new file mode 100644
index 00000000..ff048a64
--- /dev/null
+++ b/AUTHORS.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+# Create the AUTHORS file, by searching the git history.
+
+# Run as "AUTHORS.sh" to get complete history
+# Run with "AUTHORS.sh commitish..commitish" for history between tags
+
+# shortlog will canonicalize the names using the file .mailmap
+git shortlog -s ${1-} |
+sed -e 's, via Elfutils-devel,,' |
+cut -b8- | # strip the commit counts
+sort | uniq
diff --git a/ChangeLog b/ChangeLog
index a01f6f9f..77173d91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,61 @@
+2022-04-25 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (AC_INIT): Set version to 0.187.
+ * NEWS: Add some more 0.187 items.
+
+2022-04-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * AUTHORS.sh, .mailmap: New files.
+ * AUTHORS: Regenerated to cover entire history of elfutils.
+
+2022-04-24 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (AC_CHECK_FUNCS): Add mremap.
+
+2021-03-20 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Remove -m64 on 32bit target comments for
+ utrace_BIARCH check.
+
+2021-03-14 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Use AS_HELP_STRING instead of AC_HELP_STRING.
+
+2021-03-11 Mark Wielaard <mark@klomp.org>
+
+ * NEWS: Document new --relative option for addr2line.
+
+2022-03-10 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Move AC_PROG_CXX earlier. Check for both
+ -D_FORTIFY_SOURCE=3 and -D_FORTIFY_SOURCE=2 support. Also
+ set CXXFLAGS. Output final CFLAGS and CXXFLAGS setting.
+
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Add --enable-sanitize-address.
+
+2021-11-10 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (AC_INIT): Set version to 0.186.
+ * NEWS: Add translation item.
+
+2021-09-03 John Mellor-Crummey <johnmc@rice.edu>
+
+ * NEWS: Read inlining info in NVIDIA extended line map
+
+2021-08-10 Adrian Ratiu <adrian.ratiu@collabora.com>
+
+ * configure.ac (AC_CACHE_CHECK): Rework std=gnu99 check to allow clang.
+
+2021-08-20 Saleem Abdulrasool <abdulras@google.com>
+
+ * Add AC_CHECK_HEADERS for error.h and err.h.
+
+2021-07-28 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (AC_CHECK_DECLS): Add reallocarray check.
+
2021-05-22 Mark Wielaard <mark@klomp.org>
* configure.ac (AC_INIT): Set version to 0.185.
diff --git a/NEWS b/NEWS
index a73d39ec..c74fe3f1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,48 @@
+Version 0.187
+
+debuginfod: Support -C option for connection thread pooling.
+
+debuginfod-client: Negative cache file are now zero sized instead of
+ no-permission files.
+
+addr2line: The -A, --absolute option, which shows file names including
+ the full compilation directory is now the default. To get the
+ old behavior use the new option --relative.
+
+readelf, elflint: Recognize FDO Packaging Metadata ELF notes
+
+libdw, debuginfo-client: Load libcurl lazily only when files need to
+ be fetched remotely. libcurl is now never
+ loaded when DEBUGINFOD_URLS is unset. And when
+ DEBUGINFOD_URLS is set, libcurl is only loaded
+ when the debuginfod_begin function is called.
+
+Version 0.186
+
+debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files
+ /etc/debuginfod/*.urls rather than hardcoded into the
+ /etc/profile.d/debuginfod* scripts.
+ Add $DEBUGINFOD_MAXSIZE and $DEBUGINFOD_MAXTIME settings
+ for skipping large/slow transfers.
+ Add $DEBUGINFOD_RETRY for retrying aborted lookups.
+
+debuginfod: Supply extra HTTP response headers, describing archive/file
+ names that satisfy the requested buildid content.
+ Support -d :memory: option for in-memory databases.
+ Protect against loops in federated server configurations.
+ Add -r option to use -I/-X regexes for grooming stale files.
+ Protect against wasted CPU from duplicate concurrent requests.
+ Limit the duration of groom ops roughly to rescan (-t) times.
+ Add --passive mode for serving from read-only database.
+ Several other performance improvements & prometheus metrics.
+
+libdw: Support for the NVIDIA Cuda line map extensions.
+ DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name
+ are defined in dwarf.h. New functions dwarf_linecontext and
+ dwarf_linefunctionname
+
+translations: Update Japanese translation.
+
Version 0.185
debuginfod-client: Simplify curl handle reuse so downloads which
diff --git a/backends/ChangeLog b/backends/ChangeLog
index ac0e3187..51959259 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,21 @@
+2022-02-16 Mark Wielaard <mark@klomp.org>
+
+ * ppc_initreg.c (ppc_set_initial_registers_tid): Define struct
+ pt_regs32. Use PTRACE_GETREGSET.
+
+2021-09-29 William Cohen <wcohen@redhat.com>
+
+ * riscv_init.c (riscv_return_value_location_lp64f): New function
+ declaration.
+ (riscv_return_value_location_lp64): Likewise.
+ (riscv_init): Set return_value_location based on elf class and
+ ehdr flags.
+ * riscv_retval.c (riscv_return_value_location_lp64d): Renamed to...
+ (riscv_return_value_location_lp64ifd): ...this. Handle single,
+ double, float _Complex and double _Complex cases.
+ (riscv_return_value_location_lp64d): New function.
+ (riscv_return_value_location_lp64f): Likewise.
+
2021-04-19 Martin Liska <mliska@suse.cz>
* aarch64_symbol.c (aarch64_data_marker_symbol): Use startswith.
diff --git a/backends/ppc_initreg.c b/backends/ppc_initreg.c
index e5cca7e1..8ed72fb4 100644
--- a/backends/ppc_initreg.c
+++ b/backends/ppc_initreg.c
@@ -1,5 +1,6 @@
/* Fetch live process registers from TID.
Copyright (C) 2013 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -34,7 +35,11 @@
#if defined(__powerpc__) && defined(__linux__)
# include <sys/ptrace.h>
# include <asm/ptrace.h>
+# ifndef PTRACE_GETREGSET
+# include <linux/ptrace.h>
+# endif
# include <sys/user.h>
+# include <sys/uio.h>
#endif
#include "system.h"
@@ -75,39 +80,50 @@ ppc_set_initial_registers_tid (pid_t tid __attribute__ ((unused)),
#if !defined(__powerpc__) || !defined(__linux__)
return false;
#else /* __powerpc__ */
- union
- {
- struct pt_regs r;
- long l[sizeof (struct pt_regs) / sizeof (long)];
- }
- user_regs;
- eu_static_assert (sizeof (struct pt_regs) % sizeof (long) == 0);
- /* PTRACE_GETREGS is EIO on kernel-2.6.18-308.el5.ppc64. */
- errno = 0;
- for (unsigned regno = 0; regno < sizeof (user_regs) / sizeof (long);
- regno++)
- {
- user_regs.l[regno] = ptrace (PTRACE_PEEKUSER, tid,
- (void *) (uintptr_t) (regno
- * sizeof (long)),
- NULL);
- if (errno != 0)
- return false;
- }
-#define GPRS (sizeof (user_regs.r.gpr) / sizeof (*user_regs.r.gpr))
+
+/* pt_regs for 32bit processes. Same as 64bit pt_regs but all registers
+ are 32bit instead of 64bit long. */
+#define GPRS 32
+ struct pt_regs32
+ {
+ uint32_t gpr[GPRS];
+ uint32_t nip;
+ uint32_t msr;
+ uint32_t orig_gpr3;
+ uint32_t ctr;
+ uint32_t link;
+ uint32_t xer;
+ uint32_t ccr;
+ uint32_t mq;
+ uint32_t trap;
+ uint32_t dar;
+ uint32_t dsisr;
+ uint32_t result;
+ };
+
+ struct pt_regs regs;
+ struct pt_regs32 *regs32 = (struct pt_regs32 *) &regs;
+ struct iovec iovec;
+ iovec.iov_base = &regs;
+ iovec.iov_len = sizeof (regs);
+ if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec) != 0)
+ return false;
+
+ /* Did we get the full pt_regs or less (the 32bit pt_regs)? */
+ bool get32 = iovec.iov_len < sizeof (struct pt_regs);
Dwarf_Word dwarf_regs[GPRS];
for (unsigned gpr = 0; gpr < GPRS; gpr++)
- dwarf_regs[gpr] = user_regs.r.gpr[gpr];
+ dwarf_regs[gpr] = get32 ? regs32->gpr[gpr] : regs.gpr[gpr];
if (! setfunc (0, GPRS, dwarf_regs, arg))
return false;
- dwarf_regs[0] = user_regs.r.link;
// LR uses both 65 and 108 numbers, there is no consistency for it.
- if (! setfunc (65, 1, dwarf_regs, arg))
+ Dwarf_Word link = get32 ? regs32->link : regs.link;
+ if (! setfunc (65, 1, &link, arg))
return false;
/* Registers like msr, ctr, xer, dar, dsisr etc. are probably irrelevant
for CFI. */
- dwarf_regs[0] = user_regs.r.nip;
- return setfunc (-1, 1, dwarf_regs, arg);
+ Dwarf_Word pc = get32 ? (Dwarf_Word) regs32->nip : regs.nip;
+ return setfunc (-1, 1, &pc, arg);
#endif /* __powerpc__ */
}
diff --git a/backends/riscv_init.c b/backends/riscv_init.c
index 551e7bb6..141e0821 100644
--- a/backends/riscv_init.c
+++ b/backends/riscv_init.c
@@ -41,6 +41,12 @@
extern __typeof (EBLHOOK (return_value_location))
riscv_return_value_location_lp64d attribute_hidden;
+extern __typeof (EBLHOOK (return_value_location))
+ riscv_return_value_location_lp64f attribute_hidden;
+
+extern __typeof (EBLHOOK (return_value_location))
+ riscv_return_value_location_lp64 attribute_hidden;
+
extern __typeof (EBLHOOK (core_note)) riscv64_core_note attribute_hidden;
Ebl *
@@ -63,10 +69,17 @@ riscv_init (Elf *elf,
eh->core_note = riscv64_core_note;
else
HOOK (eh, core_note);
- if (eh->class == ELFCLASS64
- && ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI)
- == EF_RISCV_FLOAT_ABI_DOUBLE))
- eh->return_value_location = riscv_return_value_location_lp64d;
+ if (eh->class == ELFCLASS64)
+ {
+ if ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI)
+ == EF_RISCV_FLOAT_ABI_DOUBLE)
+ eh->return_value_location = riscv_return_value_location_lp64d;
+ else if ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI)
+ == EF_RISCV_FLOAT_ABI_SINGLE)
+ eh->return_value_location = riscv_return_value_location_lp64f;
+ else
+ eh->return_value_location = riscv_return_value_location_lp64;
+ }
return eh;
}
diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c
index 35b6010b..34761486 100644
--- a/backends/riscv_retval.c
+++ b/backends/riscv_retval.c
@@ -125,8 +125,8 @@ pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)),
}
int
-riscv_return_value_location_lp64d (Dwarf_Die *functypedie,
- const Dwarf_Op **locp)
+riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie,
+ const Dwarf_Op **locp)
{
/* Start with the function's type, and get the DW_AT_type attribute,
which is the type of the return value. */
@@ -211,10 +211,29 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie,
switch (size)
{
case 4: /* single */
- case 8: /* double */
- return pass_in_fpr_lp64d (locp, size);
-
- case 16: /* quad */
+ switch (fp)
+ {
+ case EF_RISCV_FLOAT_ABI_DOUBLE:
+ case EF_RISCV_FLOAT_ABI_SINGLE:
+ return pass_in_fpr_lp64d (locp, size);
+ case EF_RISCV_FLOAT_ABI_SOFT:
+ return pass_in_gpr_lp64 (locp, size);
+ default:
+ return -2;
+ }
+ case 8: /* double */
+ switch (fp)
+ {
+ case EF_RISCV_FLOAT_ABI_DOUBLE:
+ return pass_in_fpr_lp64d (locp, size);
+ case EF_RISCV_FLOAT_ABI_SINGLE:
+ case EF_RISCV_FLOAT_ABI_SOFT:
+ return pass_in_gpr_lp64 (locp, size);
+ default:
+ return -2;
+ }
+
+ case 16: /* quad */
return pass_in_gpr_lp64 (locp, size);
default:
@@ -227,12 +246,31 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie,
switch (size)
{
case 8: /* float _Complex */
- return pass_in_fpr_lp64f (locp, size);
-
- case 16: /* double _Complex */
- return pass_in_fpr_lp64d (locp, size);
-
- case 32: /* long double _Complex */
+ switch (fp)
+ {
+ case EF_RISCV_FLOAT_ABI_DOUBLE:
+ case EF_RISCV_FLOAT_ABI_SINGLE:
+ return pass_in_fpr_lp64f (locp, size);
+ case EF_RISCV_FLOAT_ABI_SOFT:
+ /* Double the size so the vals are two registers. */
+ return pass_in_gpr_lp64 (locp, size * 2);
+ default:
+ return -2;
+ }
+
+ case 16: /* double _Complex */
+ switch (fp)
+ {
+ case EF_RISCV_FLOAT_ABI_DOUBLE:
+ return pass_in_fpr_lp64d (locp, size);
+ case EF_RISCV_FLOAT_ABI_SINGLE:
+ case EF_RISCV_FLOAT_ABI_SOFT:
+ return pass_in_gpr_lp64 (locp, size);
+ default:
+ return -2;
+ }
+
+ case 32: /* long double _Complex */
return pass_by_ref (locp);
default:
@@ -249,3 +287,27 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie,
*locp = NULL;
return 0;
}
+
+int
+riscv_return_value_location_lp64d (Dwarf_Die *functypedie,
+ const Dwarf_Op **locp)
+{
+ return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_DOUBLE,
+ functypedie, locp);
+}
+
+int
+riscv_return_value_location_lp64f (Dwarf_Die *functypedie,
+ const Dwarf_Op **locp)
+{
+ return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_SINGLE,
+ functypedie, locp);
+}
+
+int
+riscv_return_value_location_lp64 (Dwarf_Die *functypedie,
+ const Dwarf_Op **locp)
+{
+ return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_SOFT,
+ functypedie, locp);
+}
diff --git a/config/ChangeLog b/config/ChangeLog
index 2cdcfa72..51415258 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,39 @@
+2022-04-25 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in: Update for 0.187.
+
+2022-01-19 Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
+
+ * profile.csh.in: Set DEBUGINFOD_URLS directly. Use "$0" and :
+ in sh -c.
+ * profile.sh.in: Set DEBUGINFOD_URLS directly. Don't use sh -c.
+ Use $() instead of ``.
+
+2022-04-07 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in (debuginfod-client): Add an explicit requires
+ on elfutils-libs and elfutils-libelf.
+
+2021-11-10 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in: Update for 0.186.
+
+2021-10-03 Frank Ch. Eigler <fche@redhat.com>
+
+ PR27783
+ * profile.sh, profile.csh: Rewrite to document and set DEBUGINFOD_URLS
+ from /etc/debuginfod/*.urls files.
+ * Makefile.am: Install the configury-specified .urls file.
+ * elfutils.spec: Package it.
+
+2021-09-05 Dmitry V. Levin <ldv@altlinux.org>
+
+ * eu.am (STACK_USAGE_NO_ERROR): New variable.
+
+2021-07-06 Alice Zhang <alizhang@redhat.com>
+
+ * debuginfod.sysconfig: Introduce default retry limit.
+
2021-05-10 Mark Wielaard <mark@klomp.org>
* elfutils.spec.in: Update for 0.185.
diff --git a/config/Makefile.am b/config/Makefile.am
index a66f5490..0d3ba164 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -40,9 +40,16 @@ pkgconfig_DATA += libdebuginfod.pc
install-data-local:
$(INSTALL_DATA) profile.sh -D $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh
$(INSTALL_DATA) profile.csh -D $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh
+ mkdir -p $(DESTDIR)$(sysconfdir)/debuginfod
+ if [ -n "@DEBUGINFOD_URLS@" ]; then \
+ echo "@DEBUGINFOD_URLS@" > $(DESTDIR)$(sysconfdir)/debuginfod/elfutils.urls; \
+ fi
uninstall-local:
- rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh
+ rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh
+ rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh
+ rm -f $(DESTDIR)$(sysconfdir)/debuginfod/elfutils.urls
+ -rmdir $(DESTDIR)$(sysconfdir)/debuginfod
endif
if MAINTAINER_MODE
diff --git a/config/debuginfod.sysconfig b/config/debuginfod.sysconfig
index 44603874..890a1a25 100644
--- a/config/debuginfod.sysconfig
+++ b/config/debuginfod.sysconfig
@@ -11,4 +11,5 @@ DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin /
# upstream debuginfods
#DEBUGINFOD_URLS="http://secondhost:8002 http://thirdhost:8002"
#DEBUGINFOD_TIMEOUT="5"
+#DEBUGINFOD_RETRY_LIMIT="2"
#DEBUGINFOD_CACHE_DIR=""
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
index 5552352b..54599159 100644
--- a/config/elfutils.spec.in
+++ b/config/elfutils.spec.in
@@ -141,6 +141,9 @@ profiling) of processes.
%package debuginfod-client
Summary: Library and command line client for build-id HTTP ELF/DWARF server
License: GPLv3+ and (GPLv2+ or LGPLv3+)
+# For debuginfod-find binary
+Requires: elfutils-libs = %{version}-%{release}
+Requires: elfutils-libelf = %{version}-%{release}
%package debuginfod-client-devel
Summary: Libraries and headers to build debuginfod client applications
@@ -299,12 +302,15 @@ fi
%{_libdir}/libdebuginfod.so.*
%{_bindir}/debuginfod-find
%{_mandir}/man1/debuginfod-find.1*
+%{_mandir}/man7/debuginfod*.7*
%config(noreplace) %{_sysconfdir}/profile.d/*
+%config(noreplace) %{_sysconfdir}/debuginfod/*
%files debuginfod-client-devel
%defattr(-,root,root)
%{_libdir}/pkgconfig/libdebuginfod.pc
%{_mandir}/man3/debuginfod_*.3*
+%{_mandir}/man7/debuginfod*.7*
%{_includedir}/elfutils/debuginfod.h
%{_libdir}/libdebuginfod.so
@@ -315,6 +321,7 @@ fi
%{_unitdir}/debuginfod.service
%{_sysconfdir}/sysconfig/debuginfod
%{_mandir}/man8/debuginfod.8*
+%{_mandir}/man7/debuginfod*.7*
%dir %attr(0700,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod
%ghost %attr(0600,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod/debuginfod.sqlite
@@ -333,6 +340,43 @@ exit 0
%systemd_postun_with_restart debuginfod.service
%changelog
+* Mon Apr 25 2022 Mark Wielaard <mark@klomp.org> 0.187-1
+- debuginfod: Support -C option for connection thread pooling.
+- debuginfod-client: Negative cache file are now zero sized instead
+ of no-permission files.
+- addr2line: The -A, --absolute option, which shows file names
+ includingthe full compilation directory is now the
+ default. To get theold behavior use the new option --relative.
+- readelf, elflint: Recognize FDO Packaging Metadata ELF notes
+- libdw, debuginfo-client: Load libcurl lazily only when files need
+ to be fetched remotely. libcurl is now never loaded when
+ DEBUGINFOD_URLS is unset. And whenDEBUGINFOD_URLS is set,
+ libcurl is only loaded when the debuginfod_begin function is
+ called.
+
+* Wed Nov 10 2021 Mark Wielaard <mark@klomp.org> 0.186-1
+- debuginfod-client: Default $DEBUGINFOD_URLS is computed from
+ drop-in files /etc/debuginfod/*.urls rather than
+ hardcoded into the /etc/profile.d/debuginfod*
+ scripts.
+ Add $DEBUGINFOD_MAXSIZE and $DEBUGINFOD_MAXTIME settings
+ for skipping large/slow transfers.
+ Add $DEBUGINFOD_RETRY for retrying aborted lookups.
+- debuginfod: Supply extra HTTP response headers, describing
+ archive/file names that satisfy the requested buildid content.
+ Support -d :memory: option for in-memory databases.
+ Protect against loops in federated server configurations.
+ Add -r option to use -I/-X regexes for grooming stale files.
+ Protect against wasted CPU from duplicate concurrent requests.
+ Limit the duration of groom ops roughly to rescan (-t) times.
+ Add --passive mode for serving from read-only database.
+ Several other performance improvements & prometheus metrics.
+- libdw: Support for the NVIDIA Cuda line map extensions.
+ DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name
+ are defined in dwarf.h. New functions dwarf_linecontext and
+ dwarf_linefunctionname.
+- translations: Update Japanese translation.
+
* Sat May 22 2021 Mark Wielaard <mark@klomp.org> 0.185-1
- debuginfod-client: Simplify curl handle reuse so downloads which
return an error are retried.
diff --git a/config/eu.am b/config/eu.am
index 2c3e4571..58cd3c4f 100644
--- a/config/eu.am
+++ b/config/eu.am
@@ -39,8 +39,10 @@ ARFLAGS = cr
# Warn about stack usage of more than 256K = 262144 bytes.
if ADD_STACK_USAGE_WARNING
STACK_USAGE_WARNING=-Wstack-usage=262144
+STACK_USAGE_NO_ERROR=-Wno-error=stack-usage=
else
STACK_USAGE_WARNING=
+STACK_USAGE_NO_ERROR=
endif
if SANE_LOGICAL_OP_WARNING
diff --git a/config/profile.csh.in b/config/profile.csh.in
index 0a2d6d16..012e243a 100644
--- a/config/profile.csh.in
+++ b/config/profile.csh.in
@@ -1,11 +1,16 @@
-if ("@DEBUGINFOD_URLS@" != "") then
- if ($?DEBUGINFOD_URLS) then
- if ($%DEBUGINFOD_URLS) then
- setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS @DEBUGINFOD_URLS@"
- else
- setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@"
- endif
- else
- setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@"
- endif
+# $HOME/.login* or similar files may first set $DEBUGINFOD_URLS.
+# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files.
+# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS.
+# See also [man debuginfod-client-config] for other environment variables
+# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS.
+
+if (! $?DEBUGINFOD_URLS) then
+ set prefix="@prefix@"
+ set DEBUGINFOD_URLS=`sh -c 'cat "$0"/*.urls; :' "@sysconfdir@/debuginfod" 2>/dev/null | tr '\n' ' '`
+ if ( "$DEBUGINFOD_URLS" != "" ) then
+ setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS"
+ else
+ unset DEBUGINFOD_URLS
+ endif
+ unset prefix
endif
diff --git a/config/profile.sh.in b/config/profile.sh.in
index aa228a0d..bad20b1e 100644
--- a/config/profile.sh.in
+++ b/config/profile.sh.in
@@ -1,4 +1,12 @@
-if [ -n "@DEBUGINFOD_URLS@" ]; then
- DEBUGINFOD_URLS="${DEBUGINFOD_URLS-}${DEBUGINFOD_URLS:+ }@DEBUGINFOD_URLS@"
- export DEBUGINFOD_URLS
+# $HOME/.profile* or similar files may first set $DEBUGINFOD_URLS.
+# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files.
+# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS.
+# See also [man debuginfod-client-config] for other environment variables
+# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS.
+
+if [ -z "$DEBUGINFOD_URLS" ]; then
+ prefix="@prefix@"
+ DEBUGINFOD_URLS=$(cat "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ')
+ [ -n "$DEBUGINFOD_URLS" ] && export DEBUGINFOD_URLS || unset DEBUGINFOD_URLS
+ unset prefix
fi
diff --git a/configure.ac b/configure.ac
index b348a717..11d1cf82 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,6 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
dnl Configure input file for elfutils. -*-autoconf-*-
dnl
dnl Copyright (C) 1996-2019 Red Hat, Inc.
+dnl Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
dnl
dnl This file is part of elfutils.
dnl
@@ -17,7 +18,7 @@ dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
-AC_INIT([elfutils],[0.185],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
+AC_INIT([elfutils],[0.187],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
dnl Workaround for older autoconf < 2.64
m4_ifndef([AC_PACKAGE_URL],
@@ -44,7 +45,7 @@ fi
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_FILES([config/Makefile])
-AC_COPYRIGHT([Copyright (C) 1996-2021 The elfutils developers.])
+AC_COPYRIGHT([Copyright (C) 1996-2022 The elfutils developers.])
AC_PREREQ(2.63) dnl Minimum Autoconf version required.
dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
@@ -87,7 +88,8 @@ AS_IF([test "$use_locks" = yes],
AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
-AC_PROG_CC
+AC_PROG_CC_C99
+AC_PROG_CXX
AC_PROG_RANLIB
AC_PROG_YACC
AM_PROG_LEX
@@ -96,39 +98,6 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
AC_CHECK_TOOL([READELF], [readelf])
AC_CHECK_TOOL([NM], [nm])
-# We use -std=gnu99 but have explicit checks for some language constructs
-# and GNU extensions since some compilers claim GNU99 support, but don't
-# really support all language extensions. In particular we need
-# Mixed Declarations and Code
-# https://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html
-# Nested Functions
-# https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
-# Arrays of Variable Length
-# https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
-AC_CACHE_CHECK([for gcc with GNU99 support], ac_cv_c99, [dnl
-old_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -std=gnu99"
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
-int foo (int a)
-{
- for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; return s;
-}
-
-double bar (double a, double b)
-{
- double square (double z) { return z * z; }
- return square (a) + square (b);
-}
-
-void baz (int n)
-{
- struct S { int x[[n]]; };
-}])],
- ac_cv_c99=yes, ac_cv_c99=no)
-CFLAGS="$old_CFLAGS"])
-AS_IF([test "x$ac_cv_c99" != xyes],
- AC_MSG_ERROR([gcc with GNU99 support required]))
-
AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))],
ac_cv_visibility, [dnl
save_CFLAGS="$CFLAGS"
@@ -264,25 +233,38 @@ AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts,
AS_IF([test "x$ac_cv_bad_fts" = "xyes"],
[CFLAGS="$CFLAGS -DBAD_FTS=1" CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"])
-# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already
+# See if we can add -D_FORTIFY_SOURCE=2 or =3. Don't do it if it is already
# (differently) defined or if it generates warnings/errors because we
# don't use the right optimisation level (string.h will warn about that).
-AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS])
+AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 or =3 to CFLAGS])
case "$CFLAGS" in
- *-D_FORTIFY_SOURCE=2*)
+ *-D_FORTIFY_SOURCE=*)
AC_MSG_RESULT([no, already there])
;;
*)
save_CFLAGS="$CFLAGS"
- CFLAGS="-D_FORTIFY_SOURCE=2 $CFLAGS -Werror"
+ # Try 3 first.
+ CFLAGS="-D_FORTIFY_SOURCE=3 $save_CFLAGS -Werror"
+ fortified_cflags=""
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <string.h>
int main() { return 0; }
- ]])], [ AC_MSG_RESULT([yes])
- CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ],
- [ AC_MSG_RESULT([no])
- CFLAGS="$save_CFLAGS"])
- ;;
+ ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=3])
+ fortified_cflags="-D_FORTIFY_SOURCE=3" ], [])
+
+ # If that didn't work, try 2.
+ if test -z "$fortified_cflags"; then
+ CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS -Werror"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ #include <string.h>
+ int main() { return 0; }
+ ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=2])
+ fortified_cflags="-D_FORTIFY_SOURCE=2" ],
+ [ AC_MSG_RESULT([no, cannot be used])])
+ fi
+ CFLAGS="$fortified_cflags $save_CFLAGS"
+ CXXFLAGS="$fortified_cflags $CXXFLAGS"
+ ;;
esac
dnl enable debugging of branch prediction.
@@ -340,10 +322,34 @@ esac
AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val,
[Building with -fsanitize=undefined or not])
+AC_ARG_ENABLE([sanitize-address],
+ AS_HELP_STRING([--enable-sanitize-address],
+ [Use gcc address sanitizer]),
+ [use_address=$enableval], [use_address=no])
+if test "$use_address" = yes; then
+ old_CFLAGS="$CFLAGS"
+ old_CXXFLAGS="$CXXFLAGS"
+ old_LDFLAGS="$LDFLAGS"
+ # We want to fail immediately on first error, don't try to recover.
+ CFLAGS="$CFLAGS -fsanitize=address -fno-sanitize-recover"
+ CXXFLAGS="$CXXFLAGS -fsanitize=address -fno-sanitize-recover"
+ # Some compilers don't handle -fsanatize=address correctly with --no-undefined
+ LDFLAGS="-Wl,-z,defs -shared"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_address=yes, use_address=no)
+ AS_IF([test "x$use_address" != xyes],
+ AC_MSG_WARN([gcc address sanitizer not available])
+ CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
+ LDFLAGS="$old_LDFLAGS"
+fi
+AM_CONDITIONAL(USE_ADDRESS_SANITIZER, test "$use_address" = yes)
+
AC_ARG_ENABLE([valgrind],
AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
[use_valgrind=$enableval], [use_valgrind=no])
if test "$use_valgrind" = yes; then
+ if test "$use_address" = yes; then
+ AC_MSG_ERROR([cannot enable valgrind and sanitize address together])
+ fi
AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
if test "$HAVE_VALGRIND" = "no"; then
AC_MSG_ERROR([valgrind not found])
@@ -425,8 +431,17 @@ AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
AC_CHECK_DECLS([mempcpy],[],[],
[#define _GNU_SOURCE
#include <string.h>])
+AC_CHECK_DECLS([reallocarray],[],[],
+ [#define _GNU_SOURCE
+ #include <stdlib.h>])
+
+AC_CHECK_FUNCS([process_vm_readv mremap])
-AC_CHECK_FUNCS([process_vm_readv])
+AS_IF([test "x$ac_cv_func_mremap" = "xno"],
+ [AC_MSG_WARN([elf_update needs mremap to support ELF_C_RDWR_MMAP])])
+
+AC_CHECK_HEADERS([error.h])
+AC_CHECK_HEADERS([err.h])
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -D_GNU_SOURCE"
@@ -694,9 +709,7 @@ if test "$sys_user_has_user_regs" = "yes"; then
fi
# On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
-# Likewise in a 32-bit build on a host where $CC -m64 works.
utrace_BIARCH
-# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
CC_BIARCH="$CC $utrace_biarch"
AC_SUBST([CC_BIARCH])
@@ -732,7 +745,7 @@ AC_CHECK_PROG(HAVE_ZSTD, zstd, yes, no)
AM_CONDITIONAL([HAVE_ZSTD],[test "x$HAVE_ZSTD" = "xyes"])
# Look for libcurl for libdebuginfod minimum version as per rhel7.
-AC_ARG_ENABLE([libdebuginfod],AC_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)]))
+AC_ARG_ENABLE([libdebuginfod],AS_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)]))
AS_IF([test "x$enable_libdebuginfod" != "xno"], [
if test "x$enable_libdebuginfod" != "xdummy"; then
AC_MSG_NOTICE([checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip])
@@ -759,8 +772,7 @@ AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"])
# Look for libmicrohttpd, libarchive, sqlite for debuginfo server
# minimum versions as per rhel7.
-AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server]))
-AC_PROG_CXX
+AC_ARG_ENABLE([debuginfod],AS_HELP_STRING([--enable-debuginfod], [Build debuginfod server]))
AS_IF([test "x$enable_debuginfod" != "xno"], [
AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip])
AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
@@ -807,6 +819,9 @@ AC_MSG_NOTICE([
Maintainer mode : ${enable_maintainer_mode}
build arch : ${ac_cv_build}
+ CFLAGS=${CFLAGS}
+ CXXFLAGS=${CXXFLAGS}
+
RECOMMENDED FEATURES (should all be yes)
gzip support : ${with_zlib}
bzip2 support : ${with_bzlib}
@@ -836,6 +851,7 @@ AC_MSG_NOTICE([
gcov support : ${use_gcov}
run all tests under valgrind : ${use_valgrind}
gcc undefined behaviour sanitizer : ${use_undefined}
+ gcc address sanitizer : ${use_address}
use rpath in tests : ${tests_use_rpath}
test biarch : ${utrace_cv_cc_biarch}
])
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index 21407dc2..93c8ae11 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,268 @@
+2022-04-22 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (libdebuginfod): Add -lpthread.
+ (libdebuginfod_so_LDLIBS): Likewise.
+ * debuginfod-client.c (init_control): New static pthread_once_t.
+ (libcurl_init): New static function.
+ (debuginfod_begin): Use ptrace_once to call libcurl_init.
+ (libdebuginfod_ctor): Removed.
+ (libdebuginfod_dtor): Likewise.
+
+2022-04-24 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (main): Add MHD_USE_ITC to MHD_start_daemon flags.
+
+2022-04-13 Aaron Merey <amerey@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server):
+ Drop st_mode check. Add st_size > 0 check.
+ Save target_mtime before calling
+ debuginfod_config_cache. unlink target_cache_path
+ on EACCESS. Create target_cache_path with DEFFILEMODE.
+
+2022-04-03 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (main): Use single dual-stack daemon setup,
+ rather than duplicate ipv4 and ipv6.
+ (conninfo, handle_buildid): Represent ipv4-mapped ipv6 addresses
+ in their native ipv4 form for logging and X-F-F: purposes.
+ * debuginfod-client.c (debuginfod_add_http_header): Tolerate
+ colons in http header values.
+
+2022-04-03 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (main): Use MHD_USE_EPOLL for libmicrohttpd, to
+ encourage more round-robin dispatch of incoming connections.
+
+2021-12-09 Alexander Kanavin <alex@linutronix.de>
+
+ * debuginfod-client.c (cache_clean_default_interval_s): Change type to
+ long from time_t.
+ (cache_miss_default_s): Likewise.
+ (cache_default_max_unused_age_s): Likewise.
+
+2021-12-09 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (database_stats_report): Don't format clog
+ using 'right' and 'setw(20)'.
+
+2021-12-08 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (connection_pool): New global.
+ (parse_opt): Parse & check -C option to set it.
+ (error_cb): New callback for libmicrohttpd error counting.
+ (main): Activate MHD_OPTION_THREAD_POOL_SIZE if appropriate.
+ Activate error_cb.
+
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (main): Call debuginfod_pool_groom before exit.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (add_mhd_response_header): New function.
+ (reportable_exception::mhd_send_response): Call
+ MHD_add_response_header.
+ (add_mhd_last_modified): Likewise.
+ (handle_buildid_f_match): Likewise.
+ (handle_buildid_r_match): Likewise.
+ (handle_metrics): Likewise. And check MHD_Response was actually
+ created.
+ (handle_root): Likewise.
+
+2021-12-08 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex.
+
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_query_server): Free winning_headers.
+ Reset response_data_size when clearing response_data.
+
+2021-12-01 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_query_server): Free tmp_url on
+ realloc error. curl_free escaped_string on error. Fix error out
+ goto on curl_easy_init failure. Only cleanup data[i] handle and
+ response_data if it was initialized.
+
+2021-12-01 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (timestamp): Use gmtime_r instead of gmtime.
+ (add_mhd_last_modified): Likewise.
+
+2021-11-10 Érico N. Rolim <erico.erc@gmail.com>
+
+ * debuginfod.cxx: include "system.h" under 'extern "C"' block.
+
+2021-11-05 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28430
+ * debuginfod.cxx (parse_opt): Add "--passive" flag. Complain
+ about inconsistent flags.
+ (main): In passive mode, suppress scan/groom/traverse threads and
+ other read-write database ops.
+
+2021-11-04 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28514
+ * debuginfod.cxx (groom): Rework into separate decision/action
+ phases. Add new metrics to monitor progress. Limit indefinite
+ operation times to avoid starving rescan.
+
+2021-10-23 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28240
+ * debuginfod-client.c (debuginfod_query_server): Correct
+ negative-hit cache check sequence for root user.
+
+2021-10-15 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_query_server): Set
+ CURLOPT_PROTOCOLS.
+
+2021-10-06 Di Chen <dichen@redhat.com>
+
+ PR28242
+ * debuginfod.cxx (inc_metrics, add_metrics): Add two-tag variants.
+ (handler_cb): Call it with artifacttype for http_responses_* metrics.
+ (handle_buildid): Sanitize artifacttype if necessary.
+ (dwarf_extract_source_path): Pass sanitizable string param.
+
+2021-09-17 Noah Sanci <nsanci@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): curl_multi_perform
+ now occurs before checking if response headers have arrived.
+
+2021-09-14 Frank Ch. Eigler <fche@redhat.com>
+
+ PRPR28339
+ * debuginfod.cxx (waitq::fronters): New field.
+ (waitq::wait_idle): Respect it.
+ (waitq::done_front): New function.
+ (thread_main_scanner): Call it to match wait_front().
+
+2021-09-12 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after
+ obatched(clog) line.
+2021-09-13 Noah Sanci <nsanci@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): Removed constant
+ operations from a loop. curl_free memory.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * debuginfod-client.c (debuginfod_begin): Remove cast of calloc return
+ value.
+
+2021-08-28 Mark Wielaard <mjw@redhat.com>
+
+ * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into
+ "file::memory:?cache=shared" for the db_path.
+
+2021-08-20 Di Chen <dichen@redhat.com>
+
+ * debuginfod.cxx (options): Add ARGP_KEY_FORWARDED_TTL_LIMIT.
+ (forwarded_ttl_limit): New static unsigned.
+ (parse_opt): Handle ARGP_KEY_FORWARDED_TTL_LIMIT.
+ (handle_buildid): Check forwarded_ttl_limit.
+ (main): Log forwarded ttl limit.
+
+2021-08-20 Saleem Abdulrasool <abdulras@google.com>
+
+ * debuginfod.cxx: Remove error.h include.
+
+2021-08-19 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28249
+ * debuginfod.cxx (handler_cb): Fix after_you unique_set key
+ to the entire incoming URL.
+
+2021-08-02 Noah Sanci <nsanci@redhat.com>
+
+ PR27277
+ * debuginfod-client.c (struct debuginfod_client): New field
+ winning_headers.
+ (struct handle_data): New field response_data, response_data_size.
+ (header_callback): Store received headers in response_data.
+ (debuginfod_query_server): Activate CURLOPT_HEADERFUNCTION.
+ Save winning response_data.
+ (debuginfod_end): free client winning headers.
+ * debuginfod.cxx (handle_buildid_f_match): remove X-DEBUGINFOD-FILE
+ path. Add X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE headers.
+ (handle_buildid_r_match): remove X-DEBUGINFOD-FILE path. Add
+ X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE
+ headers, and X-ARCHIVE headers.
+
+2021-07-26 Noah Sanci <nsanci@redhat.com>
+
+ PR27982
+ * debuginfod-client.c (globals): added default_maxsize and
+ default_maxtime.
+ (debuginfod_query_server): Added DEBUGINFOD_MAXSIZE and
+ DEBUGINFOD_MAXTIME envvar processing.
+ * debuginfod.cxx (handler_cb): If the requested file exceeds
+ maxsize return code 406.
+ * debuginfod.h.in: Added DEBUGINFOD_MAXSIZE_ENV_VAR and
+ DEBUGINFOD_MAXTIME_ENV_VAR.
+
+2021-07-16 Noah Sanci <nsanci@redhat.com>
+
+ PR28034
+ * debuginfod-client.c (debuginfod_query_server): % escape filename
+ so the completed url is processed properly.
+
+2021-06-28 Noah Sanci <nsanci@redhat.com>
+
+ PR25978
+ * debuginfod.cxx (options): Added --fdcache-prefetch-fds/mbs options.
+ (set_metric): Added a condition for fdcache_mintmp to ensure no
+ negative percentages or percentages larger than 100% are given.
+ (globals): Added fdcache_prefetch_mbs/fdcache_prefetch_fds.
+ (set_metrics): Differentiate between lru and prefetch metrics.
+ (intern): Added prefetch functionality for nuking preexisting copies
+ and incrementing prefetch metrics.
+ (lookup): Search prefetch cache and increment associated metrics. Upon
+ finding in the prefetch cache move the element to the lru cache.
+ (limit): Arguments updated. Update size of prefetch cache.
+ (main): Log prefetch and cache fds/mbs
+
+2021-07-06 Alice Zhang <alizhang@redhat.com>
+
+ PR27531
+ * debuginfod-client.c (debuginfod_query_server): Retry failed queries
+ if error code is not ENOENT.
+ * debuginfod.h.in: Introduce DEBUGINFOD_RETRY_LIMIT_ENV_VAR.
+
+2021-07-01 Noah Sanci <nsanci@redhat.com>
+
+ PR27711
+ * debuginfod.cxx (options): Add --regex-groom, -r option.
+ (regex_groom): New static bool defaults to false.
+ (parse_opt): Handle 'r' option by setting regex_groom to true.
+ (groom): Introduce and use reg_include and reg_exclude.
+
+2021-07-09 Noah Sanci <nsanci@redhat.com>
+
+ PR27983
+ * debuginfod-client.c (debuginfod_query_server): As full-length
+ urls are generated with standardized formats, ignore duplicates.
+ Created out1 and changed out2 error gotos. Updated url creation print
+ statements.
+ (globals): Removed url_delim_char, as it was no longer used.
+
+2021-06-18 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_begin): Don't use client if
+ calloc call failed.
+
+2021-06-03 Frank Ch. Eigler <fche@redhat.com>
+
+ PR27863
+ * debuginfod.cxx (unique_set, unique_set_reserver): New classes.
+ (handler_cb): Use them to implement "after-you" queueing.
+
2021-05-14 Frank Ch. Eigler <fche@redhat.com>
PR27859
diff --git a/debuginfod/Makefile.am b/debuginfod/Makefile.am
index 79677afe..5566d56d 100644
--- a/debuginfod/Makefile.am
+++ b/debuginfod/Makefile.am
@@ -47,7 +47,7 @@ libelf = ../libelf/libelf.a -lz
if DUMMY_LIBDEBUGINFOD
libdebuginfod = ./libdebuginfod.a
else
-libdebuginfod = ./libdebuginfod.a $(libcurl_LIBS)
+libdebuginfod = ./libdebuginfod.a -lpthread $(libcurl_LIBS)
endif
else
libasm = ../libasm/libasm.so
@@ -98,7 +98,7 @@ libdebuginfod_so_LIBS = libdebuginfod_pic.a
if DUMMY_LIBDEBUGINFOD
libdebuginfod_so_LDLIBS =
else
-libdebuginfod_so_LDLIBS = $(libcurl_LIBS) $(fts_LIBS)
+libdebuginfod_so_LDLIBS = -lpthread $(libcurl_LIBS) $(fts_LIBS)
endif
$(LIBDEBUGINFOD_SONAME): $(srcdir)/libdebuginfod.map $(libdebuginfod_so_LIBS)
$(AM_V_CCLD)$(LINK) $(dso_LDFLAGS) -o $@ \
diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index ee7eda24..ea6e461a 100644
--- a/debuginfod/debuginfod-client.c
+++ b/debuginfod/debuginfod-client.c
@@ -1,5 +1,6 @@
/* Retrieve ELF / DWARF / source files from the debuginfod.
- Copyright (C) 2019-2020 Red Hat, Inc.
+ Copyright (C) 2019-2021 Red Hat, Inc.
+ Copyright (C) 2021, 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -97,6 +98,16 @@ void debuginfod_end (debuginfod_client *c) { }
#include <fts.h>
#endif
+#include <pthread.h>
+
+static pthread_once_t init_control = PTHREAD_ONCE_INIT;
+
+static void
+libcurl_init(void)
+{
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+}
+
struct debuginfod_client
{
/* Progress/interrupt callback function. */
@@ -127,23 +138,24 @@ struct debuginfod_client
timeout or other info gotten from environment variables, the
handle data, etc. So those don't have to be reparsed and
recreated on each request. */
+ char * winning_headers;
};
/* The cache_clean_interval_s file within the debuginfod cache specifies
how frequently the cache should be cleaned. The file's st_mtime represents
the time of last cleaning. */
static const char *cache_clean_interval_filename = "cache_clean_interval_s";
-static const time_t cache_clean_default_interval_s = 86400; /* 1 day */
+static const long cache_clean_default_interval_s = 86400; /* 1 day */
/* The cache_miss_default_s within the debuginfod cache specifies how
- frequently the 000-permision file should be released.*/
-static const time_t cache_miss_default_s = 600; /* 10 min */
+ frequently the empty file should be released.*/
+static const long cache_miss_default_s = 600; /* 10 min */
static const char *cache_miss_filename = "cache_miss_s";
/* The cache_max_unused_age_s file within the debuginfod cache specifies the
the maximum time since last access that a file will remain in the cache. */
static const char *cache_max_unused_age_filename = "max_unused_age_s";
-static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */
+static const long cache_default_max_unused_age_s = 604800; /* 1 week */
/* Location of the cache of files downloaded from debuginfods.
The default parent directory is $HOME, or '/' if $HOME doesn't exist. */
@@ -152,11 +164,12 @@ static const char *cache_xdg_name = "debuginfod_client";
/* URLs of debuginfods, separated by url_delim. */
static const char *url_delim = " ";
-static const char url_delim_char = ' ';
/* Timeout for debuginfods, in seconds (to get at least 100K). */
static const long default_timeout = 90;
+/* Default retry count for download error. */
+static const long default_retry_limit = 2;
/* Data associated with a particular CURL easy handle. Passed to
the write callback. */
@@ -182,6 +195,9 @@ struct handle_data
to the cache. Used to ensure that a file is not downloaded from
multiple servers unnecessarily. */
CURL **target_handle;
+ /* Response http headers for this client handle, sent from the server */
+ char *response_data;
+ size_t response_data_size;
};
static size_t
@@ -497,6 +513,37 @@ default_progressfn (debuginfod_client *c, long a, long b)
return 0;
}
+/* This is a callback function that receives http response headers in buffer for use
+ * in this program. https://curl.se/libcurl/c/CURLOPT_HEADERFUNCTION.html is the
+ * online documentation.
+ */
+static size_t
+header_callback (char * buffer, size_t size, size_t numitems, void * userdata)
+{
+ if (size != 1)
+ return 0;
+ /* Temporary buffer for realloc */
+ char *temp = NULL;
+ struct handle_data *data = (struct handle_data *) userdata;
+ if (data->response_data == NULL)
+ {
+ temp = malloc(numitems+1);
+ if (temp == NULL)
+ return 0;
+ }
+ else
+ {
+ temp = realloc(data->response_data, data->response_data_size + numitems + 1);
+ if (temp == NULL)
+ return 0;
+ }
+
+ memcpy(temp + data->response_data_size, buffer, numitems);
+ data->response_data = temp;
+ data->response_data_size += numitems;
+ data->response_data[data->response_data_size] = '\0';
+ return numitems;
+}
/* Query each of the server URLs found in $DEBUGINFOD_URLS for the file
with the specified build-id, type (debuginfo, executable or source)
@@ -554,6 +601,39 @@ debuginfod_query_server (debuginfod_client *c,
free (c->url);
c->url = NULL;
+ /* PR 27982: Add max size if DEBUGINFOD_MAXSIZE is set. */
+ long maxsize = 0;
+ const char *maxsize_envvar;
+ maxsize_envvar = getenv(DEBUGINFOD_MAXSIZE_ENV_VAR);
+ if (maxsize_envvar != NULL)
+ maxsize = atol (maxsize_envvar);
+
+ /* PR 27982: Add max time if DEBUGINFOD_MAXTIME is set. */
+ long maxtime = 0;
+ const char *maxtime_envvar;
+ maxtime_envvar = getenv(DEBUGINFOD_MAXTIME_ENV_VAR);
+ if (maxtime_envvar != NULL)
+ maxtime = atol (maxtime_envvar);
+ if (maxtime && vfd >= 0)
+ dprintf(vfd, "using max time %lds\n", maxtime);
+
+ /* Maxsize is valid*/
+ if (maxsize > 0)
+ {
+ if (vfd)
+ dprintf (vfd, "using max size %ldB\n", maxsize);
+ char *size_header = NULL;
+ rc = asprintf (&size_header, "X-DEBUGINFOD-MAXSIZE: %ld", maxsize);
+ if (rc < 0)
+ {
+ rc = -ENOMEM;
+ goto out;
+ }
+ rc = debuginfod_add_http_header(c, size_header);
+ free(size_header);
+ if (rc < 0)
+ goto out;
+ }
add_default_headers(c);
/* Copy lowercase hex representation of build_id into buf. */
@@ -697,37 +777,66 @@ debuginfod_query_server (debuginfod_client *c,
if (rc != 0)
goto out;
- /* If the target is already in the cache then we are done. */
- int fd = open (target_cache_path, O_RDONLY);
+ /* Check if the target is already in the cache. */
+ int fd = open(target_cache_path, O_RDONLY);
if (fd >= 0)
{
- /* Success!!!! */
- if (path != NULL)
- *path = strdup(target_cache_path);
- rc = fd;
- goto out;
- }
-
- struct stat st;
- time_t cache_miss;
- /* Check if the file exists and it's of permission 000*/
- if (errno == EACCES
- && stat(target_cache_path, &st) == 0
- && (st.st_mode & 0777) == 0)
- {
- rc = debuginfod_config_cache(cache_miss_path, cache_miss_default_s, &st);
- if (rc < 0)
- goto out;
+ struct stat st;
+ if (fstat(fd, &st) != 0)
+ {
+ rc = -errno;
+ close (fd);
+ goto out;
+ }
- cache_miss = (time_t)rc;
- if (time(NULL) - st.st_mtime <= cache_miss)
+ /* If the file is non-empty, then we are done. */
+ if (st.st_size > 0)
{
- rc = -ENOENT;
- goto out;
- }
+ if (path != NULL)
+ {
+ *path = strdup(target_cache_path);
+ if (*path == NULL)
+ {
+ rc = -errno;
+ close (fd);
+ goto out;
+ }
+ }
+ /* Success!!!! */
+ rc = fd;
+ goto out;
+ }
else
- unlink(target_cache_path);
+ {
+ /* The file is empty. Attempt to download only if enough time
+ has passed since the last attempt. */
+ time_t cache_miss;
+ time_t target_mtime = st.st_mtime;
+ rc = debuginfod_config_cache(cache_miss_path,
+ cache_miss_default_s, &st);
+ if (rc < 0)
+ {
+ close(fd);
+ goto out;
+ }
+
+ cache_miss = (time_t)rc;
+ if (time(NULL) - target_mtime <= cache_miss)
+ {
+ close(fd);
+ rc = -ENOENT;
+ goto out;
+ }
+ else
+ /* TOCTOU non-problem: if another task races, puts a working
+ download or an empty file in its place, unlinking here just
+ means WE will try to download again as uncached. */
+ unlink(target_cache_path);
+ }
}
+ else if (errno == EACCES)
+ /* Ensure old 000-permission files are not lingering in the cache. */
+ unlink(target_cache_path);
long timeout = default_timeout;
const char* timeout_envvar = getenv(DEBUGINFOD_TIMEOUT_ENV_VAR);
@@ -763,16 +872,69 @@ debuginfod_query_server (debuginfod_client *c,
goto out0;
}
+ /* Initialize the memory to zero */
+ char *strtok_saveptr;
+ char **server_url_list = NULL;
+ char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr);
/* Count number of URLs. */
int num_urls = 0;
- for (int i = 0; server_urls[i] != '\0'; i++)
- if (server_urls[i] != url_delim_char
- && (i == 0 || server_urls[i - 1] == url_delim_char))
- num_urls++;
-
+
+ while (server_url != NULL)
+ {
+ /* PR 27983: If the url is already set to be used use, skip it */
+ char *slashbuildid;
+ if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/')
+ slashbuildid = "buildid";
+ else
+ slashbuildid = "/buildid";
+
+ char *tmp_url;
+ if (asprintf(&tmp_url, "%s%s", server_url, slashbuildid) == -1)
+ {
+ rc = -ENOMEM;
+ goto out1;
+ }
+ int url_index;
+ for (url_index = 0; url_index < num_urls; ++url_index)
+ {
+ if(strcmp(tmp_url, server_url_list[url_index]) == 0)
+ {
+ url_index = -1;
+ break;
+ }
+ }
+ if (url_index == -1)
+ {
+ if (vfd >= 0)
+ dprintf(vfd, "duplicate url: %s, skipping\n", tmp_url);
+ free(tmp_url);
+ }
+ else
+ {
+ num_urls++;
+ char ** realloc_ptr;
+ realloc_ptr = reallocarray(server_url_list, num_urls,
+ sizeof(char*));
+ if (realloc_ptr == NULL)
+ {
+ free (tmp_url);
+ rc = -ENOMEM;
+ goto out1;
+ }
+ server_url_list = realloc_ptr;
+ server_url_list[num_urls-1] = tmp_url;
+ }
+ server_url = strtok_r(NULL, url_delim, &strtok_saveptr);
+ }
+
+ int retry_limit = default_retry_limit;
+ const char* retry_limit_envvar = getenv(DEBUGINFOD_RETRY_LIMIT_ENV_VAR);
+ if (retry_limit_envvar != NULL)
+ retry_limit = atoi (retry_limit_envvar);
+
CURLM *curlm = c->server_mhandle;
assert (curlm != NULL);
-
+
/* Tracks which handle should write to fd. Set to the first
handle that is ready to write the target file to the cache. */
CURL *target_handle = NULL;
@@ -780,10 +942,14 @@ debuginfod_query_server (debuginfod_client *c,
if (data == NULL)
{
rc = -ENOMEM;
- goto out0;
+ goto out1;
}
- /* thereafter, goto out1 on error. */
+ /* thereafter, goto out2 on error. */
+
+ /*The beginning of goto block query_in_parallel.*/
+ query_in_parallel:
+ rc = -ENOENT; /* Reset rc to default.*/
/* Initialize handle_data with default values. */
for (int i = 0; i < num_urls; i++)
@@ -793,12 +959,37 @@ debuginfod_query_server (debuginfod_client *c,
data[i].errbuf[0] = '\0';
}
- char *strtok_saveptr;
- char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr);
-
+ char *escaped_string = NULL;
+ size_t escaped_strlen = 0;
+ if (filename)
+ {
+ escaped_string = curl_easy_escape(&target_handle, filename+1, 0);
+ if (!escaped_string)
+ {
+ rc = -ENOMEM;
+ goto out2;
+ }
+ char *loc = escaped_string;
+ escaped_strlen = strlen(escaped_string);
+ while ((loc = strstr(loc, "%2F")))
+ {
+ loc[0] = '/';
+ //pull the string back after replacement
+ // loc-escaped_string finds the distance from the origin to the new location
+ // - 2 accounts for the 2F which remain and don't need to be measured.
+ // The two above subtracted from escaped_strlen yields the remaining characters
+ // in the string which we want to pull back
+ memmove(loc+1, loc+3,escaped_strlen - (loc-escaped_string) - 2);
+ //Because the 2F was overwritten in the memmove (as desired) escaped_strlen is
+ // now two shorter.
+ escaped_strlen -= 2;
+ }
+ }
/* Initialize each handle. */
- for (int i = 0; i < num_urls && server_url != NULL; i++)
+ for (int i = 0; i < num_urls; i++)
{
+ if ((server_url = server_url_list[i]) == NULL)
+ break;
if (vfd >= 0)
dprintf (vfd, "init server %d %s\n", i, server_url);
@@ -807,29 +998,27 @@ debuginfod_query_server (debuginfod_client *c,
data[i].handle = curl_easy_init();
if (data[i].handle == NULL)
{
+ if (filename) curl_free (escaped_string);
rc = -ENETUNREACH;
- goto out1;
+ goto out2;
}
data[i].client = c;
- /* Build handle url. Tolerate both http://foo:999 and
- http://foo:999/ forms */
- char *slashbuildid;
- if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/')
- slashbuildid = "buildid";
- else
- slashbuildid = "/buildid";
-
if (filename) /* must start with / */
- snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s%s", server_url,
- slashbuildid, build_id_bytes, type, filename);
+ {
+ /* PR28034 escape characters in completed url to %hh format. */
+ snprintf(data[i].url, PATH_MAX, "%s/%s/%s/%s", server_url,
+ build_id_bytes, type, escaped_string);
+ }
else
- snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s", server_url,
- slashbuildid, build_id_bytes, type);
-
+ snprintf(data[i].url, PATH_MAX, "%s/%s/%s", server_url, build_id_bytes, type);
if (vfd >= 0)
dprintf (vfd, "url %d %s\n", i, data[i].url);
+ /* Only allow http:// + https:// + file:// so we aren't being
+ redirected to some unsupported protocol. */
+ curl_easy_setopt(data[i].handle, CURLOPT_PROTOCOLS,
+ CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FILE);
curl_easy_setopt(data[i].handle, CURLOPT_URL, data[i].url);
if (vfd >= 0)
curl_easy_setopt(data[i].handle, CURLOPT_ERRORBUFFER, data[i].errbuf);
@@ -846,10 +1035,14 @@ debuginfod_query_server (debuginfod_client *c,
curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_LIMIT,
100 * 1024L);
}
+ data[i].response_data = NULL;
+ data[i].response_data_size = 0;
curl_easy_setopt(data[i].handle, CURLOPT_FILETIME, (long) 1);
curl_easy_setopt(data[i].handle, CURLOPT_FOLLOWLOCATION, (long) 1);
curl_easy_setopt(data[i].handle, CURLOPT_FAILONERROR, (long) 1);
curl_easy_setopt(data[i].handle, CURLOPT_NOSIGNAL, (long) 1);
+ curl_easy_setopt(data[i].handle, CURLOPT_HEADERFUNCTION, header_callback);
+ curl_easy_setopt(data[i].handle, CURLOPT_HEADERDATA, (void *) &(data[i]));
#if LIBCURL_VERSION_NUM >= 0x072a00 /* 7.42.0 */
curl_easy_setopt(data[i].handle, CURLOPT_PATH_AS_IS, (long) 1);
#else
@@ -861,9 +1054,9 @@ debuginfod_query_server (debuginfod_client *c,
curl_easy_setopt(data[i].handle, CURLOPT_HTTPHEADER, c->headers);
curl_multi_add_handle(curlm, data[i].handle);
- server_url = strtok_r(NULL, url_delim, &strtok_saveptr);
}
+ if (filename) curl_free(escaped_string);
/* Query servers in parallel. */
if (vfd >= 0)
dprintf (vfd, "query %d urls in parallel\n", num_urls);
@@ -871,10 +1064,39 @@ debuginfod_query_server (debuginfod_client *c,
long loops = 0;
int committed_to = -1;
bool verbose_reported = false;
+ struct timespec start_time, cur_time;
+ if (c->winning_headers != NULL)
+ {
+ free (c->winning_headers);
+ c->winning_headers = NULL;
+ }
+ if ( maxtime > 0 && clock_gettime(CLOCK_MONOTONIC_RAW, &start_time) == -1)
+ {
+ rc = errno;
+ goto out2;
+ }
+ long delta = 0;
do
{
+ /* Check to see how long querying is taking. */
+ if (maxtime > 0)
+ {
+ if (clock_gettime(CLOCK_MONOTONIC_RAW, &cur_time) == -1)
+ {
+ rc = errno;
+ goto out2;
+ }
+ delta = cur_time.tv_sec - start_time.tv_sec;
+ if ( delta > maxtime)
+ {
+ dprintf(vfd, "Timeout with max time=%lds and transfer time=%lds\n", maxtime, delta );
+ rc = -ETIME;
+ goto out2;
+ }
+ }
/* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */
curl_multi_wait(curlm, NULL, 0, 1000, NULL);
+ CURLMcode curlm_res = curl_multi_perform(curlm, &still_running);
/* If the target file has been found, abort the other queries. */
if (target_handle != NULL)
@@ -883,7 +1105,18 @@ debuginfod_query_server (debuginfod_client *c,
if (data[i].handle != target_handle)
curl_multi_remove_handle(curlm, data[i].handle);
else
- committed_to = i;
+ {
+ committed_to = i;
+ if (c->winning_headers == NULL)
+ {
+ c->winning_headers = data[committed_to].response_data;
+ if (vfd >= 0 && c->winning_headers != NULL)
+ dprintf(vfd, "\n%s", c->winning_headers);
+ data[committed_to].response_data = NULL;
+ data[committed_to].response_data_size = 0;
+ }
+
+ }
}
if (vfd >= 0 && !verbose_reported && committed_to >= 0)
@@ -896,7 +1129,6 @@ debuginfod_query_server (debuginfod_client *c,
verbose_reported = true;
}
- CURLMcode curlm_res = curl_multi_perform(curlm, &still_running);
if (curlm_res != CURLM_OK)
{
switch (curlm_res)
@@ -905,14 +1137,48 @@ debuginfod_query_server (debuginfod_client *c,
case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break;
default: rc = -ENETUNREACH; break;
}
- goto out1;
+ goto out2;
+ }
+
+ long dl_size = 0;
+ if (target_handle && (c->progressfn || maxsize > 0))
+ {
+ /* Get size of file being downloaded. NB: If going through
+ deflate-compressing proxies, this number is likely to be
+ unavailable, so -1 may show. */
+ CURLcode curl_res;
+#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
+ curl_off_t cl;
+ curl_res = curl_easy_getinfo(target_handle,
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
+ &cl);
+ if (curl_res == CURLE_OK && cl >= 0)
+ dl_size = (cl > LONG_MAX ? LONG_MAX : (long)cl);
+#else
+ double cl;
+ curl_res = curl_easy_getinfo(target_handle,
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD,
+ &cl);
+ if (curl_res == CURLE_OK)
+ dl_size = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl);
+#endif
+ /* If Content-Length is -1, try to get the size from
+ X-Debuginfod-Size */
+ if (dl_size == -1 && c->winning_headers != NULL)
+ {
+ long xdl;
+ char *hdr = strcasestr(c->winning_headers, "x-debuginfod-size");
+
+ if (hdr != NULL
+ && sscanf(hdr, "x-debuginfod-size: %ld", &xdl) == 1)
+ dl_size = xdl;
+ }
}
if (c->progressfn) /* inform/check progress callback */
{
loops ++;
- long pa = loops; /* default params for progress callback */
- long pb = 0; /* transfer_timeout tempting, but loops != elapsed-time */
+ long pa = loops; /* default param for progress callback */
if (target_handle) /* we've committed to a server; report its download progress */
{
CURLcode curl_res;
@@ -932,28 +1198,20 @@ debuginfod_query_server (debuginfod_client *c,
pa = (dl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)dl);
#endif
- /* NB: If going through deflate-compressing proxies, this
- number is likely to be unavailable, so -1 may show. */
-#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
- curl_off_t cl;
- curl_res = curl_easy_getinfo(target_handle,
- CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
- &cl);
- if (curl_res == 0 && cl >= 0)
- pb = (cl > LONG_MAX ? LONG_MAX : (long)cl);
-#else
- double cl;
- curl_res = curl_easy_getinfo(target_handle,
- CURLINFO_CONTENT_LENGTH_DOWNLOAD,
- &cl);
- if (curl_res == 0)
- pb = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl);
-#endif
}
- if ((*c->progressfn) (c, pa, pb))
+ if ((*c->progressfn) (c, pa, dl_size))
break;
}
+
+ /* Check to see if we are downloading something which exceeds maxsize, if set.*/
+ if (target_handle && dl_size > maxsize && maxsize > 0)
+ {
+ if (vfd >=0)
+ dprintf(vfd, "Content-Length too large.\n");
+ rc = -EFBIG;
+ goto out2;
+ }
} while (still_running);
/* Check whether a query was successful. If so, assign its handle
@@ -987,6 +1245,8 @@ debuginfod_query_server (debuginfod_client *c,
if (msg->data.result != CURLE_OK)
{
+ long resp_code;
+ CURLcode ok0;
/* Unsuccessful query, determine error code. */
switch (msg->data.result)
{
@@ -1001,6 +1261,16 @@ debuginfod_query_server (debuginfod_client *c,
case CURLE_SEND_ERROR: rc = -ECONNRESET; break;
case CURLE_RECV_ERROR: rc = -ECONNRESET; break;
case CURLE_OPERATION_TIMEDOUT: rc = -ETIME; break;
+ case CURLE_HTTP_RETURNED_ERROR:
+ ok0 = curl_easy_getinfo (msg->easy_handle,
+ CURLINFO_RESPONSE_CODE,
+ &resp_code);
+ /* 406 signals that the requested file was too large */
+ if ( ok0 == CURLE_OK && resp_code == 406)
+ rc = -EFBIG;
+ else
+ rc = -ENOENT;
+ break;
default: rc = -ENOENT; break;
}
}
@@ -1065,17 +1335,41 @@ debuginfod_query_server (debuginfod_client *c,
}
} while (num_msg > 0);
- /* Create a 000-permission file named as $HOME/.cache if the query
- fails with ENOENT.*/
+ /* Create an empty file named as $HOME/.cache if the query fails
+ with ENOENT.*/
if (rc == -ENOENT)
{
- int efd = open (target_cache_path, O_CREAT|O_EXCL, 0000);
+ int efd = open (target_cache_path, O_CREAT|O_EXCL, DEFFILEMODE);
if (efd >= 0)
close(efd);
}
+ else if (rc == -EFBIG)
+ goto out2;
+ /* If the verified_handle is NULL and rc != -ENOENT, the query fails with
+ * an error code other than 404, then do several retry within the retry_limit.
+ * Clean up all old handles and jump back to the beginning of query_in_parallel,
+ * reinitialize handles and query again.*/
if (verified_handle == NULL)
- goto out1;
+ {
+ if (rc != -ENOENT && retry_limit-- > 0)
+ {
+ if (vfd >= 0)
+ dprintf (vfd, "Retry failed query, %d attempt(s) remaining\n", retry_limit);
+ /* remove all handles from multi */
+ for (int i = 0; i < num_urls; i++)
+ {
+ curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */
+ curl_easy_cleanup (data[i].handle);
+ free(data[i].response_data);
+ }
+ free(c->winning_headers);
+ c->winning_headers = NULL;
+ goto query_in_parallel;
+ }
+ else
+ goto out2;
+ }
if (vfd >= 0)
{
@@ -1104,7 +1398,7 @@ debuginfod_query_server (debuginfod_client *c,
if (rc < 0)
{
rc = -errno;
- goto out1;
+ goto out2;
/* Perhaps we need not give up right away; could retry or something ... */
}
@@ -1113,8 +1407,12 @@ debuginfod_query_server (debuginfod_client *c,
{
curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */
curl_easy_cleanup (data[i].handle);
+ free (data[i].response_data);
}
+ for (int i = 0; i < num_urls; ++i)
+ free(server_url_list[i]);
+ free(server_url_list);
free (data);
free (server_urls);
@@ -1127,12 +1425,16 @@ debuginfod_query_server (debuginfod_client *c,
goto out;
/* error exits */
- out1:
+ out2:
/* remove all handles from multi */
for (int i = 0; i < num_urls; i++)
{
- curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */
- curl_easy_cleanup (data[i].handle);
+ if (data[i].handle != NULL)
+ {
+ curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */
+ curl_easy_cleanup (data[i].handle);
+ free (data[i].response_data);
+ }
}
unlink (target_cache_tmppath);
@@ -1140,6 +1442,11 @@ debuginfod_query_server (debuginfod_client *c,
(void) rmdir (target_cache_dir); /* nop if not empty */
free(data);
+ out1:
+ for (int i = 0; i < num_urls; ++i)
+ free(server_url_list[i]);
+ free(server_url_list);
+
out0:
free (server_urls);
@@ -1181,9 +1488,12 @@ debuginfod_query_server (debuginfod_client *c,
debuginfod_client *
debuginfod_begin (void)
{
+ /* Initialize libcurl lazily, but only once. */
+ pthread_once (&init_control, libcurl_init);
+
debuginfod_client *client;
size_t size = sizeof (struct debuginfod_client);
- client = (debuginfod_client *) calloc (1, size);
+ client = calloc (1, size);
if (client != NULL)
{
@@ -1193,12 +1503,12 @@ debuginfod_begin (void)
client->verbose_fd = STDERR_FILENO;
else
client->verbose_fd = -1;
- }
- // allocate 1 curl multi handle
- client->server_mhandle = curl_multi_init ();
- if (client->server_mhandle == NULL)
- goto out1;
+ // allocate 1 curl multi handle
+ client->server_mhandle = curl_multi_init ();
+ if (client->server_mhandle == NULL)
+ goto out1;
+ }
// extra future initialization
@@ -1239,6 +1549,7 @@ debuginfod_end (debuginfod_client *client)
curl_multi_cleanup (client->server_mhandle);
curl_slist_free_all (client->headers);
+ free (client->winning_headers);
free (client->url);
free (client);
}
@@ -1277,13 +1588,13 @@ int debuginfod_find_source(debuginfod_client *client,
int debuginfod_add_http_header (debuginfod_client *client, const char* header)
{
/* Sanity check header value is of the form Header: Value.
- It should contain exactly one colon that isn't the first or
+ It should contain at least one colon that isn't the first or
last character. */
- char *colon = strchr (header, ':');
- if (colon == NULL
- || colon == header
- || *(colon + 1) == '\0'
- || strchr (colon + 1, ':') != NULL)
+ char *colon = strchr (header, ':'); /* first colon */
+ if (colon == NULL /* present */
+ || colon == header /* not at beginning - i.e., have a header name */
+ || *(colon + 1) == '\0') /* not at end - i.e., have a value */
+ /* NB: but it's okay for a value to contain other colons! */
return -EINVAL;
struct curl_slist *temp = curl_slist_append (client->headers, header);
@@ -1313,18 +1624,4 @@ debuginfod_set_verbose_fd(debuginfod_client *client, int fd)
client->verbose_fd = fd;
}
-
-/* NB: these are thread-unsafe. */
-__attribute__((constructor)) attribute_hidden void libdebuginfod_ctor(void)
-{
- curl_global_init(CURL_GLOBAL_DEFAULT);
-}
-
-/* NB: this is very thread-unsafe: it breaks other threads that are still in libcurl */
-__attribute__((destructor)) attribute_hidden void libdebuginfod_dtor(void)
-{
- /* ... so don't do this: */
- /* curl_global_cleanup(); */
-}
-
#endif /* DUMMY_LIBDEBUGINFOD */
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index e0948eab..4aaf41c0 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -1,5 +1,6 @@
/* Debuginfo-over-http server.
Copyright (C) 2019-2021 Red Hat, Inc.
+ Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -33,11 +34,11 @@
extern "C" {
#include "printversion.h"
+#include "system.h"
}
#include "debuginfod.h"
#include <dwarf.h>
-#include <system.h>
#include <argp.h>
#ifdef __GNUC__
@@ -46,7 +47,6 @@ extern "C" {
#include <unistd.h>
#include <stdlib.h>
-#include <error.h>
#include <libintl.h>
#include <locale.h>
#include <pthread.h>
@@ -353,13 +353,16 @@ static const struct argp_option options[] =
{ "rescan-time", 't', "SECONDS", 0, "Number of seconds to wait between rescans, 0=disable.", 0 },
{ "groom-time", 'g', "SECONDS", 0, "Number of seconds to wait between database grooming, 0=disable.", 0 },
{ "maxigroom", 'G', NULL, 0, "Run a complete database groom/shrink pass at startup.", 0 },
- { "concurrency", 'c', "NUM", 0, "Limit scanning thread concurrency to NUM.", 0 },
+ { "concurrency", 'c', "NUM", 0, "Limit scanning thread concurrency to NUM, default=#CPUs.", 0 },
+ { "connection-pool", 'C', "NUM", OPTION_ARG_OPTIONAL,
+ "Use webapi connection pool with NUM threads, default=unlim.", 0 },
{ "include", 'I', "REGEX", 0, "Include files matching REGEX, default=all.", 0 },
{ "exclude", 'X', "REGEX", 0, "Exclude files matching REGEX, default=none.", 0 },
{ "port", 'p', "NUM", 0, "HTTP port to listen on, default 8002.", 0 },
{ "database", 'd', "FILE", 0, "Path to sqlite database.", 0 },
{ "ddl", 'D', "SQL", 0, "Apply extra sqlite ddl/pragma to connection.", 0 },
{ "verbose", 'v', NULL, 0, "Increase verbosity.", 0 },
+ { "regex-groom", 'r', NULL, 0,"Uses regexes from -I and -X arguments to groom the database.",0},
#define ARGP_KEY_FDCACHE_FDS 0x1001
{ "fdcache-fds", ARGP_KEY_FDCACHE_FDS, "NUM", 0, "Maximum number of archive files to keep in fdcache.", 0 },
#define ARGP_KEY_FDCACHE_MBS 0x1002
@@ -368,7 +371,17 @@ static const struct argp_option options[] =
{ "fdcache-prefetch", ARGP_KEY_FDCACHE_PREFETCH, "NUM", 0, "Number of archive files to prefetch into fdcache.", 0 },
#define ARGP_KEY_FDCACHE_MINTMP 0x1004
{ "fdcache-mintmp", ARGP_KEY_FDCACHE_MINTMP, "NUM", 0, "Minimum free space% on tmpdir.", 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
+#define ARGP_KEY_FDCACHE_PREFETCH_MBS 0x1005
+ { "fdcache-prefetch-mbs", ARGP_KEY_FDCACHE_PREFETCH_MBS, "MB", 0,"Megabytes allocated to the \
+ prefetch cache.", 0},
+#define ARGP_KEY_FDCACHE_PREFETCH_FDS 0x1006
+ { "fdcache-prefetch-fds", ARGP_KEY_FDCACHE_PREFETCH_FDS, "NUM", 0,"Number of files allocated to the \
+ prefetch cache.", 0},
+#define ARGP_KEY_FORWARDED_TTL_LIMIT 0x1007
+ {"forwarded-ttl-limit", ARGP_KEY_FORWARDED_TTL_LIMIT, "NUM", 0, "Limit of X-Forwarded-For hops, default 8.", 0},
+#define ARGP_KEY_PASSIVE 0x1008
+ { "passive", ARGP_KEY_PASSIVE, NULL, 0, "Do not scan or groom, read-only database.", 0 },
+ { NULL, 0, NULL, 0, NULL, 0 },
};
/* Short description of program. */
@@ -401,18 +414,24 @@ static unsigned rescan_s = 300;
static unsigned groom_s = 86400;
static bool maxigroom = false;
static unsigned concurrency = std::thread::hardware_concurrency() ?: 1;
+static int connection_pool = 0;
static set<string> source_paths;
static bool scan_files = false;
static map<string,string> scan_archives;
static vector<string> extra_ddl;
static regex_t file_include_regex;
static regex_t file_exclude_regex;
+static bool regex_groom = false;
static bool traverse_logical;
static long fdcache_fds;
static long fdcache_mbs;
static long fdcache_prefetch;
static long fdcache_mintmp;
+static long fdcache_prefetch_mbs;
+static long fdcache_prefetch_fds;
+static unsigned forwarded_ttl_limit = 8;
static string tmpdir;
+static bool passive_p = false;
static void set_metric(const string& key, double value);
// static void inc_metric(const string& key);
@@ -424,7 +443,14 @@ static void inc_metric(const string& metric,
static void add_metric(const string& metric,
const string& lname, const string& lvalue,
double value);
-// static void add_metric(const string& metric, double value);
+static void inc_metric(const string& metric,
+ const string& lname, const string& lvalue,
+ const string& rname, const string& rvalue);
+static void add_metric(const string& metric,
+ const string& lname, const string& lvalue,
+ const string& rname, const string& rvalue,
+ double value);
+
class tmp_inc_metric { // a RAII style wrapper for exception-safe scoped increment & decrement
string m, n, v;
@@ -471,7 +497,14 @@ parse_opt (int key, char *arg,
switch (key)
{
case 'v': verbose ++; break;
- case 'd': db_path = string(arg); break;
+ case 'd':
+ /* When using the in-memory database make sure it is shareable,
+ so we can open it twice as read/write and read-only. */
+ if (strcmp (arg, ":memory:") == 0)
+ db_path = "file::memory:?cache=shared";
+ else
+ db_path = string(arg);
+ break;
case 'p': http_port = (unsigned) atoi(arg);
if (http_port == 0 || http_port > 65535)
argp_failure(state, 1, EINVAL, "port number");
@@ -498,35 +531,68 @@ parse_opt (int key, char *arg,
}
break;
case 'L':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-L option inconsistent with passive mode");
traverse_logical = true;
break;
- case 'D': extra_ddl.push_back(string(arg)); break;
+ case 'D':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-D option inconsistent with passive mode");
+ extra_ddl.push_back(string(arg));
+ break;
case 't':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-t option inconsistent with passive mode");
rescan_s = (unsigned) atoi(arg);
break;
case 'g':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-g option inconsistent with passive mode");
groom_s = (unsigned) atoi(arg);
break;
case 'G':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-G option inconsistent with passive mode");
maxigroom = true;
break;
case 'c':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-c option inconsistent with passive mode");
concurrency = (unsigned) atoi(arg);
if (concurrency < 1) concurrency = 1;
break;
+ case 'C':
+ if (arg)
+ {
+ connection_pool = atoi(arg);
+ if (connection_pool < 2)
+ argp_failure(state, 1, EINVAL, "-C NUM minimum 2");
+ }
+ else // arg not given
+ connection_pool = std::thread::hardware_concurrency() * 2 ?: 2;
+ break;
case 'I':
// NB: no problem with unconditional free here - an earlier failed regcomp would exit program
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-I option inconsistent with passive mode");
regfree (&file_include_regex);
rc = regcomp (&file_include_regex, arg, REG_EXTENDED|REG_NOSUB);
if (rc != 0)
argp_failure(state, 1, EINVAL, "regular expression");
break;
case 'X':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-X option inconsistent with passive mode");
regfree (&file_exclude_regex);
rc = regcomp (&file_exclude_regex, arg, REG_EXTENDED|REG_NOSUB);
if (rc != 0)
argp_failure(state, 1, EINVAL, "regular expression");
break;
+ case 'r':
+ if (passive_p)
+ argp_failure(state, 1, EINVAL, "-r option inconsistent with passive mode");
+ regex_groom = true;
+ break;
case ARGP_KEY_FDCACHE_FDS:
fdcache_fds = atol (arg);
break;
@@ -538,10 +604,34 @@ parse_opt (int key, char *arg,
break;
case ARGP_KEY_FDCACHE_MINTMP:
fdcache_mintmp = atol (arg);
+ if( fdcache_mintmp > 100 || fdcache_mintmp < 0 )
+ argp_failure(state, 1, EINVAL, "fdcache mintmp percent");
+ break;
+ case ARGP_KEY_FORWARDED_TTL_LIMIT:
+ forwarded_ttl_limit = (unsigned) atoi(arg);
break;
case ARGP_KEY_ARG:
source_paths.insert(string(arg));
break;
+ case ARGP_KEY_FDCACHE_PREFETCH_FDS:
+ fdcache_prefetch_fds = atol(arg);
+ if ( fdcache_prefetch_fds < 0)
+ argp_failure(state, 1, EINVAL, "fdcache prefetch fds");
+ break;
+ case ARGP_KEY_FDCACHE_PREFETCH_MBS:
+ fdcache_prefetch_mbs = atol(arg);
+ if ( fdcache_prefetch_mbs < 0)
+ argp_failure(state, 1, EINVAL, "fdcache prefetch mbs");
+ break;
+ case ARGP_KEY_PASSIVE:
+ passive_p = true;
+ if (source_paths.size() > 0
+ || maxigroom
+ || extra_ddl.size() > 0
+ || traverse_logical)
+ // other conflicting options tricky to check
+ argp_failure(state, 1, EINVAL, "inconsistent options with passive mode");
+ break;
// case 'h': argp_state_help (state, stderr, ARGP_HELP_LONG|ARGP_HELP_EXIT_OK);
default: return ARGP_ERR_UNKNOWN;
}
@@ -553,6 +643,9 @@ parse_opt (int key, char *arg,
////////////////////////////////////////////////////////////////////////
+static void add_mhd_response_header (struct MHD_Response *r,
+ const char *h, const char *v);
+
// represent errors that may get reported to an ostream and/or a libmicrohttpd connection
struct reportable_exception
@@ -570,7 +663,7 @@ struct reportable_exception
MHD_Response* r = MHD_create_response_from_buffer (message.size(),
(void*) message.c_str(),
MHD_RESPMEM_MUST_COPY);
- MHD_add_response_header (r, "Content-Type", "text/plain");
+ add_mhd_response_header (r, "Content-Type", "text/plain");
MHD_RESULT rc = MHD_queue_response (c, code, r);
MHD_destroy_response (r);
return rc;
@@ -626,10 +719,11 @@ class workq
mutex mtx;
condition_variable cv;
bool dead;
- unsigned idlers;
+ unsigned idlers; // number of threads busy with wait_idle / done_idle
+ unsigned fronters; // number of threads busy with wait_front / done_front
public:
- workq() { dead = false; idlers = 0; }
+ workq() { dead = false; idlers = 0; fronters = 0; }
~workq() {}
void push_back(const Payload& p)
@@ -653,10 +747,11 @@ public:
unique_lock<mutex> lock(mtx);
q.clear();
set_metric("thread_work_pending","role","scan", q.size());
+ // NB: there may still be some live fronters
cv.notify_all(); // maybe wake up waiting idlers
}
- // block this scanner thread until there is work to do and no active
+ // block this scanner thread until there is work to do and no active idler
bool wait_front (Payload& p)
{
unique_lock<mutex> lock(mtx);
@@ -668,19 +763,29 @@ public:
{
p = * q.begin();
q.erase (q.begin());
+ fronters ++; // prevent idlers from starting awhile, even if empty q
set_metric("thread_work_pending","role","scan", q.size());
- if (q.size() == 0)
- cv.notify_all(); // maybe wake up waiting idlers
+ // NB: don't wake up idlers yet! The consumer is busy
+ // processing this element until it calls done_front().
return true;
}
}
+ // notify waitq that scanner thread is done with that last item
+ void done_front ()
+ {
+ unique_lock<mutex> lock(mtx);
+ fronters --;
+ if (q.size() == 0 && fronters == 0)
+ cv.notify_all(); // maybe wake up waiting idlers
+ }
+
// block this idler thread until there is no work to do
void wait_idle ()
{
unique_lock<mutex> lock(mtx);
cv.notify_all(); // maybe wake up waiting scanners
- while (!dead && (q.size() != 0))
+ while (!dead && ((q.size() != 0) || fronters > 0))
cv.wait(lock);
idlers ++;
}
@@ -705,6 +810,54 @@ static workq<scan_payload> scanq; // just a single one
// idler: thread_main_groom()
+////////////////////////////////////////////////////////////////////////
+
+// Unique set is a thread-safe structure that lends 'ownership' of a value
+// to a thread. Other threads requesting the same thing are made to wait.
+// It's like a semaphore-on-demand.
+template <typename T>
+class unique_set
+{
+private:
+ set<T> values;
+ mutex mtx;
+ condition_variable cv;
+public:
+ unique_set() {}
+ ~unique_set() {}
+
+ void acquire(const T& value)
+ {
+ unique_lock<mutex> lock(mtx);
+ while (values.find(value) != values.end())
+ cv.wait(lock);
+ values.insert(value);
+ }
+
+ void release(const T& value)
+ {
+ unique_lock<mutex> lock(mtx);
+ // assert (values.find(value) != values.end());
+ values.erase(value);
+ cv.notify_all();
+ }
+};
+
+
+// This is the object that's instantiate to uniquely hold a value in a
+// RAII-pattern way.
+template <typename T>
+class unique_set_reserver
+{
+private:
+ unique_set<T>& please_hold;
+ T mine;
+public:
+ unique_set_reserver(unique_set<T>& t, const T& value):
+ please_hold(t), mine(value) { please_hold.acquire(mine); }
+ ~unique_set_reserver() { please_hold.release(mine); }
+};
+
////////////////////////////////////////////////////////////////////////
@@ -716,10 +869,11 @@ timestamp (ostream &o)
char datebuf[80];
char *now2 = NULL;
time_t now_t = time(NULL);
- struct tm *now = gmtime (&now_t);
- if (now)
+ struct tm now;
+ struct tm *nowp = gmtime_r (&now_t, &now);
+ if (nowp)
{
- (void) strftime (datebuf, sizeof (datebuf), "%c", now);
+ (void) strftime (datebuf, sizeof (datebuf), "%c", nowp);
now2 = datebuf;
}
@@ -909,9 +1063,22 @@ conninfo (struct MHD_Connection * conn)
sts = getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), servname,
sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV);
} else if (so && so->sa_family == AF_INET6) {
- sts = getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname),
- servname, sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV);
+ struct sockaddr_in6* addr6 = (struct sockaddr_in6*) so;
+ if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) {
+ struct sockaddr_in addr4;
+ memset (&addr4, 0, sizeof(addr4));
+ addr4.sin_family = AF_INET;
+ addr4.sin_port = addr6->sin6_port;
+ memcpy (&addr4.sin_addr.s_addr, addr6->sin6_addr.s6_addr+12, sizeof(addr4.sin_addr.s_addr));
+ sts = getnameinfo ((struct sockaddr*) &addr4, sizeof (addr4),
+ hostname, sizeof (hostname), servname, sizeof (servname),
+ NI_NUMERICHOST | NI_NUMERICSERV);
+ } else {
+ sts = getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0,
+ NI_NUMERICHOST);
+ }
}
+
if (sts != 0) {
hostname[0] = servname[0] = '\0';
}
@@ -930,20 +1097,31 @@ conninfo (struct MHD_Connection * conn)
////////////////////////////////////////////////////////////////////////
+/* Wrapper for MHD_add_response_header that logs an error if we
+ couldn't add the specified header. */
+static void
+add_mhd_response_header (struct MHD_Response *r,
+ const char *h, const char *v)
+{
+ if (MHD_add_response_header (r, h, v) == MHD_NO)
+ obatched(clog) << "Error: couldn't add '" << h << "' header" << endl;
+}
static void
add_mhd_last_modified (struct MHD_Response *resp, time_t mtime)
{
- struct tm *now = gmtime (&mtime);
- if (now != NULL)
+ struct tm now;
+ struct tm *nowp = gmtime_r (&mtime, &now);
+ if (nowp != NULL)
{
char datebuf[80];
- size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT", now);
+ size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT",
+ nowp);
if (rc > 0 && rc < sizeof (datebuf))
- (void) MHD_add_response_header (resp, "Last-Modified", datebuf);
+ add_mhd_response_header (resp, "Last-Modified", datebuf);
}
- (void) MHD_add_response_header (resp, "Cache-Control", "public");
+ add_mhd_response_header (resp, "Cache-Control", "public");
}
@@ -989,7 +1167,11 @@ handle_buildid_f_match (bool internal_req_t,
}
else
{
- MHD_add_response_header (r, "Content-Type", "application/octet-stream");
+ std::string file = b_source0.substr(b_source0.find_last_of("/")+1, b_source0.length());
+ add_mhd_response_header (r, "Content-Type", "application/octet-stream");
+ add_mhd_response_header (r, "X-DEBUGINFOD-SIZE",
+ to_string(s.st_size).c_str());
+ add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str());
add_mhd_last_modified (r, s.st_mtime);
if (verbose > 1)
obatched(clog) << "serving file " << b_source0 << endl;
@@ -1151,23 +1333,32 @@ private:
};
deque<fdcache_entry> lru; // @head: most recently used
long max_fds;
+ deque<fdcache_entry> prefetch; // prefetched
long max_mbs;
+ long max_prefetch_mbs;
+ long max_prefetch_fds;
public:
void set_metrics()
{
- double total_mb = 0.0;
+ double fdcache_mb = 0.0;
+ double prefetch_mb = 0.0;
for (auto i = lru.begin(); i < lru.end(); i++)
- total_mb += i->fd_size_mb;
- set_metric("fdcache_bytes", (int64_t)(total_mb*1024.0*1024.0));
+ fdcache_mb += i->fd_size_mb;
+ for (auto j = prefetch.begin(); j < prefetch.end(); j++)
+ prefetch_mb += j->fd_size_mb;
+ set_metric("fdcache_bytes", fdcache_mb*1024.0*1024.0);
set_metric("fdcache_count", lru.size());
+ set_metric("fdcache_prefetch_bytes", prefetch_mb*1024.0*1024.0);
+ set_metric("fdcache_prefetch_count", prefetch.size());
}
void intern(const string& a, const string& b, string fd, off_t sz, bool front_p)
{
{
unique_lock<mutex> lock(fdcache_lock);
- for (auto i = lru.begin(); i < lru.end(); i++) // nuke preexisting copy
+ // nuke preexisting copy
+ for (auto i = lru.begin(); i < lru.end(); i++)
{
if (i->archive == a && i->entry == b)
{
@@ -1177,33 +1368,45 @@ public:
break; // must not continue iterating
}
}
+ // nuke preexisting copy in prefetch
+ for (auto i = prefetch.begin(); i < prefetch.end(); i++)
+ {
+ if (i->archive == a && i->entry == b)
+ {
+ unlink (i->fd.c_str());
+ prefetch.erase(i);
+ inc_metric("fdcache_op_count","op","prefetch_dequeue");
+ break; // must not continue iterating
+ }
+ }
double mb = (sz+65535)/1048576.0; // round up to 64K block
fdcache_entry n = { a, b, fd, mb };
if (front_p)
{
- inc_metric("fdcache_op_count","op","enqueue_front");
+ inc_metric("fdcache_op_count","op","enqueue");
lru.push_front(n);
}
else
{
- inc_metric("fdcache_op_count","op","enqueue_back");
- lru.push_back(n);
+ inc_metric("fdcache_op_count","op","prefetch_enqueue");
+ prefetch.push_front(n);
}
if (verbose > 3)
obatched(clog) << "fdcache interned a=" << a << " b=" << b
<< " fd=" << fd << " mb=" << mb << " front=" << front_p << endl;
+
+ set_metrics();
}
- set_metrics();
// NB: we age the cache at lookup time too
if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp))
{
inc_metric("fdcache_op_count","op","emerg-flush");
obatched(clog) << "fdcache emergency flush for filling tmpdir" << endl;
- this->limit(0, 0); // emergency flush
+ this->limit(0, 0, 0, 0); // emergency flush
}
else if (front_p)
- this->limit(max_fds, max_mbs); // age cache if required
+ this->limit(max_fds, max_mbs, max_prefetch_fds, max_prefetch_mbs); // age cache if required
}
int lookup(const string& a, const string& b)
@@ -1219,7 +1422,21 @@ public:
lru.erase(i); // invalidates i, so no more iteration!
lru.push_front(n);
inc_metric("fdcache_op_count","op","requeue_front");
- fd = open(n.fd.c_str(), O_RDONLY); // NB: no problem if dup() fails; looks like cache miss
+ fd = open(n.fd.c_str(), O_RDONLY);
+ break;
+ }
+ }
+ // Iterate through prefetch while fd == -1 to ensure that no duplication between lru and
+ // prefetch occurs.
+ for ( auto i = prefetch.begin(); fd == -1 && i < prefetch.end(); ++i)
+ {
+ if (i->archive == a && i->entry == b)
+ { // found it; take the entry from the prefetch deque to the lru deque, since it has now been accessed.
+ fdcache_entry n = *i;
+ prefetch.erase(i);
+ lru.push_front(n);
+ inc_metric("fdcache_op_count","op","prefetch_access");
+ fd = open(n.fd.c_str(), O_RDONLY);
break;
}
}
@@ -1228,11 +1445,11 @@ public:
if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp))
{
inc_metric("fdcache_op_count","op","emerg-flush");
- obatched(clog) << "fdcache emergency flush for filling tmpdir";
- this->limit(0, 0); // emergency flush
+ obatched(clog) << "fdcache emergency flush for filling tmpdir" << endl;
+ this->limit(0, 0, 0, 0); // emergency flush
}
else if (fd >= 0)
- this->limit(max_fds, max_mbs); // age cache if required
+ this->limit(max_fds, max_mbs, max_prefetch_fds, max_prefetch_mbs); // age cache if required
return fd;
}
@@ -1248,6 +1465,14 @@ public:
return true;
}
}
+ for (auto i = prefetch.begin(); i < prefetch.end(); i++)
+ {
+ if (i->archive == a && i->entry == b)
+ {
+ inc_metric("fdcache_op_count","op","prefetch_probe_hit");
+ return true;
+ }
+ }
inc_metric("fdcache_op_count","op","probe_miss");
return false;
}
@@ -1258,7 +1483,7 @@ public:
for (auto i = lru.begin(); i < lru.end(); i++)
{
if (i->archive == a && i->entry == b)
- { // found it; move it to head of lru
+ { // found it; erase it from lru
fdcache_entry n = *i;
lru.erase(i); // invalidates i, so no more iteration!
inc_metric("fdcache_op_count","op","clear");
@@ -1267,10 +1492,21 @@ public:
return;
}
}
+ for (auto i = prefetch.begin(); i < prefetch.end(); i++)
+ {
+ if (i->archive == a && i->entry == b)
+ { // found it; erase it from lru
+ fdcache_entry n = *i;
+ prefetch.erase(i); // invalidates i, so no more iteration!
+ inc_metric("fdcache_op_count","op","prefetch_clear");
+ unlink (n.fd.c_str());
+ set_metrics();
+ return;
+ }
+ }
}
-
- void limit(long maxfds, long maxmbs, bool metrics_p = true)
+ void limit(long maxfds, long maxmbs, long maxprefetchfds, long maxprefetchmbs , bool metrics_p = true)
{
if (verbose > 3 && (this->max_fds != maxfds || this->max_mbs != maxmbs))
obatched(clog) << "fdcache limited to maxfds=" << maxfds << " maxmbs=" << maxmbs << endl;
@@ -1278,7 +1514,8 @@ public:
unique_lock<mutex> lock(fdcache_lock);
this->max_fds = maxfds;
this->max_mbs = maxmbs;
-
+ this->max_prefetch_fds = maxprefetchfds;
+ this->max_prefetch_mbs = maxprefetchmbs;
long total_fd = 0;
double total_mb = 0.0;
for (auto i = lru.begin(); i < lru.end(); i++)
@@ -1286,7 +1523,7 @@ public:
// accumulate totals from most recently used one going backward
total_fd ++;
total_mb += i->fd_size_mb;
- if (total_fd > max_fds || total_mb > max_mbs)
+ if (total_fd > this->max_fds || total_mb > this->max_mbs)
{
// found the cut here point!
@@ -1304,6 +1541,29 @@ public:
break;
}
}
+ total_fd = 0;
+ total_mb = 0.0;
+ for(auto i = prefetch.begin(); i < prefetch.end(); i++){
+ // accumulate totals from most recently used one going backward
+ total_fd ++;
+ total_mb += i->fd_size_mb;
+ if (total_fd > this->max_prefetch_fds || total_mb > this->max_prefetch_mbs)
+ {
+ // found the cut here point!
+ for (auto j = i; j < prefetch.end(); j++) // close all the fds from here on in
+ {
+ if (verbose > 3)
+ obatched(clog) << "fdcache evicted from prefetch a=" << j->archive << " b=" << j->entry
+ << " fd=" << j->fd << " mb=" << j->fd_size_mb << endl;
+ if (metrics_p)
+ inc_metric("fdcache_op_count","op","prefetch_evict");
+ unlink (j->fd.c_str());
+ }
+
+ prefetch.erase(i, prefetch.end()); // erase the nodes generally
+ break;
+ }
+ }
if (metrics_p) set_metrics();
}
@@ -1312,7 +1572,7 @@ public:
{
// unlink any fdcache entries in $TMPDIR
// don't update metrics; those globals may be already destroyed
- limit(0, 0, false);
+ limit(0, 0, 0, 0, false);
}
};
static libarchive_fdcache fdcache;
@@ -1381,7 +1641,11 @@ handle_buildid_r_match (bool internal_req_p,
inc_metric ("http_responses_total","result","archive fdcache");
- MHD_add_response_header (r, "Content-Type", "application/octet-stream");
+ add_mhd_response_header (r, "Content-Type", "application/octet-stream");
+ add_mhd_response_header (r, "X-DEBUGINFOD-SIZE",
+ to_string(fs.st_size).c_str());
+ add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str());
+ add_mhd_response_header (r, "X-DEBUGINFOD-FILE", b_source1.c_str());
add_mhd_last_modified (r, fs.st_mtime);
if (verbose > 1)
obatched(clog) << "serving fdcache archive " << b_source0 << " file " << b_source1 << endl;
@@ -1499,7 +1763,7 @@ handle_buildid_r_match (bool internal_req_p,
// responsible for unlinking it later.
fdcache.intern(b_source0, fn,
tmppath, archive_entry_size(e),
- false); // prefetched ones go to back of lru
+ false); // prefetched ones go to the prefetch cache
prefetch_count --;
close (fd); // we're not saving this fd to make a mhd-response from!
continue;
@@ -1522,7 +1786,14 @@ handle_buildid_r_match (bool internal_req_p,
}
else
{
- MHD_add_response_header (r, "Content-Type", "application/octet-stream");
+ std::string file = b_source1.substr(b_source1.find_last_of("/")+1, b_source1.length());
+ add_mhd_response_header (r, "Content-Type",
+ "application/octet-stream");
+ add_mhd_response_header (r, "X-DEBUGINFOD-SIZE",
+ to_string(archive_entry_size(e)).c_str());
+ add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE",
+ b_source0.c_str());
+ add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str());
add_mhd_last_modified (r, archive_entry_mtime(e));
if (verbose > 1)
obatched(clog) << "serving archive " << b_source0 << " file " << b_source1 << endl;
@@ -1617,7 +1888,7 @@ void debuginfod_pool_end(debuginfod_client* c)
static struct MHD_Response*
handle_buildid (MHD_Connection* conn,
const string& buildid /* unsafe */,
- const string& artifacttype /* unsafe */,
+ string& artifacttype /* unsafe, cleanse on exception/return */,
const string& suffix /* unsafe */,
int *result_fd)
{
@@ -1626,7 +1897,10 @@ handle_buildid (MHD_Connection* conn,
if (artifacttype == "debuginfo") atype_code = "D";
else if (artifacttype == "executable") atype_code = "E";
else if (artifacttype == "source") atype_code = "S";
- else throw reportable_exception("invalid artifacttype");
+ else {
+ artifacttype = "invalid"; // PR28242 ensure http_resposes metrics don't propagate unclean user data
+ throw reportable_exception("invalid artifacttype");
+ }
inc_metric("http_requests_total", "type", artifacttype);
@@ -1731,18 +2005,42 @@ handle_buildid (MHD_Connection* conn,
if (xff != "")
xff += string(", "); // comma separated list
+ unsigned int xff_count = 0;
+ for (auto&& i : xff){
+ if (i == ',') xff_count++;
+ }
+
+ // if X-Forwarded-For: exceeds N hops,
+ // do not delegate a local lookup miss to upstream debuginfods.
+ if (xff_count >= forwarded_ttl_limit)
+ throw reportable_exception(MHD_HTTP_NOT_FOUND, "not found, --forwared-ttl-limit reached \
+and will not query the upstream servers");
+
// Compute the client's numeric IP address only - so can't merge with conninfo()
const union MHD_ConnectionInfo *u = MHD_get_connection_info (conn,
MHD_CONNECTION_INFO_CLIENT_ADDRESS);
struct sockaddr *so = u ? u->client_addr : 0;
char hostname[256] = ""; // RFC1035
- if (so && so->sa_family == AF_INET)
+ if (so && so->sa_family == AF_INET) {
(void) getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), NULL, 0,
NI_NUMERICHOST);
- else if (so && so->sa_family == AF_INET6)
- (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0,
- NI_NUMERICHOST);
-
+ } else if (so && so->sa_family == AF_INET6) {
+ struct sockaddr_in6* addr6 = (struct sockaddr_in6*) so;
+ if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) {
+ struct sockaddr_in addr4;
+ memset (&addr4, 0, sizeof(addr4));
+ addr4.sin_family = AF_INET;
+ addr4.sin_port = addr6->sin6_port;
+ memcpy (&addr4.sin_addr.s_addr, addr6->sin6_addr.s6_addr+12, sizeof(addr4.sin_addr.s_addr));
+ (void) getnameinfo ((struct sockaddr*) &addr4, sizeof (addr4),
+ hostname, sizeof (hostname), NULL, 0,
+ NI_NUMERICHOST);
+ } else {
+ (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0,
+ NI_NUMERICHOST);
+ }
+ }
+
string xff_complete = string("X-Forwarded-For: ")+xff+string(hostname);
debuginfod_add_http_header (client, xff_complete.c_str());
}
@@ -1774,7 +2072,8 @@ handle_buildid (MHD_Connection* conn,
auto r = MHD_create_response_from_fd ((uint64_t) s.st_size, fd);
if (r)
{
- MHD_add_response_header (r, "Content-Type", "application/octet-stream");
+ add_mhd_response_header (r, "Content-Type",
+ "application/octet-stream");
add_mhd_last_modified (r, s.st_mtime);
if (verbose > 1)
obatched(clog) << "serving file from upstream debuginfod/cache" << endl;
@@ -1884,6 +2183,29 @@ add_metric(const string& metric,
// and more for higher arity labels if needed
+static void
+inc_metric(const string& metric,
+ const string& lname, const string& lvalue,
+ const string& rname, const string& rvalue)
+{
+ string key = (metric + "{"
+ + metric_label(lname, lvalue) + ","
+ + metric_label(rname, rvalue) + "}");
+ unique_lock<mutex> lock(metrics_lock);
+ metrics[key] ++;
+}
+static void
+add_metric(const string& metric,
+ const string& lname, const string& lvalue,
+ const string& rname, const string& rvalue,
+ double value)
+{
+ string key = (metric + "{"
+ + metric_label(lname, lvalue) + ","
+ + metric_label(rname, rvalue) + "}");
+ unique_lock<mutex> lock(metrics_lock);
+ metrics[key] += value;
+}
static struct MHD_Response*
handle_metrics (off_t* size)
@@ -1902,8 +2224,11 @@ handle_metrics (off_t* size)
MHD_Response* r = MHD_create_response_from_buffer (os.size(),
(void*) os.c_str(),
MHD_RESPMEM_MUST_COPY);
- *size = os.size();
- MHD_add_response_header (r, "Content-Type", "text/plain");
+ if (r != NULL)
+ {
+ *size = os.size();
+ add_mhd_response_header (r, "Content-Type", "text/plain");
+ }
return r;
}
@@ -1915,8 +2240,11 @@ handle_root (off_t* size)
MHD_Response* r = MHD_create_response_from_buffer (version.size (),
(void *) version.c_str (),
MHD_RESPMEM_PERSISTENT);
- *size = version.size ();
- MHD_add_response_header (r, "Content-Type", "text/plain");
+ if (r != NULL)
+ {
+ *size = version.size ();
+ add_mhd_response_header (r, "Content-Type", "text/plain");
+ }
return r;
}
@@ -1952,6 +2280,13 @@ handler_cb (void * /*cls*/,
}
*ptr = NULL; /* reset when done */
+ const char *maxsize_string = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "X-DEBUGINFOD-MAXSIZE");
+ long maxsize = 0;
+ if (maxsize_string != NULL && maxsize_string[0] != '\0')
+ maxsize = atol(maxsize_string);
+ else
+ maxsize = 0;
+
#if MHD_VERSION >= 0x00097002
enum MHD_Result rc;
#else
@@ -1961,6 +2296,8 @@ handler_cb (void * /*cls*/,
off_t http_size = -1;
struct timespec ts_start, ts_end;
clock_gettime (CLOCK_MONOTONIC, &ts_start);
+ double afteryou = 0.0;
+ string artifacttype, suffix;
try
{
@@ -1973,7 +2310,25 @@ handler_cb (void * /*cls*/,
if (slash1 != string::npos && url1 == "/buildid")
{
+ // PR27863: block this thread awhile if another thread is already busy
+ // fetching the exact same thing. This is better for Everyone.
+ // The latecomer says "... after you!" and waits.
+ add_metric ("thread_busy", "role", "http-buildid-after-you", 1);
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ (void) pthread_setname_np (pthread_self(), "mhd-buildid-after-you");
+#endif
+ struct timespec tsay_start, tsay_end;
+ clock_gettime (CLOCK_MONOTONIC, &tsay_start);
+ static unique_set<string> busy_urls;
+ unique_set_reserver<string> after_you(busy_urls, url_copy);
+ clock_gettime (CLOCK_MONOTONIC, &tsay_end);
+ afteryou = (tsay_end.tv_sec - tsay_start.tv_sec) + (tsay_end.tv_nsec - tsay_start.tv_nsec)/1.e9;
+ add_metric ("thread_busy", "role", "http-buildid-after-you", -1);
+
tmp_inc_metric m ("thread_busy", "role", "http-buildid");
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ (void) pthread_setname_np (pthread_self(), "mhd-buildid");
+#endif
size_t slash2 = url_copy.find('/', slash1+1);
if (slash2 == string::npos)
throw reportable_exception("/buildid/ webapi error, need buildid");
@@ -1981,7 +2336,7 @@ handler_cb (void * /*cls*/,
string buildid = url_copy.substr(slash1+1, slash2-slash1-1);
size_t slash3 = url_copy.find('/', slash2+1);
- string artifacttype, suffix;
+
if (slash3 == string::npos)
{
artifacttype = url_copy.substr(slash2+1);
@@ -2007,12 +2362,14 @@ handler_cb (void * /*cls*/,
else if (url1 == "/metrics")
{
tmp_inc_metric m ("thread_busy", "role", "http-metrics");
- inc_metric("http_requests_total", "type", "metrics");
+ artifacttype = "metrics";
+ inc_metric("http_requests_total", "type", artifacttype);
r = handle_metrics(& http_size);
}
else if (url1 == "/")
{
- inc_metric("http_requests_total", "type", "/");
+ artifacttype = "/";
+ inc_metric("http_requests_total", "type", artifacttype);
r = handle_root(& http_size);
}
else
@@ -2021,6 +2378,12 @@ handler_cb (void * /*cls*/,
if (r == 0)
throw reportable_exception("internal error, missing response");
+ if (maxsize > 0 && http_size > maxsize)
+ {
+ MHD_destroy_response(r);
+ throw reportable_exception(406, "File too large, max size=" + std::to_string(maxsize));
+ }
+
rc = MHD_queue_response (connection, MHD_HTTP_OK, r);
http_code = MHD_HTTP_OK;
MHD_destroy_response (r);
@@ -2036,22 +2399,30 @@ handler_cb (void * /*cls*/,
clock_gettime (CLOCK_MONOTONIC, &ts_end);
double deltas = (ts_end.tv_sec - ts_start.tv_sec) + (ts_end.tv_nsec - ts_start.tv_nsec)/1.e9;
+ // afteryou: delay waiting for other client's identical query to complete
+ // deltas: total latency, including afteryou waiting
obatched(clog) << conninfo(connection)
<< ' ' << method << ' ' << url
<< ' ' << http_code << ' ' << http_size
- << ' ' << (int)(deltas*1000) << "ms"
+ << ' ' << (int)(afteryou*1000) << '+' << (int)((deltas-afteryou)*1000) << "ms"
<< endl;
// related prometheus metrics
string http_code_str = to_string(http_code);
- if (http_size >= 0)
- add_metric("http_responses_transfer_bytes_sum","code",http_code_str,
- http_size);
- inc_metric("http_responses_transfer_bytes_count","code",http_code_str);
+ add_metric("http_responses_transfer_bytes_sum",
+ "code", http_code_str, "type", artifacttype, http_size);
+ inc_metric("http_responses_transfer_bytes_count",
+ "code", http_code_str, "type", artifacttype);
+
+ add_metric("http_responses_duration_milliseconds_sum",
+ "code", http_code_str, "type", artifacttype, deltas*1000); // prometheus prefers _seconds and floating point
+ inc_metric("http_responses_duration_milliseconds_count",
+ "code", http_code_str, "type", artifacttype);
- add_metric("http_responses_duration_milliseconds_sum","code",http_code_str,
- deltas*1000); // prometheus prefers _seconds and floating point
- inc_metric("http_responses_duration_milliseconds_count","code",http_code_str);
+ add_metric("http_responses_after_you_milliseconds_sum",
+ "code", http_code_str, "type", artifacttype, afteryou*1000);
+ inc_metric("http_responses_after_you_milliseconds_count",
+ "code", http_code_str, "type", artifacttype);
return rc;
}
@@ -2100,7 +2471,8 @@ dwarf_extract_source_paths (Elf *elf, set<string>& debug_sourcefiles)
struct MHD_Response *r = 0;
try
{
- r = handle_buildid (0, buildid, "debuginfo", "", &alt_fd);
+ string artifacttype = "debuginfo";
+ r = handle_buildid (0, buildid, artifacttype, "", &alt_fd);
}
catch (const reportable_exception& e)
{
@@ -2934,6 +3306,8 @@ thread_main_scanner (void* arg)
e.report(cerr);
}
+ scanq.done_front(); // let idlers run
+
if (fts_cached || fts_executable || fts_debuginfo || fts_sourcefiles || fts_sref || fts_sdef)
{} // NB: not just if a successful scan - we might have encountered -ENOSPC & failed
(void) statfs_free_enough_p(db_path, "database"); // report sqlite filesystem size
@@ -3135,7 +3509,7 @@ database_stats_report()
throw sqlite_exception(rc, "step");
obatched(clog)
- << right << setw(20) << ((const char*) sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL")
+ << ((const char*) sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL")
<< " "
<< (sqlite3_column_text(ps_query, 1) ?: (const unsigned char*) "NULL")
<< endl;
@@ -3156,16 +3530,30 @@ void groom()
clock_gettime (CLOCK_MONOTONIC, &ts_start);
// scan for files that have disappeared
- sqlite_ps files (db, "check old files", "select s.mtime, s.file, f.name from "
- BUILDIDS "_file_mtime_scanned s, " BUILDIDS "_files f "
- "where f.id = s.file");
- sqlite_ps files_del_f_de (db, "nuke f_de", "delete from " BUILDIDS "_f_de where file = ? and mtime = ?");
- sqlite_ps files_del_r_de (db, "nuke r_de", "delete from " BUILDIDS "_r_de where file = ? and mtime = ?");
- sqlite_ps files_del_scan (db, "nuke f_m_s", "delete from " BUILDIDS "_file_mtime_scanned "
- "where file = ? and mtime = ?");
+ sqlite_ps files (db, "check old files",
+ "select distinct s.mtime, s.file, f.name from "
+ BUILDIDS "_file_mtime_scanned s, " BUILDIDS "_files f "
+ "where f.id = s.file");
+ // NB: Because _ftime_mtime_scanned can contain both F and
+ // R records for the same file, this query would return duplicates if the
+ // DISTINCT qualifier were not there.
files.reset();
+
+ // DECISION TIME - we enumerate stale fileids/mtimes
+ deque<pair<int64_t,int64_t> > stale_fileid_mtime;
+
+ time_t time_start = time(NULL);
while(1)
{
+ // PR28514: limit grooming iteration to O(rescan time), to avoid
+ // slow filesystem tests over many files locking out rescans for
+ // too long.
+ if (rescan_s > 0 && (long)time(NULL) > (long)(time_start + rescan_s))
+ {
+ inc_metric("groomed_total", "decision", "aborted");
+ break;
+ }
+
if (interrupted) break;
int rc = files.step();
@@ -3176,24 +3564,74 @@ void groom()
int64_t fileid = sqlite3_column_int64 (files, 1);
const char* filename = ((const char*) sqlite3_column_text (files, 2) ?: "");
struct stat s;
+ bool reg_include = !regexec (&file_include_regex, filename, 0, 0, 0);
+ bool reg_exclude = !regexec (&file_exclude_regex, filename, 0, 0, 0);
+
rc = stat(filename, &s);
- if (rc < 0 || (mtime != (int64_t) s.st_mtime))
+ if ( (regex_groom && reg_exclude && !reg_include) || rc < 0 || (mtime != (int64_t) s.st_mtime) )
{
if (verbose > 2)
- obatched(clog) << "groom: forgetting file=" << filename << " mtime=" << mtime << endl;
- files_del_f_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done();
- files_del_r_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done();
- files_del_scan.reset().bind(1,fileid).bind(2,mtime).step_ok_done();
+ obatched(clog) << "groom: stale file=" << filename << " mtime=" << mtime << endl;
+ stale_fileid_mtime.push_back(make_pair(fileid,mtime));
inc_metric("groomed_total", "decision", "stale");
+ set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size());
}
else
inc_metric("groomed_total", "decision", "fresh");
-
+
if (sigusr1 != forced_rescan_count) // stop early if scan triggered
break;
}
files.reset();
+ // ACTION TIME
+
+ // Now that we know which file/mtime tuples are stale, actually do
+ // the deletion from the database. Doing this during the SELECT
+ // iteration above results in undefined behaviour in sqlite, as per
+ // https://www.sqlite.org/isolation.html
+
+ // We could shuffle stale_fileid_mtime[] here. It'd let aborted
+ // sequences of nuke operations resume at random locations, instead
+ // of just starting over. But it doesn't matter much either way,
+ // as long as we make progress.
+
+ sqlite_ps files_del_f_de (db, "nuke f_de", "delete from " BUILDIDS "_f_de where file = ? and mtime = ?");
+ sqlite_ps files_del_r_de (db, "nuke r_de", "delete from " BUILDIDS "_r_de where file = ? and mtime = ?");
+ sqlite_ps files_del_scan (db, "nuke f_m_s", "delete from " BUILDIDS "_file_mtime_scanned "
+ "where file = ? and mtime = ?");
+
+ while (! stale_fileid_mtime.empty())
+ {
+ auto stale = stale_fileid_mtime.front();
+ stale_fileid_mtime.pop_front();
+ set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size());
+
+ // PR28514: limit grooming iteration to O(rescan time), to avoid
+ // slow nuke_* queries over many files locking out rescans for too
+ // long. We iterate over the files in random() sequence to avoid
+ // partial checks going over the same set.
+ if (rescan_s > 0 && (long)time(NULL) > (long)(time_start + rescan_s))
+ {
+ inc_metric("groomed_total", "action", "aborted");
+ break;
+ }
+
+ if (interrupted) break;
+
+ int64_t fileid = stale.first;
+ int64_t mtime = stale.second;
+ files_del_f_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done();
+ files_del_r_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done();
+ files_del_scan.reset().bind(1,fileid).bind(2,mtime).step_ok_done();
+ inc_metric("groomed_total", "action", "cleaned");
+
+ if (sigusr1 != forced_rescan_count) // stop early if scan triggered
+ break;
+ }
+ stale_fileid_mtime.clear(); // no need for this any longer
+ set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size());
+
// delete buildids with no references in _r_de or _f_de tables;
// cascades to _r_sref & _f_s records
sqlite_ps buildids_del (db, "nuke orphan buildids",
@@ -3220,8 +3658,8 @@ void groom()
sqlite3_db_release_memory(dbq); // ... for both connections
debuginfod_pool_groom(); // and release any debuginfod_client objects we've been holding onto
- fdcache.limit(0,0); // release the fdcache contents
- fdcache.limit(fdcache_fds,fdcache_mbs); // restore status quo parameters
+ fdcache.limit(0,0,0,0); // release the fdcache contents
+ fdcache.limit(fdcache_fds, fdcache_mbs, fdcache_prefetch_fds, fdcache_prefetch_mbs); // restore status quo parameters
clock_gettime (CLOCK_MONOTONIC, &ts_end);
double deltas = (ts_end.tv_sec - ts_start.tv_sec) + (ts_end.tv_nsec - ts_start.tv_nsec)/1.e9;
@@ -3310,7 +3748,15 @@ sigusr2_handler (int /* sig */)
}
-
+static void // error logging callback from libmicrohttpd internals
+error_cb (void *arg, const char *fmt, va_list ap)
+{
+ (void) arg;
+ inc_metric("error_count","libmicrohttpd",fmt);
+ char errmsg[512];
+ (void) vsnprintf (errmsg, sizeof(errmsg), fmt, ap); // ok if slightly truncated
+ obatched(cerr) << "libmicrohttpd error: " << errmsg; // MHD_DLOG calls already include \n
+}
// A user-defined sqlite function, to score the sharedness of the
@@ -3333,7 +3779,7 @@ static void sqlite3_sharedprefix_fn (sqlite3_context* c, int argc, sqlite3_value
const unsigned char* a = sqlite3_value_text (argv[0]);
const unsigned char* b = sqlite3_value_text (argv[1]);
int i = 0;
- while (*a++ == *b++)
+ while (*a != '\0' && *b != '\0' && *a++ == *b++)
i++;
sqlite3_result_int (c, i);
}
@@ -3383,7 +3829,7 @@ main (int argc, char *argv[])
if (scan_archives.size()==0 && !scan_files && source_paths.size()>0)
obatched(clog) << "warning: without -F -R -U -Z, ignoring PATHs" << endl;
- fdcache.limit(fdcache_fds, fdcache_mbs);
+ fdcache.limit(fdcache_fds, fdcache_mbs, fdcache_prefetch_fds, fdcache_prefetch_mbs);
(void) signal (SIGPIPE, SIG_IGN); // microhttpd can generate it incidentally, ignore
(void) signal (SIGINT, signal_handler); // ^C
@@ -3393,22 +3839,25 @@ main (int argc, char *argv[])
(void) signal (SIGUSR2, sigusr2_handler); // end-user
/* Get database ready. */
- rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE
- |SQLITE_OPEN_URI
- |SQLITE_OPEN_PRIVATECACHE
- |SQLITE_OPEN_CREATE
- |SQLITE_OPEN_FULLMUTEX), /* thread-safe */
- NULL);
- if (rc == SQLITE_CORRUPT)
- {
- (void) unlink (db_path.c_str());
- error (EXIT_FAILURE, 0,
- "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db));
- }
- else if (rc)
- {
- error (EXIT_FAILURE, 0,
- "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db));
+ if (! passive_p)
+ {
+ rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE
+ |SQLITE_OPEN_URI
+ |SQLITE_OPEN_PRIVATECACHE
+ |SQLITE_OPEN_CREATE
+ |SQLITE_OPEN_FULLMUTEX), /* thread-safe */
+ NULL);
+ if (rc == SQLITE_CORRUPT)
+ {
+ (void) unlink (db_path.c_str());
+ error (EXIT_FAILURE, 0,
+ "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db));
+ }
+ else if (rc)
+ {
+ error (EXIT_FAILURE, 0,
+ "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db));
+ }
}
// open the readonly query variant
@@ -3426,8 +3875,10 @@ main (int argc, char *argv[])
}
- obatched(clog) << "opened database " << db_path << endl;
+ obatched(clog) << "opened database " << db_path
+ << (db?" rw":"") << (dbq?" ro":"") << endl;
obatched(clog) << "sqlite version " << sqlite3_version << endl;
+ obatched(clog) << "service mode " << (passive_p ? "passive":"active") << endl;
// add special string-prefix-similarity function used in rpm sref/sdef resolution
rc = sqlite3_create_function(dbq, "sharedprefix", 2, SQLITE_UTF8, NULL,
@@ -3436,42 +3887,42 @@ main (int argc, char *argv[])
error (EXIT_FAILURE, 0,
"cannot create sharedprefix function: %s", sqlite3_errmsg(dbq));
- if (verbose > 3)
- obatched(clog) << "ddl: " << DEBUGINFOD_SQLITE_DDL << endl;
- rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_DDL, NULL, NULL, NULL);
- if (rc != SQLITE_OK)
+ if (! passive_p)
{
- error (EXIT_FAILURE, 0,
- "cannot run database schema ddl: %s", sqlite3_errmsg(db));
+ if (verbose > 3)
+ obatched(clog) << "ddl: " << DEBUGINFOD_SQLITE_DDL << endl;
+ rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_DDL, NULL, NULL, NULL);
+ if (rc != SQLITE_OK)
+ {
+ error (EXIT_FAILURE, 0,
+ "cannot run database schema ddl: %s", sqlite3_errmsg(db));
+ }
}
- // Start httpd server threads. Separate pool for IPv4 and IPv6, in
- // case the host only has one protocol stack.
- MHD_Daemon *d4 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
+ // Start httpd server threads. Use a single dual-homed pool.
+ MHD_Daemon *d46 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION)
#if MHD_VERSION >= 0x00095300
| MHD_USE_INTERNAL_POLLING_THREAD
#else
| MHD_USE_SELECT_INTERNALLY
#endif
- | MHD_USE_DEBUG, /* report errors to stderr */
- http_port,
- NULL, NULL, /* default accept policy */
- handler_cb, NULL, /* handler callback */
- MHD_OPTION_END);
- MHD_Daemon *d6 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
-#if MHD_VERSION >= 0x00095300
- | MHD_USE_INTERNAL_POLLING_THREAD
-#else
- | MHD_USE_SELECT_INTERNALLY
+#ifdef MHD_USE_EPOLL
+ | MHD_USE_EPOLL
+#endif
+ | MHD_USE_DUAL_STACK
+#if MHD_VERSION >= 0x00095200
+ | MHD_USE_ITC
#endif
- | MHD_USE_IPv6
| MHD_USE_DEBUG, /* report errors to stderr */
http_port,
NULL, NULL, /* default accept policy */
handler_cb, NULL, /* handler callback */
+ MHD_OPTION_EXTERNAL_LOGGER, error_cb, NULL,
+ (connection_pool ? MHD_OPTION_THREAD_POOL_SIZE : MHD_OPTION_END),
+ (connection_pool ? (int)connection_pool : MHD_OPTION_END),
MHD_OPTION_END);
- if (d4 == NULL && d6 == NULL) // neither ipv4 nor ipv6? boo
+ if (d46 == NULL)
{
sqlite3 *database = db;
sqlite3 *databaseq = dbq;
@@ -3481,9 +3932,7 @@ main (int argc, char *argv[])
error (EXIT_FAILURE, 0, "cannot start http server at port %d", http_port);
}
- obatched(clog) << "started http server on "
- << (d4 != NULL ? "IPv4 " : "")
- << (d6 != NULL ? "IPv6 " : "")
+ obatched(clog) << "started http server on IPv4 IPv6 "
<< "port=" << http_port << endl;
// add maxigroom sql if -G given
@@ -3506,31 +3955,41 @@ main (int argc, char *argv[])
}
// run extra -D sql if given
- for (auto&& i: extra_ddl)
- {
- if (verbose > 1)
- obatched(clog) << "extra ddl:\n" << i << endl;
- rc = sqlite3_exec (db, i.c_str(), NULL, NULL, NULL);
- if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW)
- error (0, 0,
- "warning: cannot run database extra ddl %s: %s", i.c_str(), sqlite3_errmsg(db));
- }
-
- if (maxigroom)
- obatched(clog) << "maxigroomed database" << endl;
+ if (! passive_p)
+ for (auto&& i: extra_ddl)
+ {
+ if (verbose > 1)
+ obatched(clog) << "extra ddl:\n" << i << endl;
+ rc = sqlite3_exec (db, i.c_str(), NULL, NULL, NULL);
+ if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW)
+ error (0, 0,
+ "warning: cannot run database extra ddl %s: %s", i.c_str(), sqlite3_errmsg(db));
+
+ if (maxigroom)
+ obatched(clog) << "maxigroomed database" << endl;
+ }
- obatched(clog) << "search concurrency " << concurrency << endl;
- obatched(clog) << "rescan time " << rescan_s << endl;
+ if (! passive_p)
+ obatched(clog) << "search concurrency " << concurrency << endl;
+ obatched(clog) << "webapi connection pool " << connection_pool
+ << (connection_pool ? "" : " (unlimited)") << endl;
+ if (! passive_p)
+ obatched(clog) << "rescan time " << rescan_s << endl;
obatched(clog) << "fdcache fds " << fdcache_fds << endl;
obatched(clog) << "fdcache mbs " << fdcache_mbs << endl;
obatched(clog) << "fdcache prefetch " << fdcache_prefetch << endl;
obatched(clog) << "fdcache tmpdir " << tmpdir << endl;
obatched(clog) << "fdcache tmpdir min% " << fdcache_mintmp << endl;
- obatched(clog) << "groom time " << groom_s << endl;
+ if (! passive_p)
+ obatched(clog) << "groom time " << groom_s << endl;
+ obatched(clog) << "prefetch fds " << fdcache_prefetch_fds << endl;
+ obatched(clog) << "prefetch mbs " << fdcache_prefetch_mbs << endl;
+ obatched(clog) << "forwarded ttl limit " << forwarded_ttl_limit << endl;
+
if (scan_archives.size()>0)
{
obatched ob(clog);
- auto& o = ob << "scanning archive types ";
+ auto& o = ob << "accepting archive types ";
for (auto&& arch : scan_archives)
o << arch.first << "(" << arch.second << ") ";
o << endl;
@@ -3541,37 +4000,40 @@ main (int argc, char *argv[])
vector<pthread_t> all_threads;
- pthread_t pt;
- rc = pthread_create (& pt, NULL, thread_main_groom, NULL);
- if (rc)
- error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n");
- else
- {
-#ifdef HAVE_PTHREAD_SETNAME_NP
- (void) pthread_setname_np (pt, "groom");
-#endif
- all_threads.push_back(pt);
- }
-
- if (scan_files || scan_archives.size() > 0)
+ if (! passive_p)
{
- rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL);
+ pthread_t pt;
+ rc = pthread_create (& pt, NULL, thread_main_groom, NULL);
if (rc)
- error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n");
+ error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n");
+ else
+ {
#ifdef HAVE_PTHREAD_SETNAME_NP
- (void) pthread_setname_np (pt, "traverse");
+ (void) pthread_setname_np (pt, "groom");
#endif
- all_threads.push_back(pt);
+ all_threads.push_back(pt);
+ }
- for (unsigned i=0; i<concurrency; i++)
+ if (scan_files || scan_archives.size() > 0)
{
- rc = pthread_create (& pt, NULL, thread_main_scanner, NULL);
+ rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL);
if (rc)
- error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n");
+ error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n");
#ifdef HAVE_PTHREAD_SETNAME_NP
- (void) pthread_setname_np (pt, "scan");
+ (void) pthread_setname_np (pt, "traverse");
#endif
all_threads.push_back(pt);
+
+ for (unsigned i=0; i<concurrency; i++)
+ {
+ rc = pthread_create (& pt, NULL, thread_main_scanner, NULL);
+ if (rc)
+ error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n");
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ (void) pthread_setname_np (pt, "scan");
+#endif
+ all_threads.push_back(pt);
+ }
}
}
@@ -3590,17 +4052,21 @@ main (int argc, char *argv[])
pthread_join (it, NULL);
/* Stop all the web service threads. */
- if (d4) MHD_stop_daemon (d4);
- if (d6) MHD_stop_daemon (d6);
+ if (d46) MHD_stop_daemon (d46);
- /* With all threads known dead, we can clean up the global resources. */
- rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_CLEANUP_DDL, NULL, NULL, NULL);
- if (rc != SQLITE_OK)
+ if (! passive_p)
{
- error (0, 0,
- "warning: cannot run database cleanup ddl: %s", sqlite3_errmsg(db));
+ /* With all threads known dead, we can clean up the global resources. */
+ rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_CLEANUP_DDL, NULL, NULL, NULL);
+ if (rc != SQLITE_OK)
+ {
+ error (0, 0,
+ "warning: cannot run database cleanup ddl: %s", sqlite3_errmsg(db));
+ }
}
+ debuginfod_pool_groom ();
+
// NB: no problem with unconditional free here - an earlier failed regcomp would exit program
(void) regfree (& file_include_regex);
(void) regfree (& file_exclude_regex);
@@ -3609,7 +4075,8 @@ main (int argc, char *argv[])
sqlite3 *databaseq = dbq;
db = dbq = 0; // for signal_handler not to freak
(void) sqlite3_close (databaseq);
- (void) sqlite3_close (database);
+ if (! passive_p)
+ (void) sqlite3_close (database);
return 0;
}
diff --git a/debuginfod/debuginfod.h.in b/debuginfod/debuginfod.h.in
index 559ea947..c358df4d 100644
--- a/debuginfod/debuginfod.h.in
+++ b/debuginfod/debuginfod.h.in
@@ -35,6 +35,9 @@
#define DEBUGINFOD_TIMEOUT_ENV_VAR "DEBUGINFOD_TIMEOUT"
#define DEBUGINFOD_PROGRESS_ENV_VAR "DEBUGINFOD_PROGRESS"
#define DEBUGINFOD_VERBOSE_ENV_VAR "DEBUGINFOD_VERBOSE"
+#define DEBUGINFOD_RETRY_LIMIT_ENV_VAR "DEBUGINFOD_RETRY_LIMIT"
+#define DEBUGINFOD_MAXSIZE_ENV_VAR "DEBUGINFOD_MAXSIZE"
+#define DEBUGINFOD_MAXTIME_ENV_VAR "DEBUGINFOD_MAXTIME"
/* The libdebuginfod soname. */
#define DEBUGINFOD_SONAME "@LIBDEBUGINFOD_SONAME@"
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 05fcd23d..303e3dc0 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,51 @@
+2022-01-31 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client-config.7: Elaborate DEBUGINFOD_URLS.
+
+2021-12-08 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28661
+ * debuginfod.8 (-C): Document new flag.
+
+2021-11-05 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28430
+ * debuginfod.8 (--passive): Document new flag & operation mode.
+
+2021-08-28 Di Chen <dichen@redhat.com>
+
+ * debuginfod.8 (-d): Document ":memory:" as in-memory database.
+
+2021-08-20 Di Chen <dichen@redhat.com>
+
+ * debuginfod.8: Add --forwarded-ttl-limit=NUM documentation.
+
+2021-07-28 Alice Zhang <alizhang@redhat.com>
+
+ PR27950
+ * debuginfod-client-config.7: New file to store all cache config
+ infos.
+ * debuginfod-find.1: Removed redundant occurrences of environment
+ variables & cache control files.
+ * debuginfod.8: Likewise.
+ * debuginfod_find_debuginfo.3: Likewise.
+ * Makefile.am: Updated to include debuginfod-client-config.7
+ * man3, man7: Symlinks for source tree man page testing.
+
+2021-08-04 Noah Sanci <nsanci@redhat.com>
+
+ PR27277
+ * debuginfod-find.1: Increasing verbosity describes the downloaded
+ file.
+ * debuginfod.8: Describe X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE, and
+ X-DEBUGINFOD-ARCHIVE.
+
+2021-07-26 Noah Sanci <nsanci@redhat.com>
+
+ PR27982
+ * debuginfod-find.1: Document DEBUGINFOD_MAXTIME
+ and DEBUGINFOD_MAXSIZE.
+
2021-04-23 Frank Ch. Eigler <fche@redhat.com>
PR27701
diff --git a/doc/Makefile.am b/doc/Makefile.am
index ef66fb88..32d1a2b8 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -19,14 +19,19 @@
EXTRA_DIST = COPYING-GFDL README
dist_man1_MANS=readelf.1 elfclassify.1
notrans_dist_man3_MANS=elf_update.3 elf_getdata.3 elf_clone.3 elf_begin.3
+notrans_dist_man7_MANS=
notrans_dist_man8_MANS=
notrans_dist_man1_MANS=
if DEBUGINFOD
+if !LIBDEBUGINFOD
+notrans_dist_man7_MANS += debuginfod-client-config.7
+endif
notrans_dist_man8_MANS += debuginfod.8
endif
if LIBDEBUGINFOD
+notrans_dist_man7_MANS += debuginfod-client-config.7
notrans_dist_man3_MANS += debuginfod_add_http_header.3
notrans_dist_man3_MANS += debuginfod_begin.3
notrans_dist_man3_MANS += debuginfod_end.3
diff --git a/doc/debuginfod-client-config.7 b/doc/debuginfod-client-config.7
new file mode 100644
index 00000000..fecc6038
--- /dev/null
+++ b/doc/debuginfod-client-config.7
@@ -0,0 +1,129 @@
+'\"! tbl | nroff \-man
+'\" t macro stdmacro
+.if \n(zZ=1 .ig zZ
+
+.TH DEBUGINFOD-CLIENT-CONFIG 7
+.SH NAME
+debuginfod-client-config \- debuginfod client environment variables, cache control files and etc.
+
+.SH SYNOPSIS
+Several environment variables and control files control the behaviour of debuginfod client applications.
+
+.\" The preceding section permits this man page to be viewed as if self-contained.
+.zZ
+.\" The following section (only) gets included into other man pages via .so
+
+
+.SH ENVIRONMENT VARIABLES
+.TP
+.B $TMPDIR
+This environment variable points to a file system to be used for
+temporary files. The default is /tmp.
+
+.TP
+.B $DEBUGINFOD_URLS
+This environment variable contains a list of URL prefixes for trusted
+debuginfod instances. Alternate URL prefixes are separated by space.
+This environment variable may be set by /etc/profile.d scripts
+reading /etc/debuginfod/*.urls files.
+
+.TP
+.B $DEBUGINFOD_CACHE_PATH
+This environment variable governs the location of the cache where
+downloaded files and cache-control files are kept. The default
+directory is chosen based on other environment variables, see below.
+
+.TP
+.B $DEBUGINFOD_PROGRESS
+This environment variable governs the default progress function. If
+set, and if a progressfn is not explicitly set, then the library will
+configure a default progressfn. This function will append a simple
+progress message periodically to stderr. The default is no progress
+function output.
+
+.TP
+.B $DEBUGINFOD_VERBOSE
+This environment variable governs the default file descriptor for
+verbose output. If set, and if a verbose fd is not explicitly set,
+then the verbose output will be produced on STDERR_FILENO.
+
+.TP
+.B $DEBUGINFOD_RETRY_LIMIT
+This environment variable governs the default limit of retry attempts. If a
+query failed with errno other than ENOENT, will initiate several attempts
+within the limit.
+
+.TP
+.B $DEBUGINFOD_TIMEOUT
+This environment variable governs the download \fIcommencing\fP
+timeout for each debuginfod HTTP connection. A server that fails to
+provide at least 100K of data within this many seconds is skipped. The
+default is 90 seconds. (Zero or negative means "no timeout".)
+
+.TP
+.B $DEBUGINFOD_MAXTIME
+This environment variable dictates how long the client will wait to
+\fIcomplete\fP the download a file found on a server in seconds. It is best
+used to ensure that a file is downloaded quickly or be rejected. The
+default is 0 (infinite time).
+
+.TP
+.B $DEBUGINFOD_MAXSIZE
+This environment variable dictates the maximum size of a file to
+download in bytes. This is best used if the user would like to ensure
+only small files are downloaded. A value of 0 causes no consideration
+for size, and the client may attempt to download a file of any size.
+The default is 0 (infinite size).
+
+.SH CACHE
+
+Before each query, the debuginfod client library checks for a need to
+clean the cache. If it's time to clean, the library traverses the
+cache directory and removes downloaded debuginfo-related artifacts and
+newly empty directories, if they have not been accessed recently.
+
+Control files are located directly under the cache directory. They
+contain simple decimal numbers to set cache-related configuration
+parameters. If the files do not exist, the client library creates the
+files with the default parameter values as content.
+
+After each query, the debuginfod client library deposits newly
+received files into a directory & file that is named based on the
+build-id. A failed query is also cached by a special file. The
+naming convention used for these artifacts is deliberately
+\fBundocumented\fP.
+
+.TP
+.B $XDG_CACHE_HOME/debuginfod_client/
+Default cache directory, if $XDG_CACHE_HOME is set.
+.PD
+
+.TP
+.B $HOME/.cache/debuginfod_client/
+Default cache directory, if $XDG_CACHE_HOME is not set.
+.PD
+
+.TP
+.B $HOME/.debuginfod_client_cache/
+Deprecated cache directory, used only if preexisting.
+.PD
+
+.TP
+.B cache_clean_interval_s
+This control file gives the interval between cache cleaning rounds, in
+seconds. The default is 86400, one day. 0 means "immediately".
+
+.TP
+.B max_unused_age_s
+This control file sets how long unaccessed debuginfo-related files
+are retained, in seconds. The default is 604800, one week. 0 means
+"immediately".
+
+.TP
+.B cache_miss_s
+This control file sets how long to remember a query failure, in
+seconds. New queries for the same artifacts within this time window
+are short-circuited (returning an immediate failure instead of sending
+a new query to servers). This accelerates queries that probably would
+still fail. The default is 600, 10 minutes. 0 means "forget
+immediately".
diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1
index 12d4ec2d..957ec7e7 100644
--- a/doc/debuginfod-find.1
+++ b/doc/debuginfod-find.1
@@ -110,7 +110,8 @@ l l.
.TP
.B "\-v"
-Increase verbosity, including printing frequent download-progress messages.
+Increase verbosity, including printing frequent download-progress messages
+and printing the http response headers from the server.
.SH "SECURITY"
@@ -125,35 +126,8 @@ for the basic plaintext \%\fIhttp[s]://userid:password@hostname/\fP style.
(The debuginfod server does not perform authentication, but a front-end
proxy server could.)
-.SH "ENVIRONMENT VARIABLES"
-
-.TP 21
-.B DEBUGINFOD_URLS
-This environment variable contains a list of URL prefixes for trusted
-debuginfod instances. Alternate URL prefixes are separated by space.
-
-.TP 21
-.B DEBUGINFOD_TIMEOUT
-This environment variable governs the timeout for each debuginfod HTTP
-connection. A server that fails to provide at least 100K of data
-within this many seconds is skipped. The default is 90 seconds. (Zero
-or negative means "no timeout".)
-
-.TP 21
-.B DEBUGINFOD_CACHE_PATH
-This environment variable governs the location of the cache where
-downloaded files are kept. It is cleaned periodically as this program
-is reexecuted. Cache management parameters may be set by files under
-this directory: see the \fBdebuginfod_find_debuginfo(3)\fP man page
-for details. The default is $HOME/.debuginfod_client_cache.
-
-.SH "FILES"
-.LP
-.PD .1v
-.TP 20
-.B $HOME/.debuginfod_client_cache
-Default cache directory.
-.PD
+.nr zZ 1
+.so man7/debuginfod-client-config.7
.SH "SEE ALSO"
.I "debuginfod(8)"
diff --git a/doc/debuginfod.8 b/doc/debuginfod.8
index 1ba42cf6..ee8e4078 100644
--- a/doc/debuginfod.8
+++ b/doc/debuginfod.8
@@ -12,7 +12,6 @@
.fi
.RE
..
-
.TH DEBUGINFOD 8
.SH NAME
debuginfod \- debuginfo-related http file-server daemon
@@ -75,9 +74,10 @@ all.
If no PATH is listed, or none of the scanning options is given, then
\fBdebuginfod\fP will simply serve content that it accumulated into
-its index in all previous runs, and federate to any upstream
-debuginfod servers.
-
+its index in all previous runs, periodically groom the database, and
+federate to any upstream debuginfod servers. In \fIpassive\fP mode,
+\fBdebuginfod\fP will only serve content from a read-only index and
+federated upstream servers, but will not scan or groom.
.SH OPTIONS
@@ -118,8 +118,20 @@ file is disposable in the sense that a later rescan will repopulate
data. It will contain absolute file path names, so it may not be
portable across machines. It may be frequently read/written, so it
should be on a fast filesystem. It should not be shared across
-machines or users, to maximize sqlite locking performance. The
-default database file is \%$HOME/.debuginfod.sqlite.
+machines or users, to maximize sqlite locking performance. For quick
+testing the magic string ":memory:" can be used to use an one-time
+memory-only database. The default database file is
+\%$HOME/.debuginfod.sqlite.
+
+.TP
+.B "\-\-passive"
+Set the server to passive mode, where it only services webapi
+requests, including participating in federation. It performs no
+scanning, no grooming, and so only opens the sqlite database
+read-only. This way a database can be safely shared between a active
+scanner/groomer server and multiple passive ones, thereby sharing
+service load. Archive pattern options must still be given, so
+debuginfod can recognize file name extensions for unpacking.
.TP
.B "\-D SQL" "\-\-ddl=SQL"
@@ -159,6 +171,9 @@ scan, independent of the rescan time (including if it was zero),
interrupting a groom pass (if any).
.TP
+.B "\-r"
+Apply the -I and -X during groom cycles, so that files excluded by the regexes are removed from the index. These parameters are in addition to what normally qualifies a file for grooming, not a replacement.
+
.B "\-g SECONDS" "\-\-groom\-time=SECONDS"
Set the groom time for the index database. This is the amount of time
the grooming thread will wait after finishing a grooming pass before
@@ -191,6 +206,23 @@ an ELF file and especially decompressing archives. The default is the
number of processors on the system; the minimum is 1.
.TP
+.B "\-C" "\-C=NUM" "\-\-connection\-pool" "\-\-connection\-pool=NUM"
+Set the size of the pool of threads serving webapi queries. The
+following table summarizes the interpretaton of this option and its
+optional NUM parameter.
+.TS
+l l.
+no option clone new thread for every request, no fixed pool
+\-C use a fixed thread pool sized automatically
+\-C=NUM use a fixed thread pool sized NUM, minimum 2
+.TE
+
+The first mode is useful for friendly bursty traffic. The second mode
+is a simple and safe configuration based on the number of processors.
+The third mode is suitable for tuned load-limiting configurations
+facing unruly traffic.
+
+.TP
.B "\-L"
Traverse symbolic links encountered during traversal of the PATHs,
including across devices - as in \fIfind\ -L\fP. The default is to
@@ -213,6 +245,16 @@ most recently used extracted files are kept. Grooming cleans this
cache.
.TP
+.B "\-\-fdcache\-\-prefetch\-fds=NUM" "\-\-fdcache\-\-prefetch\-mbs=MB"
+Configure how many file descriptors (fds) and megabytes (mbs) are
+allocated to the prefetch fdcache. If unspecified, values of
+\fB\-\-prefetch\-fds\fP and \fB\-\-prefetch\-mbs\fP depend
+on concurrency of the system and on the available disk space on
+the $TMPDIR. Allocating more to the prefetch cache will improve
+performance in environments where different parts of several large
+archives are being accessed.
+
+.TP
.B "\-\-fdcache\-mintmp=NUM"
Configure a disk space threshold for emergency flushing of the cache.
The filesystem holding the cache is checked periodically. If the
@@ -224,6 +266,12 @@ can translate to RAM scarcity if the disk happens to be on a RAM
virtual disk. The default threshold is 25%.
.TP
+.B "\-\-forwarded\-ttl\-limit=NUM"
+Configure limits of X-Forwarded-For hops. if X-Forwarded-For
+exceeds N hops, it will not delegate a local lookup miss to
+upstream debuginfods. The default limit is 8.
+
+.TP
.B "\-v"
Increase verbosity of logging to the standard error file descriptor.
May be repeated to increase details. The default verbosity is 0.
@@ -238,6 +286,15 @@ Unknown buildid / request combinations result in HTTP error codes.
This file service resemblance is intentional, so that an installation
can take advantage of standard HTTP management infrastructure.
+Upon finding a file in an archive or simply in the database, some
+custom http headers are added to the response. For files in the
+database X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE are added.
+X-DEBUGINFOD-FILE is simply the unescaped filename and
+X-DEBUGINFOD-SIZE is the size of the file. For files found in archives,
+in addition to X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE,
+X-DEBUGINFOD-ARCHIVE is added. X-DEBUGINFOD-ARCHIVE is the name of the
+archive the file was found in.
+
There are three requests. In each case, the buildid is encoded as a
lowercase hexadecimal string. For example, for a program \fI/bin/ls\fP,
look at the ELF note GNU_BUILD_ID:
@@ -296,6 +353,10 @@ l l.
\../bar/foo.c AT_comp_dir=/zoo/ /buildid/BUILDID/source/zoo//../bar/foo.c
.TE
+Note: the client should %-escape characters in /SOURCE/FILE that are
+not shown as "unreserved" in section 2.3 of RFC3986. Some characters
+that will be escaped include "+", "\\", "$", "!", the 'space' character,
+and ";". RFC3986 includes a more comprehensive list of these characters.
.SS /metrics
This endpoint returns a Prometheus formatted text/plain dump of a
@@ -332,22 +393,22 @@ be helpful to apply tight \-I or \-X regular-expression constraints to
exclude files from scanning that you know have no debuginfo-relevant
content.
-As debuginfod runs, it periodically rescans its target directories,
-and any new content found is added to the database. Old content, such
-as data for files that have disappeared or that have been replaced
-with newer versions is removed at a periodic \fIgrooming\fP pass.
-This means that the sqlite files grow fast during initial indexing,
-slowly during index rescans, and periodically shrink during grooming.
-There is also an optional one-shot \fImaximal grooming\fP pass is
-available. It removes information debuginfo-unrelated data from the
-archive content index such as file names found in archives ("archive
-sdef" records) that are not referred to as source files from any
-binaries find in archives ("archive sref" records). This can save
-considerable disk space. However, it is slow and temporarily requires
-up to twice the database size as free space. Worse: it may result in
-missing source-code info if the archive traversals were interrupted,
-so that not all source file references were known. Use it rarely to
-polish a complete index.
+As debuginfod runs in normal \fIactive\fP mode, it periodically
+rescans its target directories, and any new content found is added to
+the database. Old content, such as data for files that have
+disappeared or that have been replaced with newer versions is removed
+at a periodic \fIgrooming\fP pass. This means that the sqlite files
+grow fast during initial indexing, slowly during index rescans, and
+periodically shrink during grooming. There is also an optional
+one-shot \fImaximal grooming\fP pass is available. It removes
+information debuginfo-unrelated data from the archive content index
+such as file names found in archives ("archive sdef" records) that are
+not referred to as source files from any binaries find in archives
+("archive sref" records). This can save considerable disk space.
+However, it is slow and temporarily requires up to twice the database
+size as free space. Worse: it may result in missing source-code info
+if the archive traversals were interrupted, so that not all source
+file references were known. Use it rarely to polish a complete index.
You should ensure that ample disk space remains available. (The flood
of error messages on -ENOSPC is ugly and nagging. But, like for most
@@ -380,6 +441,11 @@ worry about disk space. If a system crash corrupts the database,
or you want to force debuginfod to reset and start over, simply
erase the sqlite file before restarting debuginfod.
+In contrast, in \fIpassive\fP mode, all scanning and grooming is
+disabled, and the index database remains read-only. This makes the
+database more suitable for sharing between servers or sites with
+simple one-way replication, and data management considerations are
+generally moot.
.SH SECURITY
@@ -401,53 +467,15 @@ rather than HTTPS, the network should be trustworthy. Authentication
information through the internal \fIlibcurl\fP library is not currently
enabled.
+.nr zZ 1
+.so man7/debuginfod-client-config.7
-.SH "ENVIRONMENT VARIABLES"
-
+.SH ADDITIONAL FILES
.TP
-.B TMPDIR
-This environment variable points to a file system to be used for
-temporary files. The default is /tmp.
-
-.TP
-.B DEBUGINFOD_URLS
-This environment variable contains a list of URL prefixes for trusted
-debuginfod instances. Alternate URL prefixes are separated by space.
-Avoid referential loops that cause a server to contact itself, directly
-or indirectly - the results would be hilarious.
-
-.TP
-.B DEBUGINFOD_TIMEOUT
-This environment variable governs the timeout for each debuginfod HTTP
-connection. A server that fails to provide at least 100K of data
-within this many seconds is skipped. The default is 90 seconds. (Zero
-or negative means "no timeout".)
-
-
-.TP
-.B DEBUGINFOD_CACHE_PATH
-This environment variable governs the location of the cache where
-downloaded files are kept. It is cleaned periodically as this
-program is reexecuted. If XDG_CACHE_HOME is set then
-$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise
-$HOME/.cache/debuginfod_client is used. For more information regarding
-the client cache see \fIdebuginfod_find_debuginfo(3)\fP.
-
-.SH FILES
-.LP
-.PD .1v
-.TP 20
.B $HOME/.debuginfod.sqlite
Default database file.
.PD
-.TP 20
-.B $XDG_CACHE_HOME/debuginfod_client
-Default cache directory for content from upstream debuginfods.
-If XDG_CACHE_HOME is not set then \fB$HOME/.cache/debuginfod_client\fP
-is used.
-.PD
-
.SH "SEE ALSO"
.I "debuginfod-find(1)"
diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3
index 5ae44a98..30cef3c1 100644
--- a/doc/debuginfod_find_debuginfo.3
+++ b/doc/debuginfod_find_debuginfo.3
@@ -198,19 +198,6 @@ By default, the library adds a descriptive \fIUser-Agent:\fP
header to outgoing requests. If the client application adds
a header with the same name, this default is suppressed.
-.SH "CACHE"
-If the query is successful, the \fBdebuginfod_find_*\fP() functions save
-the target file to a local cache. The location of the cache is controlled
-by the \fB$DEBUGINFOD_CACHE_PATH\fP environment variable (see below).
-Cleaning of the cache is controlled by the \fIcache_clean_interval_s\fP
-and \fImax_unused_age_s\fP files, which are found in the
-\fB$DEBUGINFOD_CACHE_PATH\fP directory. \fIcache_clean_interval_s\fP controls
-how frequently the cache is traversed for cleaning and \fImax_unused_age_s\fP
-controls how long a file can go unused (fstat(2) atime) before it's
-removed from the cache during cleaning. These files should contain only an
-ASCII decimal integer representing the interval or max unused age in seconds.
-The default is one day and one week, respectively. Values of zero mean "immediately".
-
.SH "MACROS"
.SS "DEBUGINFOD_SONAME"
@@ -241,43 +228,6 @@ for the basic plaintext \%\fIhttp[s]://userid:password@hostname/\fP style.
(The debuginfod server does not perform authentication, but a front-end
proxy server could.)
-.SH "ENVIRONMENT VARIABLES"
-
-.TP 21
-.B DEBUGINFOD_URLS
-This environment variable contains a list of URL prefixes for trusted
-debuginfod instances. Alternate URL prefixes are separated by space.
-
-.TP 21
-.B DEBUGINFOD_TIMEOUT
-This environment variable governs the timeout for each debuginfod HTTP
-connection. A server that fails to provide at least 100K of data
-within this many seconds is skipped. The default is 90 seconds. (Zero
-or negative means "no timeout".)
-
-.TP 21
-.B DEBUGINFOD_PROGRESS
-This environment variable governs the default progress function. If
-set, and if a progressfn is not explicitly set, then the library will
-configure a default progressfn. This function will append a simple
-progress message periodically to stderr. The default is no progress
-function output.
-
-.TP 21
-.B DEBUGINFOD_VERBOSE
-This environment variable governs the default file descriptor for
-verbose output. If set, and if a verbose fd is not explicitly set,
-then the verbose output will be produced on STDERR_FILENO.
-
-.TP 21
-.B DEBUGINFOD_CACHE_PATH
-This environment variable governs the location of the cache where
-downloaded files are kept. It is cleaned periodically as this
-program is reexecuted. If XDG_CACHE_HOME is set then
-$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise
-$HOME/.cache/debuginfod_client is used.
-
-
.SH "ERRORS"
The following list is not comprehensive. Error codes may also
originate from calls to various C Library functions.
@@ -333,17 +283,16 @@ System is unable to allocate resources.
.TP
.BR ETIME
-Query failed due to timeout. \fB$DEBUGINFOD_TIMEOUT\fP controls
-the timeout duration. See debuginfod(8) for more information.
-
-.SH "FILES"
-.LP
-.PD .1v
-.TP 20
-.B $HOME/.debuginfod_client_cache
-Default cache directory. If XDG_CACHE_HOME is not set then
-\fB$HOME/.cache/debuginfod_client\fP is used.
-.PD
+Query failed due to timeout. \fB$DEBUGINFOD_TIMEOUT\fP and
+\fB$DEBUGINFOD_MAXTIME\fP control this.
+
+.TP
+.BR EF2BIG
+Query aborted due to the file requested being too big. The
+\fB$DEBUGINFOD_MAXSIZE\fP controls this.
+
+.nr zZ 1
+.so man7/debuginfod-client-config.7
.SH "SEE ALSO"
.I "debuginfod(8)"
diff --git a/doc/man3 b/doc/man3
new file mode 120000
index 00000000..945c9b46
--- /dev/null
+++ b/doc/man3
@@ -0,0 +1 @@
+. \ No newline at end of file
diff --git a/doc/man7 b/doc/man7
new file mode 120000
index 00000000..945c9b46
--- /dev/null
+++ b/doc/man7
@@ -0,0 +1 @@
+. \ No newline at end of file
diff --git a/lib/ChangeLog b/lib/ChangeLog
index dd3ebcab..32dda566 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,69 @@
+2022-04-25 Mark Wielaard <mark@klomp.org>
+
+ * printversion.c (print_version): Update copyright year.
+
+2022-03-27 Mark Wielaard <mark@klomp.org>
+
+ * system.h: define error_exit.
+
+2021-02-14 Alexander Miller <alex.miller@gmx.de>
+
+ * eu-config.h (used_in_asm): New macro.
+ (NEW_INTDEF): New macro.
+ (NEW_VERSION): Mark symbol as used_in_asm. Use @@ symver and change
+ asm name instead. New variant using symver attribute if available.
+ (OLD_VERSION): Update new symbol name. Indent asm directives. New
+ variant using symver attribute.
+ (COMPAT_VERSION_NEWPROTO): Mark symbol as used_in_asm. Reorder
+ lines. Replace asm with __asm__ in declaration. New variant using
+ symver attribute.
+ (COMPAT_VERSION): Likewise.
+
+2021-09-10 Colin Cross <ccross@google.com>
+
+ * error.c (error): Call fflush on stdout and stderr. Setup errno and
+ call verr, verrx, vwarn or vwarnx based on status and errnum.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * color.c (parse_opt): Replace asprintf followed by error(EXIT_FAILURE)
+ with xasprintf.
+
+ * xasprintf.c: New file.
+ * Makefile.am (libeu_a_SOURCES): Add it.
+ * libeu.h (xasprintf): New prototype.
+
+ * dynamicsizehash.c (INIT(NAME)): Remove cast of calloc return value.
+ * dynamicsizehash_concurrent.c (INIT(NAME)): Remove cast of malloc
+ return value.
+
+2021-08-23 Saleem Abdulrasool <abdulras@google.com>
+
+ * system.h: Remove inline definition for error and error_message_count
+ in the fallback path.
+ * Makefile.am (libeu_a_SOURCES): Add error.c.
+ * error.c: New file, moves the previous inline definitions to avoid
+ multiple definitions properly rather than relying on -fcommon and vague
+ linkage.
+
+2021-08-21 Saleem Abdulrasool <abdulras@google.com>
+
+ * fixedsizehash.h: Remove unused STROF macro.
+
+2021-08-20 Saleem Abdulrasool <abdulras@google.com>
+
+ * system.h: Check for HAVE_ERROR_H and HAVE_ERR_H and define
+ error_message_cont and error if necessary.
+
+2021-08-20 Saleem Abdulrasool <abdulras@google.com>
+
+ * fixedsizehash.h: Remove sys/cdefs.h include. Unconditionally
+ define STROF and CONCAT macros.
+
+2021-07-28 Mark Wielaard <mark@klomp.org>
+
+ * system.h (reallocarray): New static inline fallback function.
+
2021-04-19 Martin Liska <mliska@suse.cz>
* system.h (startswith): New function.
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 97bf7329..42ddf5ae 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -33,9 +33,9 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf
noinst_LIBRARIES = libeu.a
-libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \
+libeu_a_SOURCES = xasprintf.c xstrdup.c xstrndup.c xmalloc.c next_prime.c \
crc32.c crc32_file.c \
- color.c printversion.c
+ color.c error.c printversion.c
noinst_HEADERS = fixedsizehash.h libeu.h system.h dynamicsizehash.h list.h \
eu-config.h color.h printversion.h bpf.h \
diff --git a/lib/color.c b/lib/color.c
index 454cb7ca..e43b6143 100644
--- a/lib/color.c
+++ b/lib/color.c
@@ -188,10 +188,8 @@ valid arguments are:\n\
if (name_len == known[i].len
&& memcmp (start, known[i].name, name_len) == 0)
{
- if (asprintf (known[i].varp, "\e[%.*sm",
- (int) (env - val), val) < 0)
- error (EXIT_FAILURE, errno,
- _("cannot allocate memory"));
+ *known[i].varp =
+ xasprintf ("\e[%.*sm", (int) (env - val), val);
break;
}
}
diff --git a/lib/dynamicsizehash.c b/lib/dynamicsizehash.c
index f9406eba..76c86dad 100644
--- a/lib/dynamicsizehash.c
+++ b/lib/dynamicsizehash.c
@@ -184,7 +184,7 @@ INIT(NAME) (NAME *htab, size_t init_size)
#ifdef ITERATE
htab->first = NULL;
#endif
- htab->table = (void *) calloc ((init_size + 1), sizeof (htab->table[0]));
+ htab->table = calloc ((init_size + 1), sizeof (htab->table[0]));
if (htab->table == NULL)
return -1;
diff --git a/lib/dynamicsizehash_concurrent.c b/lib/dynamicsizehash_concurrent.c
index 2d53bec6..4e2e2476 100644
--- a/lib/dynamicsizehash_concurrent.c
+++ b/lib/dynamicsizehash_concurrent.c
@@ -355,7 +355,7 @@ INIT(NAME) (NAME *htab, size_t init_size)
pthread_rwlock_init(&htab->resize_rwl, NULL);
- htab->table = (void *) malloc ((init_size + 1) * sizeof (htab->table[0]));
+ htab->table = malloc ((init_size + 1) * sizeof (htab->table[0]));
if (htab->table == NULL)
return -1;
diff --git a/lib/error.c b/lib/error.c
new file mode 100644
index 00000000..5186fc15
--- /dev/null
+++ b/lib/error.c
@@ -0,0 +1,75 @@
+/* Definitions for error fallback functions.
+ Copyright (C) 2021 Google, Inc.
+ 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 copies 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/>. */
+
+#include <config.h>
+
+#if !defined(HAVE_ERROR_H) && defined(HAVE_ERR_H)
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <err.h>
+
+unsigned int error_message_count = 0;
+
+void error(int status, int errnum, const char *format, ...) {
+ va_list argp;
+ int saved_errno = errno;
+
+ fflush (stdout);
+
+ va_start(argp, format);
+ if (status)
+ {
+ if (errnum)
+ {
+ errno = errnum;
+ verr (status, format, argp);
+ }
+ else
+ verrx (status, format, argp);
+ }
+ else
+ {
+ if (errnum)
+ {
+ errno = errnum;
+ vwarn (format, argp);
+ }
+ else
+ vwarnx (format, argp);
+ }
+ va_end(argp);
+
+ fflush (stderr);
+
+ ++error_message_count;
+
+ errno = saved_errno;
+}
+#endif
diff --git a/lib/eu-config.h b/lib/eu-config.h
index f0e3d07a..c7d7cbb2 100644
--- a/lib/eu-config.h
+++ b/lib/eu-config.h
@@ -176,27 +176,68 @@ asm (".section predict_data, \"aw\"; .previous\n"
/* This macro is used by the tests conditionalize for standalone building. */
#define ELFUTILS_HEADER(name) <lib##name.h>
+/* Don't reorder with global asm blocks or optimize away. (Doesn't reliably
+ keep it in the same LTO partition, though; -flto-partition=none may be
+ still needed for some gcc versions < 10.) */
+#ifdef __has_attribute
+# if __has_attribute(no_reorder)
+# define used_in_asm __attribute__ ((externally_visible, no_reorder))
+# endif
+#endif
+#ifndef used_in_asm
+# define used_in_asm /* empty */
+#endif
#ifdef SYMBOL_VERSIONING
-# define OLD_VERSION(name, version) \
- asm (".globl _compat." #version "." #name "\n" \
- "_compat." #version "." #name " = " #name "\n" \
- ".symver _compat." #version "." #name "," #name "@" #version);
-# define NEW_VERSION(name, version) \
- asm (".symver " #name "," #name "@@@" #version);
-# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \
- asm (".symver _compat." #version "." #name "," #name "@" #version); \
+# define NEW_INTDEF(name) __typeof (name) INTUSE(name) \
+ __attribute__ ((alias ("_new." #name))) attribute_hidden;
+# ifdef __has_attribute
+# if __has_attribute(symver)
+# define NEW_VERSION(name, version) \
+ __typeof (name) name __asm__ ("_new." #name) \
+ __attribute__ ((symver (#name "@@" #version)));
+# define OLD_VERSION(name, version) _OLD_VERSION1(name, __COUNTER__, version)
+# define _OLD_VERSION1(name, num, version) _OLD_VERSION2(name, num, version)
+# define _OLD_VERSION2(name, num, version) \
+ __typeof (name) _compat_old##num##_##name \
+ __asm__ ("_compat." #version "." #name) \
+ __attribute__ ((alias ("_new." #name), symver (#name "@" #version)));
+# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \
__typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \
- asm ("_compat." #version "." #name);
-# define COMPAT_VERSION(name, version, prefix) \
+ __asm__ ("_compat." #version "." #name) \
+ __attribute__ ((symver (#name "@" #version)));
+# define COMPAT_VERSION(name, version, prefix) \
asm (".symver _compat." #version "." #name "," #name "@" #version); \
- __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name);
+ __typeof (name) _compat_##prefix##_##name \
+ __asm__ ("_compat." #version "." #name) \
+ __attribute__ ((symver (#name "@" #version)));
+# endif
+# endif
+# ifndef NEW_VERSION
+# define OLD_VERSION(name, version) \
+ asm (".globl _compat." #version "." #name "\n\t" \
+ "_compat." #version "." #name " = _new." #name "\n\t" \
+ ".symver _compat." #version "." #name "," #name "@" #version);
+# define NEW_VERSION(name, version) \
+ __typeof (name) name __asm__ ("_new." #name) used_in_asm; \
+ asm (".symver _new." #name ", " #name "@@" #version);
+# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \
+ __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \
+ __asm__ ("_compat." #version "." #name) used_in_asm; \
+ asm (".symver _compat." #version "." #name ", " #name "@" #version);
+# define COMPAT_VERSION(name, version, prefix) \
+ __typeof (name) _compat_##prefix##_##name \
+ __asm__ ("_compat." #version "." #name) used_in_asm; \
+ asm (".symver _compat." #version "." #name ", " #name "@" #version);
+# endif
#else
+# define NEW_INTDEF(name) INTDEF(name)
# define OLD_VERSION(name, version) /* Nothing for static linking. */
# define NEW_VERSION(name, version) /* Nothing for static linking. */
# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \
error "should use #ifdef SYMBOL_VERSIONING"
-# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SYMBOL_VERSIONING"
+# define COMPAT_VERSION(name, version, prefix) \
+ error "should use #ifdef SYMBOL_VERSIONING"
#endif
#ifndef FALLTHROUGH
diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h
index dac2a5f5..14f0fb88 100644
--- a/lib/fixedsizehash.h
+++ b/lib/fixedsizehash.h
@@ -30,17 +30,11 @@
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/cdefs.h>
#include <system.h>
-#ifdef __CONCAT
-#define CONCAT(t1,t2) __CONCAT (t1,t2)
-#else
-#define STROF(t2) t2
#define CONCAT_EXPANDED(t1,t2) t1 ## t2
#define CONCAT(t1,t2) CONCAT_EXPANDED(t1,t2)
-#endif
/* Before including this file the following macros must be defined:
diff --git a/lib/libeu.h b/lib/libeu.h
index ecb4d011..e849a79e 100644
--- a/lib/libeu.h
+++ b/lib/libeu.h
@@ -39,6 +39,8 @@ extern void *xrealloc (void *, size_t) __attribute__ ((__malloc__));
extern char *xstrdup (const char *) __attribute__ ((__malloc__));
extern char *xstrndup (const char *, size_t) __attribute__ ((__malloc__));
+extern char *xasprintf(const char *fmt, ...)
+ __attribute__ ((format (printf, 1, 2))) __attribute__ ((__malloc__));
extern uint32_t crc32 (uint32_t crc, unsigned char *buf, size_t len);
extern int crc32_file (int fd, uint32_t *resp);
diff --git a/lib/printversion.c b/lib/printversion.c
index adf127d6..f657329c 100644
--- a/lib/printversion.c
+++ b/lib/printversion.c
@@ -41,5 +41,5 @@ print_version (FILE *stream, struct argp_state *state)
Copyright (C) %s The elfutils developers <%s>.\n\
This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2021", PACKAGE_URL);
+"), "2022", PACKAGE_URL);
}
diff --git a/lib/system.h b/lib/system.h
index cdf18ed7..d3f42c91 100644
--- a/lib/system.h
+++ b/lib/system.h
@@ -1,5 +1,6 @@
/* Declarations for common convenience functions.
Copyright (C) 2006-2011 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -29,8 +30,9 @@
#ifndef LIB_SYSTEM_H
#define LIB_SYSTEM_H 1
+#include <config.h>
+
#include <errno.h>
-#include <error.h>
#include <stddef.h>
#include <stdint.h>
#include <sys/param.h>
@@ -38,6 +40,26 @@
#include <byteswap.h>
#include <unistd.h>
#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#if defined(HAVE_ERROR_H)
+#include <error.h>
+#elif defined(HAVE_ERR_H)
+extern int error_message_count;
+void error(int status, int errnum, const char *format, ...);
+#else
+#error "err.h or error.h must be available"
+#endif
+
+/* error (EXIT_FAILURE, ...) should be noreturn but on some systems it
+ isn't. This may cause warnings about code that should not be reachable.
+ So have an explicit error_exit wrapper that is noreturn (because it
+ calls exit explicitly). */
+#define error_exit(errnum,...) do { \
+ error (EXIT_FAILURE,errnum,__VA_ARGS__); \
+ exit (EXIT_FAILURE); \
+ } while (0)
#if __BYTE_ORDER == __LITTLE_ENDIAN
# define LE32(n) (n)
@@ -70,6 +92,19 @@
((void *) ((char *) memcpy (dest, src, n) + (size_t) n))
#endif
+#if !HAVE_DECL_REALLOCARRAY
+static inline void *
+reallocarray (void *ptr, size_t nmemb, size_t size)
+{
+ if (size > 0 && nmemb > SIZE_MAX / size)
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+ return realloc (ptr, nmemb * size);
+}
+#endif
+
/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise. */
static inline int
diff --git a/lib/xasprintf.c b/lib/xasprintf.c
new file mode 100644
index 00000000..179ea2e8
--- /dev/null
+++ b/lib/xasprintf.c
@@ -0,0 +1,52 @@
+/* A wrapper around vasprintf that dies in case of an error.
+ Copyright (c) 2021 Dmitry V. Levin <ldv@altlinux.org>
+ 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 copies 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 <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <libintl.h>
+#include "libeu.h"
+#include "system.h"
+
+char *
+xasprintf (const char *fmt, ...)
+{
+ char *res;
+ va_list ap;
+
+ va_start (ap, fmt);
+ if (unlikely (vasprintf (&res, fmt, ap) < 0))
+ error (EXIT_FAILURE, 0, _("memory exhausted"));
+ va_end(ap);
+
+ return res;
+}
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
index 85e723e6..c65fd21b 100644
--- a/libasm/ChangeLog
+++ b/libasm/ChangeLog
@@ -1,3 +1,17 @@
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * asm_align.c (__libasm_ensure_section_space): Remove casts of calloc
+ return values.
+ * asm_begin.c (asm_begin): Remove cast of malloc return value.
+ * asm_fill.c (asm_fill): Likewise.
+ * asm_newabssym.c (asm_newabssym): Likewise.
+ * asm_newcomsym.c (asm_newcomsym): Likewise.
+ * asm_newscn.c (asm_newscn): Likewise.
+ * asm_newscngrp.c (asm_newscngrp): Likewise.
+ * asm_newsubscn.c (asm_newsubscn): Likewise.
+ * asm_newsym.c (asm_newsym): Likewise.
+ * disasm_begin.c (disasm_begin): Likewise.
+
2021-04-19 Martin Liska <mliska@suse.cz>
* libasmP.h (asm_emit_symbol_p): Use startswith.
diff --git a/libasm/asm_align.c b/libasm/asm_align.c
index c8c671b2..3a976756 100644
--- a/libasm/asm_align.c
+++ b/libasm/asm_align.c
@@ -143,8 +143,7 @@ __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len)
/* This is the first block. */
size = MAX (2 * len, 960);
- asmscn->content = (struct AsmData *) calloc (1, sizeof (struct AsmData)
- + size);
+ asmscn->content = calloc (1, sizeof (struct AsmData) + size);
if (asmscn->content == NULL)
return -1;
@@ -160,7 +159,7 @@ __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len)
size = MAX (2 *len, MIN (32768, 2 * asmscn->offset));
- newp = (struct AsmData *) calloc (1, sizeof (struct AsmData) + size);
+ newp = calloc (1, sizeof (struct AsmData) + size);
if (newp == NULL)
return -1;
diff --git a/libasm/asm_begin.c b/libasm/asm_begin.c
index 1df2d4ea..a190202c 100644
--- a/libasm/asm_begin.c
+++ b/libasm/asm_begin.c
@@ -138,8 +138,7 @@ asm_begin (const char *fname, Ebl *ebl, bool textp)
right away. Instead we create a temporary file in the same
directory which, if everything goes alright, will replace a
possibly existing file with the given name. */
- AsmCtx_t *result
- = (AsmCtx_t *) malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9);
+ AsmCtx_t *result = malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9);
if (result == NULL)
return NULL;
diff --git a/libasm/asm_fill.c b/libasm/asm_fill.c
index 62d9d732..783555ee 100644
--- a/libasm/asm_fill.c
+++ b/libasm/asm_fill.c
@@ -54,8 +54,7 @@ asm_fill (AsmScn_t *asmscn, void *bytes, size_t len)
else
{
/* Allocate appropriate memory. */
- pattern = (struct FillPattern *) malloc (sizeof (struct FillPattern)
- + len);
+ pattern = malloc (sizeof (struct FillPattern) + len);
if (pattern == NULL)
return -1;
diff --git a/libasm/asm_newabssym.c b/libasm/asm_newabssym.c
index 34fef3e3..728d6043 100644
--- a/libasm/asm_newabssym.c
+++ b/libasm/asm_newabssym.c
@@ -71,7 +71,7 @@ asm_newabssym (AsmCtx_t *ctx, const char *name, GElf_Xword size,
rwlock_wrlock (ctx->lock);
- result = (AsmSym_t *) malloc (sizeof (AsmSym_t));
+ result = malloc (sizeof (AsmSym_t));
if (result == NULL)
return NULL;
diff --git a/libasm/asm_newcomsym.c b/libasm/asm_newcomsym.c
index ee3b6966..750a1380 100644
--- a/libasm/asm_newcomsym.c
+++ b/libasm/asm_newcomsym.c
@@ -71,7 +71,7 @@ asm_newcomsym (AsmCtx_t *ctx, const char *name, GElf_Xword size,
rwlock_wrlock (ctx->lock);
- result = (AsmSym_t *) malloc (sizeof (AsmSym_t));
+ result = malloc (sizeof (AsmSym_t));
if (result == NULL)
return NULL;
diff --git a/libasm/asm_newscn.c b/libasm/asm_newscn.c
index 7cdf484f..1150015f 100644
--- a/libasm/asm_newscn.c
+++ b/libasm/asm_newscn.c
@@ -181,7 +181,7 @@ asm_newscn (AsmCtx_t *ctx, const char *scnname, GElf_Word type,
rwlock_wrlock (ctx->lock);
/* This is a new section. */
- result = (AsmScn_t *) malloc (sizeof (AsmScn_t) + scnname_len);
+ result = malloc (sizeof (AsmScn_t) + scnname_len);
if (result != NULL)
{
/* Add the name. */
diff --git a/libasm/asm_newscngrp.c b/libasm/asm_newscngrp.c
index 80757a9a..0ca87fba 100644
--- a/libasm/asm_newscngrp.c
+++ b/libasm/asm_newscngrp.c
@@ -57,7 +57,7 @@ asm_newscngrp (AsmCtx_t *ctx, const char *grpname, AsmSym_t *signature,
return NULL;
}
- result = (AsmScnGrp_t *) malloc (sizeof (AsmScnGrp_t) + grpname_len);
+ result = malloc (sizeof (AsmScnGrp_t) + grpname_len);
if (result == NULL)
return NULL;
diff --git a/libasm/asm_newsubscn.c b/libasm/asm_newsubscn.c
index 906240ac..2f2ba78e 100644
--- a/libasm/asm_newsubscn.c
+++ b/libasm/asm_newsubscn.c
@@ -62,7 +62,7 @@ asm_newsubscn (AsmScn_t *asmscn, unsigned int nr)
runp = runp->subnext;
}
- newp = (AsmScn_t *) malloc (sizeof (AsmScn_t));
+ newp = malloc (sizeof (AsmScn_t));
if (newp == NULL)
return NULL;
diff --git a/libasm/asm_newsym.c b/libasm/asm_newsym.c
index 53891668..a89ee129 100644
--- a/libasm/asm_newsym.c
+++ b/libasm/asm_newsym.c
@@ -73,7 +73,7 @@ asm_newsym (AsmScn_t *asmscn, const char *name, GElf_Xword size,
size_t name_len = strlen (name) + 1;
- result = (AsmSym_t *) malloc (sizeof (AsmSym_t) + name_len);
+ result = malloc (sizeof (AsmSym_t) + name_len);
if (result == NULL)
return NULL;
diff --git a/libasm/disasm_begin.c b/libasm/disasm_begin.c
index d00852b7..cb10f66e 100644
--- a/libasm/disasm_begin.c
+++ b/libasm/disasm_begin.c
@@ -49,7 +49,7 @@ disasm_begin (Ebl *ebl, Elf *elf, DisasmGetSymCB_t symcb)
return NULL;
}
- DisasmCtx_t *ctx = (DisasmCtx_t *) malloc (sizeof (DisasmCtx_t));
+ DisasmCtx_t *ctx = malloc (sizeof (DisasmCtx_t));
if (ctx == NULL)
{
__libasm_seterrno (ASM_E_NOMEM);
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
index 7cca9419..48fbba19 100644
--- a/libcpu/ChangeLog
+++ b/libcpu/ChangeLog
@@ -1,3 +1,8 @@
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (GENDIS_ENV): New variable, depends on
+ USE_ADDRESS_SANITIZER.
+
2020-12-20 Dmitry V. Levin <ldv@altlinux.org>
* .gitignore: New file.
diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am
index c8e94507..b1a3bce4 100644
--- a/libcpu/Makefile.am
+++ b/libcpu/Makefile.am
@@ -61,8 +61,16 @@ noinst_HEADERS += memory-access.h i386_parse.h i386_data.h
noinst_PROGRAMS = i386_gendis$(EXEEXT)
+# i386_gendis doesn't clean up, ignore leaks.
+# It is just a build tool to generate source in maintainer mode.
+if USE_ADDRESS_SANITIZER
+GENDIS_ENV=env ASAN_OPTIONS=detect_leaks=0
+else
+GENDIS_ENV=
+endif
+
$(srcdir)/%_dis.h: %_defs i386_gendis$(EXEEXT)
- $(AM_V_GEN)./i386_gendis$(EXEEXT) $< > $@T
+ $(AM_V_GEN) $(GENDIS_ENV) ./i386_gendis$(EXEEXT) $< > $@T
$(AM_V_at)mv -f $@T $@
else
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index b5462ef4..631f2f2a 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,76 @@
+2022-04-16 Mark Wielaard <mark@klomp.org>
+
+ * libdwP.h: Remove atomics.h include.
+
+2022-04-13 Mark Wielaard <mark@klomp.org>
+
+ * dwarf.h: Add DWARF5 package file section identifiers,
+ DW_SECT_*.
+
+2021-10-20 John M Mellor-Crummey <johnmc@rice.edu>
+
+ * dwarf_linecontext.c: New file.
+ * dwarf_linefunctionname.c: Likewise.
+ * Makefile.am (libdw_a_SOURCES): Add dwarf_linecontext.c and
+ dwarf_linefunctionname.c
+ * dwarf.h: Add DW_LNE_NVIDIA_inlined_call and
+ DW_LNE_NVIDIA_set_function_name.
+ * dwarf_getsrclines.c (struct line_state): Add context and
+ function_name fields.
+ (add_new_line): Set context and function_name.
+ (MAX_STACK_LINES): Reduce to MAX_STACK_ALLOC / 2.
+ (read_srclines): Initialize context and function_name. Try to
+ read debug_str_offset if available. Handle
+ DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name.
+ * libdw.h (dwarf_linecontext): New declaration.
+ (dwarf_linefunctionname): Likewise.
+ * libdw.map (ELFUTILS_0.186): New section.
+
+2021-11-08 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_begin_elf.c (scn_dwarf_type): New function.
+ (check_section): Check result->type.
+ (global_read): First check type.
+ (scngrp_read): Likewise.
+ * libdw/libdwP.h (enum dwarf_type): New enumeration.
+ (struct Dwarf): New field type.
+
+2021-02-14 Alexander Miller <alex.miller@gmx.de>
+
+ * dwarf_aggregate_size.c (dwarf_aggregate_size): Move NEW_VERSION
+ before definition. Replace INTDEF with NEW_INTDEF.
+ * dwarf_srclang.c (dwarf_srclang): Likewise.
+ * dwarf_arrayorder.c (dwarf_arrayorder): Move NEW_VERSION.
+ * dwarf_bitoffset.c (dwarf_bitoffset): Likewise.
+ * dwarf_bitsize.c (dwarf_bitsize): Likewise.
+ * dwarf_bytesize.c (dwarf_bytesize): Likewise.
+ * dwarf_decl_column.c (dwarf_decl_column): Likewise.
+
+2021-10-18 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_aggregate_size.c (get_type): Don't pass NULL to
+ dwarf_peel_type.
+
+2021-10-06 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_aggregate_size.c (array_size): Check signedness of child DIE
+ type. Use dwarf_formsdata or dwarf_formudata to get the lower and
+ upper bounds.
+
+2021-09-08 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_begin_elf.c (valid_p): Identify ELF class and use this to set
+ address_size of the fake CUs. Also set offset_size and DWARF version.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * dwarf_begin_elf.c (valid_p): Remove casts of malloc return values.
+ (dwarf_begin_elf): Remove cast of calloc return value.
+ * dwarf_getpubnames.c (get_offsets): Remove casts of realloc return
+ values.
+ * dwarf_getsrclines.c (read_srclines): Remove cast of malloc return
+ value.
+
2021-04-19 Martin Liska <mliska@suse.cz>
* dwarf_begin_elf.c (check_section): Use startswith.
diff --git a/libdw/Makefile.am b/libdw/Makefile.am
index 8906b61a..6c7bc289 100644
--- a/libdw/Makefile.am
+++ b/libdw/Makefile.am
@@ -64,6 +64,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \
dwarf_linesrc.c dwarf_lineno.c dwarf_lineaddr.c \
dwarf_linecol.c dwarf_linebeginstatement.c \
dwarf_lineendsequence.c dwarf_lineblock.c \
+ dwarf_linecontext.c dwarf_linefunctionname.c \
dwarf_lineprologueend.c dwarf_lineepiloguebegin.c \
dwarf_lineisa.c dwarf_linediscriminator.c \
dwarf_lineop_index.c dwarf_line_file.c \
diff --git a/libdw/dwarf.h b/libdw/dwarf.h
index 19a4be96..c961bc36 100644
--- a/libdw/dwarf.h
+++ b/libdw/dwarf.h
@@ -844,6 +844,10 @@ enum
DW_LNE_set_discriminator = 4,
DW_LNE_lo_user = 128,
+
+ DW_LNE_NVIDIA_inlined_call = 144,
+ DW_LNE_NVIDIA_set_function_name = 145,
+
DW_LNE_hi_user = 255
};
@@ -930,6 +934,19 @@ enum
DW_LLE_GNU_start_length_entry = 0x3
};
+/* DWARF5 package file section identifiers. */
+enum
+ {
+ DW_SECT_INFO = 1,
+ /* Reserved = 2, */
+ DW_SECT_ABBREV = 3,
+ DW_SECT_LINE = 4,
+ DW_SECT_LOCLISTS = 5,
+ DW_SECT_STR_OFFSETS = 6,
+ DW_SECT_MACRO = 7,
+ DW_SECT_RNGLISTS = 8,
+ };
+
/* DWARF call frame instruction encodings. */
enum
diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c
index 75105e4d..8216ae42 100644
--- a/libdw/dwarf_aggregate_size.c
+++ b/libdw/dwarf_aggregate_size.c
@@ -40,7 +40,7 @@ get_type (Dwarf_Die *die, Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem)
Dwarf_Die *type = INTUSE(dwarf_formref_die)
(INTUSE(dwarf_attr_integrate) (die, DW_AT_type, attr_mem), type_mem);
- if (INTUSE(dwarf_peel_type) (type, type) != 0)
+ if (type == NULL || INTUSE(dwarf_peel_type) (type, type) != 0)
return NULL;
return type;
@@ -83,19 +83,51 @@ array_size (Dwarf_Die *die, Dwarf_Word *size,
}
else
{
+ bool is_signed = true;
+ if (INTUSE(dwarf_attr) (get_type (&child, attr_mem, &type_mem),
+ DW_AT_encoding, attr_mem) != NULL)
+ {
+ Dwarf_Word encoding;
+ if (INTUSE(dwarf_formudata) (attr_mem, &encoding) == 0)
+ is_signed = (encoding == DW_ATE_signed
+ || encoding == DW_ATE_signed_char);
+ }
+
Dwarf_Sword upper;
Dwarf_Sword lower;
- if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate)
- (&child, DW_AT_upper_bound,
- attr_mem), &upper) != 0)
- return -1;
+ if (is_signed)
+ {
+ if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate)
+ (&child, DW_AT_upper_bound,
+ attr_mem), &upper) != 0)
+ return -1;
+ }
+ else
+ {
+ Dwarf_Word unsigned_upper;
+ if (INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate)
+ (&child, DW_AT_upper_bound,
+ attr_mem), &unsigned_upper) != 0)
+ return -1;
+ upper = unsigned_upper;
+ }
/* Having DW_AT_lower_bound is optional. */
if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_lower_bound,
attr_mem) != NULL)
{
- if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0)
- return -1;
+ if (is_signed)
+ {
+ if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0)
+ return -1;
+ }
+ else
+ {
+ Dwarf_Word unsigned_lower;
+ if (INTUSE(dwarf_formudata) (attr_mem, &unsigned_lower) != 0)
+ return -1;
+ lower = unsigned_lower;
+ }
}
else
{
@@ -209,6 +241,7 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size,
return -1;
}
+NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161)
int
dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size)
{
@@ -219,6 +252,5 @@ dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size)
return aggregate_size (&die_mem, size, &type_mem, 0);
}
-INTDEF (dwarf_aggregate_size)
+NEW_INTDEF (dwarf_aggregate_size)
OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144)
-NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161)
diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c
index da64f992..782e075c 100644
--- a/libdw/dwarf_arrayorder.c
+++ b/libdw/dwarf_arrayorder.c
@@ -35,6 +35,7 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143)
int
dwarf_arrayorder (Dwarf_Die *die)
{
@@ -46,4 +47,3 @@ dwarf_arrayorder (Dwarf_Die *die)
&value) == 0 ? (int) value : -1;
}
OLD_VERSION (dwarf_arrayorder, ELFUTILS_0.122)
-NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143)
diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
index 9e944b86..a48dada6 100644
--- a/libdw/dwarf_begin_elf.c
+++ b/libdw/dwarf_begin_elf.c
@@ -72,6 +72,31 @@ static const char dwarf_scnnames[IDX_last][19] =
};
#define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0]))
+static enum dwarf_type
+scn_dwarf_type (Dwarf *result, size_t shstrndx, Elf_Scn *scn)
+{
+ GElf_Shdr shdr_mem;
+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr == NULL)
+ return TYPE_UNKNOWN;
+
+ const char *scnname = elf_strptr (result->elf, shstrndx,
+ shdr->sh_name);
+ if (scnname != NULL)
+ {
+ if (startswith (scnname, ".gnu.debuglto_.debug"))
+ return TYPE_GNU_LTO;
+ else if (startswith (scnname, ".debug_") || startswith (scnname, ".zdebug_"))
+ {
+ size_t len = strlen (scnname);
+ if (strcmp (scnname + len - 4, ".dwo") == 0)
+ return TYPE_DWO;
+ else
+ return TYPE_PLAIN;
+ }
+ }
+ return TYPE_UNKNOWN;
+}
static Dwarf *
check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp)
{
@@ -116,7 +141,11 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp)
return NULL;
}
- /* Recognize the various sections. Most names start with .debug_. */
+ /* Recognize the various sections. Most names start with .debug_.
+ They might be compressed (and start with .z). Or end with .dwo
+ for split dwarf sections. Or start with .gnu.debuglto_ for
+ LTO debug sections. We should only use one consistent set at
+ a time. We prefer PLAIN over DWO over LTO. */
size_t cnt;
bool gnu_compressed = false;
for (cnt = 0; cnt < ndwarf_scnnames; ++cnt)
@@ -127,7 +156,15 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp)
&& (dbglen == scnlen
|| (scnlen == dbglen + 4
&& strstr (scnname, ".dwo") == scnname + dbglen)))
- break;
+ {
+ if (dbglen == scnlen)
+ {
+ if (result->type == TYPE_PLAIN)
+ break;
+ }
+ else if (result->type == TYPE_DWO)
+ break;
+ }
else if (scnname[0] == '.' && scnname[1] == 'z'
&& (strncmp (&scnname[2], &dwarf_scnnames[cnt][1],
dbglen - 1) == 0
@@ -136,13 +173,27 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp)
&& strstr (scnname,
".dwo") == scnname + dbglen + 1))))
{
- gnu_compressed = true;
- break;
+ if (scnlen == dbglen + 1)
+ {
+ if (result->type == TYPE_PLAIN)
+ {
+ gnu_compressed = true;
+ break;
+ }
+ }
+ else if (result->type <= TYPE_DWO)
+ {
+ gnu_compressed = true;
+ break;
+ }
}
else if (scnlen > 14 /* .gnu.debuglto_ prefix. */
&& startswith (scnname, ".gnu.debuglto_")
&& strcmp (&scnname[14], dwarf_scnnames[cnt]) == 0)
- break;
+ {
+ if (result->type == TYPE_GNU_LTO)
+ break;
+ }
}
if (cnt >= ndwarf_scnnames)
@@ -224,12 +275,29 @@ valid_p (Dwarf *result)
result = NULL;
}
+ /* We are setting up some "fake" CUs, which need an address size.
+ Check the ELF class to come up with something reasonable. */
+ int elf_addr_size = 8;
+ if (result != NULL)
+ {
+ GElf_Ehdr ehdr;
+ if (gelf_getehdr (result->elf, &ehdr) == NULL)
+ {
+ Dwarf_Sig8_Hash_free (&result->sig8_hash);
+ __libdw_seterrno (DWARF_E_INVALID_ELF);
+ free (result);
+ result = NULL;
+ }
+ else if (ehdr.e_ident[EI_CLASS] == ELFCLASS32)
+ elf_addr_size = 4;
+ }
+
/* For dwarf_location_attr () we need a "fake" CU to indicate
where the "fake" attribute data comes from. This is a block
inside the .debug_loc or .debug_loclists section. */
if (result != NULL && result->sectiondata[IDX_debug_loc] != NULL)
{
- result->fake_loc_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU));
+ result->fake_loc_cu = malloc (sizeof (Dwarf_CU));
if (unlikely (result->fake_loc_cu == NULL))
{
Dwarf_Sig8_Hash_free (&result->sig8_hash);
@@ -247,15 +315,16 @@ valid_p (Dwarf *result)
= (result->sectiondata[IDX_debug_loc]->d_buf
+ result->sectiondata[IDX_debug_loc]->d_size);
result->fake_loc_cu->locs = NULL;
- result->fake_loc_cu->address_size = 0;
- result->fake_loc_cu->version = 0;
+ result->fake_loc_cu->address_size = elf_addr_size;
+ result->fake_loc_cu->offset_size = 4;
+ result->fake_loc_cu->version = 4;
result->fake_loc_cu->split = NULL;
}
}
if (result != NULL && result->sectiondata[IDX_debug_loclists] != NULL)
{
- result->fake_loclists_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU));
+ result->fake_loclists_cu = malloc (sizeof (Dwarf_CU));
if (unlikely (result->fake_loclists_cu == NULL))
{
Dwarf_Sig8_Hash_free (&result->sig8_hash);
@@ -274,8 +343,9 @@ valid_p (Dwarf *result)
= (result->sectiondata[IDX_debug_loclists]->d_buf
+ result->sectiondata[IDX_debug_loclists]->d_size);
result->fake_loclists_cu->locs = NULL;
- result->fake_loclists_cu->address_size = 0;
- result->fake_loclists_cu->version = 0;
+ result->fake_loclists_cu->address_size = elf_addr_size;
+ result->fake_loclists_cu->offset_size = 4;
+ result->fake_loclists_cu->version = 5;
result->fake_loclists_cu->split = NULL;
}
}
@@ -286,7 +356,7 @@ valid_p (Dwarf *result)
inside the .debug_addr section, if it exists. */
if (result != NULL && result->sectiondata[IDX_debug_addr] != NULL)
{
- result->fake_addr_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU));
+ result->fake_addr_cu = malloc (sizeof (Dwarf_CU));
if (unlikely (result->fake_addr_cu == NULL))
{
Dwarf_Sig8_Hash_free (&result->sig8_hash);
@@ -306,8 +376,9 @@ valid_p (Dwarf *result)
= (result->sectiondata[IDX_debug_addr]->d_buf
+ result->sectiondata[IDX_debug_addr]->d_size);
result->fake_addr_cu->locs = NULL;
- result->fake_addr_cu->address_size = 0;
- result->fake_addr_cu->version = 0;
+ result->fake_addr_cu->address_size = elf_addr_size;
+ result->fake_addr_cu->offset_size = 4;
+ result->fake_addr_cu->version = 5;
result->fake_addr_cu->split = NULL;
}
}
@@ -324,6 +395,16 @@ global_read (Dwarf *result, Elf *elf, size_t shstrndx)
{
Elf_Scn *scn = NULL;
+ /* First check the type (PLAIN, DWO, LTO) we are looking for. We
+ prefer PLAIN if available over DWO, over LTO. */
+ while ((scn = elf_nextscn (elf, scn)) != NULL && result->type != TYPE_PLAIN)
+ {
+ enum dwarf_type type = scn_dwarf_type (result, shstrndx, scn);
+ if (type > result->type)
+ result->type = type;
+ }
+
+ scn = NULL;
while (result != NULL && (scn = elf_nextscn (elf, scn)) != NULL)
result = check_section (result, shstrndx, scn, false);
@@ -368,6 +449,9 @@ scngrp_read (Dwarf *result, Elf *elf, size_t shstrndx, Elf_Scn *scngrp)
represent section indices. The first word is a flag word. */
Elf32_Word *scnidx = (Elf32_Word *) data->d_buf;
size_t cnt;
+
+ /* First check the type (PLAIN, DWO, LTO) we are looking for. We
+ prefer PLAIN if available over DWO, over LTO. */
for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size; ++cnt)
{
Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]);
@@ -381,6 +465,15 @@ scngrp_read (Dwarf *result, Elf *elf, size_t shstrndx, Elf_Scn *scngrp)
return NULL;
}
+ enum dwarf_type type = scn_dwarf_type (result, shstrndx, scn);
+ if (type > result->type)
+ result->type = type;
+ }
+
+ for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size && result != NULL; ++cnt)
+ {
+ Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]);
+ assert (scn != NULL); // checked above
result = check_section (result, shstrndx, scn, true);
if (result == NULL)
break;
@@ -415,7 +508,7 @@ dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp)
assert (sizeof (struct Dwarf) < mem_default_size);
/* Allocate the data structure. */
- Dwarf *result = (Dwarf *) calloc (1, sizeof (Dwarf));
+ Dwarf *result = calloc (1, sizeof (Dwarf));
if (unlikely (result == NULL)
|| unlikely (Dwarf_Sig8_Hash_init (&result->sig8_hash, 11) < 0))
{
diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c
index c1a3a343..61a0d593 100644
--- a/libdw/dwarf_bitoffset.c
+++ b/libdw/dwarf_bitoffset.c
@@ -35,6 +35,7 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143)
int
dwarf_bitoffset (Dwarf_Die *die)
{
@@ -46,4 +47,3 @@ dwarf_bitoffset (Dwarf_Die *die)
&value) == 0 ? (int) value : -1;
}
OLD_VERSION (dwarf_bitoffset, ELFUTILS_0.122)
-NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143)
diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c
index 0ed9b710..35e8744c 100644
--- a/libdw/dwarf_bitsize.c
+++ b/libdw/dwarf_bitsize.c
@@ -35,6 +35,7 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143)
int
dwarf_bitsize (Dwarf_Die *die)
{
@@ -46,4 +47,3 @@ dwarf_bitsize (Dwarf_Die *die)
&value) == 0 ? (int) value : -1;
}
OLD_VERSION (dwarf_bitsize, ELFUTILS_0.122)
-NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143)
diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c
index 116cd321..6d1ff9ae 100644
--- a/libdw/dwarf_bytesize.c
+++ b/libdw/dwarf_bytesize.c
@@ -35,6 +35,7 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143)
int
dwarf_bytesize (Dwarf_Die *die)
{
@@ -46,4 +47,3 @@ dwarf_bytesize (Dwarf_Die *die)
&value) == 0 ? (int) value : -1;
}
OLD_VERSION (dwarf_bytesize, ELFUTILS_0.122)
-NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143)
diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c
index 08d36b87..3225fd18 100644
--- a/libdw/dwarf_decl_column.c
+++ b/libdw/dwarf_decl_column.c
@@ -35,10 +35,10 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143)
int
dwarf_decl_column (Dwarf_Die *decl, int *colp)
{
return __libdw_attr_intval (decl, colp, DW_AT_decl_column);
}
OLD_VERSION (dwarf_decl_column, ELFUTILS_0.122)
-NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143)
diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c
index d4aa0a18..75662a33 100644
--- a/libdw/dwarf_decl_file.c
+++ b/libdw/dwarf_decl_file.c
@@ -36,6 +36,7 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143)
const char *
dwarf_decl_file (Dwarf_Die *die)
{
@@ -86,4 +87,3 @@ dwarf_decl_file (Dwarf_Die *die)
return cu->files->info[idx].name;
}
OLD_VERSION (dwarf_decl_file, ELFUTILS_0.122)
-NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143)
diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c
index 80fae6c9..6b31eebe 100644
--- a/libdw/dwarf_decl_line.c
+++ b/libdw/dwarf_decl_line.c
@@ -37,13 +37,13 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143)
int
dwarf_decl_line (Dwarf_Die *func, int *linep)
{
return __libdw_attr_intval (func, linep, DW_AT_decl_line);
}
OLD_VERSION (dwarf_decl_line, ELFUTILS_0.122)
-NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143)
int internal_function
diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c
index 25600f33..de726407 100644
--- a/libdw/dwarf_getpubnames.c
+++ b/libdw/dwarf_getpubnames.c
@@ -57,8 +57,7 @@ get_offsets (Dwarf *dbg)
if (cnt >= allocated)
{
allocated = MAX (10, 2 * allocated);
- struct pubnames_s *newmem
- = (struct pubnames_s *) realloc (mem, allocated * entsize);
+ struct pubnames_s *newmem = realloc (mem, allocated * entsize);
if (newmem == NULL)
{
__libdw_seterrno (DWARF_E_NOMEM);
@@ -132,7 +131,7 @@ get_offsets (Dwarf *dbg)
return -1;
}
- dbg->pubnames_sets = (struct pubnames_s *) realloc (mem, cnt * entsize);
+ dbg->pubnames_sets = realloc (mem, cnt * entsize);
dbg->pubnames_nsets = cnt;
return 0;
diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
index d6a581ad..2c1d7a40 100644
--- a/libdw/dwarf_getsrclines.c
+++ b/libdw/dwarf_getsrclines.c
@@ -93,6 +93,8 @@ struct line_state
struct linelist *linelist;
size_t nlinelist;
unsigned int end_sequence;
+ unsigned int context;
+ unsigned int function_name;
};
static inline void
@@ -139,6 +141,8 @@ add_new_line (struct line_state *state, struct linelist *new_line)
SET (epilogue_begin);
SET (isa);
SET (discriminator);
+ SET (context);
+ SET (function_name);
#undef SET
@@ -161,7 +165,7 @@ read_srclines (Dwarf *dbg,
the stack. Stack allocate some entries, only dynamically malloc
when more than MAX. */
#define MAX_STACK_ALLOC 4096
-#define MAX_STACK_LINES MAX_STACK_ALLOC
+#define MAX_STACK_LINES (MAX_STACK_ALLOC / 2)
#define MAX_STACK_FILES (MAX_STACK_ALLOC / 4)
#define MAX_STACK_DIRS (MAX_STACK_ALLOC / 16)
@@ -180,7 +184,9 @@ read_srclines (Dwarf *dbg,
.prologue_end = false,
.epilogue_begin = false,
.isa = 0,
- .discriminator = 0
+ .discriminator = 0,
+ .context = 0,
+ .function_name = 0
};
/* The dirs normally go on the stack, but if there are too many
@@ -372,7 +378,7 @@ read_srclines (Dwarf *dbg,
{
if (ndirlist > SIZE_MAX / sizeof (*dirarray))
goto no_mem;
- dirarray = (struct dirlist *) malloc (ndirlist * sizeof (*dirarray));
+ dirarray = malloc (ndirlist * sizeof (*dirarray));
if (unlikely (dirarray == NULL))
{
no_mem:
@@ -648,6 +654,13 @@ read_srclines (Dwarf *dbg,
}
}
+ unsigned int debug_str_offset = 0;
+ if (unlikely (linep == header_start + header_length - 4))
+ {
+ /* CUBINs contain an unsigned 4-byte offset */
+ debug_str_offset = read_4ubyte_unaligned_inc (dbg, linep);
+ }
+
/* Consistency check. */
if (unlikely (linep != header_start + header_length))
{
@@ -753,6 +766,8 @@ read_srclines (Dwarf *dbg,
state.epilogue_begin = false;
state.isa = 0;
state.discriminator = 0;
+ state.context = 0;
+ state.function_name = 0;
break;
case DW_LNE_set_address:
@@ -831,6 +846,23 @@ read_srclines (Dwarf *dbg,
get_uleb128 (state.discriminator, linep, lineendp);
break;
+ case DW_LNE_NVIDIA_inlined_call:
+ if (unlikely (linep >= lineendp))
+ goto invalid_data;
+ get_uleb128 (state.context, linep, lineendp);
+ if (unlikely (linep >= lineendp))
+ goto invalid_data;
+ get_uleb128 (state.function_name, linep, lineendp);
+ state.function_name += debug_str_offset;
+ break;
+
+ case DW_LNE_NVIDIA_set_function_name:
+ if (unlikely (linep >= lineendp))
+ goto invalid_data;
+ get_uleb128 (state.function_name, linep, lineendp);
+ state.function_name += debug_str_offset;
+ break;
+
default:
/* Unknown, ignore it. */
if (unlikely ((size_t) (lineendp - (linep - 1)) < len))
diff --git a/libdw/dwarf_linecontext.c b/libdw/dwarf_linecontext.c
new file mode 100644
index 00000000..84572e22
--- /dev/null
+++ b/libdw/dwarf_linecontext.c
@@ -0,0 +1,45 @@
+/* Return context in line.
+ This file is part of elfutils.
+ Written by John Mellor-Crummey <johnmc@rice.edu>, 2021.
+
+ 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 copies 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 "libdwP.h"
+
+
+Dwarf_Line*
+dwarf_linecontext (Dwarf_Lines* lines, Dwarf_Line *line)
+{
+ if (lines == NULL || line == NULL)
+ return NULL;
+ if (line->context == 0 || line->context >= lines->nlines)
+ return NULL;
+
+ return lines->info + (line->context - 1);
+}
diff --git a/libdw/dwarf_linefunctionname.c b/libdw/dwarf_linefunctionname.c
new file mode 100644
index 00000000..e194d212
--- /dev/null
+++ b/libdw/dwarf_linefunctionname.c
@@ -0,0 +1,52 @@
+/* Return function name in line.
+ This file is part of elfutils.
+ Written by John Mellor-Crummey <johnmc@rice.edu>, 2021.
+
+ 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 copies 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 <string.h>
+#include "libdwP.h"
+
+
+const char *
+dwarf_linefunctionname (Dwarf *dbg, Dwarf_Line *line)
+{
+ if (dbg == NULL || line == NULL)
+ return NULL;
+ if (line->context == 0)
+ return NULL;
+
+ Elf_Data *str_data = dbg->sectiondata[IDX_debug_str];
+ if (str_data == NULL || line->function_name >= str_data->d_size
+ || memchr (str_data->d_buf + line->function_name, '\0',
+ str_data->d_size - line->function_name) == NULL)
+ return NULL;
+
+ return (char *) str_data->d_buf + line->function_name;
+}
diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c
index f10e7642..77bd58c2 100644
--- a/libdw/dwarf_srclang.c
+++ b/libdw/dwarf_srclang.c
@@ -35,6 +35,7 @@
#include "libdwP.h"
+NEW_VERSION (dwarf_srclang, ELFUTILS_0.143)
int
dwarf_srclang (Dwarf_Die *die)
{
@@ -45,6 +46,5 @@ dwarf_srclang (Dwarf_Die *die)
(die, DW_AT_language, &attr_mem),
&value) == 0 ? (int) value : -1;
}
-INTDEF (dwarf_srclang)
+NEW_INTDEF (dwarf_srclang)
OLD_VERSION (dwarf_srclang, ELFUTILS_0.122)
-NEW_VERSION (dwarf_srclang, ELFUTILS_0.143)
diff --git a/libdw/libdw.h b/libdw/libdw.h
index 77174d28..64d1689a 100644
--- a/libdw/libdw.h
+++ b/libdw/libdw.h
@@ -701,6 +701,15 @@ extern int dwarf_linediscriminator (Dwarf_Line *line, unsigned int *discp)
extern const char *dwarf_linesrc (Dwarf_Line *line,
Dwarf_Word *mtime, Dwarf_Word *length);
+/* Return the caller of this line if inlined. If not inlined,
+ return NULL. */
+extern Dwarf_Line *dwarf_linecontext (Dwarf_Lines *lines, Dwarf_Line *line);
+
+/* Return the function name in this line record. If this line is
+ inlined, this is the name of the function that was inlined. If this line
+ is not inlined, return NULL. */
+extern const char *dwarf_linefunctionname (Dwarf *dbg, Dwarf_Line *line);
+
/* Return file information. The returned string is NULL when
an error occurred, or the file path. The file path is either absolute
or relative to the compilation directory. See dwarf_decl_file. */
diff --git a/libdw/libdw.map b/libdw/libdw.map
index 8ab0a2a0..4f530378 100644
--- a/libdw/libdw.map
+++ b/libdw/libdw.map
@@ -360,3 +360,9 @@ ELFUTILS_0.177 {
# presume that NULL is only returned on error (otherwise ELF_K_NONE).
dwelf_elf_begin;
} ELFUTILS_0.175;
+
+ELFUTILS_0.186 {
+ global:
+ dwarf_linecontext;
+ dwarf_linefunctionname;
+} ELFUTILS_0.177;
diff --git a/libdw/libdwP.h b/libdw/libdwP.h
index 7174ea93..56b388c1 100644
--- a/libdw/libdwP.h
+++ b/libdw/libdwP.h
@@ -35,7 +35,6 @@
#include <libdw.h>
#include <dwarf.h>
-#include "atomics.h"
/* Known location expressions already decoded. */
@@ -145,6 +144,16 @@ enum
#include "dwarf_sig8_hash.h"
+/* The type of Dwarf object, sorted by preference
+ (if there is a higher order type, we pick that one over the others). */
+enum dwarf_type
+ {
+ TYPE_UNKNOWN = 0,
+ TYPE_GNU_LTO = 16,
+ TYPE_DWO = 32,
+ TYPE_PLAIN = 64,
+ };
+
/* This is the structure representing the debugging state. */
struct Dwarf
{
@@ -216,6 +225,8 @@ struct Dwarf
/* Similar for addrx/constx, which will come from .debug_addr section. */
struct Dwarf_CU *fake_addr_cu;
+ enum dwarf_type type;
+
/* Supporting lock for internal memory handling. Ensures threads that have
an entry in the mem_tails array are not disturbed by new threads doing
allocations for this Dwarf. */
@@ -291,6 +302,9 @@ struct Dwarf_Line_s
unsigned int op_index:8;
unsigned int isa:8;
unsigned int discriminator:24;
+ /* These are currently only used for the NVIDIA extensions. */
+ unsigned int context;
+ unsigned int function_name;
};
struct Dwarf_Lines_s
diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog
index a0ff9f4f..c9010af8 100644
--- a/libdwelf/ChangeLog
+++ b/libdwelf/ChangeLog
@@ -1,3 +1,19 @@
+2022-03-24 Mark Wielaard <mark@klomp.org>
+
+ * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add
+ EM_INTELGT Intel Graphics Technology.
+
+2021-02-14 Alexander Miller <alex.miller@gmx.de>
+
+ * dwelf_elf_begin.c (dwelf_elf_begin): Move NEW_VERSION before
+ definition.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * dwelf_strtab.c (dwelf_strtab_init): Remove cast of calloc return
+ value.
+ (morememory): Remove cast of malloc return value.
+
2020-12-12 Dmitry V. Levin <ldv@altlinux.org>
* libdwelf.h: Fix spelling typos in comments.
diff --git a/libdwelf/dwelf_elf_begin.c b/libdwelf/dwelf_elf_begin.c
index c7d63a1c..c3cfe633 100644
--- a/libdwelf/dwelf_elf_begin.c
+++ b/libdwelf/dwelf_elf_begin.c
@@ -36,6 +36,7 @@
#include <unistd.h>
+NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177)
Elf *
dwelf_elf_begin (int fd)
{
@@ -61,4 +62,3 @@ dwelf_elf_begin (int fd)
return NULL;
}
OLD_VERSION (dwelf_elf_begin, ELFUTILS_0.175)
-NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177)
diff --git a/libdwelf/dwelf_elf_e_machine_string.c b/libdwelf/dwelf_elf_e_machine_string.c
index 387648e2..051c70b5 100644
--- a/libdwelf/dwelf_elf_e_machine_string.c
+++ b/libdwelf/dwelf_elf_e_machine_string.c
@@ -360,6 +360,8 @@ dwelf_elf_e_machine_string (int machine)
return "XMOS xCORE";
case EM_MCHP_PIC:
return "Microchip 8-bit PIC";
+ case EM_INTELGT:
+ return "Intel Graphics Technology";
case EM_KM32:
return "KM211 KM32";
case EM_KMX32:
diff --git a/libdwelf/dwelf_strtab.c b/libdwelf/dwelf_strtab.c
index c6ae7cdf..5ec8c295 100644
--- a/libdwelf/dwelf_strtab.c
+++ b/libdwelf/dwelf_strtab.c
@@ -91,8 +91,7 @@ dwelf_strtab_init (bool nullstr)
assert (sizeof (struct memoryblock) < ps - MALLOC_OVERHEAD);
}
- Dwelf_Strtab *ret
- = (Dwelf_Strtab *) calloc (1, sizeof (struct Dwelf_Strtab));
+ Dwelf_Strtab *ret = calloc (1, sizeof (struct Dwelf_Strtab));
if (ret != NULL)
{
ret->nullstr = nullstr;
@@ -117,7 +116,7 @@ morememory (Dwelf_Strtab *st, size_t len)
/* Allocate nearest multiple of pagesize >= len. */
len = ((len / ps) + (len % ps != 0)) * ps - MALLOC_OVERHEAD;
- struct memoryblock *newmem = (struct memoryblock *) malloc (len);
+ struct memoryblock *newmem = malloc (len);
if (newmem == NULL)
return 1;
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index fedf65a4..76053039 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,181 @@
+2022-04-22 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (init_control): New static pthread_once_t.
+ (get_client): Use pthread_once to call __libdwfl_debuginfod_init.
+ (__libdwfl_debuginfod_init): Make static, remove attribute
+ constructor.
+
+2022-02-18 Mark Wielaard <mark@klomp.org>
+
+ * image-header.c (__libdw_image_header): Assign header values for
+ magic1, magic2, version, offset, length and sects using memcpy.
+
+2022-02-18 Mark Wielaard <mark@klomp.org>
+
+ * offline.c (process_archive_member): Close member if process_file
+ failed.
+
+2022-01-03 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Only declare d32 and d64 before
+ actual use.
+
+2022-01-03 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy
+ dyn_data and set xlatefrom.d_buf to dyns when dyns is not aligned.
+
+2022-01-03 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (read_addrs): Fix buffer_available nb overflow.
+
+2021-12-23 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (read_addrs): Calculate addr to read by hand.
+
+2021-12-23 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Call memcpy and set in.d_buf to
+ out.d_buf before calling xlatetom for unaligned buffers.
+
+2021-12-23 Mark Wielaard <mark@klomp.org>
+
+ * core-file.c (dwfl_elf_phdr_memory_callback): Check start <
+ elf->maximum_size and end - start < minread.
+
+2021-12-20 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Move
+ and initialize struct elf_build_id build_id early. Only free memory
+ early when no longer needed. Free memory if not NULL at out.
+
+2021-12-19 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy
+ data and set xlatefrom.d_buf to notes when data is not aligned.
+
+2021-12-19 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy
+ ph_buffer and set xlatefrom.d_buf to phdrsp when ph_buffer is not
+ aligned.
+
+2021-12-19 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy
+ buffer and set xlatefrom.d_buf to ehdr when buffer is not aligned.
+
+2021-12-19 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Check
+ notes filesz. Rewrite reading of GElf_Nhdr.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure
+ that dyn_filesz can contain at least one Elf_Dyn and isn't larger than
+ possible.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure
+ that ph_buffer_size has room for at least one phdr.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Make
+ sure the note len increases each iteration.
+
+2021-12-17 Mark Wielaard <mark@klomp.org>
+
+ * libdwflP.h (dwfl_segment_report_module): Add maxread argument.
+ * core-file.c (dwfl_core_file_report): Pass elf->maximum_size to
+ dwfl_segment_report_module.
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Add
+ maxread argument. Check file_trimmed_end against maxread.
+
+2021-12-16 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Check
+ note data is properly aligned.
+
+2021-12-16 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Make sure phnum is non-zero.
+
+2021-12-16 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Make sure dyn_filesz / entsize is
+ non-zero.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Add
+ len overflow check while iterating notes.
+
+2021-12-15 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Make sure phent is either sizeof
+ Elf32_Phdr or sizeof Elf64_Phdr. Check in.d_size can hold at least one
+ Phdr.
+
+2021-12-12 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't
+ allocate more than SIZE_MAX.
+
+2021-12-09 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Limit dyn_filesz malloc size
+ to max possible. When converting make sure we don't exceed the number
+ of bytes available in either in.d_buf or out.d_buf.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Check
+ Dwfl_Module isn't associated with an Elf before installing it.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't
+ trust e_shentsize.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Make sure phent != 0.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * link_map.c (dwfl_link_map_report): Limit malloc size to max
+ possible. When converting make sure we don't exceed the number
+ of bytes available in either in.d_buf nor out.d_buf.
+
+2021-12-08 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't
+ read beyond of (actual) end of (memory) file.
+
+2021-11-18 Matthias Maennich <maennich@google.com>
+
+ * linux-kernel-modules.c (dwfl_linux_kernel_report_modules):
+ Add one to modname array size.
+
+2021-02-14 Alexander Miller <alex.miller@gmx.de>
+
+ * core-file.c (dwfl_core_file_report): Move NEW_VERSION before
+ definition. Replace INTDEF with NEW_INTDEF.
+ * dwfl_module_build_id.c (dwfl_module_build_id): Likewise.
+ * dwfl_report_elf.c (dwfl_report_elf): Likewise.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * linux-pid-attach.c (read_cached_memory): Remove cast of malloc
+ return value.
+
+2021-06-09 Omar Sandoval <osandov@fb.com>
+
+ * link_map.c (read_addrs): Fix potential NULL pointer dereference.
+
2021-04-19 Martin Liska <mliska@suse.cz>
* dwfl_frame.c (dwfl_attach_state): Use startswith.
diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c
index a0ccc9b3..cefc3db0 100644
--- a/libdwfl/core-file.c
+++ b/libdwfl/core-file.c
@@ -1,5 +1,6 @@
/* Core file handling.
Copyright (C) 2008-2010, 2013, 2015 Red Hat, Inc.
+ Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -320,7 +321,7 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx,
(void) more (*buffer_available);
/* If it's already on hand anyway, use as much as there is. */
- if (elf->map_address != NULL)
+ if (elf->map_address != NULL && start < elf->maximum_size)
(void) more (elf->maximum_size - start);
/* Make sure we don't look past the end of the actual file,
@@ -332,6 +333,9 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx,
if (unlikely (start >= end))
return false;
+ if (end - start < minread)
+ return false;
+
if (elf->map_address != NULL)
{
void *contents = elf->map_address + elf->start_offset + start;
@@ -440,6 +444,7 @@ __libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddrp)
return false;
}
+NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158)
int
dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
{
@@ -558,6 +563,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
int seg = dwfl_segment_report_module (dwfl, ndx, NULL,
&dwfl_elf_phdr_memory_callback, elf,
core_file_read_eagerly, elf,
+ elf->maximum_size,
note_file, note_file_size,
&r_debug_info);
if (unlikely (seg < 0))
@@ -625,8 +631,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
error rather than just nothing found. */
return listed > 0 ? listed : retval;
}
-INTDEF (dwfl_core_file_report)
-NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158)
+NEW_INTDEF (dwfl_core_file_report)
#ifdef SYMBOL_VERSIONING
int _compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf);
diff --git a/libdwfl/debuginfod-client.c b/libdwfl/debuginfod-client.c
index 99b66b6e..153260c3 100644
--- a/libdwfl/debuginfod-client.c
+++ b/libdwfl/debuginfod-client.c
@@ -1,5 +1,6 @@
/* Try to get an ELF or debug file through the debuginfod.
Copyright (C) 2019 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -31,6 +32,7 @@
#endif
#include "libdwflP.h"
+#include <pthread.h>
#include <dlfcn.h>
static __typeof__ (debuginfod_begin) *fp_debuginfod_begin;
@@ -38,6 +40,10 @@ static __typeof__ (debuginfod_find_executable) *fp_debuginfod_find_executable;
static __typeof__ (debuginfod_find_debuginfo) *fp_debuginfod_find_debuginfo;
static __typeof__ (debuginfod_end) *fp_debuginfod_end;
+static void __libdwfl_debuginfod_init (void);
+
+static pthread_once_t init_control = PTHREAD_ONCE_INIT;
+
/* NB: this is slightly thread-unsafe */
static debuginfod_client *
@@ -46,6 +52,8 @@ get_client (Dwfl *dwfl)
if (dwfl->debuginfod != NULL)
return dwfl->debuginfod;
+ pthread_once (&init_control, __libdwfl_debuginfod_init);
+
if (fp_debuginfod_begin != NULL)
{
dwfl->debuginfod = (*fp_debuginfod_begin) ();
@@ -96,9 +104,9 @@ __libdwfl_debuginfod_end (debuginfod_client *c)
(*fp_debuginfod_end) (c);
}
-/* Try to get the libdebuginfod library functions to make sure
- everything is initialized early. */
-void __attribute__ ((constructor))
+/* Try to get the libdebuginfod library functions.
+ Only needs to be called once from get_client. */
+static void
__libdwfl_debuginfod_init (void)
{
void *debuginfod_so = dlopen(DEBUGINFOD_SONAME, RTLD_LAZY);
diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c
index 6ca93761..0c198f23 100644
--- a/libdwfl/dwfl_module_build_id.c
+++ b/libdwfl/dwfl_module_build_id.c
@@ -77,6 +77,7 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf)
return found_build_id (mod, set, build_id_bits, build_id_len, build_id_vaddr);
}
+NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138)
int
dwfl_module_build_id (Dwfl_Module *mod,
const unsigned char **bits, GElf_Addr *vaddr)
@@ -102,8 +103,7 @@ dwfl_module_build_id (Dwfl_Module *mod,
*vaddr = mod->build_id_vaddr;
return mod->build_id_len;
}
-INTDEF (dwfl_module_build_id)
-NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138)
+NEW_INTDEF (dwfl_module_build_id)
#ifdef SYMBOL_VERSIONING
COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end)
diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c
index 9da86698..a5f0e5e5 100644
--- a/libdwfl/dwfl_report_elf.c
+++ b/libdwfl/dwfl_report_elf.c
@@ -287,6 +287,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name,
return m;
}
+NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156)
Dwfl_Module *
dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd,
GElf_Addr base, bool add_p_vaddr)
@@ -322,8 +323,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd,
return mod;
}
-INTDEF (dwfl_report_elf)
-NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156)
+NEW_INTDEF (dwfl_report_elf)
#ifdef SYMBOL_VERSIONING
Dwfl_Module *
diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c
index ee9cfa2e..1461ae26 100644
--- a/libdwfl/dwfl_segment_report_module.c
+++ b/libdwfl/dwfl_segment_report_module.c
@@ -1,5 +1,6 @@
/* Sniff out modules from ELF headers visible in memory segments.
Copyright (C) 2008-2012, 2014, 2015, 2018 Red Hat, Inc.
+ Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -294,6 +295,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
void *memory_callback_arg,
Dwfl_Module_Callback *read_eagerly,
void *read_eagerly_arg,
+ size_t maxread,
const void *note_file, size_t note_file_size,
const struct r_debug_info *r_debug_info)
{
@@ -331,6 +333,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
here so we can always safely free it. */
void *phdrsp = NULL;
+ /* Collect the build ID bits here. */
+ struct elf_build_id build_id;
+ build_id.memory = NULL;
+ build_id.len = 0;
+ build_id.vaddr = 0;
+
if (! (*memory_callback) (dwfl, ndx, &buffer, &buffer_available,
start, sizeof (Elf64_Ehdr), memory_callback_arg)
|| memcmp (buffer, ELFMAG, SELFMAG) != 0)
@@ -366,6 +374,20 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
e_ident = ((const unsigned char *) buffer);
ei_class = e_ident[EI_CLASS];
ei_data = e_ident[EI_DATA];
+ /* buffer may be unaligned, in which case xlatetom would not work.
+ xlatetom does work when the in and out d_buf are equal (but not
+ for any other overlap). */
+ size_t ehdr_align = (ei_class == ELFCLASS32
+ ? __alignof__ (Elf32_Ehdr)
+ : __alignof__ (Elf64_Ehdr));
+ if (((uintptr_t) buffer & (ehdr_align - 1)) != 0)
+ {
+ memcpy (&ehdr, buffer,
+ (ei_class == ELFCLASS32
+ ? sizeof (Elf32_Ehdr)
+ : sizeof (Elf64_Ehdr)));
+ xlatefrom.d_buf = &ehdr;
+ }
switch (ei_class)
{
case ELFCLASS32:
@@ -383,7 +405,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
zero sh_size field. We ignore this here because getting shdrs
is just a nice bonus (see below in the type == PT_LOAD case
where we trim the last segment). */
- shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize;
+ shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * sizeof (Elf32_Shdr);
break;
case ELFCLASS64:
@@ -397,7 +419,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
if (phentsize != sizeof (Elf64_Phdr))
goto out;
/* See the NOTE above for shdrs_end and ehdr.e32.e_shnum. */
- shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize;
+ shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * sizeof (Elf64_Shdr);
break;
default:
@@ -425,7 +447,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
buffer, otherwise it will be the size of the new buffer that
could be read. */
if (ph_buffer_size != 0)
- xlatefrom.d_size = ph_buffer_size;
+ {
+ phnum = ph_buffer_size / phentsize;
+ if (phnum == 0)
+ goto out;
+ xlatefrom.d_size = ph_buffer_size;
+ }
xlatefrom.d_buf = ph_buffer;
@@ -441,6 +468,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
xlateto.d_buf = phdrsp;
xlateto.d_size = phdrsp_bytes;
+ /* ph_ buffer may be unaligned, in which case xlatetom would not work.
+ xlatetom does work when the in and out d_buf are equal (but not
+ for any other overlap). */
+ size_t phdr_align = (class32
+ ? __alignof__ (Elf32_Phdr)
+ : __alignof__ (Elf64_Phdr));
+ if (((uintptr_t) ph_buffer & (phdr_align - 1)) != 0)
+ {
+ memcpy (phdrsp, ph_buffer, phdrsp_bytes);
+ xlatefrom.d_buf = phdrsp;
+ }
+
/* Track the bounds of the file visible in memory. */
GElf_Off file_trimmed_end = 0; /* Proper p_vaddr + p_filesz end. */
GElf_Off file_end = 0; /* Rounded up to effective page size. */
@@ -460,12 +499,6 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
GElf_Addr dyn_vaddr = 0;
GElf_Xword dyn_filesz = 0;
- /* Collect the build ID bits here. */
- struct elf_build_id build_id;
- build_id.memory = NULL;
- build_id.len = 0;
- build_id.vaddr =0;
-
Elf32_Phdr *p32 = phdrsp;
Elf64_Phdr *p64 = phdrsp;
if ((ei_class == ELFCLASS32
@@ -514,15 +547,23 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
if (data_size != 0)
filesz = data_size;
+ if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr))
+ continue;
+
assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
void *notes;
- if (ei_data == MY_ELFDATA)
+ if (ei_data == MY_ELFDATA
+ && (uintptr_t) data == (align == 8
+ ? NOTE_ALIGN8 ((uintptr_t) data)
+ : NOTE_ALIGN4 ((uintptr_t) data)))
notes = data;
else
{
const unsigned int xencoding = ehdr.e32.e_ident[EI_DATA];
+ if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr))
+ continue;
notes = malloc (filesz);
if (unlikely (notes == NULL))
continue; /* Next header */
@@ -533,6 +574,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
xlatefrom.d_size = filesz;
xlateto.d_buf = notes;
xlateto.d_size = filesz;
+
+ /* data may be unaligned, in which case xlatetom would not work.
+ xlatetom does work when the in and out d_buf are equal (but not
+ for any other overlap). */
+ if ((uintptr_t) data != (align == 8
+ ? NOTE_ALIGN8 ((uintptr_t) data)
+ : NOTE_ALIGN4 ((uintptr_t) data)))
+ {
+ memcpy (notes, data, filesz);
+ xlatefrom.d_buf = notes;
+ }
+
if (elf32_xlatetom (&xlateto, &xlatefrom, xencoding) == NULL)
{
free (notes);
@@ -543,40 +596,48 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
const GElf_Nhdr *nh = notes;
size_t len = 0;
- while (filesz > len + sizeof (*nh))
+ while (filesz - len > sizeof (*nh))
{
- const void *note_name;
- const void *note_desc;
-
- len += sizeof (*nh);
- note_name = notes + len;
-
- len += nh->n_namesz;
- len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len);
- note_desc = notes + len;
-
- if (unlikely (filesz < len + nh->n_descsz))
- break;
-
- if (nh->n_type == NT_GNU_BUILD_ID
- && nh->n_descsz > 0
- && nh->n_namesz == sizeof "GNU"
- && !memcmp (note_name, "GNU", sizeof "GNU"))
- {
- build_id.vaddr = (note_desc
+ len += sizeof (*nh);
+
+ size_t namesz = nh->n_namesz;
+ namesz = align == 8 ? NOTE_ALIGN8 (namesz) : NOTE_ALIGN4 (namesz);
+ if (namesz > filesz - len || len + namesz < namesz)
+ break;
+
+ void *note_name = notes + len;
+ len += namesz;
+
+ size_t descsz = nh->n_descsz;
+ descsz = align == 8 ? NOTE_ALIGN8 (descsz) : NOTE_ALIGN4 (descsz);
+ if (descsz > filesz - len || len + descsz < descsz)
+ break;
+
+ void *note_desc = notes + len;
+ len += descsz;
+
+ /* We don't handle very short or really large build-ids. We need at
+ at least 3 and allow for up to 64 (normally ids are 20 long). */
+#define MIN_BUILD_ID_BYTES 3
+#define MAX_BUILD_ID_BYTES 64
+ if (nh->n_type == NT_GNU_BUILD_ID
+ && nh->n_descsz >= MIN_BUILD_ID_BYTES
+ && nh->n_descsz <= MAX_BUILD_ID_BYTES
+ && nh->n_namesz == sizeof "GNU"
+ && !memcmp (note_name, "GNU", sizeof "GNU"))
+ {
+ build_id.vaddr = (note_desc
- (const void *) notes
+ note_vaddr);
- build_id.len = nh->n_descsz;
- build_id.memory = malloc (build_id.len);
- if (likely (build_id.memory != NULL))
- memcpy (build_id.memory, note_desc, build_id.len);
- break;
- }
-
- len += nh->n_descsz;
- len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len);
- nh = (void *) notes + len;
- }
+ build_id.len = nh->n_descsz;
+ build_id.memory = malloc (build_id.len);
+ if (likely (build_id.memory != NULL))
+ memcpy (build_id.memory, note_desc, build_id.len);
+ break;
+ }
+
+ nh = (void *) notes + len;
+ }
if (notes != data)
free (notes);
@@ -641,10 +702,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
/* We must have seen the segment covering offset 0, or else the ELF
header we read at START was not produced by these program headers. */
if (unlikely (!found_bias))
- {
- free (build_id.memory);
- goto out;
- }
+ goto out;
/* Now we know enough to report a module for sure: its bounds. */
module_start += bias;
@@ -712,10 +770,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
}
}
if (skip_this_module)
- {
- free (build_id.memory);
- goto out;
- }
+ goto out;
}
const char *file_note_name = handle_file_note (module_start, module_end,
@@ -774,6 +829,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
if (dyn_data_size != 0)
dyn_filesz = dyn_data_size;
+ if ((dyn_filesz / dyn_entsize) == 0
+ || dyn_filesz > (SIZE_MAX / dyn_entsize))
+ goto out;
void *dyns = malloc (dyn_filesz);
Elf32_Dyn *d32 = dyns;
Elf64_Dyn *d64 = dyns;
@@ -786,7 +844,19 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
xlateto.d_buf = dyns;
xlateto.d_size = dyn_filesz;
+ /* dyn_data may be unaligned, in which case xlatetom would not work.
+ xlatetom does work when the in and out d_buf are equal (but not
+ for any other overlap). */
bool is32 = (ei_class == ELFCLASS32);
+ size_t dyn_align = (is32
+ ? __alignof__ (Elf32_Dyn)
+ : __alignof__ (Elf64_Dyn));
+ if (((uintptr_t) dyn_data & (dyn_align - 1)) != 0)
+ {
+ memcpy (dyns, dyn_data, dyn_filesz);
+ xlatefrom.d_buf = dyns;
+ }
+
if ((is32 && elf32_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL)
|| (!is32 && elf64_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL))
{
@@ -877,6 +947,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
/* At this point we do not need BUILD_ID or NAME any more.
They have been copied. */
free (build_id.memory);
+ build_id.memory = NULL;
finish_portion (&read_state, &soname, &soname_size);
if (unlikely (mod == NULL))
@@ -904,6 +975,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
/* The caller wants to read the whole file in right now, but hasn't
done it for us. Fill in a local image of the virtual file. */
+ if (file_trimmed_end > maxread)
+ file_trimmed_end = maxread;
+
void *contents = calloc (1, file_trimmed_end);
if (unlikely (contents == NULL))
goto out;
@@ -924,8 +998,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
GElf_Off offset = is32 ? p32[i].p_offset : p64[i].p_offset;
GElf_Xword filesz = is32 ? p32[i].p_filesz : p64[i].p_filesz;
+ /* Don't try to read beyond the actual end of file. */
+ if (offset >= file_trimmed_end)
+ continue;
+
void *into = contents + offset;
- size_t read_size = filesz;
+ size_t read_size = MIN (filesz, file_trimmed_end - offset);
(*memory_callback) (dwfl, addr_segndx (dwfl, segment,
vaddr + bias, false),
&into, &read_size, vaddr + bias, read_size,
@@ -959,7 +1037,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
elf->flags |= ELF_F_MALLOCED;
}
- if (elf != NULL)
+ if (elf != NULL && mod->main.elf == NULL)
{
/* Install the file in the module. */
mod->main.elf = elf;
@@ -972,6 +1050,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
}
out:
+ if (build_id.memory != NULL)
+ free (build_id.memory);
free (phdrsp);
if (buffer != NULL)
(*memory_callback) (dwfl, -1, &buffer, &buffer_available, 0, 0,
diff --git a/libdwfl/image-header.c b/libdwfl/image-header.c
index 25fbfd99..f906068a 100644
--- a/libdwfl/image-header.c
+++ b/libdwfl/image-header.c
@@ -1,5 +1,6 @@
/* Linux kernel image support for libdwfl.
Copyright (C) 2009-2011 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -80,17 +81,28 @@ __libdw_image_header (int fd, off_t *start_offset,
header = header_buffer - H_START;
}
- if (*(uint16_t *) (header + H_MAGIC1) == LE16 (MAGIC1)
- && *(uint32_t *) (header + H_MAGIC2) == LE32 (MAGIC2)
- && LE16 (*(uint16_t *) (header + H_VERSION)) >= MIN_VERSION)
+ uint16_t magic1;
+ uint32_t magic2;
+ uint16_t version;
+ memcpy (&magic1, header + H_MAGIC1, sizeof (uint16_t));
+ memcpy (&magic2, header + H_MAGIC2, sizeof (uint32_t));
+ memcpy (&version, header + H_VERSION, sizeof (uint16_t));
+ if (magic1 == LE16 (MAGIC1) && magic2 == LE32 (MAGIC2)
+ && LE16 (version) >= MIN_VERSION)
{
/* The magic numbers match and the version field is sufficient.
Extract the payload bounds. */
- uint32_t offset = LE32 (*(uint32_t *) (header + H_PAYLOAD_OFFSET));
- uint32_t length = LE32 (*(uint32_t *) (header + H_PAYLOAD_LENGTH));
+ uint32_t offset;
+ uint32_t length;
+ uint8_t sects;
+ memcpy (&offset, header + H_PAYLOAD_OFFSET, sizeof (uint32_t));
+ memcpy (&length, header + H_PAYLOAD_LENGTH, sizeof (uint32_t));
+ memcpy (&sects, header + H_SETUP_SECTS, sizeof (uint8_t));
+ offset = LE32 (offset);
+ length = LE32 (length);
- offset += ((*(uint8_t *) (header + H_SETUP_SECTS) ?: 4) + 1) * 512;
+ offset += ((sects ?: 4) + 1) * 512;
if (offset > H_END && offset < mapped_size
&& mapped_size - offset >= length)
diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h
index 4344e356..7503a627 100644
--- a/libdwfl/libdwflP.h
+++ b/libdwfl/libdwflP.h
@@ -698,6 +698,7 @@ extern int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
void *memory_callback_arg,
Dwfl_Module_Callback *read_eagerly,
void *read_eagerly_arg,
+ size_t maxread,
const void *note_file,
size_t note_file_size,
const struct r_debug_info *r_debug_info);
diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c
index 0d8d1c17..c0207cd3 100644
--- a/libdwfl/link_map.c
+++ b/libdwfl/link_map.c
@@ -1,5 +1,6 @@
/* Report modules by examining dynamic linker data structures.
Copyright (C) 2008-2016 Red Hat, Inc.
+ Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -254,9 +255,10 @@ read_addrs (struct memory_closure *closure,
Dwfl *dwfl = closure->dwfl;
/* Read a new buffer if the old one doesn't cover these words. */
- if (buffer == NULL
+ if (*buffer == NULL
|| vaddr < *read_vaddr
- || vaddr - (*read_vaddr) + nb > *buffer_available)
+ || nb > *buffer_available
+ || vaddr - (*read_vaddr) > *buffer_available - nb)
{
release_buffer (closure, buffer, buffer_available, 0);
@@ -269,26 +271,25 @@ read_addrs (struct memory_closure *closure,
return true;
}
- Elf32_Addr (*a32)[n] = vaddr - (*read_vaddr) + (*buffer);
- Elf64_Addr (*a64)[n] = (void *) a32;
+ unsigned char *addr = vaddr - (*read_vaddr) + (*buffer);
if (elfclass == ELFCLASS32)
{
if (elfdata == ELFDATA2MSB)
for (size_t i = 0; i < n; ++i)
- addrs[i] = BE32 (read_4ubyte_unaligned_noncvt (&(*a32)[i]));
+ addrs[i] = BE32 (read_4ubyte_unaligned_noncvt (addr + i * 4));
else
for (size_t i = 0; i < n; ++i)
- addrs[i] = LE32 (read_4ubyte_unaligned_noncvt (&(*a32)[i]));
+ addrs[i] = LE32 (read_4ubyte_unaligned_noncvt (addr + i * 4));
}
else
{
if (elfdata == ELFDATA2MSB)
for (size_t i = 0; i < n; ++i)
- addrs[i] = BE64 (read_8ubyte_unaligned_noncvt (&(*a64)[i]));
+ addrs[i] = BE64 (read_8ubyte_unaligned_noncvt (addr + i * 8));
else
for (size_t i = 0; i < n; ++i)
- addrs[i] = LE64 (read_8ubyte_unaligned_noncvt (&(*a64)[i]));
+ addrs[i] = LE64 (read_8ubyte_unaligned_noncvt (addr + i * 8));
}
return false;
@@ -784,7 +785,9 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
GElf_Xword dyn_filesz = 0;
GElf_Addr dyn_bias = (GElf_Addr) -1;
- if (phdr != 0 && phnum != 0)
+ if (phdr != 0 && phnum != 0
+ && ((elfclass == ELFCLASS32 && phent == sizeof (Elf32_Phdr))
+ || (elfclass == ELFCLASS64 && phent == sizeof (Elf64_Phdr))))
{
Dwfl_Module *phdr_mod;
int phdr_segndx = INTUSE(dwfl_addrsegment) (dwfl, phdr, &phdr_mod);
@@ -847,6 +850,11 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
/* Note this in the !in_ok path. That means memory_callback
failed. But the callback might still have reset the d_size
value (to zero). So explicitly set it here again. */
+ if (unlikely (phnum > SIZE_MAX / phent))
+ {
+ __libdwfl_seterrno (DWFL_E_NOMEM);
+ return false;
+ }
in.d_size = phnum * phent;
in.d_buf = malloc (in.d_size);
if (unlikely (in.d_buf == NULL))
@@ -876,6 +884,18 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
return false;
}
size_t nbytes = phnum * phent;
+ /* We can only process as many bytes/phnum as there are
+ in in.d_size. The data might have been truncated. */
+ if (nbytes > in.d_size)
+ {
+ nbytes = in.d_size;
+ phnum = nbytes / phent;
+ if (phnum == 0)
+ {
+ __libdwfl_seterrno (DWFL_E_BADELF);
+ return false;
+ }
+ }
void *buf = malloc (nbytes);
Elf32_Phdr (*p32)[phnum] = buf;
Elf64_Phdr (*p64)[phnum] = buf;
@@ -888,15 +908,34 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
{
.d_type = ELF_T_PHDR,
.d_version = EV_CURRENT,
- .d_size = phnum * phent,
+ .d_size = nbytes,
.d_buf = buf
};
- in.d_size = out.d_size;
+ if (in.d_size > out.d_size)
+ {
+ in.d_size = out.d_size;
+ phnum = in.d_size / phent;
+ if (phnum == 0)
+ {
+ free (buf);
+ __libdwfl_seterrno (DWFL_E_BADELF);
+ return false;
+ }
+ }
+ bool is32 = (elfclass == ELFCLASS32);
+ size_t phdr_align = (is32
+ ? __alignof__ (Elf32_Phdr)
+ : __alignof__ (Elf64_Phdr));
+ if (!in_from_exec
+ && ((uintptr_t) in.d_buf & (phdr_align - 1)) != 0)
+ {
+ memcpy (out.d_buf, in.d_buf, in.d_size);
+ in.d_buf = out.d_buf;
+ }
if (likely ((elfclass == ELFCLASS32
? elf32_xlatetom : elf64_xlatetom)
(&out, &in, elfdata) != NULL))
{
- bool is32 = (elfclass == ELFCLASS32);
for (size_t i = 0; i < phnum; ++i)
{
GElf_Word type = (is32
@@ -981,9 +1020,23 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
if ((*memory_callback) (dwfl, dyn_segndx, &in.d_buf, &in.d_size,
dyn_vaddr, dyn_filesz, memory_callback_arg))
{
+ size_t entsize = (elfclass == ELFCLASS32
+ ? sizeof (Elf32_Dyn) : sizeof (Elf64_Dyn));
+ if (unlikely (dyn_filesz > SIZE_MAX / entsize))
+ {
+ __libdwfl_seterrno (DWFL_E_NOMEM);
+ return false;
+ }
+ /* We can only process as many bytes as there are in
+ in.d_size. The data might have been truncated. */
+ if (dyn_filesz > in.d_size)
+ dyn_filesz = in.d_size;
+ if (dyn_filesz / entsize == 0)
+ {
+ __libdwfl_seterrno (DWFL_E_BADELF);
+ return false;
+ }
void *buf = malloc (dyn_filesz);
- Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf;
- Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf;
if (unlikely (buf == NULL))
{
__libdwfl_seterrno (DWFL_E_NOMEM);
@@ -996,7 +1049,16 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
.d_size = dyn_filesz,
.d_buf = buf
};
- in.d_size = out.d_size;
+ if (in.d_size > out.d_size)
+ in.d_size = out.d_size;
+ size_t dyn_align = (elfclass == ELFCLASS32
+ ? __alignof__ (Elf32_Dyn)
+ : __alignof__ (Elf64_Dyn));
+ if (((uintptr_t) in.d_buf & (dyn_align - 1)) != 0)
+ {
+ memcpy (out.d_buf, in.d_buf, in.d_size);
+ in.d_buf = out.d_buf;
+ }
if (likely ((elfclass == ELFCLASS32
? elf32_xlatetom : elf64_xlatetom)
(&out, &in, elfdata) != NULL))
@@ -1004,6 +1066,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
/* We are looking for DT_DEBUG. */
if (elfclass == ELFCLASS32)
{
+ Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf;
size_t n = dyn_filesz / sizeof (Elf32_Dyn);
for (size_t i = 0; i < n; ++i)
if ((*d32)[i].d_tag == DT_DEBUG)
@@ -1014,6 +1077,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
}
else
{
+ Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf;
size_t n = dyn_filesz / sizeof (Elf64_Dyn);
for (size_t i = 0; i < n; ++i)
if ((*d64)[i].d_tag == DT_DEBUG)
diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
index c0f8dfa4..58c0c417 100644
--- a/libdwfl/linux-kernel-modules.c
+++ b/libdwfl/linux-kernel-modules.c
@@ -1008,7 +1008,7 @@ dwfl_linux_kernel_report_modules (Dwfl *dwfl)
int result = 0;
Dwarf_Addr modaddr;
unsigned long int modsz;
- char modname[128];
+ char modname[128+1];
char *line = NULL;
size_t linesz = 0;
/* We can't just use fscanf here because it's not easy to distinguish \n
diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c
index cd534825..09cba07b 100644
--- a/libdwfl/linux-pid-attach.c
+++ b/libdwfl/linux-pid-attach.c
@@ -135,7 +135,7 @@ read_cached_memory (struct __libdwfl_pid_arg *pid_arg,
if (mem_cache == NULL)
{
size_t mem_cache_size = sizeof (struct __libdwfl_remote_mem_cache);
- mem_cache = (struct __libdwfl_remote_mem_cache *) malloc (mem_cache_size);
+ mem_cache = malloc (mem_cache_size);
if (mem_cache == NULL)
return false;
diff --git a/libdwfl/offline.c b/libdwfl/offline.c
index d8697cf2..58ba4c36 100644
--- a/libdwfl/offline.c
+++ b/libdwfl/offline.c
@@ -1,5 +1,6 @@
/* Recover relocatibility for addresses computed from debug information.
Copyright (C) 2005-2009, 2012 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -233,8 +234,11 @@ process_archive_member (Dwfl *dwfl, const char *name, const char *file_name,
free (member_name);
free (module_name);
- if (*mod == NULL) /* process_file called elf_end. */
- return ELF_C_NULL;
+ if (*mod == NULL)
+ {
+ elf_end (member);
+ return ELF_C_NULL;
+ }
/* Advance the archive-reading offset for the next iteration. */
return elf_next (member);
diff --git a/libebl/ChangeLog b/libebl/ChangeLog
index fff66b3e..2e31e75d 100644
--- a/libebl/ChangeLog
+++ b/libebl/ChangeLog
@@ -1,3 +1,12 @@
+2021-12-21 Luca Boccassi <bluca@debian.org>
+
+ * eblobjnote.c (ebl_object_note): Handle NT_FDO_PACKAGING_METADATA.
+ * eblobjnotetypename.c (ebl_object_note_type_name): Likewise.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * eblopenbackend.c (openbackend): Remove cast of calloc return value.
+
2021-04-19 Martin Liska <mliska@suse.cz>
* eblobjnotetypename.c (ebl_object_note_type_name): Use startswith.
diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c
index 36efe275..5a7c5c62 100644
--- a/libebl/eblobjnote.c
+++ b/libebl/eblobjnote.c
@@ -288,6 +288,10 @@ ebl_object_note (Ebl *ebl, uint32_t namesz, const char *name, uint32_t type,
if (descsz == 0 && type == NT_VERSION)
return;
+ if (strcmp ("FDO", name) == 0 && type == NT_FDO_PACKAGING_METADATA
+ && descsz > 0 && desc[descsz - 1] == '\0')
+ printf(" Packaging Metadata: %.*s\n", (int) descsz, desc);
+
/* Everything else should have the "GNU" owner name. */
if (strcmp ("GNU", name) != 0)
return;
diff --git a/libebl/eblobjnotetypename.c b/libebl/eblobjnotetypename.c
index 4662906d..473a1f2f 100644
--- a/libebl/eblobjnotetypename.c
+++ b/libebl/eblobjnotetypename.c
@@ -101,6 +101,9 @@ ebl_object_note_type_name (Ebl *ebl, const char *name, uint32_t type,
return buf;
}
+ if (strcmp (name, "FDO") == 0 && type == NT_FDO_PACKAGING_METADATA)
+ return "FDO_PACKAGING_METADATA";
+
if (strcmp (name, "GNU") != 0)
{
/* NT_VERSION is special, all data is in the name. */
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
index 2ff86416..831b865d 100644
--- a/libebl/eblopenbackend.c
+++ b/libebl/eblopenbackend.c
@@ -267,7 +267,7 @@ openbackend (Elf *elf, const char *emulation, GElf_Half machine)
/* First allocate the data structure for the result. We do this
here since this assures that the structure is always large
enough. */
- result = (Ebl *) calloc (1, sizeof (Ebl));
+ result = calloc (1, sizeof (Ebl));
if (result == NULL)
{
// XXX uncomment
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index a1fd414c..00d4ac0f 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,89 @@
+2022-04-24 Mark Wielaard <mark@klomp.org>
+
+ * elf_update.c (write_file): Check HAVE_MREMAP.
+
+2022-04-01 Mark Wielaard <mark@klomp.org>
+
+ * libelfP.h (struct Elf_Data_Chunk): Add an int64_t offset field.
+ * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Check whether the
+ requested chunk, offset, size and type, was already handed out.
+ Set new Elf_Data_Chunk offset field.
+
+2022-03-29 Mark Wielaard <mark@klomp.org>
+
+ * gelf_xlate.c (START): Define and use sz variable.
+ (END): Use sz variable to decide whether to do a memmove.
+
+2022-03-24 Mark Wielaard <mark@klomp.org>
+
+ * elf.h: Update from glibc.
+
+2022-03-22 Mark Wielaard <mark@klomp.org>
+
+ * elf_getdata.c (__libelf_type_aligns): ELF_T_GNUHASH has different
+ alignment for ELFCLASS32 and ELFCLASS64.
+
+2022-03-20 Mark Wielaard <mark@klomp.org>
+
+ * version_xlate.h (elf_cvt_Verdef): Make sure aux_offset and
+ def_offset don't overflow.
+ (elf_cvt_Verneed): Make sure aux_offset and need_offset don't
+ overflow.
+
+2022-03-18 Mark Wielaard <mark@klomp.org>
+
+ * version_xlate.h (elf_cvt_Verdef): Check alignment of def_offset
+ and aux_offset.
+ (elf_cvt_Verneed): Check alignment of need_offset and aux_offset.
+
+2022-03-17 Mark Wielaard <mark@klomp.org>
+
+ * elf_begin.c (read_long_names): Check ar_size starts with a digit.
+
+2022-03-17 Mark Wielaard <mark@klomp.org>
+
+ * elf_begin.c (get_shnum): Take offset into account for Shdr
+ alignment check.
+
+2021-12-19 Mark Wielaard <mark@klomp.org>
+
+ * elf_begin.c (file_read_elf): Cast ehdr to uintptr_t before e_shoff
+ alignment check. Only set shdr state when scncnt is larger than zero.
+
+2021-12-16 Mark Wielaard <mark@klomp.org>
+
+ * libelfP.h (NOTE_ALIGN4): And with negative unsigned long.
+ (NOTE_ALIGN8): Likewise.
+
+2021-12-15 Mark Wielaard <mark@klomp.org>
+
+ * elf_begin.c (get_shnum): Use offsetof to get field of unaligned
+ struct.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * common.h (allocate_elf): Remove cast of calloc return value.
+ * elf_newdata.c (elf_newdata): Likewise.
+ * elf_getscn.c (elf_getscn): Remove casts of calloc return values.
+ * elf_newscn.c (elf_newscn): Likewise.
+ * elf32_updatefile.c (__elfw2): Remove casts of malloc return values.
+ * elf_getdata.c (convert_data): Likewise.
+ (__libelf_set_rawdata_wrlock): Remove cast of malloc return value.
+ * elf_begin.c (read_long_names): Remove cast of malloc return value.
+ * elf_readall.c (__libelf_readall): Likewise.
+ * elf_getarsym.c (elf_getarsym): Remove casts of malloc and realloc
+ return values.
+
+2021-07-19 Mark Wielaard <mark@klomp.org>
+
+ * elf_strptr.c (validate_str): Check last char is zero first before
+ calling memrchr on the whole block.
+
+2021-06-09 Andrei Homescu <ah@immunant.com>
+
+ * elf_getdata.c: Fix d_align for sections where alignment is larger
+ than offset.
+
2020-12-12 Mark Wielaard <mark@klomp.org>
* elf.h: Update from glibc.
diff --git a/libelf/common.h b/libelf/common.h
index e41c717d..3718b3fd 100644
--- a/libelf/common.h
+++ b/libelf/common.h
@@ -71,7 +71,7 @@ __attribute__ ((unused))
allocate_elf (int fildes, void *map_address, int64_t offset, size_t maxsize,
Elf_Cmd cmd, Elf *parent, Elf_Kind kind, size_t extra)
{
- Elf *result = (Elf *) calloc (1, sizeof (Elf) + extra);
+ Elf *result = calloc (1, sizeof (Elf) + extra);
if (result == NULL)
__libelf_seterrno (ELF_E_NOMEM);
else
diff --git a/libelf/elf.h b/libelf/elf.h
index 8e3e618f..0735f6b5 100644
--- a/libelf/elf.h
+++ b/libelf/elf.h
@@ -1,5 +1,5 @@
/* This file defines standard ELF types, structures, and macros.
- Copyright (C) 1995-2020 Free Software Foundation, Inc.
+ Copyright (C) 1995-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -336,7 +336,8 @@ typedef struct
#define EM_BA2 202 /* Beyond BA2 */
#define EM_XCORE 203 /* XMOS xCORE */
#define EM_MCHP_PIC 204 /* Microchip 8-bit PIC(r) */
- /* reserved 205-209 */
+#define EM_INTELGT 205 /* Intel Graphics Technology */
+ /* reserved 206-209 */
#define EM_KM32 210 /* KM211 KM32 */
#define EM_KMX32 211 /* KM211 KMX32 */
#define EM_EMX16 212 /* KM211 KMX16 */
@@ -813,6 +814,10 @@ typedef struct
address keys. */
#define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication
generic key. */
+#define NT_ARM_TAGGED_ADDR_CTRL 0x409 /* AArch64 tagged address
+ control. */
+#define NT_ARM_PAC_ENABLED_KEYS 0x40a /* AArch64 pointer authentication
+ enabled keys. */
#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note. */
#define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers. */
#define NT_MIPS_FP_MODE 0x801 /* MIPS floating-point mode. */
@@ -1226,8 +1231,7 @@ typedef struct
#define AT_L3_CACHESIZE 46
#define AT_L3_CACHEGEOMETRY 47
-#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery
- (AArch64). */
+#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery */
/* Note section contents. Each entry in the note section begins with
a header of a fixed form. */
@@ -1254,6 +1258,8 @@ typedef struct
/* Note entries for GNU systems have this name. */
#define ELF_NOTE_GNU "GNU"
+/* Note entries for freedesktop.org have this name. */
+#define ELF_NOTE_FDO "FDO"
/* Defined types of notes for Solaris. */
@@ -1297,6 +1303,10 @@ typedef struct
/* Program property. */
#define NT_GNU_PROPERTY_TYPE_0 5
+/* Packaging metadata as defined on
+ https://systemd.io/COREDUMP_PACKAGE_METADATA/ */
+#define NT_FDO_PACKAGING_METADATA 0xcafe1a7e
+
/* Note section name of program property. */
#define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property"
@@ -1307,6 +1317,23 @@ typedef struct
/* No copy relocation on protected data symbol. */
#define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
+/* A 4-byte unsigned integer property: A bit is set if it is set in all
+ relocatable inputs. */
+#define GNU_PROPERTY_UINT32_AND_LO 0xb0000000
+#define GNU_PROPERTY_UINT32_AND_HI 0xb0007fff
+
+/* A 4-byte unsigned integer property: A bit is set if it is set in any
+ relocatable inputs. */
+#define GNU_PROPERTY_UINT32_OR_LO 0xb0008000
+#define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff
+
+/* The needed properties by the object file. */
+#define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO
+
+/* Set if the object file requires canonical function pointers and
+ cannot be used with copy relocation. */
+#define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0)
+
/* Processor-specific semantics, lo */
#define GNU_PROPERTY_LOPROC 0xc0000000
/* Processor-specific semantics, hi */
@@ -1324,31 +1351,26 @@ typedef struct
/* The x86 instruction sets indicated by the corresponding bits are
used in program. Their support in the hardware is optional. */
-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
/* The x86 instruction sets indicated by the corresponding bits are
used in program and they must be supported by the hardware. */
-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
/* X86 processor-specific features used in program. */
#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
-#define GNU_PROPERTY_X86_ISA_1_486 (1U << 0)
-#define GNU_PROPERTY_X86_ISA_1_586 (1U << 1)
-#define GNU_PROPERTY_X86_ISA_1_686 (1U << 2)
-#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 3)
-#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 4)
-#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 5)
-#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 6)
-#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 7)
-#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 8)
-#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 9)
-#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 10)
-#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 11)
-#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 12)
-#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 13)
-#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 14)
-#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 15)
-#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 16)
-#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 17)
+/* GNU_PROPERTY_X86_ISA_1_BASELINE: CMOV, CX8 (cmpxchg8b), FPU (fld),
+ MMX, OSFXSR (fxsave), SCE (syscall), SSE and SSE2. */
+#define GNU_PROPERTY_X86_ISA_1_BASELINE (1U << 0)
+/* GNU_PROPERTY_X86_ISA_1_V2: GNU_PROPERTY_X86_ISA_1_BASELINE,
+ CMPXCHG16B (cmpxchg16b), LAHF-SAHF (lahf), POPCNT (popcnt), SSE3,
+ SSSE3, SSE4.1 and SSE4.2. */
+#define GNU_PROPERTY_X86_ISA_1_V2 (1U << 1)
+/* GNU_PROPERTY_X86_ISA_1_V3: GNU_PROPERTY_X86_ISA_1_V2, AVX, AVX2, BMI1,
+ BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE. */
+#define GNU_PROPERTY_X86_ISA_1_V3 (1U << 2)
+/* GNU_PROPERTY_X86_ISA_1_V4: GNU_PROPERTY_X86_ISA_1_V3, AVX512F,
+ AVX512BW, AVX512CD, AVX512DQ and AVX512VL. */
+#define GNU_PROPERTY_X86_ISA_1_V4 (1U << 3)
/* This indicates that all executable sections are compatible with
IBT. */
@@ -4102,4 +4124,41 @@ enum
#define R_ARC_TLS_LE_S9 0x4a
#define R_ARC_TLS_LE_32 0x4b
+/* OpenRISC 1000 specific relocs. */
+#define R_OR1K_NONE 0
+#define R_OR1K_32 1
+#define R_OR1K_16 2
+#define R_OR1K_8 3
+#define R_OR1K_LO_16_IN_INSN 4
+#define R_OR1K_HI_16_IN_INSN 5
+#define R_OR1K_INSN_REL_26 6
+#define R_OR1K_GNU_VTENTRY 7
+#define R_OR1K_GNU_VTINHERIT 8
+#define R_OR1K_32_PCREL 9
+#define R_OR1K_16_PCREL 10
+#define R_OR1K_8_PCREL 11
+#define R_OR1K_GOTPC_HI16 12
+#define R_OR1K_GOTPC_LO16 13
+#define R_OR1K_GOT16 14
+#define R_OR1K_PLT26 15
+#define R_OR1K_GOTOFF_HI16 16
+#define R_OR1K_GOTOFF_LO16 17
+#define R_OR1K_COPY 18
+#define R_OR1K_GLOB_DAT 19
+#define R_OR1K_JMP_SLOT 20
+#define R_OR1K_RELATIVE 21
+#define R_OR1K_TLS_GD_HI16 22
+#define R_OR1K_TLS_GD_LO16 23
+#define R_OR1K_TLS_LDM_HI16 24
+#define R_OR1K_TLS_LDM_LO16 25
+#define R_OR1K_TLS_LDO_HI16 26
+#define R_OR1K_TLS_LDO_LO16 27
+#define R_OR1K_TLS_IE_HI16 28
+#define R_OR1K_TLS_IE_LO16 29
+#define R_OR1K_TLS_LE_HI16 30
+#define R_OR1K_TLS_LE_LO16 31
+#define R_OR1K_TLS_TPOFF 32
+#define R_OR1K_TLS_DTPOFF 33
+#define R_OR1K_TLS_DTPMOD 34
+
#endif /* elf.h */
diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c
index f67e6261..1ff58900 100644
--- a/libelf/elf32_updatefile.c
+++ b/libelf/elf32_updatefile.c
@@ -218,7 +218,7 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
return 1;
Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns;
- Elf_Scn **scns = (Elf_Scn **) malloc (shnum * sizeof (Elf_Scn *));
+ Elf_Scn **scns = malloc (shnum * sizeof (Elf_Scn *));
if (unlikely (scns == NULL))
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -688,7 +688,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
/* Get all sections into the array and sort them. */
Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns;
- Elf_Scn **scns = (Elf_Scn **) malloc (shnum * sizeof (Elf_Scn *));
+ Elf_Scn **scns = malloc (shnum * sizeof (Elf_Scn *));
if (unlikely (scns == NULL))
{
free (shdr_data_mem);
diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c
index 32648c15..17d9b1f3 100644
--- a/libelf/elf_begin.c
+++ b/libelf/elf_begin.c
@@ -1,5 +1,6 @@
/* Create descriptor for processing file.
Copyright (C) 1998-2010, 2012, 2014, 2015, 2016 Red Hat, Inc.
+ Copyright (C) 2021, 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -157,7 +158,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes,
if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA
&& (ALLOW_UNALIGNED
- || (((size_t) ((char *) map_address + ehdr.e32->e_shoff))
+ || (((size_t) ((char *) (map_address + ehdr.e32->e_shoff
+ + offset)))
& (__alignof__ (Elf32_Shdr) - 1)) == 0))
/* We can directly access the memory. */
result = ((Elf32_Shdr *) ((char *) map_address + ehdr.e32->e_shoff
@@ -170,9 +172,10 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes,
if (likely (map_address != NULL))
/* gcc will optimize the memcpy to a simple memory
access while taking care of alignment issues. */
- memcpy (&size, &((Elf32_Shdr *) ((char *) map_address
- + ehdr.e32->e_shoff
- + offset))->sh_size,
+ memcpy (&size, ((char *) map_address
+ + ehdr.e32->e_shoff
+ + offset
+ + offsetof (Elf32_Shdr, sh_size)),
sizeof (Elf32_Word));
else
if (unlikely ((r = pread_retry (fildes, &size,
@@ -216,7 +219,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes,
Elf64_Xword size;
if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA
&& (ALLOW_UNALIGNED
- || (((size_t) ((char *) map_address + ehdr.e64->e_shoff))
+ || (((size_t) ((char *) (map_address + ehdr.e64->e_shoff
+ + offset)))
& (__alignof__ (Elf64_Shdr) - 1)) == 0))
/* We can directly access the memory. */
size = ((Elf64_Shdr *) ((char *) map_address + ehdr.e64->e_shoff
@@ -227,9 +231,10 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes,
if (likely (map_address != NULL))
/* gcc will optimize the memcpy to a simple memory
access while taking care of alignment issues. */
- memcpy (&size, &((Elf64_Shdr *) ((char *) map_address
- + ehdr.e64->e_shoff
- + offset))->sh_size,
+ memcpy (&size, ((char *) map_address
+ + ehdr.e64->e_shoff
+ + offset
+ + offsetof (Elf64_Shdr, sh_size)),
sizeof (Elf64_Xword));
else
if (unlikely ((r = pread_retry (fildes, &size,
@@ -380,7 +385,7 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident,
if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA
&& cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */
&& (ALLOW_UNALIGNED
- || (((uintptr_t) ((char *) ehdr + e_shoff)
+ || ((((uintptr_t) ehdr + e_shoff)
& (__alignof__ (Elf32_Shdr) - 1)) == 0)))
{
if (unlikely (scncnt > 0 && e_shoff >= maxsize)
@@ -392,8 +397,10 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident,
__libelf_seterrno (ELF_E_INVALID_ELF);
return NULL;
}
- elf->state.elf32.shdr
- = (Elf32_Shdr *) ((char *) ehdr + e_shoff);
+
+ if (scncnt > 0)
+ elf->state.elf32.shdr
+ = (Elf32_Shdr *) ((char *) ehdr + e_shoff);
for (size_t cnt = 0; cnt < scncnt; ++cnt)
{
@@ -482,15 +489,17 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident,
if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA
&& cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */
&& (ALLOW_UNALIGNED
- || (((uintptr_t) ((char *) ehdr + e_shoff)
+ || ((((uintptr_t) ehdr + e_shoff)
& (__alignof__ (Elf64_Shdr) - 1)) == 0)))
{
if (unlikely (scncnt > 0 && e_shoff >= maxsize)
|| unlikely (maxsize - e_shoff
< scncnt * sizeof (Elf64_Shdr)))
goto free_and_out;
- elf->state.elf64.shdr
- = (Elf64_Shdr *) ((char *) ehdr + e_shoff);
+
+ if (scncnt > 0)
+ elf->state.elf64.shdr
+ = (Elf64_Shdr *) ((char *) ehdr + e_shoff);
for (size_t cnt = 0; cnt < scncnt; ++cnt)
{
@@ -756,6 +765,11 @@ read_long_names (Elf *elf)
*((char *) mempcpy (buf, hdr->ar_size, sizeof (hdr->ar_size))) = '\0';
string = buf;
}
+
+ /* atol expects to see at least one digit.
+ It also cannot be negative (-). */
+ if (!isdigit(string[0]))
+ return NULL;
len = atol (string);
if (memcmp (hdr->ar_name, "// ", 16) == 0)
@@ -774,7 +788,7 @@ read_long_names (Elf *elf)
/* Due to the stupid format of the long name table entry (which are not
NUL terminted) we have to provide an appropriate representation anyhow.
Therefore we always make a copy which has the appropriate form. */
- newp = (char *) malloc (len);
+ newp = malloc (len);
if (newp != NULL)
{
char *runp;
diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c
index 1f031fca..05ebf6a9 100644
--- a/libelf/elf_getarsym.c
+++ b/libelf/elf_getarsym.c
@@ -198,7 +198,7 @@ elf_getarsym (Elf *elf, size_t *ptr)
/* Now we can allocate the arrays needed to store the index. */
size_t ar_sym_len = (n + 1) * sizeof (Elf_Arsym);
- elf->state.ar.ar_sym = (Elf_Arsym *) malloc (ar_sym_len);
+ elf->state.ar.ar_sym = malloc (ar_sym_len);
if (elf->state.ar.ar_sym != NULL)
{
void *file_data; /* unit32_t[n] or uint64_t[n] */
@@ -216,8 +216,7 @@ elf_getarsym (Elf *elf, size_t *ptr)
file_data = temp_data;
ar_sym_len += index_size - n * w;
- Elf_Arsym *newp = (Elf_Arsym *) realloc (elf->state.ar.ar_sym,
- ar_sym_len);
+ Elf_Arsym *newp = realloc (elf->state.ar.ar_sym, ar_sym_len);
if (newp == NULL)
{
free (elf->state.ar.ar_sym);
diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c
index 6ed44504..a704aae3 100644
--- a/libelf/elf_getdata.c
+++ b/libelf/elf_getdata.c
@@ -1,5 +1,6 @@
/* Return the next data element from the section after possibly converting it.
Copyright (C) 1998-2005, 2006, 2007, 2015, 2016 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -77,7 +78,6 @@ static const Elf_Type shtype_map[TYPEIDX (SHT_HISUNW) + 1] =
const uint_fast8_t __libelf_type_aligns[ELFCLASSNUM - 1][ELF_T_NUM] =
{
# define TYPE_ALIGNS(Bits) \
- { \
[ELF_T_ADDR] = __alignof__ (ElfW2(Bits,Addr)), \
[ELF_T_EHDR] = __alignof__ (ElfW2(Bits,Ehdr)), \
[ELF_T_HALF] = __alignof__ (ElfW2(Bits,Half)), \
@@ -100,13 +100,17 @@ const uint_fast8_t __libelf_type_aligns[ELFCLASSNUM - 1][ELF_T_NUM] =
[ELF_T_MOVE] = __alignof__ (ElfW2(Bits,Move)), \
[ELF_T_LIB] = __alignof__ (ElfW2(Bits,Lib)), \
[ELF_T_NHDR] = __alignof__ (ElfW2(Bits,Nhdr)), \
- [ELF_T_GNUHASH] = __alignof__ (Elf32_Word), \
[ELF_T_AUXV] = __alignof__ (ElfW2(Bits,auxv_t)), \
[ELF_T_CHDR] = __alignof__ (ElfW2(Bits,Chdr)), \
- [ELF_T_NHDR8] = 8 /* Special case for GNU Property note. */ \
- }
- [ELFCLASS32 - 1] = TYPE_ALIGNS (32),
- [ELFCLASS64 - 1] = TYPE_ALIGNS (64),
+ [ELF_T_NHDR8] = 8 /* Special case for GNU Property note. */
+ [ELFCLASS32 - 1] = {
+ TYPE_ALIGNS (32),
+ [ELF_T_GNUHASH] = __alignof__ (Elf32_Word),
+ },
+ [ELFCLASS64 - 1] = {
+ TYPE_ALIGNS (64),
+ [ELF_T_GNUHASH] = __alignof__ (Elf64_Xword),
+ },
# undef TYPE_ALIGNS
};
@@ -146,7 +150,7 @@ convert_data (Elf_Scn *scn, int eclass,
scn->data_base = scn->rawdata_base;
else
{
- scn->data_base = (char *) malloc (size);
+ scn->data_base = malloc (size);
if (scn->data_base == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -161,7 +165,7 @@ convert_data (Elf_Scn *scn, int eclass,
{
xfct_t fp;
- scn->data_base = (char *) malloc (size);
+ scn->data_base = malloc (size);
if (scn->data_base == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -175,7 +179,7 @@ convert_data (Elf_Scn *scn, int eclass,
rawdata_source = scn->rawdata_base;
else
{
- rawdata_source = (char *) malloc (size);
+ rawdata_source = malloc (size);
if (rawdata_source == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -328,8 +332,7 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn)
/* We have to read the data from the file. Allocate the needed
memory. */
- scn->rawdata_base = scn->rawdata.d.d_buf
- = (char *) malloc (size);
+ scn->rawdata_base = scn->rawdata.d.d_buf = malloc (size);
if (scn->rawdata.d.d_buf == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -384,7 +387,18 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn)
which should be uncommon. */
align = align ?: 1;
if (type != SHT_NOBITS && align > offset)
- align = offset;
+ {
+ /* Align the offset to the next power of two. Uses algorithm from
+ https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 */
+ align = offset - 1;
+ align |= align >> 1;
+ align |= align >> 2;
+ align |= align >> 4;
+ align |= align >> 8;
+ align |= align >> 16;
+ align |= align >> 32;
+ align++;
+ }
scn->rawdata.d.d_align = align;
if (elf->class == ELFCLASS32
|| (offsetof (struct Elf, state.elf32.ehdr)
diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c
index 1072f7de..2f55cbb4 100644
--- a/libelf/elf_getdata_rawchunk.c
+++ b/libelf/elf_getdata_rawchunk.c
@@ -1,5 +1,6 @@
/* Return converted data from raw chunk of ELF file.
Copyright (C) 2007, 2014, 2015 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -75,6 +76,20 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size, Elf_Type type)
rwlock_rdlock (elf->lock);
+ /* Maybe we already got this chunk? */
+ Elf_Data_Chunk *rawchunks = elf->state.elf.rawchunks;
+ while (rawchunks != NULL)
+ {
+ if ((rawchunks->offset == offset || size == 0)
+ && rawchunks->data.d.d_size == size
+ && rawchunks->data.d.d_type == type)
+ {
+ result = &rawchunks->data.d;
+ goto out;
+ }
+ rawchunks = rawchunks->next;
+ }
+
size_t align = __libelf_type_align (elf->class, type);
if (elf->map_address != NULL)
{
@@ -171,6 +186,7 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size, Elf_Type type)
chunk->data.d.d_type = type;
chunk->data.d.d_align = align;
chunk->data.d.d_version = EV_CURRENT;
+ chunk->offset = offset;
rwlock_unlock (elf->lock);
rwlock_wrlock (elf->lock);
diff --git a/libelf/elf_getscn.c b/libelf/elf_getscn.c
index e1fbaaaa..be9c76f0 100644
--- a/libelf/elf_getscn.c
+++ b/libelf/elf_getscn.c
@@ -68,7 +68,7 @@ elf_getscn (Elf *elf, size_t idx)
Elf_Scn *scn0 = &runp->data[0];
if (elf->class == ELFCLASS32)
{
- scn0->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr));
+ scn0->shdr.e32 = calloc (1, sizeof (Elf32_Shdr));
if (scn0->shdr.e32 == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -77,7 +77,7 @@ elf_getscn (Elf *elf, size_t idx)
}
else
{
- scn0->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr));
+ scn0->shdr.e64 = calloc (1, sizeof (Elf64_Shdr));
if (scn0->shdr.e64 == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
diff --git a/libelf/elf_newdata.c b/libelf/elf_newdata.c
index 896f22cd..0063d599 100644
--- a/libelf/elf_newdata.c
+++ b/libelf/elf_newdata.c
@@ -106,7 +106,7 @@ elf_newdata (Elf_Scn *scn)
}
/* Create a new, empty data descriptor. */
- result = (Elf_Data_List *) calloc (1, sizeof (Elf_Data_List));
+ result = calloc (1, sizeof (Elf_Data_List));
if (result == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c
index d15a642e..d6bdf153 100644
--- a/libelf/elf_newscn.c
+++ b/libelf/elf_newscn.c
@@ -94,9 +94,9 @@ elf_newscn (Elf *elf)
1
#endif
)
- newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList)
- + ((elf->state.elf.scnincr *= 2)
- * sizeof (Elf_Scn)), 1);
+ newp = calloc (sizeof (Elf_ScnList)
+ + ((elf->state.elf.scnincr *= 2)
+ * sizeof (Elf_Scn)), 1);
if (newp == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -122,7 +122,7 @@ elf_newscn (Elf *elf)
/* Create a section header for this section. */
if (elf->class == ELFCLASS32)
{
- result->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr));
+ result->shdr.e32 = calloc (1, sizeof (Elf32_Shdr));
if (result->shdr.e32 == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
@@ -131,7 +131,7 @@ elf_newscn (Elf *elf)
}
else
{
- result->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr));
+ result->shdr.e64 = calloc (1, sizeof (Elf64_Shdr));
if (result->shdr.e64 == NULL)
{
__libelf_seterrno (ELF_E_NOMEM);
diff --git a/libelf/elf_readall.c b/libelf/elf_readall.c
index 384d2512..0a3a233d 100644
--- a/libelf/elf_readall.c
+++ b/libelf/elf_readall.c
@@ -107,7 +107,7 @@ __libelf_readall (Elf *elf)
}
/* Allocate all the memory we need. */
- mem = (char *) malloc (elf->maximum_size);
+ mem = malloc (elf->maximum_size);
if (mem != NULL)
{
/* Read the file content. */
diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c
index 76f2caf1..79a24d25 100644
--- a/libelf/elf_strptr.c
+++ b/libelf/elf_strptr.c
@@ -56,7 +56,9 @@ get_zdata (Elf_Scn *strscn)
static bool validate_str (const char *str, size_t from, size_t to)
{
#if HAVE_DECL_MEMRCHR
- return memrchr (&str[from], '\0', to - from) != NULL;
+ // Check end first, which is likely a zero terminator, to prevent function call
+ return ((to > 0 && str[to - 1] == '\0')
+ || (to - from > 0 && memrchr (&str[from], '\0', to - from - 1) != NULL));
#else
do {
if (to <= from)
diff --git a/libelf/elf_update.c b/libelf/elf_update.c
index 9b8867ce..97ca9ca9 100644
--- a/libelf/elf_update.c
+++ b/libelf/elf_update.c
@@ -106,8 +106,10 @@ write_file (Elf *elf, int64_t size, int change_bo, size_t shnum)
if (elf->cmd == ELF_C_RDWR_MMAP
&& (size_t) size > elf->maximum_size)
{
+#ifdef HAVE_MREMAP
if (mremap (elf->map_address, elf->maximum_size,
size, 0) == MAP_FAILED)
+#endif
{
__libelf_seterrno (ELF_E_WRITE_ERROR);
return -1;
diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c
index b9e7fd65..6f8c57b7 100644
--- a/libelf/gelf_xlate.c
+++ b/libelf/gelf_xlate.c
@@ -1,5 +1,6 @@
/* Transformation functions for ELF data types.
Copyright (C) 1998,1999,2000,2002,2004,2005,2006,2007,2015 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -138,9 +139,14 @@ union unaligned
int encode __attribute__ ((unused))) \
{ ElfW2(Bits, Name) *tdest = (ElfW2(Bits, Name) *) dest; \
ElfW2(Bits, Name) *tsrc = (ElfW2(Bits, Name) *) src; \
+ size_t sz = sizeof (ElfW2(Bits, Name)); \
size_t n; \
- for (n = len / sizeof (ElfW2(Bits, Name)); n > 0; ++tdest, ++tsrc, --n) {
-#define END(Bits, Name) } }
+ for (n = len / sz; n > 0; ++tdest, ++tsrc, --n) {
+#define END(Bits, Name) \
+ } \
+ if (len % sz > 0) /* Cannot convert partial structures, just copy. */ \
+ memmove (dest, src, len % sz); \
+ }
#define TYPE_EXTRA(Code)
#define TYPE_XLATE(Code) Code
#define TYPE_NAME(Type, Name) TYPE_NAME2 (Type, Name)
diff --git a/libelf/libelfP.h b/libelf/libelfP.h
index fc1aebec..56331f45 100644
--- a/libelf/libelfP.h
+++ b/libelf/libelfP.h
@@ -266,6 +266,7 @@ typedef struct Elf_Data_Chunk
Elf_Scn dummy_scn;
struct Elf_Data_Chunk *next;
};
+ int64_t offset; /* The original raw offset in the Elf image. */
} Elf_Data_Chunk;
@@ -603,10 +604,10 @@ extern void __libelf_reset_rawdata (Elf_Scn *scn, void *buf, size_t size,
/* Align offset to 4 bytes as needed for note name and descriptor data.
This is almost always used, except for GNU Property notes, which use
8 byte padding... */
-#define NOTE_ALIGN4(n) (((n) + 3) & -4U)
+#define NOTE_ALIGN4(n) (((n) + 3) & -4UL)
/* Special note padding rule for GNU Property notes. */
-#define NOTE_ALIGN8(n) (((n) + 7) & -8U)
+#define NOTE_ALIGN8(n) (((n) + 7) & -8UL)
/* Convenience macro. */
#define INVALID_NDX(ndx, type, data) \
diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h
index 9fe01c64..97f3b730 100644
--- a/libelf/version_xlate.h
+++ b/libelf/version_xlate.h
@@ -1,5 +1,6 @@
/* Conversion functions for versioning information.
Copyright (C) 1998, 1999, 2000, 2002, 2003, 2015 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -66,7 +67,9 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode)
GElf_Verdaux *asrc;
/* Test for correct offset. */
- if (def_offset > len || len - def_offset < sizeof (GElf_Verdef))
+ if (def_offset > len
+ || len - def_offset < sizeof (GElf_Verdef)
+ || (def_offset & (__alignof__ (GElf_Verdef) - 1)) != 0)
return;
/* Work the tree from the first record. */
@@ -84,10 +87,16 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode)
ddest->vd_aux = bswap_32 (dsrc->vd_aux);
ddest->vd_next = bswap_32 (dsrc->vd_next);
+ if (ddest->vd_aux > len - def_offset)
+ return;
aux_offset = def_offset + ddest->vd_aux;
}
else
- aux_offset = def_offset + dsrc->vd_aux;
+ {
+ if (dsrc->vd_aux > len - def_offset)
+ return;
+ aux_offset = def_offset + dsrc->vd_aux;
+ }
/* Handle all the auxiliary records belonging to this definition. */
do
@@ -95,26 +104,38 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode)
GElf_Verdaux *adest;
/* Test for correct offset. */
- if (aux_offset > len || len - aux_offset < sizeof (GElf_Verdaux))
+ if (aux_offset > len
+ || len - aux_offset < sizeof (GElf_Verdaux)
+ || (aux_offset & (__alignof__ (GElf_Verdaux) - 1)) != 0)
return;
adest = (GElf_Verdaux *) ((char *) dest + aux_offset);
asrc = (GElf_Verdaux *) ((char *) src + aux_offset);
if (encode)
- aux_offset += asrc->vda_next;
+ {
+ if (asrc->vda_next > len - aux_offset)
+ return;
+ aux_offset += asrc->vda_next;
+ }
adest->vda_name = bswap_32 (asrc->vda_name);
adest->vda_next = bswap_32 (asrc->vda_next);
if (! encode)
- aux_offset += adest->vda_next;
+ {
+ if (adest->vda_next > len - aux_offset)
+ return;
+ aux_offset += adest->vda_next;
+ }
}
while (asrc->vda_next != 0);
/* Encode now if necessary. */
if (encode)
{
+ if (dsrc->vd_next > len - def_offset)
+ return;
def_offset += dsrc->vd_next;
ddest->vd_version = bswap_16 (dsrc->vd_version);
@@ -126,7 +147,11 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode)
ddest->vd_next = bswap_32 (dsrc->vd_next);
}
else
- def_offset += ddest->vd_next;
+ {
+ if (ddest->vd_next > len - def_offset)
+ return;
+ def_offset += ddest->vd_next;
+ }
}
while (dsrc->vd_next != 0);
}
@@ -165,7 +190,9 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode)
GElf_Vernaux *asrc;
/* Test for correct offset. */
- if (need_offset > len || len - need_offset < sizeof (GElf_Verneed))
+ if (need_offset > len
+ || len - need_offset < sizeof (GElf_Verneed)
+ || (need_offset & (__alignof__ (GElf_Verneed) - 1)) != 0)
return;
/* Work the tree from the first record. */
@@ -181,10 +208,16 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode)
ndest->vn_aux = bswap_32 (nsrc->vn_aux);
ndest->vn_next = bswap_32 (nsrc->vn_next);
+ if (ndest->vn_aux > len - need_offset)
+ return;
aux_offset = need_offset + ndest->vn_aux;
}
else
- aux_offset = need_offset + nsrc->vn_aux;
+ {
+ if (nsrc->vn_aux > len - need_offset)
+ return;
+ aux_offset = need_offset + nsrc->vn_aux;
+ }
/* Handle all the auxiliary records belonging to this requirement. */
do
@@ -192,14 +225,20 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode)
GElf_Vernaux *adest;
/* Test for correct offset. */
- if (aux_offset > len || len - aux_offset < sizeof (GElf_Vernaux))
+ if (aux_offset > len
+ || len - aux_offset < sizeof (GElf_Vernaux)
+ || (aux_offset & (__alignof__ (GElf_Vernaux) - 1)) != 0)
return;
adest = (GElf_Vernaux *) ((char *) dest + aux_offset);
asrc = (GElf_Vernaux *) ((char *) src + aux_offset);
if (encode)
- aux_offset += asrc->vna_next;
+ {
+ if (asrc->vna_next > len - aux_offset)
+ return;
+ aux_offset += asrc->vna_next;
+ }
adest->vna_hash = bswap_32 (asrc->vna_hash);
adest->vna_flags = bswap_16 (asrc->vna_flags);
@@ -208,13 +247,19 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode)
adest->vna_next = bswap_32 (asrc->vna_next);
if (! encode)
- aux_offset += adest->vna_next;
+ {
+ if (adest->vna_next > len - aux_offset)
+ return;
+ aux_offset += adest->vna_next;
+ }
}
while (asrc->vna_next != 0);
/* Encode now if necessary. */
if (encode)
{
+ if (nsrc->vn_next > len - need_offset)
+ return;
need_offset += nsrc->vn_next;
ndest->vn_version = bswap_16 (nsrc->vn_version);
@@ -224,7 +269,11 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode)
ndest->vn_next = bswap_32 (nsrc->vn_next);
}
else
- need_offset += ndest->vn_next;
+ {
+ if (ndest->vn_next > len - need_offset)
+ return;
+ need_offset += ndest->vn_next;
+ }
}
while (nsrc->vn_next != 0);
}
diff --git a/m4/ChangeLog b/m4/ChangeLog
index 32832693..8729f58c 100644
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,12 @@
+2022-03-20 Mark Wielaard <mark@klomp.org>
+
+ * biarch.m4: Don't check whether -m64 works for 32bit host.
+
+2022-03-14 Mark Wielaard <mark@klomp.org>
+
+ * biarch.m4: Use AS_HELP_STRING instead of AC_HELP_STRING.
+ * zip.m4: Likewise.
+
2020-12-15 Dmitry V. Levin <ldv@altlinux.org>
* .gitignore: New file.
diff --git a/m4/biarch.m4 b/m4/biarch.m4
index c238d8d1..c7baead7 100644
--- a/m4/biarch.m4
+++ b/m4/biarch.m4
@@ -28,13 +28,13 @@ biarch_CC="$biarch_CC $utrace_biarch"])])
AC_DEFUN([utrace_BIARCH], [AC_REQUIRE([utrace_HOST64])
utrace_biarch_forced=no
AC_ARG_WITH([biarch],
- AC_HELP_STRING([--with-biarch],
+ AS_HELP_STRING([--with-biarch],
[enable biarch tests despite build problems]),
[AS_IF([test "x$with_biarch" != xno], [utrace_biarch_forced=yes])])
AS_IF([test $utrace_biarch_forced = yes], [dnl
utrace_cv_cc_biarch=yes
AC_MSG_NOTICE([enabling biarch tests regardless using $biarch_CC])], [dnl
-AS_IF([test x$utrace_cv_CC_m32 != xnone], [dnl
+AS_IF([test x$utrace_cv_CC_m32 != xnone -a x$utrace_cv_host64 != xno], [dnl
AC_CACHE_CHECK([whether $biarch_CC makes executables we can run],
utrace_cv_cc_biarch, [dnl
save_CC="$CC"
diff --git a/m4/zip.m4 b/m4/zip.m4
index ab6fd57e..8affa3fa 100644
--- a/m4/zip.m4
+++ b/m4/zip.m4
@@ -4,7 +4,7 @@ dnl and sets AC_DEFINE(USE_$2) and LIBS.
AC_DEFUN([eu_ZIPLIB], [dnl
AC_ARG_WITH([[$1]],
-AC_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),,
+AS_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),,
[with_[$1]=default])
if test $with_[$1] != no; then
AC_SEARCH_LIBS([$4], [$3], [with_[$1]=yes],
diff --git a/po/ChangeLog b/po/ChangeLog
index a3c69b56..6e610671 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,15 @@
+2022-04-25 Mark Wielaard <mark@klomp.org>
+
+ * *.po: Update for 0.187.
+
+2021-11-10 Mark Wielaard <mark@klomp.org>
+
+ * *.po: Update for 0.186.
+
+2021-07-25 Hayatsu Shunsuke <hayatsu.shunsuke@gmail.com>
+
+ * ja.po: update Japanese translation
+
2021-05-22 Mark Wielaard <mark@klomp.org>
* *.po: Update for 0.185.
diff --git a/po/de.po b/po/de.po
index a7615810..55445203 100644
--- a/po/de.po
+++ b/po/de.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: elfutils VERSION\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-05-22 15:33+0200\n"
+"POT-Creation-Date: 2022-04-25 18:22+0200\n"
"PO-Revision-Date: 2009-06-29 15:15+0200\n"
"Last-Translator: Michael Münch <micm@fedoraproject.org>\n"
"Language-Team: German\n"
@@ -37,11 +37,6 @@ msgid ""
" - 'auto', 'tty', 'if-tty'\n"
msgstr ""
-#: lib/color.c:194 src/objdump.c:728
-#, fuzzy, c-format
-msgid "cannot allocate memory"
-msgstr "konnte Verzeichnis nicht erstellen: %s"
-
#: lib/printversion.c:40
#, fuzzy, c-format
msgid ""
@@ -54,8 +49,8 @@ msgstr ""
"GARANTIE,\n"
"auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n"
-#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461
-#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609
+#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580
+#: src/unstrip.c:312
#, c-format
msgid "memory exhausted"
msgstr "Kein Speicher mehr verfügbar"
@@ -313,7 +308,7 @@ msgstr "unbekannter Typ"
msgid ".debug_addr section missing"
msgstr ".debug_line Sektion fehlt"
-#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550
+#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548
msgid "Input selection options:"
msgstr "Eingabeauswahloptionen:"
@@ -550,7 +545,7 @@ msgid "No backend"
msgstr "Kein Backend"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79
-#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131
+#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
@@ -601,18 +596,18 @@ msgstr ""
msgid " Args: "
msgstr ""
-#: libebl/eblobjnote.c:300
+#: libebl/eblobjnote.c:304
#, c-format
msgid " Build ID: "
msgstr " Build ID: "
#. A non-null terminated version string.
-#: libebl/eblobjnote.c:311
+#: libebl/eblobjnote.c:315
#, c-format
msgid " Linker version: %.*s\n"
msgstr ""
-#: libebl/eblobjnote.c:638
+#: libebl/eblobjnote.c:642
#, c-format
msgid " OS: %s, ABI: "
msgstr " OS: %s, ABI: "
@@ -646,7 +641,7 @@ msgstr "ungültige Grösse des Quell-Operanden"
msgid "invalid size of destination operand"
msgstr "ungültige Grösse des Ziel-Operanden"
-#: libelf/elf_error.c:87 src/readelf.c:6217
+#: libelf/elf_error.c:87 src/readelf.c:6214
#, c-format
msgid "invalid encoding"
msgstr "ungültige Kodierung"
@@ -734,8 +729,8 @@ msgstr "data/scn Unterschied"
msgid "invalid section header"
msgstr "ungültiger Abschnitts-Header"
-#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623
-#: src/readelf.c:10724 src/readelf.c:10906
+#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692
+#: src/readelf.c:10793 src/readelf.c:10975
#, c-format
msgid "invalid data"
msgstr "Ungültige Daten"
@@ -810,94 +805,98 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s"
msgid "cannot decompress data"
msgstr "konnte Abschnittsdaten nicht kopieren: %s"
-#: src/addr2line.c:57
+#: src/addr2line.c:59
#, fuzzy
msgid "Input format options:"
msgstr "Eingabeauswahloptionen:"
-#: src/addr2line.c:59
+#: src/addr2line.c:61
msgid "Treat addresses as offsets relative to NAME section."
msgstr ""
-#: src/addr2line.c:61
+#: src/addr2line.c:63
#, fuzzy
msgid "Output format options:"
msgstr "Ausgabeformat:"
-#: src/addr2line.c:62
+#: src/addr2line.c:64
msgid "Print address before each entry"
msgstr ""
-#: src/addr2line.c:63
+#: src/addr2line.c:65
msgid "Show only base names of source files"
msgstr ""
-#: src/addr2line.c:65
-msgid "Show absolute file names using compilation directory"
+#: src/addr2line.c:67
+msgid "Show absolute file names using compilation directory (default)"
msgstr ""
-#: src/addr2line.c:66
+#: src/addr2line.c:68
msgid "Also show function names"
msgstr ""
-#: src/addr2line.c:67
+#: src/addr2line.c:69
msgid "Also show symbol or section names"
msgstr ""
-#: src/addr2line.c:68
+#: src/addr2line.c:70
msgid "Also show symbol and the section names"
msgstr ""
-#: src/addr2line.c:69
+#: src/addr2line.c:71
msgid "Also show line table flags"
msgstr ""
-#: src/addr2line.c:71
+#: src/addr2line.c:73
msgid ""
"Show all source locations that caused inline expansion of subroutines at the "
"address."
msgstr ""
-#: src/addr2line.c:74
+#: src/addr2line.c:76
msgid "Show demangled symbols (ARG is always ignored)"
msgstr ""
-#: src/addr2line.c:76
+#: src/addr2line.c:78
msgid "Print all information on one line, and indent inlines"
msgstr ""
-#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100
+#: src/addr2line.c:80
+msgid "Show relative file names without compilation directory"
+msgstr ""
+
+#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100
#: src/strings.c:78
msgid "Miscellaneous:"
msgstr "Verschiedenes:"
#. Short description of program.
-#: src/addr2line.c:86
+#: src/addr2line.c:90
msgid ""
"Locate source files and line information for ADDRs (in a.out by default)."
msgstr ""
#. Strings for arguments in help texts.
-#: src/addr2line.c:90
+#: src/addr2line.c:94
msgid "[ADDR...]"
msgstr ""
-#: src/addr2line.c:519
-#, fuzzy, c-format
+#: src/addr2line.c:527
+#, fuzzy
msgid "Section syntax requires exactly one module"
msgstr "Abschnitt syntax benötigt genau ein Modul"
-#: src/addr2line.c:542
+#: src/addr2line.c:549
#, c-format
msgid "offset %#<PRIxMAX> lies outside section '%s'"
msgstr ""
-#: src/addr2line.c:652
+#: src/addr2line.c:659
#, c-format
msgid "cannot find symbol '%s'"
msgstr "Konnte Symbol '%s' nicht finden"
-#: src/addr2line.c:657
+#: src/addr2line.c:664
#, c-format
msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
msgstr ""
@@ -1067,112 +1066,110 @@ msgstr ""
msgid "no entry %s in archive\n"
msgstr "Kein Eintrag %s in Archiv\n"
-#: src/ar.c:472 src/ar.c:927 src/ar.c:1134
-#, c-format
+#: src/ar.c:472 src/ar.c:926 src/ar.c:1132
msgid "cannot create hash table"
msgstr "Konnte Hash-Tabelle nicht erstellen"
-#: src/ar.c:479 src/ar.c:934 src/ar.c:1143
-#, c-format
+#: src/ar.c:478 src/ar.c:932 src/ar.c:1140
msgid "cannot insert into hash table"
msgstr "Konnte nicht in Hash-Tabelle einfügen"
-#: src/ar.c:487 src/ranlib.c:148
+#: src/ar.c:486 src/ranlib.c:148
#, c-format
msgid "cannot stat '%s'"
msgstr ""
-#: src/ar.c:589
+#: src/ar.c:588
#, c-format
msgid "cannot read content of %s: %s"
msgstr "Konnte Inhalt von %s: %s nicht lesen"
-#: src/ar.c:632
+#: src/ar.c:631
#, c-format
msgid "cannot open %.*s"
msgstr "Konnte %.*s nicht öffnen"
-#: src/ar.c:654
+#: src/ar.c:653
#, c-format
msgid "failed to write %s"
msgstr "Konnte %s nicht schreiben"
-#: src/ar.c:666
+#: src/ar.c:665
#, c-format
msgid "cannot change mode of %s"
msgstr ""
-#: src/ar.c:682
+#: src/ar.c:681
#, c-format
msgid "cannot change modification time of %s"
msgstr "Konnte Bearbeitungszeit von %s nicht ändern"
-#: src/ar.c:728
+#: src/ar.c:727
#, c-format
msgid "cannot rename temporary file to %.*s"
msgstr "Konnte temporäre Datei nicht in %.*s umbenennen"
-#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222
+#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222
#, c-format
msgid "cannot create new file"
msgstr "neue Datei konnte nicht angelegt werden"
-#: src/ar.c:1225
+#: src/ar.c:1222
#, c-format
msgid "position member %s not found"
msgstr ""
-#: src/ar.c:1235
+#: src/ar.c:1232
#, c-format
msgid "%s: no entry %s in archive!\n"
msgstr "%s: Kein Eintrag %s in dem Archiv!\n"
-#: src/ar.c:1264 src/objdump.c:241
+#: src/ar.c:1261 src/objdump.c:241
#, c-format
msgid "cannot open %s"
msgstr "Konnte %s nicht öffnen"
-#: src/ar.c:1269
+#: src/ar.c:1266
#, c-format
msgid "cannot stat %s"
msgstr ""
-#: src/ar.c:1275
+#: src/ar.c:1272
#, c-format
msgid "%s is no regular file"
msgstr "%s ist keine reguläre Datei"
-#: src/ar.c:1288
+#: src/ar.c:1285
#, c-format
msgid "cannot get ELF descriptor for %s: %s\n"
msgstr ""
-#: src/ar.c:1308
+#: src/ar.c:1305
#, c-format
msgid "cannot read %s: %s"
msgstr "Konnte %s: %s nicht lesen"
-#: src/ar.c:1483
+#: src/ar.c:1480
#, fuzzy, c-format
msgid "cannot represent ar_date"
msgstr "konnte Abschnittsdaten nicht kopieren: %s"
-#: src/ar.c:1489
+#: src/ar.c:1486
#, fuzzy, c-format
msgid "cannot represent ar_uid"
msgstr "konnte Abschnittsdaten nicht kopieren: %s"
-#: src/ar.c:1495
+#: src/ar.c:1492
#, fuzzy, c-format
msgid "cannot represent ar_gid"
msgstr "konnte Abschnittsdaten nicht kopieren: %s"
-#: src/ar.c:1501
+#: src/ar.c:1498
#, fuzzy, c-format
msgid "cannot represent ar_mode"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/ar.c:1507
+#: src/ar.c:1504
#, fuzzy, c-format
msgid "cannot represent ar_size"
msgstr "Konnte %s nicht öffnen"
@@ -1201,194 +1198,194 @@ msgstr "Das Archiv '%s' ist zu groß"
msgid "cannot read ELF header of %s(%s): %s"
msgstr "\"Konnte ELF-Kopf von %s(%s): %s nicht lesen"
-#: src/elfclassify.c:92
+#: src/elfclassify.c:91
msgid "opening"
msgstr ""
-#: src/elfclassify.c:99
+#: src/elfclassify.c:98
msgid "reading"
msgstr ""
-#: src/elfclassify.c:245
+#: src/elfclassify.c:244
#, fuzzy
#| msgid "cannot get ELF header"
msgid "ELF header"
msgstr "ELF Kopf konnte nicht ausgelesen werden"
-#: src/elfclassify.c:256
+#: src/elfclassify.c:255
#, fuzzy
#| msgid "Program Headers:"
msgid "program headers"
msgstr "Programm-Köpfe:"
-#: src/elfclassify.c:265
+#: src/elfclassify.c:264
#, fuzzy
#| msgid "Program Headers:"
msgid "program header"
msgstr "Programm-Köpfe:"
-#: src/elfclassify.c:285
+#: src/elfclassify.c:284
#, fuzzy
#| msgid "invalid section header"
msgid "section headers"
msgstr "ungültiger Abschnitts-Header"
-#: src/elfclassify.c:296
+#: src/elfclassify.c:295
#, fuzzy
msgid "section header string table index"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elfclassify.c:310
+#: src/elfclassify.c:309
#, fuzzy
msgid "could not obtain section header"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elfclassify.c:316
+#: src/elfclassify.c:315
#, fuzzy
msgid "could not obtain section name"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elfclassify.c:829
+#: src/elfclassify.c:828
msgid "writing to standard output"
msgstr ""
-#: src/elfclassify.c:856
+#: src/elfclassify.c:855
msgid "reading from standard input"
msgstr ""
-#: src/elfclassify.c:877
+#: src/elfclassify.c:876
#, fuzzy
#| msgid "Input selection options:"
msgid "Classification options"
msgstr "Eingabeauswahloptionen:"
-#: src/elfclassify.c:879
+#: src/elfclassify.c:878
msgid "File looks like an ELF object or archive/static library (default)"
msgstr ""
-#: src/elfclassify.c:882
+#: src/elfclassify.c:881
msgid "File is an regular ELF object (not an archive/static library)"
msgstr ""
-#: src/elfclassify.c:885
+#: src/elfclassify.c:884
msgid "File is an ELF archive or static library"
msgstr ""
-#: src/elfclassify.c:888
+#: src/elfclassify.c:887
msgid "File is an ELF core dump file"
msgstr ""
-#: src/elfclassify.c:891
+#: src/elfclassify.c:890
msgid ""
"File is an ELF file with symbol table or .debug_* sections and can be "
"stripped further"
msgstr ""
-#: src/elfclassify.c:894
+#: src/elfclassify.c:893
msgid "File is (primarily) an ELF program executable (not primarily a DSO)"
msgstr ""
-#: src/elfclassify.c:897
+#: src/elfclassify.c:896
msgid "File is an ELF program executable (might also be a DSO)"
msgstr ""
-#: src/elfclassify.c:900
+#: src/elfclassify.c:899
msgid ""
"File is (primarily) an ELF shared object (DSO) (not primarily an executable)"
msgstr ""
-#: src/elfclassify.c:903
+#: src/elfclassify.c:902
msgid "File is an ELF shared object (DSO) (might also be an executable)"
msgstr ""
-#: src/elfclassify.c:907
+#: src/elfclassify.c:906
#, fuzzy
#| msgid "cannot find kernel modules"
msgid "File is a linux kernel module"
msgstr "Konnte Kernel Module nicht finden"
-#: src/elfclassify.c:909
+#: src/elfclassify.c:908
msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)"
msgstr ""
-#: src/elfclassify.c:912
+#: src/elfclassify.c:911
msgid "File is a loadable ELF object (program or shared object)"
msgstr ""
-#: src/elfclassify.c:941
+#: src/elfclassify.c:940
msgid "Input flags"
msgstr ""
-#: src/elfclassify.c:943
+#: src/elfclassify.c:942
msgid "Only classify regular (not symlink nor special device) files"
msgstr ""
-#: src/elfclassify.c:945
+#: src/elfclassify.c:944
msgid ""
"Also read file names to process from standard input, separated by newlines"
msgstr ""
-#: src/elfclassify.c:948
+#: src/elfclassify.c:947
msgid ""
"Also read file names to process from standard input, separated by ASCII NUL "
"bytes"
msgstr ""
-#: src/elfclassify.c:951
+#: src/elfclassify.c:950
msgid "Do not read files from standard input (default)"
msgstr ""
-#: src/elfclassify.c:953
+#: src/elfclassify.c:952
msgid "Try to open compressed files or embedded (kernel) ELF images"
msgstr ""
-#: src/elfclassify.c:956
+#: src/elfclassify.c:955
#, fuzzy
#| msgid "Output format:"
msgid "Output flags"
msgstr "Ausgabeformat:"
-#: src/elfclassify.c:958
+#: src/elfclassify.c:957
msgid "Output names of files, separated by newline"
msgstr ""
-#: src/elfclassify.c:960
+#: src/elfclassify.c:959
msgid "Output names of files, separated by ASCII NUL"
msgstr ""
-#: src/elfclassify.c:962
+#: src/elfclassify.c:961
#, fuzzy
#| msgid "More than one output file name given."
msgid "Do not output file names"
msgstr "Mehr als ein Name der Ausgabedatei angegeben."
-#: src/elfclassify.c:964
+#: src/elfclassify.c:963
msgid "If printing file names, print matching files (default)"
msgstr ""
-#: src/elfclassify.c:966
+#: src/elfclassify.c:965
msgid "If printing file names, print files that do not match"
msgstr ""
-#: src/elfclassify.c:968
+#: src/elfclassify.c:967
msgid "Additional flags"
msgstr ""
-#: src/elfclassify.c:970
+#: src/elfclassify.c:969
msgid "Output additional information (can be specified multiple times)"
msgstr ""
-#: src/elfclassify.c:972
+#: src/elfclassify.c:971
msgid "Suppress some error output (counterpart to --verbose)"
msgstr ""
#. Strings for arguments in help texts.
-#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77
+#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77
#: src/readelf.c:158
msgid "FILE..."
msgstr "DATEI..."
-#: src/elfclassify.c:981
+#: src/elfclassify.c:980
msgid ""
"Determine the type of an ELF file.\n"
"\n"
@@ -1618,14 +1615,14 @@ msgstr ""
msgid "Invalid value '%s' for --gaps parameter."
msgstr ""
-#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141
-#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067
+#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141
+#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070
#: src/unstrip.c:2195 src/unstrip.c:2224
#, c-format
msgid "cannot open '%s'"
msgstr "'%s' kann nicht geöffnet werden"
-#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158
+#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158
#, c-format
msgid "cannot create ELF descriptor for '%s': %s"
msgstr ""
@@ -1635,7 +1632,7 @@ msgstr ""
msgid "cannot create EBL descriptor for '%s'"
msgstr ""
-#: src/elfcmp.c:761 src/findtextrel.c:394
+#: src/elfcmp.c:761 src/findtextrel.c:385
#, c-format
msgid "cannot get section header of section %zu: %s"
msgstr ""
@@ -1650,7 +1647,7 @@ msgstr ""
msgid "cannot get relocation: %s"
msgstr ""
-#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117
+#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117
#, c-format
msgid "-o option specified twice"
msgstr ""
@@ -1671,7 +1668,7 @@ msgstr "unbekannter Typ"
msgid "No input file given"
msgstr "Eingabedatei '%s' ignoriert"
-#: src/elfcompress.c:151 src/elfcompress.c:1350
+#: src/elfcompress.c:151 src/elfcompress.c:1349
#, c-format
msgid "Only one input file allowed together with '-o'"
msgstr ""
@@ -1913,7 +1910,7 @@ msgstr ""
#: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655
#: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106
-#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458
+#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr ""
@@ -3277,305 +3274,305 @@ msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
msgstr ""
-#: src/elflint.c:4397
+#: src/elflint.c:4404
#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
"offset %zu\n"
msgstr ""
-#: src/elflint.c:4402
+#: src/elflint.c:4409
#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
"'%s' at offset %zu\n"
msgstr ""
-#: src/elflint.c:4421
+#: src/elflint.c:4428
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4441
+#: src/elflint.c:4448
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr ""
-#: src/elflint.c:4444
+#: src/elflint.c:4451
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4465
+#: src/elflint.c:4472
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4472
+#: src/elflint.c:4479
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr ""
-#: src/elflint.c:4475
+#: src/elflint.c:4482
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4493
+#: src/elflint.c:4500
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
msgstr ""
-#: src/elflint.c:4508
+#: src/elflint.c:4515
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr ""
-#: src/elflint.c:4518
+#: src/elflint.c:4525
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:4529
+#: src/elflint.c:4536
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr ""
-#: src/elflint.c:4537
+#: src/elflint.c:4544
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr ""
-#: src/elflint.c:4544
+#: src/elflint.c:4551
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr ""
-#: src/elflint.c:4558
+#: src/elflint.c:4565
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4561
+#: src/elflint.c:4568
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4571
+#: src/elflint.c:4578
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr ""
-#: src/elflint.c:4592
+#: src/elflint.c:4599
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr ""
-#: src/elflint.c:4603
+#: src/elflint.c:4610
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
-#: src/elflint.c:4610
+#: src/elflint.c:4617
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
-#: src/elflint.c:4619 src/elflint.c:4642
+#: src/elflint.c:4626 src/elflint.c:4649
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr ""
-#: src/elflint.c:4648
+#: src/elflint.c:4655
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr ""
-#: src/elflint.c:4675
+#: src/elflint.c:4682
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4678
+#: src/elflint.c:4685
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4691
+#: src/elflint.c:4698
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr ""
-#: src/elflint.c:4699
+#: src/elflint.c:4706
#, c-format
msgid "call frame search table must be allocated\n"
msgstr ""
-#: src/elflint.c:4702
+#: src/elflint.c:4709
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr ""
-#: src/elflint.c:4706
+#: src/elflint.c:4713
#, c-format
msgid "call frame search table must not be writable\n"
msgstr ""
-#: src/elflint.c:4709
+#: src/elflint.c:4716
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr ""
-#: src/elflint.c:4714
+#: src/elflint.c:4721
#, c-format
msgid "call frame search table must not be executable\n"
msgstr ""
-#: src/elflint.c:4717
+#: src/elflint.c:4724
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr ""
-#: src/elflint.c:4728
+#: src/elflint.c:4735
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr ""
-#: src/elflint.c:4735
+#: src/elflint.c:4742
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr ""
-#: src/elflint.c:4738
+#: src/elflint.c:4745
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
"alignment\n"
msgstr ""
-#: src/elflint.c:4751
+#: src/elflint.c:4758
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
"program header entry"
msgstr ""
-#: src/elflint.c:4785
+#: src/elflint.c:4792
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr ""
-#: src/elflint.c:4797
+#: src/elflint.c:4804
#, fuzzy, c-format
msgid "cannot create backend for ELF file\n"
msgstr "neue Datei konnte nicht angelegt werden"
-#: src/elflint.c:4818
+#: src/elflint.c:4825
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr ""
-#: src/findtextrel.c:60
+#: src/findtextrel.c:61
msgid "Input Selection:"
msgstr ""
-#: src/findtextrel.c:61
+#: src/findtextrel.c:62
msgid "Prepend PATH to all file names"
msgstr ""
-#: src/findtextrel.c:63
+#: src/findtextrel.c:64
msgid "Use PATH as root of debuginfo hierarchy"
msgstr ""
#. Short description of program.
-#: src/findtextrel.c:70
+#: src/findtextrel.c:71
msgid "Locate source of text relocations in FILEs (a.out by default)."
msgstr ""
#. Strings for arguments in help texts.
-#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80
+#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80
#: src/strings.c:87 src/strip.c:101
msgid "[FILE...]"
msgstr ""
-#: src/findtextrel.c:222
+#: src/findtextrel.c:224
#, c-format
msgid "cannot get ELF header '%s': %s"
msgstr ""
-#: src/findtextrel.c:233
+#: src/findtextrel.c:235
#, c-format
msgid "'%s' is not a DSO or PIE"
msgstr ""
-#: src/findtextrel.c:253
+#: src/findtextrel.c:255
#, c-format
msgid "getting get section header of section %zu: %s"
msgstr ""
-#: src/findtextrel.c:277
+#: src/findtextrel.c:279
#, c-format
msgid "cannot read dynamic section: %s"
msgstr ""
-#: src/findtextrel.c:298
+#: src/findtextrel.c:300
#, c-format
msgid "no text relocations reported in '%s'"
msgstr ""
-#: src/findtextrel.c:310
+#: src/findtextrel.c:311
#, c-format
msgid "while reading ELF file"
msgstr ""
-#: src/findtextrel.c:314
+#: src/findtextrel.c:315
#, fuzzy, c-format
msgid "cannot get program header count: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/findtextrel.c:325 src/findtextrel.c:342
+#: src/findtextrel.c:326 src/findtextrel.c:341
#, fuzzy, c-format
msgid "cannot get program header index at offset %zd: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/findtextrel.c:406
+#: src/findtextrel.c:397
#, c-format
msgid "cannot get symbol table section %zu in '%s': %s"
msgstr ""
-#: src/findtextrel.c:427 src/findtextrel.c:450
+#: src/findtextrel.c:418 src/findtextrel.c:441
#, c-format
msgid "cannot get relocation at index %d in section %zu in '%s': %s"
msgstr ""
-#: src/findtextrel.c:516
+#: src/findtextrel.c:507
#, c-format
msgid "%s not compiled with -fpic/-fPIC\n"
msgstr ""
-#: src/findtextrel.c:570
+#: src/findtextrel.c:561
#, c-format
msgid ""
"the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
msgstr ""
-#: src/findtextrel.c:577 src/findtextrel.c:597
+#: src/findtextrel.c:568 src/findtextrel.c:588
#, c-format
msgid ""
"the file containing the function '%s' might not be compiled with -fpic/-"
"fPIC\n"
msgstr ""
-#: src/findtextrel.c:585
+#: src/findtextrel.c:576
#, c-format
msgid ""
"either the file containing the function '%s' or the file containing the "
"function '%s' is not compiled with -fpic/-fPIC\n"
msgstr ""
-#: src/findtextrel.c:605
+#: src/findtextrel.c:596
#, c-format
msgid ""
"a relocation modifies memory at offset %llu in a write-protected segment\n"
@@ -3684,12 +3681,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s"
msgstr "%s: INTERNER FEHLER %d (%s-%s): %s"
#: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308
-#: src/strip.c:2763
+#: src/strip.c:2759
#, c-format
msgid "while closing '%s'"
msgstr "beim Schliessen von '%s'"
-#: src/nm.c:403 src/objdump.c:280 src/strip.c:818
+#: src/nm.c:403 src/objdump.c:280 src/strip.c:820
#, c-format
msgid "%s: File format not recognized"
msgstr "%s: Dateiformat nicht erkannt"
@@ -3724,24 +3721,23 @@ msgstr ""
msgid "%s%s%s: file format not recognized"
msgstr "%s%s%s: Dateiformat nicht erkannt"
-#: src/nm.c:705
-#, c-format
+#: src/nm.c:703
msgid "cannot create search tree"
msgstr "Kann Suchbaum nicht erstellen"
-#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637
-#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009
-#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719
-#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530
-#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533
-#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470
-#: src/strip.c:1084
+#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637
+#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017
+#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724
+#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528
+#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597
+#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468
+#: src/strip.c:1086
#, c-format
msgid "cannot get section header string table index"
msgstr ""
#. We always print this prolog.
-#: src/nm.c:771
+#: src/nm.c:768
#, c-format
msgid ""
"\n"
@@ -3755,58 +3751,58 @@ msgstr ""
"\n"
#. The header line.
-#: src/nm.c:774
+#: src/nm.c:771
#, c-format
msgid ""
"%*s%-*s %-*s Class Type %-*s %*s Section\n"
"\n"
msgstr ""
-#: src/nm.c:776
+#: src/nm.c:773
msgctxt "sysv"
msgid "Name"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:778
+#: src/nm.c:775
msgctxt "sysv"
msgid "Value"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:780
+#: src/nm.c:777
msgctxt "sysv"
msgid "Size"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:782
+#: src/nm.c:779
msgctxt "sysv"
msgid "Line"
msgstr ""
-#: src/nm.c:1250
+#: src/nm.c:1246
#, fuzzy, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr "%s: entry size in section `%s' is not what we expect"
-#: src/nm.c:1255
+#: src/nm.c:1251
#, fuzzy, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: entry size in section `%s' is not what we expect"
-#: src/nm.c:1336
+#: src/nm.c:1331
#, fuzzy, c-format
msgid "%s: entries (%zd) in section %zd `%s' is too large"
msgstr "%s: entry size in section `%s' is not what we expect"
#. XXX Add machine specific object file types.
-#: src/nm.c:1572
+#: src/nm.c:1567
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: Ungültige Operation"
-#: src/nm.c:1622
+#: src/nm.c:1617
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: keine Symbole"
@@ -3850,11 +3846,11 @@ msgstr "Keine Operation angegeben.\n"
msgid "while close `%s'"
msgstr ""
-#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296
+#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303
msgid "INVALID SYMBOL"
msgstr ""
-#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332
+#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339
msgid "INVALID SECTION"
msgstr ""
@@ -3876,12 +3872,11 @@ msgid "Contents of section %s:\n"
msgstr "Inhalt des Abschnitts %s:\n"
#: src/objdump.c:687
-#, c-format
msgid "cannot disassemble"
msgstr "Disassemblieren nicht möglich"
-#: src/objdump.c:760
-#, fuzzy, c-format
+#: src/objdump.c:758
+#, fuzzy
msgid "cannot create backend for elf file"
msgstr "neue Datei konnte nicht angelegt werden"
@@ -4064,20 +4059,20 @@ msgstr ""
msgid "cannot generate Elf descriptor: %s"
msgstr "konnte Elf-Deskriptor nicht erzeugen: %s"
-#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179
+#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181
#, c-format
msgid "cannot determine number of sections: %s"
msgstr ""
-#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475
+#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469
#, c-format
msgid "cannot get section: %s"
msgstr ""
-#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764
-#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610
-#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222
-#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470
+#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827
+#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611
+#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223
+#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471
#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056
#, c-format
msgid "cannot get section header: %s"
@@ -4088,8 +4083,8 @@ msgstr ""
msgid "cannot get section name"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713
-#: src/readelf.c:10891
+#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782
+#: src/readelf.c:10960
#, c-format
msgid "cannot get %s content: %s"
msgstr ""
@@ -4149,274 +4144,274 @@ msgstr ""
msgid "cannot create EBL handle"
msgstr ""
-#: src/readelf.c:961
+#: src/readelf.c:959
#, fuzzy, c-format
msgid "cannot determine number of program headers: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/readelf.c:993
+#: src/readelf.c:991
#, fuzzy, c-format
msgid "cannot read ELF: %s"
msgstr "Konnte %s: %s nicht lesen"
-#: src/readelf.c:1054
+#: src/readelf.c:1052
msgid "NONE (None)"
msgstr ""
-#: src/readelf.c:1055
+#: src/readelf.c:1053
msgid "REL (Relocatable file)"
msgstr ""
-#: src/readelf.c:1056
+#: src/readelf.c:1054
msgid "EXEC (Executable file)"
msgstr ""
-#: src/readelf.c:1057
+#: src/readelf.c:1055
msgid "DYN (Shared object file)"
msgstr ""
-#: src/readelf.c:1058
+#: src/readelf.c:1056
msgid "CORE (Core file)"
msgstr ""
-#: src/readelf.c:1063
+#: src/readelf.c:1061
#, c-format
msgid "OS Specific: (%x)\n"
msgstr ""
#. && e_type <= ET_HIPROC always true
-#: src/readelf.c:1065
+#: src/readelf.c:1063
#, c-format
msgid "Processor Specific: (%x)\n"
msgstr ""
-#: src/readelf.c:1075
+#: src/readelf.c:1073
msgid ""
"ELF Header:\n"
" Magic: "
msgstr ""
-#: src/readelf.c:1079
+#: src/readelf.c:1077
#, c-format
msgid ""
"\n"
" Class: %s\n"
msgstr ""
-#: src/readelf.c:1084
+#: src/readelf.c:1082
#, fuzzy, c-format
msgid " Data: %s\n"
msgstr " Daten: %s\n"
-#: src/readelf.c:1090
+#: src/readelf.c:1088
#, c-format
msgid " Ident Version: %hhd %s\n"
msgstr ""
-#: src/readelf.c:1092 src/readelf.c:1114
+#: src/readelf.c:1090 src/readelf.c:1112
msgid "(current)"
msgstr "(aktuell)"
-#: src/readelf.c:1096
+#: src/readelf.c:1094
#, c-format
msgid " OS/ABI: %s\n"
msgstr ""
-#: src/readelf.c:1099
+#: src/readelf.c:1097
#, c-format
msgid " ABI Version: %hhd\n"
msgstr ""
-#: src/readelf.c:1102
+#: src/readelf.c:1100
msgid " Type: "
msgstr " Typ: "
-#: src/readelf.c:1107
+#: src/readelf.c:1105
#, c-format
msgid " Machine: %s\n"
msgstr ""
-#: src/readelf.c:1109
+#: src/readelf.c:1107
#, fuzzy, c-format
msgid " Machine: <unknown>: 0x%x\n"
msgstr " Daten: %s\n"
-#: src/readelf.c:1112
+#: src/readelf.c:1110
#, c-format
msgid " Version: %d %s\n"
msgstr ""
-#: src/readelf.c:1116
+#: src/readelf.c:1114
#, c-format
msgid " Entry point address: %#<PRIx64>\n"
msgstr ""
-#: src/readelf.c:1119
+#: src/readelf.c:1117
#, c-format
msgid " Start of program headers: %<PRId64> %s\n"
msgstr ""
-#: src/readelf.c:1120 src/readelf.c:1123
+#: src/readelf.c:1118 src/readelf.c:1121
msgid "(bytes into file)"
msgstr ""
-#: src/readelf.c:1122
+#: src/readelf.c:1120
#, c-format
msgid " Start of section headers: %<PRId64> %s\n"
msgstr ""
-#: src/readelf.c:1125
+#: src/readelf.c:1123
#, c-format
msgid " Flags: %s\n"
msgstr ""
-#: src/readelf.c:1128
+#: src/readelf.c:1126
#, c-format
msgid " Size of this header: %<PRId16> %s\n"
msgstr ""
-#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149
+#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147
msgid "(bytes)"
msgstr "(Bytes)"
-#: src/readelf.c:1131
+#: src/readelf.c:1129
#, c-format
msgid " Size of program header entries: %<PRId16> %s\n"
msgstr ""
-#: src/readelf.c:1134
+#: src/readelf.c:1132
#, c-format
msgid " Number of program headers entries: %<PRId16>"
msgstr ""
-#: src/readelf.c:1141
+#: src/readelf.c:1139
#, c-format
msgid " (%<PRIu32> in [0].sh_info)"
msgstr ""
-#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175
+#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173
msgid " ([0] not available)"
msgstr ""
-#: src/readelf.c:1148
+#: src/readelf.c:1146
#, c-format
msgid " Size of section header entries: %<PRId16> %s\n"
msgstr ""
-#: src/readelf.c:1151
+#: src/readelf.c:1149
#, c-format
msgid " Number of section headers entries: %<PRId16>"
msgstr ""
-#: src/readelf.c:1158
+#: src/readelf.c:1156
#, c-format
msgid " (%<PRIu32> in [0].sh_size)"
msgstr ""
#. We managed to get the zeroth section.
-#: src/readelf.c:1171
+#: src/readelf.c:1169
#, c-format
msgid " (%<PRIu32> in [0].sh_link)"
msgstr ""
-#: src/readelf.c:1179
+#: src/readelf.c:1177
#, c-format
msgid ""
" Section header string table index: XINDEX%s\n"
"\n"
msgstr ""
-#: src/readelf.c:1183
+#: src/readelf.c:1181
#, c-format
msgid ""
" Section header string table index: %<PRId16>\n"
"\n"
msgstr ""
-#: src/readelf.c:1230 src/readelf.c:1440
+#: src/readelf.c:1227 src/readelf.c:1435
#, fuzzy, c-format
msgid "cannot get number of sections: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/readelf.c:1233
+#: src/readelf.c:1230
#, fuzzy, c-format
msgid ""
"There are %zd section headers, starting at offset %#<PRIx64>:\n"
"\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:1242
+#: src/readelf.c:1238
#, fuzzy, c-format
msgid "cannot get section header string table index: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:1245
+#: src/readelf.c:1241
msgid "Section Headers:"
msgstr ""
-#: src/readelf.c:1248
+#: src/readelf.c:1244
msgid ""
"[Nr] Name Type Addr Off Size ES Flags Lk "
"Inf Al"
msgstr ""
-#: src/readelf.c:1250
+#: src/readelf.c:1246
msgid ""
"[Nr] Name Type Addr Off Size ES "
"Flags Lk Inf Al"
msgstr ""
-#: src/readelf.c:1255
+#: src/readelf.c:1251
msgid " [Compression Size Al]"
msgstr ""
-#: src/readelf.c:1257
+#: src/readelf.c:1253
msgid " [Compression Size Al]"
msgstr ""
-#: src/readelf.c:1335
+#: src/readelf.c:1331
#, c-format
msgid "bad compression header for section %zd: %s"
msgstr ""
-#: src/readelf.c:1346
+#: src/readelf.c:1342
#, c-format
msgid "bad gnu compressed size for section %zd: %s"
msgstr ""
-#: src/readelf.c:1364
+#: src/readelf.c:1360
msgid "Program Headers:"
msgstr "Programm-Köpfe:"
-#: src/readelf.c:1366
+#: src/readelf.c:1362
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
msgstr ""
-#: src/readelf.c:1369
+#: src/readelf.c:1365
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align"
msgstr ""
-#: src/readelf.c:1426
+#: src/readelf.c:1422
#, c-format
msgid "\t[Requesting program interpreter: %s]\n"
msgstr ""
-#: src/readelf.c:1453
+#: src/readelf.c:1447
msgid ""
"\n"
" Section to Segment mapping:\n"
" Segment Sections..."
msgstr ""
-#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
+#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
#, c-format
msgid "cannot get program header: %s"
msgstr ""
-#: src/readelf.c:1610
+#: src/readelf.c:1602
#, c-format
msgid ""
"\n"
@@ -4427,7 +4422,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:1615
+#: src/readelf.c:1607
#, c-format
msgid ""
"\n"
@@ -4438,31 +4433,31 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:1623
+#: src/readelf.c:1615
msgid "<INVALID SYMBOL>"
msgstr ""
-#: src/readelf.c:1637
+#: src/readelf.c:1629
msgid "<INVALID SECTION>"
msgstr ""
-#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635
-#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693
+#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699
+#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757
msgid "Couldn't uncompress section"
msgstr ""
-#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501
+#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500
#, fuzzy, c-format
msgid "cannot get section [%zd] header: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801
-#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409
+#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805
+#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406
#, fuzzy, c-format
msgid "invalid sh_link value in section %zu"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:1812
+#: src/readelf.c:1821
#, c-format
msgid ""
"\n"
@@ -4475,43 +4470,43 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:1822
+#: src/readelf.c:1831
msgid " Type Value\n"
msgstr ""
-#: src/readelf.c:1846
+#: src/readelf.c:1855
#, c-format
msgid "Shared library: [%s]\n"
msgstr ""
-#: src/readelf.c:1851
+#: src/readelf.c:1860
#, c-format
msgid "Library soname: [%s]\n"
msgstr ""
-#: src/readelf.c:1856
+#: src/readelf.c:1865
#, c-format
msgid "Library rpath: [%s]\n"
msgstr ""
-#: src/readelf.c:1861
+#: src/readelf.c:1870
#, c-format
msgid "Library runpath: [%s]\n"
msgstr ""
-#: src/readelf.c:1881
+#: src/readelf.c:1890
#, c-format
msgid "%<PRId64> (bytes)\n"
msgstr ""
-#: src/readelf.c:1994 src/readelf.c:2184
+#: src/readelf.c:2003 src/readelf.c:2192
#, c-format
msgid ""
"\n"
"Invalid symbol table at offset %#0<PRIx64>\n"
msgstr ""
-#: src/readelf.c:2012 src/readelf.c:2202
+#: src/readelf.c:2020 src/readelf.c:2209
#, c-format
msgid ""
"\n"
@@ -4530,7 +4525,7 @@ msgstr[1] ""
#. The .rela.dyn section does not refer to a specific section but
#. instead of section index zero. Do not try to print a section
#. name.
-#: src/readelf.c:2027 src/readelf.c:2217
+#: src/readelf.c:2035 src/readelf.c:2224
#, c-format
msgid ""
"\n"
@@ -4541,29 +4536,29 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:2037
+#: src/readelf.c:2045
msgid " Offset Type Value Name\n"
msgstr ""
-#: src/readelf.c:2039
+#: src/readelf.c:2047
msgid " Offset Type Value Name\n"
msgstr ""
-#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137
-#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309
-#: src/readelf.c:2331 src/readelf.c:2344
+#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145
+#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316
+#: src/readelf.c:2338 src/readelf.c:2351
msgid "<INVALID RELOC>"
msgstr ""
-#: src/readelf.c:2227
+#: src/readelf.c:2234
msgid " Offset Type Value Addend Name\n"
msgstr ""
-#: src/readelf.c:2229
+#: src/readelf.c:2236
msgid " Offset Type Value Addend Name\n"
msgstr ""
-#: src/readelf.c:2467
+#: src/readelf.c:2473
#, c-format
msgid ""
"\n"
@@ -4574,40 +4569,40 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:2472
+#: src/readelf.c:2478
#, c-format
msgid " %lu local symbol String table: [%2u] '%s'\n"
msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:2480
+#: src/readelf.c:2486
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: src/readelf.c:2482
+#: src/readelf.c:2488
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: src/readelf.c:2502
+#: src/readelf.c:2508
#, c-format
msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
msgstr ""
-#: src/readelf.c:2595
+#: src/readelf.c:2601
#, c-format
msgid "bad dynamic symbol"
msgstr ""
-#: src/readelf.c:2680
+#: src/readelf.c:2686
msgid "none"
msgstr "keine"
-#: src/readelf.c:2697
+#: src/readelf.c:2703
msgid "| <unknown>"
msgstr "| <unbekannt>"
-#: src/readelf.c:2728
+#: src/readelf.c:2733
#, c-format
msgid ""
"\n"
@@ -4620,17 +4615,17 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:2749
+#: src/readelf.c:2754
#, fuzzy, c-format
msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n"
-#: src/readelf.c:2762
+#: src/readelf.c:2767
#, c-format
msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
msgstr " %#06x: Name: %s Flags: %s Version: %hu\n"
-#: src/readelf.c:2805
+#: src/readelf.c:2809
#, c-format
msgid ""
"\n"
@@ -4643,18 +4638,18 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:2833
+#: src/readelf.c:2837
#, c-format
msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
msgstr ""
-#: src/readelf.c:2848
+#: src/readelf.c:2852
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr ""
#. Print the header.
-#: src/readelf.c:3109
+#: src/readelf.c:3112
#, c-format
msgid ""
"\n"
@@ -4667,15 +4662,15 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:3137
+#: src/readelf.c:3140
msgid " 0 *local* "
msgstr " 0 *lokal* "
-#: src/readelf.c:3142
+#: src/readelf.c:3145
msgid " 1 *global* "
msgstr " 1 *global* "
-#: src/readelf.c:3184
+#: src/readelf.c:3187
#, c-format
msgid ""
"\n"
@@ -4690,66 +4685,66 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:3206
+#: src/readelf.c:3209
#, no-c-format
msgid " Length Number % of total Coverage\n"
msgstr ""
-#: src/readelf.c:3208
+#: src/readelf.c:3211
#, c-format
msgid " 0 %6<PRIu32> %5.1f%%\n"
msgstr " 0 %6<PRIu32> %5.1f%%\n"
-#: src/readelf.c:3215
+#: src/readelf.c:3218
#, c-format
msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
-#: src/readelf.c:3228
+#: src/readelf.c:3231
#, c-format
msgid ""
" Average number of tests: successful lookup: %f\n"
"\t\t\t unsuccessful lookup: %f\n"
msgstr ""
-#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376
+#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379
#, c-format
msgid "cannot get data for section %d: %s"
msgstr ""
-#: src/readelf.c:3254
+#: src/readelf.c:3257
#, fuzzy, c-format
msgid "invalid data in sysv.hash section %d"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:3283
+#: src/readelf.c:3286
#, fuzzy, c-format
msgid "invalid chain in sysv.hash section %d"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:3318
+#: src/readelf.c:3321
#, fuzzy, c-format
msgid "invalid data in sysv.hash64 section %d"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:3349
+#: src/readelf.c:3352
#, fuzzy, c-format
msgid "invalid chain in sysv.hash64 section %d"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:3385
+#: src/readelf.c:3388
#, fuzzy, c-format
msgid "invalid data in gnu.hash section %d"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:3452
+#: src/readelf.c:3454
#, c-format
msgid ""
" Symbol Bias: %u\n"
" Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n"
msgstr ""
-#: src/readelf.c:3541
+#: src/readelf.c:3539
#, c-format
msgid ""
"\n"
@@ -4760,13 +4755,13 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:3555
+#: src/readelf.c:3553
msgid ""
" Library Time Stamp Checksum Version "
"Flags"
msgstr ""
-#: src/readelf.c:3614
+#: src/readelf.c:3611
#, c-format
msgid ""
"\n"
@@ -4774,102 +4769,102 @@ msgid ""
"%#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:3631
+#: src/readelf.c:3628
msgid " Owner Size\n"
msgstr ""
-#: src/readelf.c:3655
+#: src/readelf.c:3652
#, c-format
msgid " %-13s %4<PRIu32>\n"
msgstr " %-13s %4<PRIu32>\n"
#. Unknown subsection, print and skip.
-#: src/readelf.c:3694
+#: src/readelf.c:3691
#, c-format
msgid " %-4u %12<PRIu32>\n"
msgstr " %-4u %12<PRIu32>\n"
#. Tag_File
-#: src/readelf.c:3699
+#: src/readelf.c:3696
#, c-format
msgid " File: %11<PRIu32>\n"
msgstr " File: %11<PRIu32>\n"
-#: src/readelf.c:3748
+#: src/readelf.c:3745
#, c-format
msgid " %s: %<PRId64>, %s\n"
msgstr " %s: %<PRId64>, %s\n"
-#: src/readelf.c:3751
+#: src/readelf.c:3748
#, c-format
msgid " %s: %<PRId64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:3754
+#: src/readelf.c:3751
#, c-format
msgid " %s: %s\n"
msgstr " %s: %s\n"
-#: src/readelf.c:3764
+#: src/readelf.c:3761
#, c-format
msgid " %u: %<PRId64>\n"
msgstr " %u: %<PRId64>\n"
-#: src/readelf.c:3767
+#: src/readelf.c:3764
#, c-format
msgid " %u: %s\n"
msgstr " %u: %s\n"
-#: src/readelf.c:3837
-#, fuzzy, c-format
+#: src/readelf.c:3834
+#, fuzzy
msgid "sprintf failure"
msgstr "mprotect fehlgeschlagen"
-#: src/readelf.c:4319
+#: src/readelf.c:4316
msgid "empty block"
msgstr ""
-#: src/readelf.c:4322
+#: src/readelf.c:4319
#, c-format
msgid "%zu byte block:"
msgstr ""
-#: src/readelf.c:4800
+#: src/readelf.c:4797
#, c-format
msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n"
msgstr ""
-#: src/readelf.c:4867
+#: src/readelf.c:4864
#, c-format
msgid "%s %#<PRIx64> used with different address sizes"
msgstr ""
-#: src/readelf.c:4874
+#: src/readelf.c:4871
#, c-format
msgid "%s %#<PRIx64> used with different offset sizes"
msgstr ""
-#: src/readelf.c:4881
+#: src/readelf.c:4878
#, c-format
msgid "%s %#<PRIx64> used with different base addresses"
msgstr ""
-#: src/readelf.c:4888
+#: src/readelf.c:4885
#, c-format
msgid "%s %#<PRIx64> used with different attribute %s and %s"
msgstr ""
-#: src/readelf.c:4988
+#: src/readelf.c:4985
#, c-format
msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n"
msgstr ""
-#: src/readelf.c:4996
+#: src/readelf.c:4993
#, c-format
msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n"
msgstr ""
-#: src/readelf.c:5099
+#: src/readelf.c:5096
#, c-format
msgid ""
"\n"
@@ -4877,79 +4872,79 @@ msgid ""
" [ Code]\n"
msgstr ""
-#: src/readelf.c:5107
+#: src/readelf.c:5104
#, c-format
msgid ""
"\n"
"Abbreviation section at offset %<PRIu64>:\n"
msgstr ""
-#: src/readelf.c:5120
+#: src/readelf.c:5117
#, c-format
msgid " *** error while reading abbreviation: %s\n"
msgstr ""
-#: src/readelf.c:5136
+#: src/readelf.c:5133
#, c-format
msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
msgstr ""
-#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030
-#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548
-#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352
-#: src/readelf.c:10412
+#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027
+#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617
+#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421
+#: src/readelf.c:10481
#, c-format
msgid ""
"\n"
"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:5182
+#: src/readelf.c:5179
#, fuzzy, c-format
msgid "cannot get .debug_addr section data: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120
+#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189
#, fuzzy, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133
+#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202
#, fuzzy, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142
+#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211
#, fuzzy, c-format
msgid " Address size: %8<PRIu64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152
+#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221
#, fuzzy, c-format
msgid " Segment size: %8<PRIu64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544
+#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613
#, fuzzy, c-format
msgid "Unknown version"
msgstr "unbekannte Version"
-#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147
+#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216
#, fuzzy, c-format
msgid "unsupported address size"
msgstr "Kein Adress-Wert"
-#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157
+#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226
#, c-format
msgid "unsupported segment size"
msgstr ""
-#: src/readelf.c:5399 src/readelf.c:5473
+#: src/readelf.c:5396 src/readelf.c:5470
#, c-format
msgid "cannot get .debug_aranges content: %s"
msgstr ""
-#: src/readelf.c:5414
+#: src/readelf.c:5411
#, c-format
msgid ""
"\n"
@@ -4960,239 +4955,239 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:5445
+#: src/readelf.c:5442
#, c-format
msgid " [%*zu] ???\n"
msgstr " [%*zu] ???\n"
-#: src/readelf.c:5447
+#: src/readelf.c:5444
#, c-format
msgid ""
" [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
msgstr ""
-#: src/readelf.c:5491 src/readelf.c:8413
+#: src/readelf.c:5488 src/readelf.c:8425
#, c-format
msgid ""
"\n"
"Table at offset %zu:\n"
msgstr ""
-#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424
-#: src/readelf.c:9101
+#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436
+#: src/readelf.c:9170
#, c-format
msgid "invalid data in section [%zu] '%s'"
msgstr ""
-#: src/readelf.c:5511
+#: src/readelf.c:5508
#, fuzzy, c-format
msgid ""
"\n"
" Length: %6<PRIu64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5523
+#: src/readelf.c:5520
#, fuzzy, c-format
msgid " DWARF version: %6<PRIuFAST16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5527
+#: src/readelf.c:5524
#, c-format
msgid "unsupported aranges version"
msgstr ""
-#: src/readelf.c:5538
+#: src/readelf.c:5535
#, fuzzy, c-format
msgid " CU offset: %6<PRIx64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5544
+#: src/readelf.c:5541
#, c-format
msgid " Address size: %6<PRIu64>\n"
msgstr ""
-#: src/readelf.c:5555
+#: src/readelf.c:5552
#, c-format
msgid ""
" Segment size: %6<PRIu64>\n"
"\n"
msgstr ""
-#: src/readelf.c:5610
+#: src/readelf.c:5607
#, c-format
msgid " %zu padding bytes\n"
msgstr ""
-#: src/readelf.c:5654
+#: src/readelf.c:5651
#, fuzzy, c-format
msgid "cannot get .debug_rnglists content: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/readelf.c:5677 src/readelf.c:9107
+#: src/readelf.c:5674 src/readelf.c:9176
#, fuzzy, c-format
msgid ""
"Table at Offset 0x%<PRIx64>:\n"
"\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5732 src/readelf.c:9162
+#: src/readelf.c:5729 src/readelf.c:9231
#, fuzzy, c-format
msgid " Offset entries: %8<PRIu64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5748 src/readelf.c:9178
+#: src/readelf.c:5745 src/readelf.c:9247
#, c-format
msgid " Unknown CU base: "
msgstr ""
-#: src/readelf.c:5750 src/readelf.c:9180
+#: src/readelf.c:5747 src/readelf.c:9249
#, c-format
msgid " CU [%6<PRIx64>] base: "
msgstr ""
-#: src/readelf.c:5756 src/readelf.c:9186
+#: src/readelf.c:5753 src/readelf.c:9255
#, c-format
msgid " Not associated with a CU.\n"
msgstr ""
-#: src/readelf.c:5767 src/readelf.c:9197
+#: src/readelf.c:5764 src/readelf.c:9266
#, c-format
msgid "too many offset entries for unit length"
msgstr ""
-#: src/readelf.c:5771 src/readelf.c:9201
+#: src/readelf.c:5768 src/readelf.c:9270
#, fuzzy, c-format
msgid " Offsets starting at 0x%<PRIx64>:\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5823
+#: src/readelf.c:5820
#, fuzzy, c-format
msgid "invalid range list data"
msgstr "Ungültige Daten"
-#: src/readelf.c:6008 src/readelf.c:9526
+#: src/readelf.c:6005 src/readelf.c:9595
#, c-format
msgid ""
" %zu padding bytes\n"
"\n"
msgstr ""
-#: src/readelf.c:6025
+#: src/readelf.c:6022
#, c-format
msgid "cannot get .debug_ranges content: %s"
msgstr ""
-#: src/readelf.c:6061 src/readelf.c:9581
+#: src/readelf.c:6058 src/readelf.c:9650
#, c-format
msgid ""
"\n"
" Unknown CU base: "
msgstr ""
-#: src/readelf.c:6063 src/readelf.c:9583
+#: src/readelf.c:6060 src/readelf.c:9652
#, c-format
msgid ""
"\n"
" CU [%6<PRIx64>] base: "
msgstr ""
-#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635
+#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704
#, c-format
msgid " [%6tx] <INVALID DATA>\n"
msgstr ""
-#: src/readelf.c:6097 src/readelf.c:9719
+#: src/readelf.c:6094 src/readelf.c:9788
#, fuzzy
msgid "base address"
msgstr "Außerhalb des Adressbereiches"
-#: src/readelf.c:6107 src/readelf.c:9729
+#: src/readelf.c:6104 src/readelf.c:9798
#, fuzzy, c-format
msgid " [%6tx] empty list\n"
msgstr " [%6tx] %s..%s\n"
-#: src/readelf.c:6367
+#: src/readelf.c:6364
msgid " <INVALID DATA>\n"
msgstr ""
-#: src/readelf.c:6624
+#: src/readelf.c:6621
#, fuzzy, c-format
msgid "cannot get ELF: %s"
msgstr "ELF Kopf konnte nicht ausgelesen werden"
-#: src/readelf.c:6642
+#: src/readelf.c:6639
#, c-format
msgid ""
"\n"
"Call frame information section [%2zu] '%s' at offset %#<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:6692
+#: src/readelf.c:6689
#, c-format
msgid ""
"\n"
" [%6tx] Zero terminator\n"
msgstr ""
-#: src/readelf.c:6793 src/readelf.c:6947
+#: src/readelf.c:6790 src/readelf.c:6944
#, fuzzy, c-format
msgid "invalid augmentation length"
msgstr "ungültige Abschnittsausrichtung"
-#: src/readelf.c:6808
+#: src/readelf.c:6805
msgid "FDE address encoding: "
msgstr ""
-#: src/readelf.c:6814
+#: src/readelf.c:6811
msgid "LSDA pointer encoding: "
msgstr ""
-#: src/readelf.c:6924
+#: src/readelf.c:6921
#, c-format
msgid " (offset: %#<PRIx64>)"
msgstr ""
-#: src/readelf.c:6931
+#: src/readelf.c:6928
#, c-format
msgid " (end offset: %#<PRIx64>)"
msgstr ""
-#: src/readelf.c:6968
+#: src/readelf.c:6965
#, c-format
msgid " %-26sLSDA pointer: %#<PRIx64>\n"
msgstr ""
-#: src/readelf.c:7053
+#: src/readelf.c:7050
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute code: %s"
msgstr ""
-#: src/readelf.c:7063
+#: src/readelf.c:7060
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute form: %s"
msgstr ""
-#: src/readelf.c:7085
+#: src/readelf.c:7082
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s"
msgstr ""
-#: src/readelf.c:7415
+#: src/readelf.c:7412
#, fuzzy, c-format
msgid "invalid file (%<PRId64>): %s"
msgstr "Ungültige Datei"
-#: src/readelf.c:7419
+#: src/readelf.c:7416
#, fuzzy, c-format
msgid "no srcfiles for CU [%<PRIx64>]"
msgstr "unbekannte Form %<PRIx64>"
-#: src/readelf.c:7423
+#: src/readelf.c:7420
#, fuzzy, c-format
msgid "couldn't get DWARF CU: %s"
msgstr "ELF Kopf konnte nicht ausgelesen werden"
-#: src/readelf.c:7738
+#: src/readelf.c:7735
#, c-format
msgid ""
"\n"
@@ -5200,12 +5195,12 @@ msgid ""
" [Offset]\n"
msgstr ""
-#: src/readelf.c:7788
+#: src/readelf.c:7785
#, fuzzy, c-format
msgid "cannot get next unit: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:7808
+#: src/readelf.c:7805
#, c-format
msgid ""
" Type unit at offset %<PRIu64>:\n"
@@ -5214,7 +5209,7 @@ msgid ""
" Type signature: %#<PRIx64>, Type offset: %#<PRIx64> [%<PRIx64>]\n"
msgstr ""
-#: src/readelf.c:7820
+#: src/readelf.c:7817
#, c-format
msgid ""
" Compilation unit at offset %<PRIu64>:\n"
@@ -5222,37 +5217,37 @@ msgid ""
"%<PRIu8>, Offset size: %<PRIu8>\n"
msgstr ""
-#: src/readelf.c:7830 src/readelf.c:7993
+#: src/readelf.c:7827 src/readelf.c:7988
#, c-format
msgid " Unit type: %s (%<PRIu8>)"
msgstr ""
-#: src/readelf.c:7857
+#: src/readelf.c:7854
#, c-format
msgid "unknown version (%d) or unit type (%d)"
msgstr ""
-#: src/readelf.c:7886
+#: src/readelf.c:7883
#, c-format
msgid "cannot get DIE offset: %s"
msgstr ""
-#: src/readelf.c:7895
+#: src/readelf.c:7892
#, fuzzy, c-format
msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/readelf.c:7933
+#: src/readelf.c:7928
#, c-format
msgid "cannot get next DIE: %s\n"
msgstr ""
-#: src/readelf.c:7941
+#: src/readelf.c:7936
#, c-format
msgid "cannot get next DIE: %s"
msgstr ""
-#: src/readelf.c:7985
+#: src/readelf.c:7980
#, c-format
msgid ""
" Split compilation unit at offset %<PRIu64>:\n"
@@ -5260,7 +5255,7 @@ msgid ""
"%<PRIu8>, Offset size: %<PRIu8>\n"
msgstr ""
-#: src/readelf.c:8037
+#: src/readelf.c:8032
#, c-format
msgid ""
"\n"
@@ -5268,18 +5263,18 @@ msgid ""
"\n"
msgstr ""
-#: src/readelf.c:8369
+#: src/readelf.c:8364
#, fuzzy, c-format
msgid "unknown form: %s"
msgstr "unbekannte Form %<PRIx64>"
-#: src/readelf.c:8400
+#: src/readelf.c:8412
#, c-format
msgid "cannot get line data section data: %s"
msgstr ""
#. Print what we got so far.
-#: src/readelf.c:8502
+#: src/readelf.c:8516
#, c-format
msgid ""
"\n"
@@ -5298,177 +5293,187 @@ msgid ""
"Opcodes:\n"
msgstr ""
-#: src/readelf.c:8524
+#: src/readelf.c:8538
#, fuzzy, c-format
msgid "cannot handle .debug_line version: %u\n"
msgstr "ungültige .debug_line Sektion"
-#: src/readelf.c:8532
+#: src/readelf.c:8546
#, fuzzy, c-format
msgid "cannot handle address size: %u\n"
msgstr "Kein Adress-Wert"
-#: src/readelf.c:8540
+#: src/readelf.c:8554
#, c-format
msgid "cannot handle segment selector size: %u\n"
msgstr ""
-#: src/readelf.c:8550
+#: src/readelf.c:8564
#, c-format
msgid "invalid data at offset %tu in section [%zu] '%s'"
msgstr ""
-#: src/readelf.c:8565
+#: src/readelf.c:8579
#, c-format
msgid " [%*<PRIuFAST8>] %hhu argument\n"
msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:8576
+#: src/readelf.c:8590
msgid ""
"\n"
"Directory table:"
msgstr ""
-#: src/readelf.c:8582 src/readelf.c:8659
+#: src/readelf.c:8596 src/readelf.c:8673
#, fuzzy, c-format
msgid " ["
msgstr " %s: %s\n"
-#: src/readelf.c:8653
+#: src/readelf.c:8667
msgid ""
"\n"
"File name table:"
msgstr ""
-#: src/readelf.c:8714
+#: src/readelf.c:8728
msgid " Entry Dir Time Size Name"
msgstr ""
-#: src/readelf.c:8753
+#: src/readelf.c:8774
msgid ""
"\n"
"No line number statements."
msgstr ""
-#: src/readelf.c:8757
+#: src/readelf.c:8778
msgid ""
"\n"
"Line number statements:"
msgstr ""
-#: src/readelf.c:8777
+#: src/readelf.c:8793
#, c-format
msgid "invalid maximum operations per instruction is zero"
msgstr ""
-#: src/readelf.c:8811
+#: src/readelf.c:8827
#, c-format
msgid " special opcode %u: address+%u = "
msgstr ""
-#: src/readelf.c:8815
+#: src/readelf.c:8831
#, c-format
msgid ", op_index = %u, line%+d = %zu\n"
msgstr ""
-#: src/readelf.c:8818
+#: src/readelf.c:8834
#, c-format
msgid ", line%+d = %zu\n"
msgstr ""
-#: src/readelf.c:8836
+#: src/readelf.c:8852
#, c-format
msgid " extended opcode %u: "
msgstr ""
-#: src/readelf.c:8841
+#: src/readelf.c:8857
msgid " end of sequence"
msgstr ""
-#: src/readelf.c:8859
+#: src/readelf.c:8875
#, fuzzy, c-format
msgid " set address to "
msgstr "Außerhalb des Adressbereiches"
-#: src/readelf.c:8887
+#: src/readelf.c:8903
#, c-format
msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
msgstr ""
-#: src/readelf.c:8901
+#: src/readelf.c:8917
#, c-format
msgid " set discriminator to %u\n"
msgstr ""
+#: src/readelf.c:8944
+#, c-format
+msgid " set inlined context %u, function name %s (0x%x)\n"
+msgstr ""
+
+#: src/readelf.c:8968
+#, c-format
+msgid " set function name %s (0x%x)\n"
+msgstr ""
+
#. Unknown, ignore it.
-#: src/readelf.c:8906
+#: src/readelf.c:8975
#, fuzzy
msgid " unknown opcode"
msgstr "unbekannter Typ"
#. Takes no argument.
-#: src/readelf.c:8918
+#: src/readelf.c:8987
msgid " copy"
msgstr ""
-#: src/readelf.c:8929
+#: src/readelf.c:8998
#, c-format
msgid " advance address by %u to "
msgstr ""
-#: src/readelf.c:8933 src/readelf.c:8994
+#: src/readelf.c:9002 src/readelf.c:9063
#, c-format
msgid ", op_index to %u"
msgstr ""
-#: src/readelf.c:8945
+#: src/readelf.c:9014
#, c-format
msgid " advance line by constant %d to %<PRId64>\n"
msgstr ""
-#: src/readelf.c:8955
+#: src/readelf.c:9024
#, c-format
msgid " set file to %<PRIu64>\n"
msgstr ""
-#: src/readelf.c:8966
+#: src/readelf.c:9035
#, c-format
msgid " set column to %<PRIu64>\n"
msgstr ""
-#: src/readelf.c:8973
+#: src/readelf.c:9042
#, c-format
msgid " set '%s' to %<PRIuFAST8>\n"
msgstr ""
#. Takes no argument.
-#: src/readelf.c:8979
+#: src/readelf.c:9048
msgid " set basic block flag"
msgstr ""
-#: src/readelf.c:8990
+#: src/readelf.c:9059
#, c-format
msgid " advance address by constant %u to "
msgstr ""
-#: src/readelf.c:9010
+#: src/readelf.c:9079
#, c-format
msgid " advance address by fixed value %u to \n"
msgstr ""
#. Takes no argument.
-#: src/readelf.c:9020
+#: src/readelf.c:9089
msgid " set prologue end flag"
msgstr ""
#. Takes no argument.
-#: src/readelf.c:9025
+#: src/readelf.c:9094
msgid " set epilogue begin flag"
msgstr ""
-#: src/readelf.c:9035
+#: src/readelf.c:9104
#, c-format
msgid " set isa to %u\n"
msgstr ""
@@ -5476,108 +5481,108 @@ msgstr ""
#. This is a new opcode the generator but not we know about.
#. Read the parameters associated with it but then discard
#. everything. Read all the parameters for this opcode.
-#: src/readelf.c:9044
+#: src/readelf.c:9113
#, c-format
msgid " unknown opcode with %<PRIu8> parameter:"
msgid_plural " unknown opcode with %<PRIu8> parameters:"
msgstr[0] ""
msgstr[1] ""
-#: src/readelf.c:9084
+#: src/readelf.c:9153
#, fuzzy, c-format
msgid "cannot get .debug_loclists content: %s"
msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s"
-#: src/readelf.c:9250
+#: src/readelf.c:9319
#, c-format
msgid " <INVALID DATA>\n"
msgstr ""
-#: src/readelf.c:9290
+#: src/readelf.c:9359
#, fuzzy, c-format
msgid "invalid loclists data"
msgstr "Ungültige Daten"
-#: src/readelf.c:9543
+#: src/readelf.c:9612
#, c-format
msgid "cannot get .debug_loc content: %s"
msgstr ""
-#: src/readelf.c:9756 src/readelf.c:10800
+#: src/readelf.c:9825 src/readelf.c:10869
msgid " <INVALID DATA>\n"
msgstr ""
-#: src/readelf.c:9811 src/readelf.c:9974
+#: src/readelf.c:9880 src/readelf.c:10043
#, c-format
msgid "cannot get macro information section data: %s"
msgstr ""
-#: src/readelf.c:9891
+#: src/readelf.c:9960
#, c-format
msgid "%*s*** non-terminated string at end of section"
msgstr ""
-#: src/readelf.c:9914
+#: src/readelf.c:9983
#, c-format
msgid "%*s*** missing DW_MACINFO_start_file argument at end of section"
msgstr ""
-#: src/readelf.c:10015
+#: src/readelf.c:10084
#, fuzzy, c-format
msgid " Offset: 0x%<PRIx64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10027
+#: src/readelf.c:10096
#, fuzzy, c-format
msgid " Version: %<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10033 src/readelf.c:10920
+#: src/readelf.c:10102 src/readelf.c:10989
#, c-format
msgid " unknown version, cannot parse section\n"
msgstr ""
-#: src/readelf.c:10040
+#: src/readelf.c:10109
#, fuzzy, c-format
msgid " Flag: 0x%<PRIx8>"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10069
+#: src/readelf.c:10138
#, c-format
msgid " Offset length: %<PRIu8>\n"
msgstr ""
-#: src/readelf.c:10077
+#: src/readelf.c:10146
#, c-format
msgid " .debug_line offset: 0x%<PRIx64>\n"
msgstr ""
-#: src/readelf.c:10102
+#: src/readelf.c:10171
#, c-format
msgid " extension opcode table, %<PRIu8> items:\n"
msgstr ""
-#: src/readelf.c:10109
+#: src/readelf.c:10178
#, c-format
msgid " [%<PRIx8>]"
msgstr ""
-#: src/readelf.c:10121
+#: src/readelf.c:10190
#, c-format
msgid " %<PRIu8> arguments:"
msgstr ""
-#: src/readelf.c:10136
+#: src/readelf.c:10205
#, c-format
msgid " no arguments."
msgstr ""
-#: src/readelf.c:10337
+#: src/readelf.c:10406
#, c-format
msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
msgstr ""
-#: src/readelf.c:10381
+#: src/readelf.c:10450
#, c-format
msgid ""
"\n"
@@ -5586,77 +5591,77 @@ msgid ""
msgstr ""
#. TRANS: the debugstr| prefix makes the string unique.
-#: src/readelf.c:10386
+#: src/readelf.c:10455
msgctxt "debugstr"
msgid "Offset"
msgstr ""
-#: src/readelf.c:10396
+#: src/readelf.c:10465
#, c-format
msgid " *** error, missing string terminator\n"
msgstr ""
-#: src/readelf.c:10425
+#: src/readelf.c:10494
#, fuzzy, c-format
msgid "cannot get .debug_str_offsets section data: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:10524
+#: src/readelf.c:10593
#, fuzzy, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10526
+#: src/readelf.c:10595
#, fuzzy, c-format
msgid " Offset size: %8<PRIu8>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10540
+#: src/readelf.c:10609
#, fuzzy, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10549
+#: src/readelf.c:10618
#, fuzzy, c-format
msgid " Padding: %8<PRIx16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10603
+#: src/readelf.c:10672
#, c-format
msgid ""
"\n"
"Call frame search table section [%2zu] '.eh_frame_hdr':\n"
msgstr ""
-#: src/readelf.c:10705
+#: src/readelf.c:10774
#, c-format
msgid ""
"\n"
"Exception handling table section [%2zu] '.gcc_except_table':\n"
msgstr ""
-#: src/readelf.c:10728
+#: src/readelf.c:10797
#, c-format
msgid " LPStart encoding: %#x "
msgstr ""
-#: src/readelf.c:10740
+#: src/readelf.c:10809
#, c-format
msgid " TType encoding: %#x "
msgstr ""
-#: src/readelf.c:10755
+#: src/readelf.c:10824
#, c-format
msgid " Call site encoding: %#x "
msgstr ""
-#: src/readelf.c:10768
+#: src/readelf.c:10837
msgid ""
"\n"
" Call site table:"
msgstr ""
-#: src/readelf.c:10782
+#: src/readelf.c:10851
#, c-format
msgid ""
" [%4u] Call site start: %#<PRIx64>\n"
@@ -5665,142 +5670,142 @@ msgid ""
" Action: %u\n"
msgstr ""
-#: src/readelf.c:10855
+#: src/readelf.c:10924
#, c-format
msgid "invalid TType encoding"
msgstr ""
-#: src/readelf.c:10882
+#: src/readelf.c:10951
#, c-format
msgid ""
"\n"
"GDB section [%2zu] '%s' at offset %#<PRIx64> contains %<PRId64> bytes :\n"
msgstr ""
-#: src/readelf.c:10911
+#: src/readelf.c:10980
#, fuzzy, c-format
msgid " Version: %<PRId32>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10929
+#: src/readelf.c:10998
#, c-format
msgid " CU offset: %#<PRIx32>\n"
msgstr ""
-#: src/readelf.c:10936
+#: src/readelf.c:11005
#, c-format
msgid " TU offset: %#<PRIx32>\n"
msgstr ""
-#: src/readelf.c:10943
+#: src/readelf.c:11012
#, c-format
msgid " address offset: %#<PRIx32>\n"
msgstr ""
-#: src/readelf.c:10950
+#: src/readelf.c:11019
#, c-format
msgid " symbol offset: %#<PRIx32>\n"
msgstr ""
-#: src/readelf.c:10957
+#: src/readelf.c:11026
#, c-format
msgid " constant offset: %#<PRIx32>\n"
msgstr ""
-#: src/readelf.c:10971
+#: src/readelf.c:11040
#, c-format
msgid ""
"\n"
" CU list at offset %#<PRIx32> contains %zu entries:\n"
msgstr ""
-#: src/readelf.c:10996
+#: src/readelf.c:11065
#, c-format
msgid ""
"\n"
" TU list at offset %#<PRIx32> contains %zu entries:\n"
msgstr ""
-#: src/readelf.c:11025
+#: src/readelf.c:11094
#, c-format
msgid ""
"\n"
" Address list at offset %#<PRIx32> contains %zu entries:\n"
msgstr ""
-#: src/readelf.c:11057
+#: src/readelf.c:11126
#, c-format
msgid ""
"\n"
" Symbol table at offset %#<PRIx32> contains %zu slots:\n"
msgstr ""
-#: src/readelf.c:11195
+#: src/readelf.c:11264
#, c-format
msgid "cannot get debug context descriptor: %s"
msgstr ""
-#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301
-#: src/readelf.c:12359
+#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367
+#: src/readelf.c:12424
#, c-format
msgid "cannot convert core note data: %s"
msgstr ""
-#: src/readelf.c:11926
+#: src/readelf.c:11994
#, c-format
msgid ""
"\n"
"%*s... <repeats %u more times> ..."
msgstr ""
-#: src/readelf.c:12438
+#: src/readelf.c:12503
msgid " Owner Data size Type\n"
msgstr ""
-#: src/readelf.c:12466
+#: src/readelf.c:12531
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr ""
-#: src/readelf.c:12518
+#: src/readelf.c:12583
#, fuzzy, c-format
msgid "cannot get content of note: %s"
msgstr "Konnte Inhalt von %s: %s nicht lesen"
-#: src/readelf.c:12552
+#: src/readelf.c:12616
#, c-format
msgid ""
"\n"
"Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12575
+#: src/readelf.c:12639
#, c-format
msgid ""
"\n"
"Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12622
+#: src/readelf.c:12686
#, fuzzy, c-format
msgid ""
"\n"
"Section [%zu] '%s' has no data to dump.\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:12649 src/readelf.c:12700
+#: src/readelf.c:12713 src/readelf.c:12764
#, fuzzy, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:12654
+#: src/readelf.c:12718
#, c-format
msgid ""
"\n"
"Hex dump of section [%zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12659
+#: src/readelf.c:12723
#, c-format
msgid ""
"\n"
@@ -5808,21 +5813,21 @@ msgid ""
"%#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12673
+#: src/readelf.c:12737
#, fuzzy, c-format
msgid ""
"\n"
"Section [%zu] '%s' has no strings to dump.\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:12705
+#: src/readelf.c:12769
#, c-format
msgid ""
"\n"
"String section [%zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12710
+#: src/readelf.c:12774
#, c-format
msgid ""
"\n"
@@ -5830,45 +5835,45 @@ msgid ""
"offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12759
+#: src/readelf.c:12822
#, c-format
msgid ""
"\n"
"section [%lu] does not exist"
msgstr ""
-#: src/readelf.c:12789
+#: src/readelf.c:12852
#, c-format
msgid ""
"\n"
"section '%s' does not exist"
msgstr ""
-#: src/readelf.c:12846
+#: src/readelf.c:12907
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr ""
-#: src/readelf.c:12849
+#: src/readelf.c:12910
#, c-format
msgid ""
"\n"
"Archive '%s' has no symbol index\n"
msgstr ""
-#: src/readelf.c:12853
+#: src/readelf.c:12914
#, c-format
msgid ""
"\n"
"Index of archive '%s' has %zu entries:\n"
msgstr ""
-#: src/readelf.c:12871
+#: src/readelf.c:12932
#, fuzzy, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/readelf.c:12876
+#: src/readelf.c:12937
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr ""
@@ -5961,39 +5966,39 @@ msgctxt "bsd"
msgid "filename"
msgstr ""
-#: src/size.c:418 src/size.c:560
+#: src/size.c:417 src/size.c:558
#, c-format
msgid " (ex %s)"
msgstr ""
-#: src/size.c:420
+#: src/size.c:419
#, fuzzy
#| msgid "invalid section"
msgctxt "sysv"
msgid "section"
msgstr "ungültiger Abschnitt"
-#: src/size.c:421
+#: src/size.c:420
msgctxt "sysv"
msgid "size"
msgstr ""
-#: src/size.c:422
+#: src/size.c:421
msgctxt "sysv"
msgid "addr"
msgstr ""
-#: src/size.c:451 src/size.c:454 src/size.c:457
+#: src/size.c:450 src/size.c:453 src/size.c:456
msgctxt "sysv"
msgid "Total"
msgstr ""
-#: src/size.c:482
-#, fuzzy, c-format
+#: src/size.c:480
+#, fuzzy
msgid "cannot get section header"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/size.c:585
+#: src/size.c:583
msgid "(TOTALS)\n"
msgstr ""
@@ -6154,27 +6159,24 @@ msgstr ""
msgid "invalid value '%s' for %s parameter"
msgstr ""
-#: src/strings.c:302
-#, c-format
+#: src/strings.c:301
msgid "invalid minimum length of matched string size"
msgstr ""
-#: src/strings.c:585
-#, fuzzy, c-format
+#: src/strings.c:584
+#, fuzzy
msgid "lseek failed"
msgstr "lseek64 fehlgeschlagen"
-#: src/strings.c:602 src/strings.c:666
-#, c-format
+#: src/strings.c:601 src/strings.c:665
msgid "re-mmap failed"
msgstr "re-mmap fehlgeschlagen"
-#: src/strings.c:639
-#, c-format
+#: src/strings.c:638
msgid "mprotect failed"
msgstr "mprotect fehlgeschlagen"
-#: src/strings.c:728
+#: src/strings.c:727
#, c-format
msgid "Skipping section %zd '%s' data outside file"
msgstr ""
@@ -6239,54 +6241,51 @@ msgstr ""
msgid "Discard symbols from object files."
msgstr ""
-#: src/strip.c:247
-#, c-format
+#: src/strip.c:246
msgid "--reloc-debug-sections used without -f"
msgstr ""
-#: src/strip.c:253
-#, c-format
+#: src/strip.c:252
msgid ""
"--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --"
"remove-section"
msgstr ""
-#: src/strip.c:267
-#, c-format
+#: src/strip.c:266
msgid "Only one input file allowed together with '-o' and '-f'"
msgstr ""
-#: src/strip.c:290
+#: src/strip.c:288
#, c-format
msgid "-f option specified twice"
msgstr ""
-#: src/strip.c:299
+#: src/strip.c:297
#, c-format
msgid "-F option specified twice"
msgstr ""
-#: src/strip.c:362
+#: src/strip.c:360
#, c-format
msgid "cannot both keep and remove .comment section"
msgstr ""
-#: src/strip.c:481
-#, fuzzy, c-format
+#: src/strip.c:479
+#, fuzzy
msgid "bad relocation"
msgstr "Relocations anzeigen"
-#: src/strip.c:747 src/strip.c:771
+#: src/strip.c:749 src/strip.c:773
#, c-format
msgid "cannot stat input file '%s'"
msgstr ""
-#: src/strip.c:761
+#: src/strip.c:763
#, c-format
msgid "while opening '%s'"
msgstr ""
-#: src/strip.c:799
+#: src/strip.c:801
#, c-format
msgid "%s: cannot use -o or -f when stripping archive"
msgstr ""
@@ -6297,42 +6296,42 @@ msgstr ""
#. result = handle_ar (fd, elf, NULL, fname,
#. preserve_dates ? tv : NULL);
#.
-#: src/strip.c:811
+#: src/strip.c:813
#, fuzzy, c-format
msgid "%s: no support for stripping archive"
msgstr "%s: Kein Eintrag %s in dem Archiv!\n"
-#: src/strip.c:1047
+#: src/strip.c:1050
#, c-format
msgid "cannot open EBL backend"
msgstr ""
-#: src/strip.c:1092
-#, fuzzy, c-format
+#: src/strip.c:1094
+#, fuzzy
msgid "cannot get number of phdrs"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/strip.c:1106 src/strip.c:1149
+#: src/strip.c:1108 src/strip.c:1151
#, fuzzy, c-format
msgid "cannot create new ehdr for file '%s': %s"
msgstr "neue Datei konnte nicht angelegt werden"
-#: src/strip.c:1116 src/strip.c:1159
+#: src/strip.c:1118 src/strip.c:1161
#, fuzzy, c-format
msgid "cannot create new phdr for file '%s': %s"
msgstr "neue Datei konnte nicht angelegt werden"
-#: src/strip.c:1240
+#: src/strip.c:1241
#, c-format
msgid "illformed file '%s'"
msgstr ""
-#: src/strip.c:1250
+#: src/strip.c:1251
#, fuzzy, c-format
msgid "Cannot remove allocated section '%s'"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/strip.c:1259
+#: src/strip.c:1260
#, fuzzy, c-format
msgid "Cannot both keep and remove section '%s'"
msgstr "Konnte Archiv '%s' nicht öffnen"
@@ -6352,7 +6351,7 @@ msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n"
msgid "%s: error while getting shdrstrndx: %s"
msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n"
-#: src/strip.c:1705 src/strip.c:2550
+#: src/strip.c:1705 src/strip.c:2546
#, fuzzy, c-format
msgid "%s: error updating shdrstrndx: %s"
msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n"
@@ -6362,67 +6361,66 @@ msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n"
msgid "while preparing output for '%s'"
msgstr ""
-#: src/strip.c:1784 src/strip.c:1847
+#: src/strip.c:1783 src/strip.c:1845
#, c-format
msgid "while create section header section: %s"
msgstr ""
-#: src/strip.c:1793
+#: src/strip.c:1792
#, c-format
msgid "cannot allocate section data: %s"
msgstr ""
-#: src/strip.c:1859
+#: src/strip.c:1856
#, c-format
msgid "while create section header string table: %s"
msgstr ""
-#: src/strip.c:1866
-#, c-format
+#: src/strip.c:1862
msgid "no memory to create section header string table"
msgstr ""
-#: src/strip.c:2079
+#: src/strip.c:2075
#, c-format
msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]"
msgstr ""
-#: src/strip.c:2466 src/strip.c:2574
+#: src/strip.c:2462 src/strip.c:2570
#, c-format
msgid "while writing '%s': %s"
msgstr ""
-#: src/strip.c:2477
+#: src/strip.c:2473
#, c-format
msgid "while creating '%s'"
msgstr ""
-#: src/strip.c:2500
+#: src/strip.c:2496
#, c-format
msgid "while computing checksum for debug information"
msgstr ""
-#: src/strip.c:2541
+#: src/strip.c:2537
#, c-format
msgid "%s: error while creating ELF header: %s"
msgstr ""
-#: src/strip.c:2559
+#: src/strip.c:2555
#, c-format
msgid "%s: error while reading the file: %s"
msgstr ""
-#: src/strip.c:2599 src/strip.c:2619
+#: src/strip.c:2595 src/strip.c:2615
#, fuzzy, c-format
msgid "while writing '%s'"
msgstr "beim Schliessen von '%s'"
-#: src/strip.c:2656 src/strip.c:2663
+#: src/strip.c:2652 src/strip.c:2659
#, c-format
msgid "error while finishing '%s': %s"
msgstr ""
-#: src/strip.c:2680 src/strip.c:2756
+#: src/strip.c:2676 src/strip.c:2752
#, c-format
msgid "cannot set access and modification date of '%s'"
msgstr ""
@@ -6563,13 +6561,13 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s"
msgid "cannot create directory '%s'"
msgstr "konnte Verzeichnis nicht erstellen: %s"
-#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859
+#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860
#: src/unstrip.c:1750
#, c-format
msgid "cannot get symbol table entry: %s"
msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s"
-#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694
+#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695
#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990
#, c-format
msgid "cannot update symbol table: %s"
@@ -6580,117 +6578,125 @@ msgstr "konnte Symboltabelle nicht aktualisieren: %s"
msgid "cannot update section header: %s"
msgstr ""
-#: src/unstrip.c:467 src/unstrip.c:481
+#: src/unstrip.c:465
+#, c-format
+msgid "gelf_getrel failed: %s"
+msgstr ""
+
+#: src/unstrip.c:468 src/unstrip.c:483
#, c-format
msgid "cannot update relocation: %s"
msgstr ""
-#: src/unstrip.c:580
+#: src/unstrip.c:480
+#, c-format
+msgid "gelf_getrela failed: %s"
+msgstr ""
+
+#: src/unstrip.c:581
#, c-format
msgid "cannot get symbol version: %s"
msgstr ""
-#: src/unstrip.c:593
+#: src/unstrip.c:594
#, c-format
msgid "unexpected section type in [%zu] with sh_link to symtab"
msgstr ""
-#: src/unstrip.c:848
+#: src/unstrip.c:849
#, fuzzy, c-format
msgid "cannot get symbol section data: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/unstrip.c:850
+#: src/unstrip.c:851
#, fuzzy, c-format
msgid "cannot get string section data: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/unstrip.c:867
+#: src/unstrip.c:868
#, fuzzy, c-format
msgid "invalid string offset in symbol [%zu]"
msgstr "ungültiger Offset %zu für Symbol %s"
-#: src/unstrip.c:1025 src/unstrip.c:1433
+#: src/unstrip.c:1026 src/unstrip.c:1434
#, fuzzy, c-format
msgid "cannot read section [%zu] name: %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/unstrip.c:1040
+#: src/unstrip.c:1041
#, fuzzy, c-format
msgid "bad sh_link for group section: %s"
msgstr "ungültige .debug_line Sektion"
-#: src/unstrip.c:1046
+#: src/unstrip.c:1047
#, fuzzy, c-format
msgid "couldn't get shdr for group section: %s"
msgstr "konnte Versionierungsabschnitt nicht erstellen: %s"
-#: src/unstrip.c:1051
+#: src/unstrip.c:1052
#, fuzzy, c-format
msgid "bad data for group symbol section: %s"
msgstr "ungültige .debug_line Sektion"
-#: src/unstrip.c:1057
+#: src/unstrip.c:1058
#, fuzzy, c-format
msgid "couldn't get symbol for group section: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/unstrip.c:1062
+#: src/unstrip.c:1063
#, fuzzy, c-format
msgid "bad symbol name for group section: %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/unstrip.c:1073 src/unstrip.c:1554
+#: src/unstrip.c:1074 src/unstrip.c:1554
#, fuzzy, c-format
msgid "cannot find matching section for [%zu] '%s'"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175
+#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176
#, c-format
msgid "cannot read '.gnu.prelink_undo' section: %s"
msgstr ""
-#: src/unstrip.c:1155
+#: src/unstrip.c:1156
#, c-format
msgid "overflow with shnum = %zu in '%s' section"
msgstr ""
-#: src/unstrip.c:1166
+#: src/unstrip.c:1167
#, c-format
msgid "invalid contents in '%s' section"
msgstr ""
-#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925
+#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925
#, c-format
msgid "cannot add section name to string table: %s"
msgstr ""
-#: src/unstrip.c:1362
+#: src/unstrip.c:1363
#, c-format
msgid "cannot update section header string table data: %s"
msgstr ""
-#: src/unstrip.c:1391 src/unstrip.c:1395
+#: src/unstrip.c:1392 src/unstrip.c:1396
#, c-format
msgid "cannot get section header string table section index: %s"
msgstr ""
-#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649
+#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649
#, c-format
msgid "cannot get section count: %s"
msgstr ""
-#: src/unstrip.c:1406
-#, c-format
+#: src/unstrip.c:1407
msgid "more sections in stripped file than debug file -- arguments reversed?"
msgstr ""
-#: src/unstrip.c:1410
-#, c-format
+#: src/unstrip.c:1411
msgid "no sections in stripped file"
msgstr ""
-#: src/unstrip.c:1458 src/unstrip.c:1569
+#: src/unstrip.c:1459 src/unstrip.c:1569
#, c-format
msgid "cannot read section header string table: %s"
msgstr ""
@@ -6800,23 +6806,21 @@ msgstr ""
msgid "cannot cache section addresses for module '%s': %s"
msgstr ""
-#: src/unstrip.c:2505
-#, c-format
+#: src/unstrip.c:2503
msgid "no matching modules found"
msgstr "kein passendes Modul gefunden"
-#: src/unstrip.c:2515
-#, c-format
+#: src/unstrip.c:2513
msgid "matched more than one module"
msgstr "mehr als ein passendes Modul"
-#: src/unstrip.c:2560
+#: src/unstrip.c:2558
msgid ""
"STRIPPED-FILE DEBUG-FILE\n"
"[MODULE...]"
msgstr ""
-#: src/unstrip.c:2561
+#: src/unstrip.c:2559
msgid ""
"Combine stripped files with separate symbols and debug information.\n"
"\n"
@@ -6860,7 +6864,7 @@ msgid ""
"source PATH /FILENAME\n"
msgstr ""
-#: tests/backtrace.c:436
+#: tests/backtrace.c:483
msgid "Run executable"
msgstr ""
@@ -6872,6 +6876,10 @@ msgstr ""
msgid "Show instances of inlined functions"
msgstr ""
+#, fuzzy, c-format
+#~ msgid "cannot allocate memory"
+#~ msgstr "konnte Verzeichnis nicht erstellen: %s"
+
#~ msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>"
#~ msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>"
diff --git a/po/es.po b/po/es.po
index 65bf523d..a08b4c2d 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: elfutils.master.es\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-05-22 15:33+0200\n"
+"POT-Creation-Date: 2022-04-25 18:22+0200\n"
"PO-Revision-Date: 2011-01-10 15:17-0300\n"
"Last-Translator: Claudio Rodrigo Pereyra Diaz <claudiorodrigo@pereyradiaz."
"com.ar>\n"
@@ -39,11 +39,6 @@ msgid ""
" - 'auto', 'tty', 'if-tty'\n"
msgstr ""
-#: lib/color.c:194 src/objdump.c:728
-#, fuzzy, c-format
-msgid "cannot allocate memory"
-msgstr "No se puede asignar sección PLT: %s"
-
#: lib/printversion.c:40
#, fuzzy, c-format
msgid ""
@@ -57,8 +52,8 @@ msgstr ""
"garantía, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN "
"DETERMINADO.\n"
-#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461
-#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609
+#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580
+#: src/unstrip.c:312
#, c-format
msgid "memory exhausted"
msgstr "memoria agotada"
@@ -318,7 +313,7 @@ msgstr "código operativo desconocido "
msgid ".debug_addr section missing"
msgstr ".debug_ranges section faltante"
-#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550
+#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548
msgid "Input selection options:"
msgstr "Opciones de selección de entrada:"
@@ -552,7 +547,7 @@ msgid "No backend"
msgstr "No hay segundo plano (Backend)"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79
-#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131
+#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
@@ -603,18 +598,18 @@ msgstr ""
msgid " Args: "
msgstr ""
-#: libebl/eblobjnote.c:300
+#: libebl/eblobjnote.c:304
#, c-format
msgid " Build ID: "
msgstr " Build ID: "
#. A non-null terminated version string.
-#: libebl/eblobjnote.c:311
+#: libebl/eblobjnote.c:315
#, c-format
msgid " Linker version: %.*s\n"
msgstr " Versión del Enlazador: %.*s\n"
-#: libebl/eblobjnote.c:638
+#: libebl/eblobjnote.c:642
#, c-format
msgid " OS: %s, ABI: "
msgstr " OS: %s, ABI: "
@@ -648,7 +643,7 @@ msgstr "tamaño inválido del operando fuente"
msgid "invalid size of destination operand"
msgstr "tamaño inválido del operando destino"
-#: libelf/elf_error.c:87 src/readelf.c:6217
+#: libelf/elf_error.c:87 src/readelf.c:6214
#, c-format
msgid "invalid encoding"
msgstr "codificación inválida"
@@ -734,8 +729,8 @@ msgstr "no coinciden los datos/scn"
msgid "invalid section header"
msgstr "encabezamiento de sección inválida"
-#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623
-#: src/readelf.c:10724 src/readelf.c:10906
+#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692
+#: src/readelf.c:10793 src/readelf.c:10975
#, c-format
msgid "invalid data"
msgstr "datos inválidos"
@@ -813,72 +808,81 @@ msgstr "no pueden copiar datos de sección: %s"
msgid "cannot decompress data"
msgstr "no pueden copiar datos de sección: %s"
-#: src/addr2line.c:57
+#: src/addr2line.c:59
#, fuzzy
msgid "Input format options:"
msgstr "Opciones de selección de entrada:"
-#: src/addr2line.c:59
+#: src/addr2line.c:61
msgid "Treat addresses as offsets relative to NAME section."
msgstr "Manejar direcciones como compensaciones relativas a sección de NOMBRE."
-#: src/addr2line.c:61
+#: src/addr2line.c:63
#, fuzzy
msgid "Output format options:"
msgstr "Formato de salida:"
-#: src/addr2line.c:62
+#: src/addr2line.c:64
#, fuzzy
msgid "Print address before each entry"
msgstr "Imprimir nombre de archivo antes de cada cadena."
-#: src/addr2line.c:63
+#: src/addr2line.c:65
msgid "Show only base names of source files"
msgstr "Mostrar sólo nombres de base de ficheros fuente"
-#: src/addr2line.c:65
-msgid "Show absolute file names using compilation directory"
+#: src/addr2line.c:67
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show absolute file names using compilation directory (default)"
msgstr ""
"Mostrar nombres de fichero absolutos mediante directorio de compilación"
-#: src/addr2line.c:66
+#: src/addr2line.c:68
msgid "Also show function names"
msgstr "También mostrar nombres de función"
-#: src/addr2line.c:67
+#: src/addr2line.c:69
msgid "Also show symbol or section names"
msgstr "También mostrar símbolo o nombres de sección"
-#: src/addr2line.c:68
+#: src/addr2line.c:70
#, fuzzy
msgid "Also show symbol and the section names"
msgstr "También mostrar símbolo o nombres de sección"
-#: src/addr2line.c:69
+#: src/addr2line.c:71
msgid "Also show line table flags"
msgstr "También mostrar marcas de líneas de tabla"
-#: src/addr2line.c:71
+#: src/addr2line.c:73
msgid ""
"Show all source locations that caused inline expansion of subroutines at the "
"address."
msgstr ""
-#: src/addr2line.c:74
+#: src/addr2line.c:76
msgid "Show demangled symbols (ARG is always ignored)"
msgstr ""
-#: src/addr2line.c:76
+#: src/addr2line.c:78
msgid "Print all information on one line, and indent inlines"
msgstr ""
-#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100
+#: src/addr2line.c:80
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show relative file names without compilation directory"
+msgstr ""
+"Mostrar nombres de fichero absolutos mediante directorio de compilación"
+
+#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100
#: src/strings.c:78
msgid "Miscellaneous:"
msgstr "Misceláneos:"
#. Short description of program.
-#: src/addr2line.c:86
+#: src/addr2line.c:90
msgid ""
"Locate source files and line information for ADDRs (in a.out by default)."
msgstr ""
@@ -886,26 +890,25 @@ msgstr ""
"por defecto)."
#. Strings for arguments in help texts.
-#: src/addr2line.c:90
+#: src/addr2line.c:94
msgid "[ADDR...]"
msgstr "[DIREC...]"
-#: src/addr2line.c:519
-#, c-format
+#: src/addr2line.c:527
msgid "Section syntax requires exactly one module"
msgstr "Sintaxis de sección requiere exactamente un módulo"
-#: src/addr2line.c:542
+#: src/addr2line.c:549
#, c-format
msgid "offset %#<PRIxMAX> lies outside section '%s'"
msgstr "Compensación %#<PRIxMAX> se encuentra fuera de sección '%s'"
-#: src/addr2line.c:652
+#: src/addr2line.c:659
#, c-format
msgid "cannot find symbol '%s'"
msgstr "no se puede encontrar símbolo '%s'"
-#: src/addr2line.c:657
+#: src/addr2line.c:664
#, c-format
msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
msgstr "compensación %#<PRIxMAX> se encuentra fuera de contenido de '%s'"
@@ -1074,112 +1077,110 @@ msgstr "no sepuede stat el archivo '%s'"
msgid "no entry %s in archive\n"
msgstr "no hay entrada %s en archivo\n"
-#: src/ar.c:472 src/ar.c:927 src/ar.c:1134
-#, c-format
+#: src/ar.c:472 src/ar.c:926 src/ar.c:1132
msgid "cannot create hash table"
msgstr "Falló al crear la tabla de dispersión"
-#: src/ar.c:479 src/ar.c:934 src/ar.c:1143
-#, c-format
+#: src/ar.c:478 src/ar.c:932 src/ar.c:1140
msgid "cannot insert into hash table"
msgstr "no sepuede insertar en tabla de dispersión"
-#: src/ar.c:487 src/ranlib.c:148
+#: src/ar.c:486 src/ranlib.c:148
#, c-format
msgid "cannot stat '%s'"
msgstr "no se puede stat '%s'"
-#: src/ar.c:589
+#: src/ar.c:588
#, c-format
msgid "cannot read content of %s: %s"
msgstr "no se puede leer el contenido de %s: %s"
-#: src/ar.c:632
+#: src/ar.c:631
#, c-format
msgid "cannot open %.*s"
msgstr " Imposible abrir %.*s"
-#: src/ar.c:654
+#: src/ar.c:653
#, c-format
msgid "failed to write %s"
msgstr "Falló al escribir %s"
-#: src/ar.c:666
+#: src/ar.c:665
#, c-format
msgid "cannot change mode of %s"
msgstr "No se puede cambiar el modo de %s"
-#: src/ar.c:682
+#: src/ar.c:681
#, c-format
msgid "cannot change modification time of %s"
msgstr "No puede cambiar tiempo de modificación de %s"
-#: src/ar.c:728
+#: src/ar.c:727
#, c-format
msgid "cannot rename temporary file to %.*s"
msgstr "no sepuede renombrar fichero temporal para %.*s"
-#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222
+#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222
#, c-format
msgid "cannot create new file"
msgstr "no sepuede crear fichero nuevo"
-#: src/ar.c:1225
+#: src/ar.c:1222
#, c-format
msgid "position member %s not found"
msgstr "no se encuentra miembro de posición %s "
-#: src/ar.c:1235
+#: src/ar.c:1232
#, c-format
msgid "%s: no entry %s in archive!\n"
msgstr "%s: ¡no hay entrada %s en archive!\n"
-#: src/ar.c:1264 src/objdump.c:241
+#: src/ar.c:1261 src/objdump.c:241
#, c-format
msgid "cannot open %s"
msgstr "no sepuede abrir %s"
-#: src/ar.c:1269
+#: src/ar.c:1266
#, c-format
msgid "cannot stat %s"
msgstr "no sepuede efectuar stat %s"
-#: src/ar.c:1275
+#: src/ar.c:1272
#, c-format
msgid "%s is no regular file"
msgstr " %s no es un fichero ordinario "
-#: src/ar.c:1288
+#: src/ar.c:1285
#, c-format
msgid "cannot get ELF descriptor for %s: %s\n"
msgstr "no sepuede obtener descriptor ELF para %s: %s\n"
-#: src/ar.c:1308
+#: src/ar.c:1305
#, c-format
msgid "cannot read %s: %s"
msgstr "no sepuede leer %s: %s"
-#: src/ar.c:1483
+#: src/ar.c:1480
#, fuzzy, c-format
msgid "cannot represent ar_date"
msgstr "no pueden copiar datos de sección: %s"
-#: src/ar.c:1489
+#: src/ar.c:1486
#, fuzzy, c-format
msgid "cannot represent ar_uid"
msgstr "no pueden copiar datos de sección: %s"
-#: src/ar.c:1495
+#: src/ar.c:1492
#, fuzzy, c-format
msgid "cannot represent ar_gid"
msgstr "no pueden copiar datos de sección: %s"
-#: src/ar.c:1501
+#: src/ar.c:1498
#, fuzzy, c-format
msgid "cannot represent ar_mode"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/ar.c:1507
+#: src/ar.c:1504
#, fuzzy, c-format
msgid "cannot represent ar_size"
msgstr "no sepuede abrir %s"
@@ -1208,195 +1209,195 @@ msgstr " El archivo '%s' es demasiado grande"
msgid "cannot read ELF header of %s(%s): %s"
msgstr "no se puede leer el encabezamiento ELF de %s(%s): %s"
-#: src/elfclassify.c:92
+#: src/elfclassify.c:91
msgid "opening"
msgstr ""
-#: src/elfclassify.c:99
+#: src/elfclassify.c:98
msgid "reading"
msgstr ""
-#: src/elfclassify.c:245
+#: src/elfclassify.c:244
#, fuzzy
#| msgid "cannot get ELF header"
msgid "ELF header"
msgstr "no se puede obtener el encabezamiento ELF"
-#: src/elfclassify.c:256
+#: src/elfclassify.c:255
#, fuzzy
#| msgid "Program Headers:"
msgid "program headers"
msgstr "encabezamientos de programa:"
-#: src/elfclassify.c:265
+#: src/elfclassify.c:264
#, fuzzy
#| msgid "Program Headers:"
msgid "program header"
msgstr "encabezamientos de programa:"
-#: src/elfclassify.c:285
+#: src/elfclassify.c:284
#, fuzzy
#| msgid "Section Headers:"
msgid "section headers"
msgstr "encabezamientos de sección:"
-#: src/elfclassify.c:296
+#: src/elfclassify.c:295
#, fuzzy
#| msgid "cannot get section header string table index"
msgid "section header string table index"
msgstr "no se puede obtener índice de cadena de encabezamiento de sección"
-#: src/elfclassify.c:310
+#: src/elfclassify.c:309
#, fuzzy
msgid "could not obtain section header"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/elfclassify.c:316
+#: src/elfclassify.c:315
#, fuzzy
msgid "could not obtain section name"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/elfclassify.c:829
+#: src/elfclassify.c:828
msgid "writing to standard output"
msgstr ""
-#: src/elfclassify.c:856
+#: src/elfclassify.c:855
msgid "reading from standard input"
msgstr ""
-#: src/elfclassify.c:877
+#: src/elfclassify.c:876
#, fuzzy
#| msgid "Input selection options:"
msgid "Classification options"
msgstr "Opciones de selección de entrada:"
-#: src/elfclassify.c:879
+#: src/elfclassify.c:878
msgid "File looks like an ELF object or archive/static library (default)"
msgstr ""
-#: src/elfclassify.c:882
+#: src/elfclassify.c:881
msgid "File is an regular ELF object (not an archive/static library)"
msgstr ""
-#: src/elfclassify.c:885
+#: src/elfclassify.c:884
msgid "File is an ELF archive or static library"
msgstr ""
-#: src/elfclassify.c:888
+#: src/elfclassify.c:887
msgid "File is an ELF core dump file"
msgstr ""
-#: src/elfclassify.c:891
+#: src/elfclassify.c:890
msgid ""
"File is an ELF file with symbol table or .debug_* sections and can be "
"stripped further"
msgstr ""
-#: src/elfclassify.c:894
+#: src/elfclassify.c:893
msgid "File is (primarily) an ELF program executable (not primarily a DSO)"
msgstr ""
-#: src/elfclassify.c:897
+#: src/elfclassify.c:896
msgid "File is an ELF program executable (might also be a DSO)"
msgstr ""
-#: src/elfclassify.c:900
+#: src/elfclassify.c:899
msgid ""
"File is (primarily) an ELF shared object (DSO) (not primarily an executable)"
msgstr ""
-#: src/elfclassify.c:903
+#: src/elfclassify.c:902
msgid "File is an ELF shared object (DSO) (might also be an executable)"
msgstr ""
-#: src/elfclassify.c:907
+#: src/elfclassify.c:906
#, fuzzy
#| msgid "cannot find kernel modules"
msgid "File is a linux kernel module"
msgstr "no se pueden hallar módulos de kernel"
-#: src/elfclassify.c:909
+#: src/elfclassify.c:908
msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)"
msgstr ""
-#: src/elfclassify.c:912
+#: src/elfclassify.c:911
msgid "File is a loadable ELF object (program or shared object)"
msgstr ""
-#: src/elfclassify.c:941
+#: src/elfclassify.c:940
msgid "Input flags"
msgstr ""
-#: src/elfclassify.c:943
+#: src/elfclassify.c:942
msgid "Only classify regular (not symlink nor special device) files"
msgstr ""
-#: src/elfclassify.c:945
+#: src/elfclassify.c:944
msgid ""
"Also read file names to process from standard input, separated by newlines"
msgstr ""
-#: src/elfclassify.c:948
+#: src/elfclassify.c:947
msgid ""
"Also read file names to process from standard input, separated by ASCII NUL "
"bytes"
msgstr ""
-#: src/elfclassify.c:951
+#: src/elfclassify.c:950
msgid "Do not read files from standard input (default)"
msgstr ""
-#: src/elfclassify.c:953
+#: src/elfclassify.c:952
msgid "Try to open compressed files or embedded (kernel) ELF images"
msgstr ""
-#: src/elfclassify.c:956
+#: src/elfclassify.c:955
#, fuzzy
#| msgid "Output format:"
msgid "Output flags"
msgstr "Formato de salida:"
-#: src/elfclassify.c:958
+#: src/elfclassify.c:957
msgid "Output names of files, separated by newline"
msgstr ""
-#: src/elfclassify.c:960
+#: src/elfclassify.c:959
msgid "Output names of files, separated by ASCII NUL"
msgstr ""
-#: src/elfclassify.c:962
+#: src/elfclassify.c:961
#, fuzzy
#| msgid "More than one output file name given."
msgid "Do not output file names"
msgstr "Se ha dado más de un nombre de archivo de salida."
-#: src/elfclassify.c:964
+#: src/elfclassify.c:963
msgid "If printing file names, print matching files (default)"
msgstr ""
-#: src/elfclassify.c:966
+#: src/elfclassify.c:965
msgid "If printing file names, print files that do not match"
msgstr ""
-#: src/elfclassify.c:968
+#: src/elfclassify.c:967
msgid "Additional flags"
msgstr ""
-#: src/elfclassify.c:970
+#: src/elfclassify.c:969
msgid "Output additional information (can be specified multiple times)"
msgstr ""
-#: src/elfclassify.c:972
+#: src/elfclassify.c:971
msgid "Suppress some error output (counterpart to --verbose)"
msgstr ""
#. Strings for arguments in help texts.
-#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77
+#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77
#: src/readelf.c:158
msgid "FILE..."
msgstr "FICHERO..."
-#: src/elfclassify.c:981
+#: src/elfclassify.c:980
msgid ""
"Determine the type of an ELF file.\n"
"\n"
@@ -1630,14 +1631,14 @@ msgstr "%s %s differ: brecha"
msgid "Invalid value '%s' for --gaps parameter."
msgstr "Valor inválido '%s' para parámetro --gaps"
-#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141
-#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067
+#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141
+#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070
#: src/unstrip.c:2195 src/unstrip.c:2224
#, c-format
msgid "cannot open '%s'"
msgstr "Imposible abrir '%s'"
-#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158
+#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158
#, c-format
msgid "cannot create ELF descriptor for '%s': %s"
msgstr "No puede crear descriptor ELF para '%s': %s"
@@ -1647,7 +1648,7 @@ msgstr "No puede crear descriptor ELF para '%s': %s"
msgid "cannot create EBL descriptor for '%s'"
msgstr "no se puede crear el descriptor EBL para '%s'"
-#: src/elfcmp.c:761 src/findtextrel.c:394
+#: src/elfcmp.c:761 src/findtextrel.c:385
#, c-format
msgid "cannot get section header of section %zu: %s"
msgstr "No se puede obtener el encabezamiento de sección %zu: %s"
@@ -1662,7 +1663,7 @@ msgstr "No se puede obtener contenido de sección %zu: %s"
msgid "cannot get relocation: %s"
msgstr "No se puede obtener reubicación: %s"
-#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117
+#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117
#, c-format
msgid "-o option specified twice"
msgstr "opción -o especificada dos veces"
@@ -1683,7 +1684,7 @@ msgstr "tipo desconocido"
msgid "No input file given"
msgstr "archivo de entrada vacío"
-#: src/elfcompress.c:151 src/elfcompress.c:1350
+#: src/elfcompress.c:151 src/elfcompress.c:1349
#, fuzzy, c-format
msgid "Only one input file allowed together with '-o'"
msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'"
@@ -1937,7 +1938,7 @@ msgstr ""
#: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655
#: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106
-#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458
+#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n"
@@ -3545,7 +3546,7 @@ msgstr ""
"Sección [%2d] '%s': tipo de nota de fichero core desconocido %<PRIu32> en "
"compensación %Zu\n"
-#: src/elflint.c:4397
+#: src/elflint.c:4404
#, fuzzy, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
@@ -3554,7 +3555,7 @@ msgstr ""
"phdr[%d]: tipo de nota de fichero objeto desconocido %<PRIu32> en "
"compensación %Zu\n"
-#: src/elflint.c:4402
+#: src/elflint.c:4409
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
@@ -3563,40 +3564,40 @@ msgstr ""
"Sección [%2d] '%s': tipo de nota de fichero objeto desconocido %<PRIu32> en "
"compensación %Zu\n"
-#: src/elflint.c:4421
+#: src/elflint.c:4428
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr "phdr[%d]: no hay entradas de nota definidas para el tipo de archivo\n"
-#: src/elflint.c:4441
+#: src/elflint.c:4448
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr "phdr[%d]: no puede obtener contenido de sección de nota: %s\n"
-#: src/elflint.c:4444
+#: src/elflint.c:4451
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr "phdr[%d]: extra %<PRIu64> bytes después de la última nota\n"
-#: src/elflint.c:4465
+#: src/elflint.c:4472
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
"Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de "
"archivo\n"
-#: src/elflint.c:4472
+#: src/elflint.c:4479
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr ""
"Sección[%2d] '%s': no se puede obtener el contenido de sección de nota\n"
-#: src/elflint.c:4475
+#: src/elflint.c:4482
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr "Sección[%2d] '%s': extra %<PRIu64> bytes después de la última nota\n"
-#: src/elflint.c:4493
+#: src/elflint.c:4500
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
@@ -3604,145 +3605,145 @@ msgstr ""
"Sólo ejecutables, objetos compartidos y ficheros core pueden tener "
"encabezamientos de programas\n"
-#: src/elflint.c:4508
+#: src/elflint.c:4515
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr "no se puede obtener entrada de encabezamiento %d: %s\n"
-#: src/elflint.c:4518
+#: src/elflint.c:4525
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
"entrada de encabezamiento de programa %d: tipo %#<PRIx64> de entrada de "
"encabezamiento de programa desconocido\n"
-#: src/elflint.c:4529
+#: src/elflint.c:4536
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr "Más de una entrada INTERP en encabezamiento de programa\n"
-#: src/elflint.c:4537
+#: src/elflint.c:4544
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr "más de una entrada TLS en encabezamiento de programa\n"
-#: src/elflint.c:4544
+#: src/elflint.c:4551
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr "ejecutable estático no puede tener secciones dinámicas\n"
-#: src/elflint.c:4558
+#: src/elflint.c:4565
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
"Referencia de sección dinámica en encabezamiento de programa tiene "
"compensación errada\n"
-#: src/elflint.c:4561
+#: src/elflint.c:4568
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
"No coinciden tamaño de sección dinámica en programa y encabezamiento de "
"sección\n"
-#: src/elflint.c:4571
+#: src/elflint.c:4578
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr "Más de una entrada GNU_RELRO en encabezamiento de programa\n"
-#: src/elflint.c:4592
+#: src/elflint.c:4599
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr "Segmento cargable GNU_RELRO que se aplica no es de escritura\n"
-#: src/elflint.c:4603
+#: src/elflint.c:4610
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
"Banderas de segmento cargable [%u] no coinciden con banderas GNU_RELRO [%u]\n"
-#: src/elflint.c:4610
+#: src/elflint.c:4617
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
-#: src/elflint.c:4619 src/elflint.c:4642
+#: src/elflint.c:4626 src/elflint.c:4649
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr "Segmento %s no contenido en un segmento cargable\n"
-#: src/elflint.c:4648
+#: src/elflint.c:4655
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr ""
"Compensación de encabezamiento de programa en encabezamiento ELF y entrada "
"PHDR no coinciden"
-#: src/elflint.c:4675
+#: src/elflint.c:4682
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
"Referencia de tabla de búsqueda de marco de llamada en encabezamiento de "
"programa tiene una compensación errada\n"
-#: src/elflint.c:4678
+#: src/elflint.c:4685
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
"Tamaño de tabla de búsqueda de marco de llamada no coincide con programa y "
"encabezamiento de sección\n"
-#: src/elflint.c:4691
+#: src/elflint.c:4698
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr "PT_GNU_EH_FRAME presente pero no la sección.eh_frame_hdr\n"
-#: src/elflint.c:4699
+#: src/elflint.c:4706
#, c-format
msgid "call frame search table must be allocated\n"
msgstr "tabla de búsqueda de marco de llamada debe ser asignada\n"
-#: src/elflint.c:4702
+#: src/elflint.c:4709
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr "sección [%2zu] '%s' debe ser asignada\n"
-#: src/elflint.c:4706
+#: src/elflint.c:4713
#, c-format
msgid "call frame search table must not be writable\n"
msgstr ""
"tabla de búsqueda de marco de llamada no debe tener permiso de escritura\n"
-#: src/elflint.c:4709
+#: src/elflint.c:4716
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n"
-#: src/elflint.c:4714
+#: src/elflint.c:4721
#, c-format
msgid "call frame search table must not be executable\n"
msgstr "tabla de búsqueda de marco de llamada no debe ser ejecutable\n"
-#: src/elflint.c:4717
+#: src/elflint.c:4724
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr "sección [%2zu] '%s' no debe ser ejecutable\n"
-#: src/elflint.c:4728
+#: src/elflint.c:4735
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr ""
"entrada de encabezamiento de programa %d: tamaño de fichero mayor que el "
"tamaño de memoria\n"
-#: src/elflint.c:4735
+#: src/elflint.c:4742
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr ""
"entrada de encabezamiento de programa %d: alineamiento no es potencia de 2\n"
-#: src/elflint.c:4738
+#: src/elflint.c:4745
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
@@ -3751,7 +3752,7 @@ msgstr ""
"entrada de encabezamiento de programa %d: compensación de fichero y "
"dirección virtual no módulo de alineación\n"
-#: src/elflint.c:4751
+#: src/elflint.c:4758
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
@@ -3760,111 +3761,111 @@ msgstr ""
"ejecutable/DSO con sección .eh_frame_hdr no tiene una entrada de "
"encabezamiento de programa PT_GNU_EH_FRAME"
-#: src/elflint.c:4785
+#: src/elflint.c:4792
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr "No se puede leer encabezamiento ELF: %s\n"
-#: src/elflint.c:4797
+#: src/elflint.c:4804
#, fuzzy, c-format
msgid "cannot create backend for ELF file\n"
msgstr "no sepuede crear fichero nuevo"
-#: src/elflint.c:4818
+#: src/elflint.c:4825
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr "Bandera de reubicación de texto establecida pero no necesaria\n"
-#: src/findtextrel.c:60
+#: src/findtextrel.c:61
msgid "Input Selection:"
msgstr "Selección de entrada:"
-#: src/findtextrel.c:61
+#: src/findtextrel.c:62
msgid "Prepend PATH to all file names"
msgstr "Agregar RUTA a todos los nombres de ficheros"
-#: src/findtextrel.c:63
+#: src/findtextrel.c:64
msgid "Use PATH as root of debuginfo hierarchy"
msgstr "Usar RUTA como root de jerarquía de debuginfo"
#. Short description of program.
-#: src/findtextrel.c:70
+#: src/findtextrel.c:71
msgid "Locate source of text relocations in FILEs (a.out by default)."
msgstr ""
"Localizar origen de reubicaciones de texto en FICHEROS (a.out por defecto)."
#. Strings for arguments in help texts.
-#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80
+#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80
#: src/strings.c:87 src/strip.c:101
msgid "[FILE...]"
msgstr "[FICHERO...]"
-#: src/findtextrel.c:222
+#: src/findtextrel.c:224
#, c-format
msgid "cannot get ELF header '%s': %s"
msgstr "No se puede obtener encabezamiento ELF '%s': %s"
-#: src/findtextrel.c:233
+#: src/findtextrel.c:235
#, c-format
msgid "'%s' is not a DSO or PIE"
msgstr "'%s' es no un DSO o PIE"
-#: src/findtextrel.c:253
+#: src/findtextrel.c:255
#, c-format
msgid "getting get section header of section %zu: %s"
msgstr "obtener encabezamiento de sección get de sección %zu: %s"
-#: src/findtextrel.c:277
+#: src/findtextrel.c:279
#, c-format
msgid "cannot read dynamic section: %s"
msgstr "No se puede leer sección dinámica: %s"
-#: src/findtextrel.c:298
+#: src/findtextrel.c:300
#, c-format
msgid "no text relocations reported in '%s'"
msgstr "no hay reubicaciones de texto reportado en '%s'"
-#: src/findtextrel.c:310
+#: src/findtextrel.c:311
#, c-format
msgid "while reading ELF file"
msgstr "Error al leer fichero ELF"
-#: src/findtextrel.c:314
+#: src/findtextrel.c:315
#, fuzzy, c-format
msgid "cannot get program header count: %s"
msgstr "no se puede obtener memoria para encabezamiento del programa: %s"
-#: src/findtextrel.c:325 src/findtextrel.c:342
+#: src/findtextrel.c:326 src/findtextrel.c:341
#, fuzzy, c-format
msgid "cannot get program header index at offset %zd: %s"
msgstr ""
"Nos se puede obtener el índice de encabezamiento de programa en compensación "
"%d: %s"
-#: src/findtextrel.c:406
+#: src/findtextrel.c:397
#, c-format
msgid "cannot get symbol table section %zu in '%s': %s"
msgstr "No se puede obtener tabla de símbolos %zu en '%s': %s"
-#: src/findtextrel.c:427 src/findtextrel.c:450
+#: src/findtextrel.c:418 src/findtextrel.c:441
#, c-format
msgid "cannot get relocation at index %d in section %zu in '%s': %s"
msgstr ""
"No se puede obtener reubicación en índice %d en sección %zu en '%s': %s"
-#: src/findtextrel.c:516
+#: src/findtextrel.c:507
#, c-format
msgid "%s not compiled with -fpic/-fPIC\n"
msgstr "%s no compilado con -fpic/-fPIC\n"
-#: src/findtextrel.c:570
+#: src/findtextrel.c:561
#, c-format
msgid ""
"the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
msgstr ""
"El archivo que contiene la función '%s' no está compilado con -fpic/-fPIC\n"
-#: src/findtextrel.c:577 src/findtextrel.c:597
+#: src/findtextrel.c:568 src/findtextrel.c:588
#, c-format
msgid ""
"the file containing the function '%s' might not be compiled with -fpic/-"
@@ -3873,7 +3874,7 @@ msgstr ""
"el fichero que contiene la función '%s' podría no estar compilado con -fpic/-"
"fPIC\n"
-#: src/findtextrel.c:585
+#: src/findtextrel.c:576
#, c-format
msgid ""
"either the file containing the function '%s' or the file containing the "
@@ -3882,7 +3883,7 @@ msgstr ""
"Tanto el fichero que contiene la función '%s' como el fichero que contiene "
"la función '%s' no están compilados con -fpic/-fPIC\n"
-#: src/findtextrel.c:605
+#: src/findtextrel.c:596
#, c-format
msgid ""
"a relocation modifies memory at offset %llu in a write-protected segment\n"
@@ -3991,12 +3992,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s"
msgstr "%s: ERROR INTERNO %d (%s-%s): %s"
#: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308
-#: src/strip.c:2763
+#: src/strip.c:2759
#, c-format
msgid "while closing '%s'"
msgstr "error al cerrar '%s'"
-#: src/nm.c:403 src/objdump.c:280 src/strip.c:818
+#: src/nm.c:403 src/objdump.c:280 src/strip.c:820
#, c-format
msgid "%s: File format not recognized"
msgstr "%s: No se reconoce el formato del fichero"
@@ -4031,24 +4032,23 @@ msgstr "imposible restablecer compensación de archivo al inicio"
msgid "%s%s%s: file format not recognized"
msgstr "%s%s%s: no se reconoció el formato de fichero"
-#: src/nm.c:705
-#, c-format
+#: src/nm.c:703
msgid "cannot create search tree"
msgstr "No se puede crear el árbol de búsqueda"
-#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637
-#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009
-#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719
-#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530
-#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533
-#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470
-#: src/strip.c:1084
+#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637
+#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017
+#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724
+#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528
+#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597
+#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468
+#: src/strip.c:1086
#, c-format
msgid "cannot get section header string table index"
msgstr "no se puede obtener índice de cadena de encabezamiento de sección"
#. We always print this prolog.
-#: src/nm.c:771
+#: src/nm.c:768
#, c-format
msgid ""
"\n"
@@ -4062,7 +4062,7 @@ msgstr ""
"\n"
#. The header line.
-#: src/nm.c:774
+#: src/nm.c:771
#, c-format
msgid ""
"%*s%-*s %-*s Class Type %-*s %*s Section\n"
@@ -4071,53 +4071,53 @@ msgstr ""
"%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n"
"\n"
-#: src/nm.c:776
+#: src/nm.c:773
msgctxt "sysv"
msgid "Name"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:778
+#: src/nm.c:775
msgctxt "sysv"
msgid "Value"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:780
+#: src/nm.c:777
msgctxt "sysv"
msgid "Size"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:782
+#: src/nm.c:779
msgctxt "sysv"
msgid "Line"
msgstr ""
-#: src/nm.c:1250
+#: src/nm.c:1246
#, fuzzy, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr ""
"%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos "
-#: src/nm.c:1255
+#: src/nm.c:1251
#, fuzzy, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: Tamaño de sección `%s' no es múltiplo de tamaño de entrada"
-#: src/nm.c:1336
+#: src/nm.c:1331
#, fuzzy, c-format
msgid "%s: entries (%zd) in section %zd `%s' is too large"
msgstr ""
"%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos "
#. XXX Add machine specific object file types.
-#: src/nm.c:1572
+#: src/nm.c:1567
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: Operación inválida"
-#: src/nm.c:1622
+#: src/nm.c:1617
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: No hay símbolos"
@@ -4161,11 +4161,11 @@ msgstr "No se especificó una operación.\n"
msgid "while close `%s'"
msgstr "mientras cierra `%s'"
-#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296
+#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303
msgid "INVALID SYMBOL"
msgstr "SÃMBOLO INVÃLIDO"
-#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332
+#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339
msgid "INVALID SECTION"
msgstr "SECCIÓN INVÃLIDA"
@@ -4190,12 +4190,11 @@ msgid "Contents of section %s:\n"
msgstr "Contenido de la sección %s:\n"
#: src/objdump.c:687
-#, c-format
msgid "cannot disassemble"
msgstr "No se puede desensamblar"
-#: src/objdump.c:760
-#, fuzzy, c-format
+#: src/objdump.c:758
+#, fuzzy
msgid "cannot create backend for elf file"
msgstr "no sepuede crear fichero nuevo"
@@ -4382,20 +4381,20 @@ msgstr "Sección de depuración DWARF desconocida `%s'.\n"
msgid "cannot generate Elf descriptor: %s"
msgstr "no se puede crear descriptor ELF: %s"
-#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179
+#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181
#, c-format
msgid "cannot determine number of sections: %s"
msgstr "no se pudieron determinar el número de secciones: %s"
-#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475
+#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469
#, c-format
msgid "cannot get section: %s"
msgstr "No se puede encontrar la sección: %s"
-#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764
-#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610
-#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222
-#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470
+#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827
+#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611
+#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223
+#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471
#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056
#, c-format
msgid "cannot get section header: %s"
@@ -4406,8 +4405,8 @@ msgstr "No se puede obtener encabezamiento de sección: %s"
msgid "cannot get section name"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713
-#: src/readelf.c:10891
+#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782
+#: src/readelf.c:10960
#, c-format
msgid "cannot get %s content: %s"
msgstr "No se puede obtener el contenido %s: %s"
@@ -4467,48 +4466,48 @@ msgstr "no se pudo leer encabezamiento ELF: %s"
msgid "cannot create EBL handle"
msgstr "no se puede crear EBL"
-#: src/readelf.c:961
+#: src/readelf.c:959
#, c-format
msgid "cannot determine number of program headers: %s"
msgstr "no se pudo determinar la cantidad de encabezados de programa: %s"
-#: src/readelf.c:993
+#: src/readelf.c:991
#, fuzzy, c-format
msgid "cannot read ELF: %s"
msgstr "no sepuede leer %s: %s"
-#: src/readelf.c:1054
+#: src/readelf.c:1052
msgid "NONE (None)"
msgstr "NONE (Ninguno)"
-#: src/readelf.c:1055
+#: src/readelf.c:1053
msgid "REL (Relocatable file)"
msgstr "REL (Fichero reubicable)"
-#: src/readelf.c:1056
+#: src/readelf.c:1054
msgid "EXEC (Executable file)"
msgstr "EXEC (Fichero ejecutable)"
-#: src/readelf.c:1057
+#: src/readelf.c:1055
msgid "DYN (Shared object file)"
msgstr "DYN (Fichero objeto compartido)"
-#: src/readelf.c:1058
+#: src/readelf.c:1056
msgid "CORE (Core file)"
msgstr "CORE (Fichero núcleo)"
-#: src/readelf.c:1063
+#: src/readelf.c:1061
#, c-format
msgid "OS Specific: (%x)\n"
msgstr "OS Specific: (%x)\n"
#. && e_type <= ET_HIPROC always true
-#: src/readelf.c:1065
+#: src/readelf.c:1063
#, c-format
msgid "Processor Specific: (%x)\n"
msgstr "Específico del procesador: (%x)\n"
-#: src/readelf.c:1075
+#: src/readelf.c:1073
msgid ""
"ELF Header:\n"
" Magic: "
@@ -4516,7 +4515,7 @@ msgstr ""
"Encabezamiento ELF:\n"
" Mágico: "
-#: src/readelf.c:1079
+#: src/readelf.c:1077
#, c-format
msgid ""
"\n"
@@ -4525,125 +4524,125 @@ msgstr ""
"\n"
" Clase: %s\n"
-#: src/readelf.c:1084
+#: src/readelf.c:1082
#, c-format
msgid " Data: %s\n"
msgstr " Datos: %s\n"
-#: src/readelf.c:1090
+#: src/readelf.c:1088
#, c-format
msgid " Ident Version: %hhd %s\n"
msgstr " Versión ident: %hhd %s\n"
-#: src/readelf.c:1092 src/readelf.c:1114
+#: src/readelf.c:1090 src/readelf.c:1112
msgid "(current)"
msgstr "(actual)"
-#: src/readelf.c:1096
+#: src/readelf.c:1094
#, c-format
msgid " OS/ABI: %s\n"
msgstr " OS/ABI: %s\n"
-#: src/readelf.c:1099
+#: src/readelf.c:1097
#, c-format
msgid " ABI Version: %hhd\n"
msgstr " Versión ABI: %hhd\n"
-#: src/readelf.c:1102
+#: src/readelf.c:1100
msgid " Type: "
msgstr " Tipo: "
-#: src/readelf.c:1107
+#: src/readelf.c:1105
#, c-format
msgid " Machine: %s\n"
msgstr " Máquina: %s\n"
-#: src/readelf.c:1109
+#: src/readelf.c:1107
#, fuzzy, c-format
msgid " Machine: <unknown>: 0x%x\n"
msgstr " Máquina: %s\n"
-#: src/readelf.c:1112
+#: src/readelf.c:1110
#, c-format
msgid " Version: %d %s\n"
msgstr " Versión: %d %s\n"
-#: src/readelf.c:1116
+#: src/readelf.c:1114
#, c-format
msgid " Entry point address: %#<PRIx64>\n"
msgstr " Dirección de punto de entrada: %#<PRIx64>\n"
-#: src/readelf.c:1119
+#: src/readelf.c:1117
#, c-format
msgid " Start of program headers: %<PRId64> %s\n"
msgstr " Inicio de encabezamientos de programa: %<PRId64> %s\n"
-#: src/readelf.c:1120 src/readelf.c:1123
+#: src/readelf.c:1118 src/readelf.c:1121
msgid "(bytes into file)"
msgstr " (bytes en el archivo)"
-#: src/readelf.c:1122
+#: src/readelf.c:1120
#, c-format
msgid " Start of section headers: %<PRId64> %s\n"
msgstr " Inicio de encabezamientos de sección: %<PRId64> %s\n"
-#: src/readelf.c:1125
+#: src/readelf.c:1123
#, c-format
msgid " Flags: %s\n"
msgstr " Indicadores: %s\n"
-#: src/readelf.c:1128
+#: src/readelf.c:1126
#, c-format
msgid " Size of this header: %<PRId16> %s\n"
msgstr " Tamaño de este encabezamiento: %<PRId16> %s\n"
-#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149
+#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147
msgid "(bytes)"
msgstr "(bytes)"
-#: src/readelf.c:1131
+#: src/readelf.c:1129
#, c-format
msgid " Size of program header entries: %<PRId16> %s\n"
msgstr ""
" Tamaño de las entradas en encabezamiento del programa: %<PRId16> %s\n"
-#: src/readelf.c:1134
+#: src/readelf.c:1132
#, c-format
msgid " Number of program headers entries: %<PRId16>"
msgstr " Cantidad de entradas de encabezados de programa: %<PRId16>"
-#: src/readelf.c:1141
+#: src/readelf.c:1139
#, c-format
msgid " (%<PRIu32> in [0].sh_info)"
msgstr " (%<PRIu32> in [0].sh_info)"
-#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175
+#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173
msgid " ([0] not available)"
msgstr " ([0] no disponible)"
-#: src/readelf.c:1148
+#: src/readelf.c:1146
#, c-format
msgid " Size of section header entries: %<PRId16> %s\n"
msgstr ""
" Tamaño de las entradas en el encabezamiento de sección: %<PRId16> %s\n"
-#: src/readelf.c:1151
+#: src/readelf.c:1149
#, c-format
msgid " Number of section headers entries: %<PRId16>"
msgstr " Cantidad de entradas en los encabezamientos de sección: %<PRId16>"
-#: src/readelf.c:1158
+#: src/readelf.c:1156
#, c-format
msgid " (%<PRIu32> in [0].sh_size)"
msgstr " (%<PRIu32> en [0].sh_size)"
#. We managed to get the zeroth section.
-#: src/readelf.c:1171
+#: src/readelf.c:1169
#, c-format
msgid " (%<PRIu32> in [0].sh_link)"
msgstr " (%<PRIu32> en [0].sh_link)"
-#: src/readelf.c:1179
+#: src/readelf.c:1177
#, c-format
msgid ""
" Section header string table index: XINDEX%s\n"
@@ -4652,19 +4651,19 @@ msgstr ""
" Ãndice de tabla de cadenas de sección de encabezamiento de : XINDEX%s\n"
"\n"
-#: src/readelf.c:1183
+#: src/readelf.c:1181
#, c-format
msgid ""
" Section header string table index: %<PRId16>\n"
"\n"
msgstr " Ãndice de tabla de cadenas de sección de encabezamiento: %<PRId16>\n"
-#: src/readelf.c:1230 src/readelf.c:1440
+#: src/readelf.c:1227 src/readelf.c:1435
#, fuzzy, c-format
msgid "cannot get number of sections: %s"
msgstr "no se pudieron determinar el número de secciones: %s"
-#: src/readelf.c:1233
+#: src/readelf.c:1230
#, fuzzy, c-format
msgid ""
"There are %zd section headers, starting at offset %#<PRIx64>:\n"
@@ -4673,16 +4672,16 @@ msgstr ""
"Hay %d encabezamientos de sección, comenzando en compensación %#<PRIx64>:\n"
"\n"
-#: src/readelf.c:1242
+#: src/readelf.c:1238
#, fuzzy, c-format
msgid "cannot get section header string table index: %s"
msgstr "no se puede obtener índice de cadena de encabezamiento de sección"
-#: src/readelf.c:1245
+#: src/readelf.c:1241
msgid "Section Headers:"
msgstr "encabezamientos de sección:"
-#: src/readelf.c:1248
+#: src/readelf.c:1244
msgid ""
"[Nr] Name Type Addr Off Size ES Flags Lk "
"Inf Al"
@@ -4690,7 +4689,7 @@ msgstr ""
"[Nr] Nombre Tipo Dirección Off Tamaño Inf Al "
"Enlace banderas ES"
-#: src/readelf.c:1250
+#: src/readelf.c:1246
msgid ""
"[Nr] Name Type Addr Off Size ES "
"Flags Lk Inf Al"
@@ -4698,36 +4697,36 @@ msgstr ""
"[Nr] Name Type Addr Off Size ES "
"Flags Lk Inf Al"
-#: src/readelf.c:1255
+#: src/readelf.c:1251
msgid " [Compression Size Al]"
msgstr ""
-#: src/readelf.c:1257
+#: src/readelf.c:1253
msgid " [Compression Size Al]"
msgstr ""
-#: src/readelf.c:1335
+#: src/readelf.c:1331
#, fuzzy, c-format
msgid "bad compression header for section %zd: %s"
msgstr "No se puede obtener el encabezamiento de sección %zu: %s"
-#: src/readelf.c:1346
+#: src/readelf.c:1342
#, fuzzy, c-format
msgid "bad gnu compressed size for section %zd: %s"
msgstr "No se pueden obtener datos para la sección %d: %s"
-#: src/readelf.c:1364
+#: src/readelf.c:1360
msgid "Program Headers:"
msgstr "encabezamientos de programa:"
-#: src/readelf.c:1366
+#: src/readelf.c:1362
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
msgstr ""
" Tipo Compensación Dirección Virtual Dirección "
"Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera"
-#: src/readelf.c:1369
+#: src/readelf.c:1365
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align"
@@ -4735,12 +4734,12 @@ msgstr ""
" Tipo Compensación Dirección Virtual Dirección "
"Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera"
-#: src/readelf.c:1426
+#: src/readelf.c:1422
#, c-format
msgid "\t[Requesting program interpreter: %s]\n"
msgstr "\t[Solicitando intérprete de programa: %s]\n"
-#: src/readelf.c:1453
+#: src/readelf.c:1447
msgid ""
"\n"
" Section to Segment mapping:\n"
@@ -4750,12 +4749,12 @@ msgstr ""
" Sección para asignación de segmento:\n"
" Secciones de segmento..."
-#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
+#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
#, c-format
msgid "cannot get program header: %s"
msgstr "no se puede obtener memoria para encabezamiento del programa: %s"
-#: src/readelf.c:1610
+#: src/readelf.c:1602
#, c-format
msgid ""
"\n"
@@ -4770,7 +4769,7 @@ msgstr[1] ""
"\n"
"Grupo de sección COMDAT [%2zu] '%s' con firma '%s' contiene entradas %zu:\n"
-#: src/readelf.c:1615
+#: src/readelf.c:1607
#, c-format
msgid ""
"\n"
@@ -4785,31 +4784,31 @@ msgstr[1] ""
"\n"
"Grupo de sección [%2zu] '%s' con firma '%s' contiene entradas %zu:\n"
-#: src/readelf.c:1623
+#: src/readelf.c:1615
msgid "<INVALID SYMBOL>"
msgstr "<SÃMBOLO INVÃLIDO>"
-#: src/readelf.c:1637
+#: src/readelf.c:1629
msgid "<INVALID SECTION>"
msgstr "<SECCIÓN INVÃLIDA>"
-#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635
-#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693
+#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699
+#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757
msgid "Couldn't uncompress section"
msgstr ""
-#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501
+#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500
#, fuzzy, c-format
msgid "cannot get section [%zd] header: %s"
msgstr "No se puede obtener encabezamiento de sección: %s"
-#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801
-#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409
+#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805
+#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406
#, fuzzy, c-format
msgid "invalid sh_link value in section %zu"
msgstr ".debug_line section inválida"
-#: src/readelf.c:1812
+#: src/readelf.c:1821
#, c-format
msgid ""
"\n"
@@ -4830,36 +4829,36 @@ msgstr[1] ""
" Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: "
"[%2u] '%s'\n"
-#: src/readelf.c:1822
+#: src/readelf.c:1831
msgid " Type Value\n"
msgstr " Tipo Valor\n"
-#: src/readelf.c:1846
+#: src/readelf.c:1855
#, c-format
msgid "Shared library: [%s]\n"
msgstr "Biblioteca compartida: [%s]\n"
-#: src/readelf.c:1851
+#: src/readelf.c:1860
#, c-format
msgid "Library soname: [%s]\n"
msgstr "Nombre-so de la biblioteca: [%s]\n"
-#: src/readelf.c:1856
+#: src/readelf.c:1865
#, c-format
msgid "Library rpath: [%s]\n"
msgstr "Rpath de la biblioteca: [%s]\n"
-#: src/readelf.c:1861
+#: src/readelf.c:1870
#, c-format
msgid "Library runpath: [%s]\n"
msgstr "Ruta de ejecución de la biblioteca: [%s]\n"
-#: src/readelf.c:1881
+#: src/readelf.c:1890
#, c-format
msgid "%<PRId64> (bytes)\n"
msgstr "%<PRId64> (bytes)\n"
-#: src/readelf.c:1994 src/readelf.c:2184
+#: src/readelf.c:2003 src/readelf.c:2192
#, c-format
msgid ""
"\n"
@@ -4868,7 +4867,7 @@ msgstr ""
"\n"
"Tabla de símbolos inválida en compensación %#0<PRIx64>\n"
-#: src/readelf.c:2012 src/readelf.c:2202
+#: src/readelf.c:2020 src/readelf.c:2209
#, c-format
msgid ""
"\n"
@@ -4893,7 +4892,7 @@ msgstr[1] ""
#. The .rela.dyn section does not refer to a specific section but
#. instead of section index zero. Do not try to print a section
#. name.
-#: src/readelf.c:2027 src/readelf.c:2217
+#: src/readelf.c:2035 src/readelf.c:2224
#, c-format
msgid ""
"\n"
@@ -4910,29 +4909,29 @@ msgstr[1] ""
"Sección de reubicación [%2u] '%s' en compensación %#0<PRIx64> contiene "
"entradas %d:\n"
-#: src/readelf.c:2037
+#: src/readelf.c:2045
msgid " Offset Type Value Name\n"
msgstr " Compensación Tipo Valor Nombre\n"
-#: src/readelf.c:2039
+#: src/readelf.c:2047
msgid " Offset Type Value Name\n"
msgstr " Compensación Tipo Valor Nombre\n"
-#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137
-#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309
-#: src/readelf.c:2331 src/readelf.c:2344
+#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145
+#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316
+#: src/readelf.c:2338 src/readelf.c:2351
msgid "<INVALID RELOC>"
msgstr "<REUBIC INVÃLIDA>"
-#: src/readelf.c:2227
+#: src/readelf.c:2234
msgid " Offset Type Value Addend Name\n"
msgstr " Compensación Tipo Valor Nombre Adend\n"
-#: src/readelf.c:2229
+#: src/readelf.c:2236
msgid " Offset Type Value Addend Name\n"
msgstr " Compensación Tipo Valor Nombre Adend\n"
-#: src/readelf.c:2467
+#: src/readelf.c:2473
#, c-format
msgid ""
"\n"
@@ -4947,40 +4946,40 @@ msgstr[1] ""
"\n"
"La tabla de símbolos [%2u] '%s' contiene entradas %u:\n"
-#: src/readelf.c:2472
+#: src/readelf.c:2478
#, c-format
msgid " %lu local symbol String table: [%2u] '%s'\n"
msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
msgstr[0] "símbolos locales %lu Tabla de cadena: [%2u] '%s'\n"
msgstr[1] " Símbolos locales %lu Tabla de cadenas: [%2u] '%s'\n"
-#: src/readelf.c:2480
+#: src/readelf.c:2486
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Núm: Valor Tamaño Tipo Unión Vis Nombre Ndx\n"
-#: src/readelf.c:2482
+#: src/readelf.c:2488
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Num: Valor Tamaño Tipo Unión Vis Nombre Ndx\n"
-#: src/readelf.c:2502
+#: src/readelf.c:2508
#, c-format
msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
-#: src/readelf.c:2595
+#: src/readelf.c:2601
#, c-format
msgid "bad dynamic symbol"
msgstr "símbolo dinámico erróneo"
-#: src/readelf.c:2680
+#: src/readelf.c:2686
msgid "none"
msgstr "nada"
-#: src/readelf.c:2697
+#: src/readelf.c:2703
msgid "| <unknown>"
msgstr "| <desconocido>"
-#: src/readelf.c:2728
+#: src/readelf.c:2733
#, c-format
msgid ""
"\n"
@@ -5001,17 +5000,17 @@ msgstr[1] ""
" Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: "
"[%2u] '%s'\n"
-#: src/readelf.c:2749
+#: src/readelf.c:2754
#, c-format
msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n"
-#: src/readelf.c:2762
+#: src/readelf.c:2767
#, c-format
msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n"
-#: src/readelf.c:2805
+#: src/readelf.c:2809
#, c-format
msgid ""
"\n"
@@ -5032,19 +5031,19 @@ msgstr[1] ""
" Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: "
"[%2u] '%s'\n"
-#: src/readelf.c:2833
+#: src/readelf.c:2837
#, c-format
msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
msgstr ""
" %#06x: Versión: %hd Banderas: %s Ãndice: %hd Conteo: %hd Nombre: %s\n"
-#: src/readelf.c:2848
+#: src/readelf.c:2852
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr " %#06x: Principal %d: %s\n"
#. Print the header.
-#: src/readelf.c:3109
+#: src/readelf.c:3112
#, c-format
msgid ""
"\n"
@@ -5065,15 +5064,15 @@ msgstr[1] ""
" Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: "
"[%2u] '%s'"
-#: src/readelf.c:3137
+#: src/readelf.c:3140
msgid " 0 *local* "
msgstr " 0 *local* "
-#: src/readelf.c:3142
+#: src/readelf.c:3145
msgid " 1 *global* "
msgstr " 1 *global* "
-#: src/readelf.c:3184
+#: src/readelf.c:3187
#, c-format
msgid ""
"\n"
@@ -5098,22 +5097,22 @@ msgstr[1] ""
" Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: "
"[%2u] '%s'\n"
-#: src/readelf.c:3206
+#: src/readelf.c:3209
#, no-c-format
msgid " Length Number % of total Coverage\n"
msgstr " Longitud Número % of total Cobertura\n"
-#: src/readelf.c:3208
+#: src/readelf.c:3211
#, c-format
msgid " 0 %6<PRIu32> %5.1f%%\n"
msgstr " 0 %6<PRIu32> %5.1f%%\n"
-#: src/readelf.c:3215
+#: src/readelf.c:3218
#, c-format
msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
-#: src/readelf.c:3228
+#: src/readelf.c:3231
#, c-format
msgid ""
" Average number of tests: successful lookup: %f\n"
@@ -5122,37 +5121,37 @@ msgstr ""
" Número promedio de pruebas: búsqueda exitosa: %f\n"
" búsqueda sin éxito: %f\n"
-#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376
+#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379
#, c-format
msgid "cannot get data for section %d: %s"
msgstr "No se pueden obtener datos para la sección %d: %s"
-#: src/readelf.c:3254
+#: src/readelf.c:3257
#, fuzzy, c-format
msgid "invalid data in sysv.hash section %d"
msgstr "Datos inválidos en sección [%zu] '%s'"
-#: src/readelf.c:3283
+#: src/readelf.c:3286
#, fuzzy, c-format
msgid "invalid chain in sysv.hash section %d"
msgstr "Datos inválidos en sección [%zu] '%s'"
-#: src/readelf.c:3318
+#: src/readelf.c:3321
#, fuzzy, c-format
msgid "invalid data in sysv.hash64 section %d"
msgstr "Datos inválidos en sección [%zu] '%s'"
-#: src/readelf.c:3349
+#: src/readelf.c:3352
#, fuzzy, c-format
msgid "invalid chain in sysv.hash64 section %d"
msgstr "Datos inválidos en sección [%zu] '%s'"
-#: src/readelf.c:3385
+#: src/readelf.c:3388
#, fuzzy, c-format
msgid "invalid data in gnu.hash section %d"
msgstr "Datos inválidos en sección [%zu] '%s'"
-#: src/readelf.c:3452
+#: src/readelf.c:3454
#, c-format
msgid ""
" Symbol Bias: %u\n"
@@ -5162,7 +5161,7 @@ msgstr ""
" Tamaño de Bitmask: %zu bytes %<PRIuFAST32>%% bits establecen segundo "
"cambio de dispersión: %u\n"
-#: src/readelf.c:3541
+#: src/readelf.c:3539
#, c-format
msgid ""
"\n"
@@ -5179,7 +5178,7 @@ msgstr[1] ""
"Sección de lista de biblioteca [%2zu] '%s' en compensación %#0<PRIx64> "
"contiene entradas %d:\n"
-#: src/readelf.c:3555
+#: src/readelf.c:3553
msgid ""
" Library Time Stamp Checksum Version "
"Flags"
@@ -5187,7 +5186,7 @@ msgstr ""
" Biblioteca Marca de tiempo Indicadores "
"de versión de suma de verificación"
-#: src/readelf.c:3614
+#: src/readelf.c:3611
#, c-format
msgid ""
"\n"
@@ -5198,102 +5197,102 @@ msgstr ""
"Sección de atributos de objeto [%2zu] '%s' de %<PRIu64> bytes con "
"desplazamiento %#0<PRIx64>:\n"
-#: src/readelf.c:3631
+#: src/readelf.c:3628
msgid " Owner Size\n"
msgstr " Propietario Tamaño\n"
-#: src/readelf.c:3655
+#: src/readelf.c:3652
#, c-format
msgid " %-13s %4<PRIu32>\n"
msgstr " %-13s %4<PRIu32>\n"
#. Unknown subsection, print and skip.
-#: src/readelf.c:3694
+#: src/readelf.c:3691
#, c-format
msgid " %-4u %12<PRIu32>\n"
msgstr " %-4u %12<PRIu32>\n"
#. Tag_File
-#: src/readelf.c:3699
+#: src/readelf.c:3696
#, c-format
msgid " File: %11<PRIu32>\n"
msgstr " File: %11<PRIu32>\n"
-#: src/readelf.c:3748
+#: src/readelf.c:3745
#, c-format
msgid " %s: %<PRId64>, %s\n"
msgstr " %s: %<PRId64>, %s\n"
-#: src/readelf.c:3751
+#: src/readelf.c:3748
#, c-format
msgid " %s: %<PRId64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:3754
+#: src/readelf.c:3751
#, c-format
msgid " %s: %s\n"
msgstr " %s: %s\n"
-#: src/readelf.c:3764
+#: src/readelf.c:3761
#, c-format
msgid " %u: %<PRId64>\n"
msgstr " %u: %<PRId64>\n"
-#: src/readelf.c:3767
+#: src/readelf.c:3764
#, c-format
msgid " %u: %s\n"
msgstr " %u: %s\n"
-#: src/readelf.c:3837
-#, fuzzy, c-format
+#: src/readelf.c:3834
+#, fuzzy
msgid "sprintf failure"
msgstr "mprotect falló"
-#: src/readelf.c:4319
+#: src/readelf.c:4316
msgid "empty block"
msgstr "bloque vacío"
-#: src/readelf.c:4322
+#: src/readelf.c:4319
#, c-format
msgid "%zu byte block:"
msgstr "bloque de byte %zu:"
-#: src/readelf.c:4800
+#: src/readelf.c:4797
#, fuzzy, c-format
msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n"
msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n"
-#: src/readelf.c:4867
+#: src/readelf.c:4864
#, c-format
msgid "%s %#<PRIx64> used with different address sizes"
msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño"
-#: src/readelf.c:4874
+#: src/readelf.c:4871
#, c-format
msgid "%s %#<PRIx64> used with different offset sizes"
msgstr "%s %#<PRIx64> utilizado con offsetr de diferente tamaño"
-#: src/readelf.c:4881
+#: src/readelf.c:4878
#, fuzzy, c-format
msgid "%s %#<PRIx64> used with different base addresses"
msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño"
-#: src/readelf.c:4888
+#: src/readelf.c:4885
#, fuzzy, c-format
msgid "%s %#<PRIx64> used with different attribute %s and %s"
msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño"
-#: src/readelf.c:4988
+#: src/readelf.c:4985
#, c-format
msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n"
msgstr " [%6tx] <MATERIAL INUTIL SIN UTILIZAR EN EL RESTO DE LA SECCION>\n"
-#: src/readelf.c:4996
+#: src/readelf.c:4993
#, c-format
msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n"
msgstr " [%6tx] <MATERIAL INUTIL NO UTILIZADO> ... %<PRIu64> bytes ...\n"
-#: src/readelf.c:5099
+#: src/readelf.c:5096
#, c-format
msgid ""
"\n"
@@ -5304,7 +5303,7 @@ msgstr ""
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n"
" [ Código]\n"
-#: src/readelf.c:5107
+#: src/readelf.c:5104
#, c-format
msgid ""
"\n"
@@ -5313,20 +5312,20 @@ msgstr ""
"\n"
"Sección de abreviatura en compensación %<PRIu64>:\n"
-#: src/readelf.c:5120
+#: src/readelf.c:5117
#, c-format
msgid " *** error while reading abbreviation: %s\n"
msgstr " *** error en lectura de abreviatura: %s\n"
-#: src/readelf.c:5136
+#: src/readelf.c:5133
#, c-format
msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
msgstr " [%5u] compensación: %<PRId64>, hijos: %s, etiqueta: %s\n"
-#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030
-#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548
-#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352
-#: src/readelf.c:10412
+#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027
+#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617
+#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421
+#: src/readelf.c:10481
#, c-format
msgid ""
"\n"
@@ -5335,52 +5334,52 @@ msgstr ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n"
-#: src/readelf.c:5182
+#: src/readelf.c:5179
#, fuzzy, c-format
msgid "cannot get .debug_addr section data: %s"
msgstr "no se pueden obtener datos de sección: %s"
-#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120
+#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189
#, fuzzy, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133
+#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202
#, fuzzy, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142
+#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211
#, fuzzy, c-format
msgid " Address size: %8<PRIu64>\n"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152
+#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221
#, fuzzy, c-format
msgid " Segment size: %8<PRIu64>\n"
msgstr " establecer archivo a %<PRIu64>\n"
-#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544
+#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613
#, fuzzy, c-format
msgid "Unknown version"
msgstr "versión desconocida"
-#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147
+#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216
#, fuzzy, c-format
msgid "unsupported address size"
msgstr "no hay valor de dirección"
-#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157
+#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226
#, c-format
msgid "unsupported segment size"
msgstr ""
-#: src/readelf.c:5399 src/readelf.c:5473
+#: src/readelf.c:5396 src/readelf.c:5470
#, c-format
msgid "cannot get .debug_aranges content: %s"
msgstr "no se ha podido obtener contenido de .debug_aranges: %s"
-#: src/readelf.c:5414
+#: src/readelf.c:5411
#, c-format
msgid ""
"\n"
@@ -5395,12 +5394,12 @@ msgstr[1] ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entradas %zu:\n"
-#: src/readelf.c:5445
+#: src/readelf.c:5442
#, c-format
msgid " [%*zu] ???\n"
msgstr " [%*zu] ???\n"
-#: src/readelf.c:5447
+#: src/readelf.c:5444
#, c-format
msgid ""
" [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
@@ -5408,7 +5407,7 @@ msgstr ""
" Inicio [%*zu]: %0#*<PRIx64>, longitud: %5<PRIu64>, compensación CU DIE: "
"%6<PRId64>\n"
-#: src/readelf.c:5491 src/readelf.c:8413
+#: src/readelf.c:5488 src/readelf.c:8425
#, fuzzy, c-format
msgid ""
"\n"
@@ -5417,150 +5416,150 @@ msgstr ""
"\n"
"Tabla en compensación %Zu:\n"
-#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424
-#: src/readelf.c:9101
+#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436
+#: src/readelf.c:9170
#, c-format
msgid "invalid data in section [%zu] '%s'"
msgstr "Datos inválidos en sección [%zu] '%s'"
-#: src/readelf.c:5511
+#: src/readelf.c:5508
#, fuzzy, c-format
msgid ""
"\n"
" Length: %6<PRIu64>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:5523
+#: src/readelf.c:5520
#, fuzzy, c-format
msgid " DWARF version: %6<PRIuFAST16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5527
+#: src/readelf.c:5524
#, c-format
msgid "unsupported aranges version"
msgstr ""
-#: src/readelf.c:5538
+#: src/readelf.c:5535
#, fuzzy, c-format
msgid " CU offset: %6<PRIx64>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:5544
+#: src/readelf.c:5541
#, fuzzy, c-format
msgid " Address size: %6<PRIu64>\n"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:5555
+#: src/readelf.c:5552
#, fuzzy, c-format
msgid ""
" Segment size: %6<PRIu64>\n"
"\n"
msgstr " establecer archivo a %<PRIu64>\n"
-#: src/readelf.c:5610
+#: src/readelf.c:5607
#, c-format
msgid " %zu padding bytes\n"
msgstr ""
-#: src/readelf.c:5654
+#: src/readelf.c:5651
#, fuzzy, c-format
msgid "cannot get .debug_rnglists content: %s"
msgstr "no se ha podido obtener contenido de .debug_ranges: %s"
-#: src/readelf.c:5677 src/readelf.c:9107
+#: src/readelf.c:5674 src/readelf.c:9176
#, fuzzy, c-format
msgid ""
"Table at Offset 0x%<PRIx64>:\n"
"\n"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:5732 src/readelf.c:9162
+#: src/readelf.c:5729 src/readelf.c:9231
#, fuzzy, c-format
msgid " Offset entries: %8<PRIu64>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:5748 src/readelf.c:9178
+#: src/readelf.c:5745 src/readelf.c:9247
#, c-format
msgid " Unknown CU base: "
msgstr ""
-#: src/readelf.c:5750 src/readelf.c:9180
+#: src/readelf.c:5747 src/readelf.c:9249
#, c-format
msgid " CU [%6<PRIx64>] base: "
msgstr ""
-#: src/readelf.c:5756 src/readelf.c:9186
+#: src/readelf.c:5753 src/readelf.c:9255
#, c-format
msgid " Not associated with a CU.\n"
msgstr ""
-#: src/readelf.c:5767 src/readelf.c:9197
+#: src/readelf.c:5764 src/readelf.c:9266
#, c-format
msgid "too many offset entries for unit length"
msgstr ""
-#: src/readelf.c:5771 src/readelf.c:9201
+#: src/readelf.c:5768 src/readelf.c:9270
#, fuzzy, c-format
msgid " Offsets starting at 0x%<PRIx64>:\n"
msgstr " Propietario Tamaño\n"
-#: src/readelf.c:5823
+#: src/readelf.c:5820
#, fuzzy, c-format
msgid "invalid range list data"
msgstr "datos inválidos"
-#: src/readelf.c:6008 src/readelf.c:9526
+#: src/readelf.c:6005 src/readelf.c:9595
#, c-format
msgid ""
" %zu padding bytes\n"
"\n"
msgstr ""
-#: src/readelf.c:6025
+#: src/readelf.c:6022
#, c-format
msgid "cannot get .debug_ranges content: %s"
msgstr "no se ha podido obtener contenido de .debug_ranges: %s"
-#: src/readelf.c:6061 src/readelf.c:9581
+#: src/readelf.c:6058 src/readelf.c:9650
#, c-format
msgid ""
"\n"
" Unknown CU base: "
msgstr ""
-#: src/readelf.c:6063 src/readelf.c:9583
+#: src/readelf.c:6060 src/readelf.c:9652
#, c-format
msgid ""
"\n"
" CU [%6<PRIx64>] base: "
msgstr ""
-#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635
+#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704
#, c-format
msgid " [%6tx] <INVALID DATA>\n"
msgstr " [%6tx] <DATOS INVÃLIDOS>\n"
-#: src/readelf.c:6097 src/readelf.c:9719
+#: src/readelf.c:6094 src/readelf.c:9788
#, fuzzy
msgid "base address"
msgstr "Establecer dirección a %s\n"
-#: src/readelf.c:6107 src/readelf.c:9729
+#: src/readelf.c:6104 src/readelf.c:9798
#, fuzzy, c-format
msgid " [%6tx] empty list\n"
msgstr " [%6tx] lista vacía\n"
-#: src/readelf.c:6367
+#: src/readelf.c:6364
#, fuzzy
msgid " <INVALID DATA>\n"
msgstr " <DATOS INVÃLIDOS>\n"
-#: src/readelf.c:6624
+#: src/readelf.c:6621
#, fuzzy, c-format
msgid "cannot get ELF: %s"
msgstr "no se puede leer encabezamiento ELF: %s"
-#: src/readelf.c:6642
+#: src/readelf.c:6639
#, c-format
msgid ""
"\n"
@@ -5570,7 +5569,7 @@ msgstr ""
"Sección de información de marco de llamada [%2zu] '%s' en compensación "
"%#<PRIx64>:\n"
-#: src/readelf.c:6692
+#: src/readelf.c:6689
#, c-format
msgid ""
"\n"
@@ -5579,65 +5578,65 @@ msgstr ""
"\n"
" [%6tx] Terminator cero\n"
-#: src/readelf.c:6793 src/readelf.c:6947
+#: src/readelf.c:6790 src/readelf.c:6944
#, c-format
msgid "invalid augmentation length"
msgstr "longitud de aumento inválida"
-#: src/readelf.c:6808
+#: src/readelf.c:6805
msgid "FDE address encoding: "
msgstr "Codificación de dirección FDE:"
-#: src/readelf.c:6814
+#: src/readelf.c:6811
msgid "LSDA pointer encoding: "
msgstr "Codificación de puntero LSDA:"
-#: src/readelf.c:6924
+#: src/readelf.c:6921
#, c-format
msgid " (offset: %#<PRIx64>)"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:6931
+#: src/readelf.c:6928
#, c-format
msgid " (end offset: %#<PRIx64>)"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:6968
+#: src/readelf.c:6965
#, c-format
msgid " %-26sLSDA pointer: %#<PRIx64>\n"
msgstr "Puntero %-26sLSDA: %#<PRIx64>\n"
-#: src/readelf.c:7053
+#: src/readelf.c:7050
#, fuzzy, c-format
msgid "DIE [%<PRIx64>] cannot get attribute code: %s"
msgstr "No se puede obtener código de atributo: %s"
-#: src/readelf.c:7063
+#: src/readelf.c:7060
#, fuzzy, c-format
msgid "DIE [%<PRIx64>] cannot get attribute form: %s"
msgstr "No se puede obtener forma de atributo: %s"
-#: src/readelf.c:7085
+#: src/readelf.c:7082
#, fuzzy, c-format
msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s"
msgstr "No se puede obtener valor: %s"
-#: src/readelf.c:7415
+#: src/readelf.c:7412
#, fuzzy, c-format
msgid "invalid file (%<PRId64>): %s"
msgstr "Archivo inválido"
-#: src/readelf.c:7419
+#: src/readelf.c:7416
#, fuzzy, c-format
msgid "no srcfiles for CU [%<PRIx64>]"
msgstr " establecer archivo a %<PRIu64>\n"
-#: src/readelf.c:7423
+#: src/readelf.c:7420
#, fuzzy, c-format
msgid "couldn't get DWARF CU: %s"
msgstr "no se puede leer encabezamiento ELF: %s"
-#: src/readelf.c:7738
+#: src/readelf.c:7735
#, c-format
msgid ""
"\n"
@@ -5648,12 +5647,12 @@ msgstr ""
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n"
" [Offset]\n"
-#: src/readelf.c:7788
+#: src/readelf.c:7785
#, fuzzy, c-format
msgid "cannot get next unit: %s"
msgstr "No se puede obtener próximo DIE: %s"
-#: src/readelf.c:7808
+#: src/readelf.c:7805
#, fuzzy, c-format
msgid ""
" Type unit at offset %<PRIu64>:\n"
@@ -5666,7 +5665,7 @@ msgstr ""
"Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n"
" Tipo de firma: %#<PRIx64>, Tipo de compensación: %#<PRIx64>\n"
-#: src/readelf.c:7820
+#: src/readelf.c:7817
#, c-format
msgid ""
" Compilation unit at offset %<PRIu64>:\n"
@@ -5677,39 +5676,39 @@ msgstr ""
" Versión: %<PRIu16>, Compensación de sección de abreviatura: %<PRIu64>, "
"Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n"
-#: src/readelf.c:7830 src/readelf.c:7993
+#: src/readelf.c:7827 src/readelf.c:7988
#, c-format
msgid " Unit type: %s (%<PRIu8>)"
msgstr ""
-#: src/readelf.c:7857
+#: src/readelf.c:7854
#, c-format
msgid "unknown version (%d) or unit type (%d)"
msgstr ""
-#: src/readelf.c:7886
+#: src/readelf.c:7883
#, c-format
msgid "cannot get DIE offset: %s"
msgstr "no se puede obtener DIE en compensación: %s"
-#: src/readelf.c:7895
+#: src/readelf.c:7892
#, fuzzy, c-format
msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s"
msgstr ""
"no se ha podido obtener etiqueta de DIE en compensación%<PRIu64> en sección "
"'%s': %s"
-#: src/readelf.c:7933
+#: src/readelf.c:7928
#, c-format
msgid "cannot get next DIE: %s\n"
msgstr "No se puede obtener próximo DIE: %s\n"
-#: src/readelf.c:7941
+#: src/readelf.c:7936
#, c-format
msgid "cannot get next DIE: %s"
msgstr "No se puede obtener próximo DIE: %s"
-#: src/readelf.c:7985
+#: src/readelf.c:7980
#, fuzzy, c-format
msgid ""
" Split compilation unit at offset %<PRIu64>:\n"
@@ -5720,7 +5719,7 @@ msgstr ""
" Versión: %<PRIu16>, Compensación de sección de abreviatura: %<PRIu64>, "
"Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n"
-#: src/readelf.c:8037
+#: src/readelf.c:8032
#, fuzzy, c-format
msgid ""
"\n"
@@ -5730,18 +5729,18 @@ msgstr ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n"
-#: src/readelf.c:8369
+#: src/readelf.c:8364
#, fuzzy, c-format
msgid "unknown form: %s"
msgstr "Forma %<PRIx64> desconocida"
-#: src/readelf.c:8400
+#: src/readelf.c:8412
#, c-format
msgid "cannot get line data section data: %s"
msgstr "No se puede obtener sección de datos de línea: %s"
#. Print what we got so far.
-#: src/readelf.c:8502
+#: src/readelf.c:8516
#, fuzzy, c-format
msgid ""
"\n"
@@ -5772,34 +5771,34 @@ msgstr ""
"\n"
"Códigos operativos:\n"
-#: src/readelf.c:8524
+#: src/readelf.c:8538
#, fuzzy, c-format
msgid "cannot handle .debug_line version: %u\n"
msgstr "no se puede obtener versión de símbolo: %s"
-#: src/readelf.c:8532
+#: src/readelf.c:8546
#, fuzzy, c-format
msgid "cannot handle address size: %u\n"
msgstr "no hay valor de dirección"
-#: src/readelf.c:8540
+#: src/readelf.c:8554
#, fuzzy, c-format
msgid "cannot handle segment selector size: %u\n"
msgstr "No se puede encontrar la sección: %s"
-#: src/readelf.c:8550
+#: src/readelf.c:8564
#, c-format
msgid "invalid data at offset %tu in section [%zu] '%s'"
msgstr "datos inválidos en compensación %tu en sección [%zu] '%s'"
-#: src/readelf.c:8565
+#: src/readelf.c:8579
#, c-format
msgid " [%*<PRIuFAST8>] %hhu argument\n"
msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
msgstr[0] " [%*<PRIuFAST8>] argumento %hhu \n"
msgstr[1] " [%*<PRIuFAST8>] argumento %hhu\n"
-#: src/readelf.c:8576
+#: src/readelf.c:8590
msgid ""
"\n"
"Directory table:"
@@ -5807,12 +5806,12 @@ msgstr ""
"\n"
"Tabla de Directorio:"
-#: src/readelf.c:8582 src/readelf.c:8659
+#: src/readelf.c:8596 src/readelf.c:8673
#, fuzzy, c-format
msgid " ["
msgstr " %s: %s\n"
-#: src/readelf.c:8653
+#: src/readelf.c:8667
#, fuzzy
msgid ""
"\n"
@@ -5821,7 +5820,7 @@ msgstr ""
"\n"
" Tabla de sitio de llamada:"
-#: src/readelf.c:8714
+#: src/readelf.c:8728
#, fuzzy
msgid " Entry Dir Time Size Name"
msgstr ""
@@ -5829,7 +5828,7 @@ msgstr ""
"Tabla de nombre de archivo:\n"
" Directorio de entrada Tiempo Tamaño Nombre"
-#: src/readelf.c:8753
+#: src/readelf.c:8774
#, fuzzy
msgid ""
"\n"
@@ -5838,7 +5837,7 @@ msgstr ""
"\n"
" Declaraciones de número de Línea:"
-#: src/readelf.c:8757
+#: src/readelf.c:8778
msgid ""
"\n"
"Line number statements:"
@@ -5846,121 +5845,132 @@ msgstr ""
"\n"
" Declaraciones de número de Línea:"
-#: src/readelf.c:8777
+#: src/readelf.c:8793
#, fuzzy, c-format
msgid "invalid maximum operations per instruction is zero"
msgstr "longitud mínima inválida de tamaño de cadena coincidente"
-#: src/readelf.c:8811
+#: src/readelf.c:8827
#, fuzzy, c-format
msgid " special opcode %u: address+%u = "
msgstr " opcode especial %u: dirección+%u = %s, línea%+d = %zu\n"
-#: src/readelf.c:8815
+#: src/readelf.c:8831
#, fuzzy, c-format
msgid ", op_index = %u, line%+d = %zu\n"
msgstr ""
" opcode especial %u: dirección+%u = %s, op_index = %u, línea%+d = %zu\n"
-#: src/readelf.c:8818
+#: src/readelf.c:8834
#, c-format
msgid ", line%+d = %zu\n"
msgstr ""
-#: src/readelf.c:8836
+#: src/readelf.c:8852
#, c-format
msgid " extended opcode %u: "
msgstr " Código operativo extendido %u: "
-#: src/readelf.c:8841
+#: src/readelf.c:8857
#, fuzzy
msgid " end of sequence"
msgstr "Fin de secuencia"
-#: src/readelf.c:8859
+#: src/readelf.c:8875
#, fuzzy, c-format
msgid " set address to "
msgstr "Establecer dirección a %s\n"
-#: src/readelf.c:8887
+#: src/readelf.c:8903
#, fuzzy, c-format
msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
msgstr ""
"definir nuevo archivo: dir=%u, mtime=%<PRIu64>, longitud=%<PRIu64>, nombre="
"%s\n"
-#: src/readelf.c:8901
+#: src/readelf.c:8917
#, c-format
msgid " set discriminator to %u\n"
msgstr " establecer discriminador a %u\n"
+#: src/readelf.c:8944
+#, c-format
+msgid " set inlined context %u, function name %s (0x%x)\n"
+msgstr ""
+
+#: src/readelf.c:8968
+#, fuzzy, c-format
+#| msgid "Also show function names"
+msgid " set function name %s (0x%x)\n"
+msgstr "También mostrar nombres de función"
+
#. Unknown, ignore it.
-#: src/readelf.c:8906
+#: src/readelf.c:8975
#, fuzzy
msgid " unknown opcode"
msgstr "código operativo desconocido "
#. Takes no argument.
-#: src/readelf.c:8918
+#: src/readelf.c:8987
msgid " copy"
msgstr "Copiar"
-#: src/readelf.c:8929
+#: src/readelf.c:8998
#, fuzzy, c-format
msgid " advance address by %u to "
msgstr "Dirección de avance por %u a %s\n"
-#: src/readelf.c:8933 src/readelf.c:8994
+#: src/readelf.c:9002 src/readelf.c:9063
#, c-format
msgid ", op_index to %u"
msgstr ""
-#: src/readelf.c:8945
+#: src/readelf.c:9014
#, c-format
msgid " advance line by constant %d to %<PRId64>\n"
msgstr " línea de avance por la constante %d a %<PRId64>\n"
-#: src/readelf.c:8955
+#: src/readelf.c:9024
#, c-format
msgid " set file to %<PRIu64>\n"
msgstr " establecer archivo a %<PRIu64>\n"
-#: src/readelf.c:8966
+#: src/readelf.c:9035
#, c-format
msgid " set column to %<PRIu64>\n"
msgstr " Establecer columna a %<PRIu64>\n"
-#: src/readelf.c:8973
+#: src/readelf.c:9042
#, c-format
msgid " set '%s' to %<PRIuFAST8>\n"
msgstr "Establecer '%s' a %<PRIuFAST8>\n"
#. Takes no argument.
-#: src/readelf.c:8979
+#: src/readelf.c:9048
msgid " set basic block flag"
msgstr "Establecer bandera de bloque básico"
-#: src/readelf.c:8990
+#: src/readelf.c:9059
#, fuzzy, c-format
msgid " advance address by constant %u to "
msgstr "Dirección de avance por constante %u a %s\n"
-#: src/readelf.c:9010
+#: src/readelf.c:9079
#, fuzzy, c-format
msgid " advance address by fixed value %u to \n"
msgstr "dirección de avance por valor corregido %u a %s\n"
#. Takes no argument.
-#: src/readelf.c:9020
+#: src/readelf.c:9089
msgid " set prologue end flag"
msgstr " Establecer bandera prologue_end"
#. Takes no argument.
-#: src/readelf.c:9025
+#: src/readelf.c:9094
msgid " set epilogue begin flag"
msgstr " Establecer bandera epilogue_begin"
-#: src/readelf.c:9035
+#: src/readelf.c:9104
#, c-format
msgid " set isa to %u\n"
msgstr " establecer isa para %u\n"
@@ -5968,110 +5978,110 @@ msgstr " establecer isa para %u\n"
#. This is a new opcode the generator but not we know about.
#. Read the parameters associated with it but then discard
#. everything. Read all the parameters for this opcode.
-#: src/readelf.c:9044
+#: src/readelf.c:9113
#, c-format
msgid " unknown opcode with %<PRIu8> parameter:"
msgid_plural " unknown opcode with %<PRIu8> parameters:"
msgstr[0] " opcódigo con parámetro %<PRIu8> desconocido:"
msgstr[1] " opcódigo con parámetros %<PRIu8> desconocido:"
-#: src/readelf.c:9084
+#: src/readelf.c:9153
#, fuzzy, c-format
msgid "cannot get .debug_loclists content: %s"
msgstr "no es posible obtener contenido de .debug_loc: %s"
-#: src/readelf.c:9250
+#: src/readelf.c:9319
#, fuzzy, c-format
msgid " <INVALID DATA>\n"
msgstr " <DATOS INVÃLIDOS>\n"
-#: src/readelf.c:9290
+#: src/readelf.c:9359
#, fuzzy, c-format
msgid "invalid loclists data"
msgstr "datos inválidos"
-#: src/readelf.c:9543
+#: src/readelf.c:9612
#, c-format
msgid "cannot get .debug_loc content: %s"
msgstr "no es posible obtener contenido de .debug_loc: %s"
-#: src/readelf.c:9756 src/readelf.c:10800
+#: src/readelf.c:9825 src/readelf.c:10869
msgid " <INVALID DATA>\n"
msgstr " <DATOS INVÃLIDOS>\n"
-#: src/readelf.c:9811 src/readelf.c:9974
+#: src/readelf.c:9880 src/readelf.c:10043
#, c-format
msgid "cannot get macro information section data: %s"
msgstr "no es posible obtener datos de la sección de macro información: %s"
-#: src/readelf.c:9891
+#: src/readelf.c:9960
#, c-format
msgid "%*s*** non-terminated string at end of section"
msgstr "%*s*** cadena no finalizada al final de la sección"
-#: src/readelf.c:9914
+#: src/readelf.c:9983
#, fuzzy, c-format
msgid "%*s*** missing DW_MACINFO_start_file argument at end of section"
msgstr "%*s*** cadena no finalizada al final de la sección"
-#: src/readelf.c:10015
+#: src/readelf.c:10084
#, fuzzy, c-format
msgid " Offset: 0x%<PRIx64>\n"
msgstr " Propietario Tamaño\n"
-#: src/readelf.c:10027
+#: src/readelf.c:10096
#, fuzzy, c-format
msgid " Version: %<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10033 src/readelf.c:10920
+#: src/readelf.c:10102 src/readelf.c:10989
#, c-format
msgid " unknown version, cannot parse section\n"
msgstr ""
-#: src/readelf.c:10040
+#: src/readelf.c:10109
#, fuzzy, c-format
msgid " Flag: 0x%<PRIx8>"
msgstr " Dirección de punto de entrada: %#<PRIx64>\n"
-#: src/readelf.c:10069
+#: src/readelf.c:10138
#, fuzzy, c-format
msgid " Offset length: %<PRIu8>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10077
+#: src/readelf.c:10146
#, fuzzy, c-format
msgid " .debug_line offset: 0x%<PRIx64>\n"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:10102
+#: src/readelf.c:10171
#, fuzzy, c-format
msgid " extension opcode table, %<PRIu8> items:\n"
msgstr " opcódigo con parámetro %<PRIu8> desconocido:"
-#: src/readelf.c:10109
+#: src/readelf.c:10178
#, c-format
msgid " [%<PRIx8>]"
msgstr ""
-#: src/readelf.c:10121
+#: src/readelf.c:10190
#, fuzzy, c-format
msgid " %<PRIu8> arguments:"
msgstr " [%*<PRIuFAST8>] argumento %hhu \n"
-#: src/readelf.c:10136
+#: src/readelf.c:10205
#, c-format
msgid " no arguments."
msgstr ""
-#: src/readelf.c:10337
+#: src/readelf.c:10406
#, c-format
msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
msgstr ""
" Compensación [%5d] DIE: %6<PRId64>, Compensación CU DIE: %6<PRId64>, "
"nombre: %s\n"
-#: src/readelf.c:10381
+#: src/readelf.c:10450
#, c-format
msgid ""
"\n"
@@ -6083,42 +6093,42 @@ msgstr ""
" %*s String\n"
#. TRANS: the debugstr| prefix makes the string unique.
-#: src/readelf.c:10386
+#: src/readelf.c:10455
msgctxt "debugstr"
msgid "Offset"
msgstr ""
-#: src/readelf.c:10396
+#: src/readelf.c:10465
#, fuzzy, c-format
msgid " *** error, missing string terminator\n"
msgstr " *** error en lectura de cadenas: %s\n"
-#: src/readelf.c:10425
+#: src/readelf.c:10494
#, fuzzy, c-format
msgid "cannot get .debug_str_offsets section data: %s"
msgstr "no se pueden obtener datos de sección: %s"
-#: src/readelf.c:10524
+#: src/readelf.c:10593
#, fuzzy, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10526
+#: src/readelf.c:10595
#, fuzzy, c-format
msgid " Offset size: %8<PRIu8>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10540
+#: src/readelf.c:10609
#, fuzzy, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10549
+#: src/readelf.c:10618
#, fuzzy, c-format
msgid " Padding: %8<PRIx16>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10603
+#: src/readelf.c:10672
#, c-format
msgid ""
"\n"
@@ -6127,7 +6137,7 @@ msgstr ""
"\n"
"Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n"
-#: src/readelf.c:10705
+#: src/readelf.c:10774
#, c-format
msgid ""
"\n"
@@ -6136,22 +6146,22 @@ msgstr ""
"\n"
"Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n"
-#: src/readelf.c:10728
+#: src/readelf.c:10797
#, c-format
msgid " LPStart encoding: %#x "
msgstr "Codificación LPStart: %#x "
-#: src/readelf.c:10740
+#: src/readelf.c:10809
#, c-format
msgid " TType encoding: %#x "
msgstr "Codificación TType: %#x "
-#: src/readelf.c:10755
+#: src/readelf.c:10824
#, c-format
msgid " Call site encoding: %#x "
msgstr "Codificación de sitio de llamada: %#x "
-#: src/readelf.c:10768
+#: src/readelf.c:10837
msgid ""
"\n"
" Call site table:"
@@ -6159,7 +6169,7 @@ msgstr ""
"\n"
" Tabla de sitio de llamada:"
-#: src/readelf.c:10782
+#: src/readelf.c:10851
#, c-format
msgid ""
" [%4u] Call site start: %#<PRIx64>\n"
@@ -6172,12 +6182,12 @@ msgstr ""
" Landing pad: %#<PRIx64>\n"
" Action: %u\n"
-#: src/readelf.c:10855
+#: src/readelf.c:10924
#, c-format
msgid "invalid TType encoding"
msgstr "Codificación TType inválida"
-#: src/readelf.c:10882
+#: src/readelf.c:10951
#, fuzzy, c-format
msgid ""
"\n"
@@ -6186,37 +6196,37 @@ msgstr ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n"
-#: src/readelf.c:10911
+#: src/readelf.c:10980
#, fuzzy, c-format
msgid " Version: %<PRId32>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10929
+#: src/readelf.c:10998
#, fuzzy, c-format
msgid " CU offset: %#<PRIx32>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10936
+#: src/readelf.c:11005
#, fuzzy, c-format
msgid " TU offset: %#<PRIx32>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10943
+#: src/readelf.c:11012
#, fuzzy, c-format
msgid " address offset: %#<PRIx32>\n"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:10950
+#: src/readelf.c:11019
#, fuzzy, c-format
msgid " symbol offset: %#<PRIx32>\n"
msgstr " (compensación: %#<PRIx64>)"
-#: src/readelf.c:10957
+#: src/readelf.c:11026
#, fuzzy, c-format
msgid " constant offset: %#<PRIx32>\n"
msgstr " (fin de compensación: %#<PRIx64>)"
-#: src/readelf.c:10971
+#: src/readelf.c:11040
#, fuzzy, c-format
msgid ""
"\n"
@@ -6225,7 +6235,7 @@ msgstr ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n"
-#: src/readelf.c:10996
+#: src/readelf.c:11065
#, fuzzy, c-format
msgid ""
"\n"
@@ -6234,7 +6244,7 @@ msgstr ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n"
-#: src/readelf.c:11025
+#: src/readelf.c:11094
#, fuzzy, c-format
msgid ""
"\n"
@@ -6243,7 +6253,7 @@ msgstr ""
"\n"
"Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n"
-#: src/readelf.c:11057
+#: src/readelf.c:11126
#, fuzzy, c-format
msgid ""
"\n"
@@ -6252,18 +6262,18 @@ msgstr ""
"\n"
"Tabla de símbolos inválida en compensación %#0<PRIx64>\n"
-#: src/readelf.c:11195
+#: src/readelf.c:11264
#, c-format
msgid "cannot get debug context descriptor: %s"
msgstr "no se puede depurar descriptor de contexto: %s"
-#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301
-#: src/readelf.c:12359
+#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367
+#: src/readelf.c:12424
#, c-format
msgid "cannot convert core note data: %s"
msgstr "no es posible convertir datos de la nota principal: %s"
-#: src/readelf.c:11926
+#: src/readelf.c:11994
#, c-format
msgid ""
"\n"
@@ -6272,21 +6282,21 @@ msgstr ""
"\n"
"%*s... <repeats %u more times> ..."
-#: src/readelf.c:12438
+#: src/readelf.c:12503
msgid " Owner Data size Type\n"
msgstr " Owner Data size Type\n"
-#: src/readelf.c:12466
+#: src/readelf.c:12531
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12518
+#: src/readelf.c:12583
#, fuzzy, c-format
msgid "cannot get content of note: %s"
msgstr "no se puede obtener el contenido de sección de nota: %s"
-#: src/readelf.c:12552
+#: src/readelf.c:12616
#, c-format
msgid ""
"\n"
@@ -6295,7 +6305,7 @@ msgstr ""
"\n"
"Sección de nota [%2zu] '%s' de %<PRIu64> bytes en compensación %#0<PRIx64>:\n"
-#: src/readelf.c:12575
+#: src/readelf.c:12639
#, c-format
msgid ""
"\n"
@@ -6304,7 +6314,7 @@ msgstr ""
"\n"
"Segmento de nota de %<PRIu64> bytes en compensación %#0<PRIx64>:\n"
-#: src/readelf.c:12622
+#: src/readelf.c:12686
#, fuzzy, c-format
msgid ""
"\n"
@@ -6313,12 +6323,12 @@ msgstr ""
"\n"
"Sección [%Zu] '%s' no tiene datos para volcar.\n"
-#: src/readelf.c:12649 src/readelf.c:12700
+#: src/readelf.c:12713 src/readelf.c:12764
#, fuzzy, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "no se pueden obtener datos para sección [%Zu] '%s': %s"
-#: src/readelf.c:12654
+#: src/readelf.c:12718
#, fuzzy, c-format
msgid ""
"\n"
@@ -6328,7 +6338,7 @@ msgstr ""
"Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12659
+#: src/readelf.c:12723
#, fuzzy, c-format
msgid ""
"\n"
@@ -6339,7 +6349,7 @@ msgstr ""
"Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12673
+#: src/readelf.c:12737
#, fuzzy, c-format
msgid ""
"\n"
@@ -6348,7 +6358,7 @@ msgstr ""
"\n"
"Sección [%Zu] '%s' no tiene datos para volcar.\n"
-#: src/readelf.c:12705
+#: src/readelf.c:12769
#, fuzzy, c-format
msgid ""
"\n"
@@ -6358,7 +6368,7 @@ msgstr ""
"Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12710
+#: src/readelf.c:12774
#, fuzzy, c-format
msgid ""
"\n"
@@ -6369,7 +6379,7 @@ msgstr ""
"Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12759
+#: src/readelf.c:12822
#, c-format
msgid ""
"\n"
@@ -6378,7 +6388,7 @@ msgstr ""
"\n"
"sección [%lu] no existe"
-#: src/readelf.c:12789
+#: src/readelf.c:12852
#, c-format
msgid ""
"\n"
@@ -6387,12 +6397,12 @@ msgstr ""
"\n"
"sección '%s' no existe"
-#: src/readelf.c:12846
+#: src/readelf.c:12907
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "no se puede obtener el índice de símbolo de archivo '%s': %s"
-#: src/readelf.c:12849
+#: src/readelf.c:12910
#, c-format
msgid ""
"\n"
@@ -6401,7 +6411,7 @@ msgstr ""
"\n"
"Archivo '%s' no tiene índice de símbolo\n"
-#: src/readelf.c:12853
+#: src/readelf.c:12914
#, fuzzy, c-format
msgid ""
"\n"
@@ -6410,12 +6420,12 @@ msgstr ""
"\n"
"Ãndice de archivo '%s' tiene %Zu entradas:\n"
-#: src/readelf.c:12871
+#: src/readelf.c:12932
#, fuzzy, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "no es posible extraer miembro en compensación %Zu en '%s': %s"
-#: src/readelf.c:12876
+#: src/readelf.c:12937
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "Miembro de archivo contiene '%s':\n"
@@ -6512,39 +6522,39 @@ msgctxt "bsd"
msgid "filename"
msgstr ""
-#: src/size.c:418 src/size.c:560
+#: src/size.c:417 src/size.c:558
#, c-format
msgid " (ex %s)"
msgstr " (ex %s)"
-#: src/size.c:420
+#: src/size.c:419
#, fuzzy
#| msgid "invalid section"
msgctxt "sysv"
msgid "section"
msgstr "sección inválida"
-#: src/size.c:421
+#: src/size.c:420
msgctxt "sysv"
msgid "size"
msgstr ""
-#: src/size.c:422
+#: src/size.c:421
msgctxt "sysv"
msgid "addr"
msgstr ""
-#: src/size.c:451 src/size.c:454 src/size.c:457
+#: src/size.c:450 src/size.c:453 src/size.c:456
msgctxt "sysv"
msgid "Total"
msgstr ""
-#: src/size.c:482
-#, fuzzy, c-format
+#: src/size.c:480
+#, fuzzy
msgid "cannot get section header"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/size.c:585
+#: src/size.c:583
msgid "(TOTALS)\n"
msgstr "(TOTALES)\n"
@@ -6708,27 +6718,24 @@ msgstr "Imprimir las cadenas de caracteres imprimibles en archivos."
msgid "invalid value '%s' for %s parameter"
msgstr "Valor inválido '%s' para parámetro %s"
-#: src/strings.c:302
-#, c-format
+#: src/strings.c:301
msgid "invalid minimum length of matched string size"
msgstr "longitud mínima inválida de tamaño de cadena coincidente"
-#: src/strings.c:585
-#, fuzzy, c-format
+#: src/strings.c:584
+#, fuzzy
msgid "lseek failed"
msgstr "lseek64 falló"
-#: src/strings.c:602 src/strings.c:666
-#, c-format
+#: src/strings.c:601 src/strings.c:665
msgid "re-mmap failed"
msgstr "re-mmap falló"
-#: src/strings.c:639
-#, c-format
+#: src/strings.c:638
msgid "mprotect failed"
msgstr "mprotect falló"
-#: src/strings.c:728
+#: src/strings.c:727
#, c-format
msgid "Skipping section %zd '%s' data outside file"
msgstr ""
@@ -6793,54 +6800,51 @@ msgstr ""
msgid "Discard symbols from object files."
msgstr "Descarta símbolos de archivos objeto."
-#: src/strip.c:247
-#, c-format
+#: src/strip.c:246
msgid "--reloc-debug-sections used without -f"
msgstr ""
-#: src/strip.c:253
-#, c-format
+#: src/strip.c:252
msgid ""
"--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --"
"remove-section"
msgstr ""
-#: src/strip.c:267
-#, c-format
+#: src/strip.c:266
msgid "Only one input file allowed together with '-o' and '-f'"
msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'"
-#: src/strip.c:290
+#: src/strip.c:288
#, c-format
msgid "-f option specified twice"
msgstr "opción -f especificada dos veces"
-#: src/strip.c:299
+#: src/strip.c:297
#, c-format
msgid "-F option specified twice"
msgstr "opción -F especificada dos veces"
-#: src/strip.c:362
+#: src/strip.c:360
#, fuzzy, c-format
msgid "cannot both keep and remove .comment section"
msgstr "Quitar sección de comentario"
-#: src/strip.c:481
-#, fuzzy, c-format
+#: src/strip.c:479
+#, fuzzy
msgid "bad relocation"
msgstr "Mostrar reubicaciones"
-#: src/strip.c:747 src/strip.c:771
+#: src/strip.c:749 src/strip.c:773
#, c-format
msgid "cannot stat input file '%s'"
msgstr "no sepuede stat fichero de entrada '%s'"
-#: src/strip.c:761
+#: src/strip.c:763
#, c-format
msgid "while opening '%s'"
msgstr "mientras se abría '%s'"
-#: src/strip.c:799
+#: src/strip.c:801
#, c-format
msgid "%s: cannot use -o or -f when stripping archive"
msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo"
@@ -6851,42 +6855,42 @@ msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo"
#. result = handle_ar (fd, elf, NULL, fname,
#. preserve_dates ? tv : NULL);
#.
-#: src/strip.c:811
+#: src/strip.c:813
#, fuzzy, c-format
msgid "%s: no support for stripping archive"
msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo"
-#: src/strip.c:1047
+#: src/strip.c:1050
#, c-format
msgid "cannot open EBL backend"
msgstr "No se puede abrir el segundo plano EBL"
-#: src/strip.c:1092
-#, fuzzy, c-format
+#: src/strip.c:1094
+#, fuzzy
msgid "cannot get number of phdrs"
msgstr "no se pudo determinar la cantidad de encabezados de programa: %s"
-#: src/strip.c:1106 src/strip.c:1149
+#: src/strip.c:1108 src/strip.c:1151
#, fuzzy, c-format
msgid "cannot create new ehdr for file '%s': %s"
msgstr "no se puede crear fichero nuevo '%s': %s"
-#: src/strip.c:1116 src/strip.c:1159
+#: src/strip.c:1118 src/strip.c:1161
#, fuzzy, c-format
msgid "cannot create new phdr for file '%s': %s"
msgstr "no se puede crear fichero nuevo '%s': %s"
-#: src/strip.c:1240
+#: src/strip.c:1241
#, c-format
msgid "illformed file '%s'"
msgstr "Fichero illformed '%s'"
-#: src/strip.c:1250
+#: src/strip.c:1251
#, fuzzy, c-format
msgid "Cannot remove allocated section '%s'"
msgstr "No se puede asignar sección PLT: %s"
-#: src/strip.c:1259
+#: src/strip.c:1260
#, fuzzy, c-format
msgid "Cannot both keep and remove section '%s'"
msgstr "No se puede añadir nueva sección: %s"
@@ -6906,7 +6910,7 @@ msgstr "%s: error al crear encabezamiento ELF: %s"
msgid "%s: error while getting shdrstrndx: %s"
msgstr "%s: error al crear encabezamiento ELF: %s"
-#: src/strip.c:1705 src/strip.c:2550
+#: src/strip.c:1705 src/strip.c:2546
#, fuzzy, c-format
msgid "%s: error updating shdrstrndx: %s"
msgstr "%s: error al crear encabezamiento ELF: %s"
@@ -6916,67 +6920,67 @@ msgstr "%s: error al crear encabezamiento ELF: %s"
msgid "while preparing output for '%s'"
msgstr "al preparar salida para '%s'"
-#: src/strip.c:1784 src/strip.c:1847
+#: src/strip.c:1783 src/strip.c:1845
#, c-format
msgid "while create section header section: %s"
msgstr "al crear sección de encabezamiento de sección: %s"
-#: src/strip.c:1793
+#: src/strip.c:1792
#, c-format
msgid "cannot allocate section data: %s"
msgstr "no se puede asignar espacio para los datos: %s"
-#: src/strip.c:1859
+#: src/strip.c:1856
#, c-format
msgid "while create section header string table: %s"
msgstr "al crear tabla de cadenas de encabezamiento de sección: %s"
-#: src/strip.c:1866
-#, fuzzy, c-format
+#: src/strip.c:1862
+#, fuzzy
msgid "no memory to create section header string table"
msgstr "al crear tabla de cadenas de encabezamiento de sección: %s"
-#: src/strip.c:2079
+#: src/strip.c:2075
#, c-format
msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]"
msgstr ""
-#: src/strip.c:2466 src/strip.c:2574
+#: src/strip.c:2462 src/strip.c:2570
#, c-format
msgid "while writing '%s': %s"
msgstr "al escribir '%s': %s"
-#: src/strip.c:2477
+#: src/strip.c:2473
#, c-format
msgid "while creating '%s'"
msgstr "al crear '%s'"
-#: src/strip.c:2500
+#: src/strip.c:2496
#, c-format
msgid "while computing checksum for debug information"
msgstr "al computar la suma de verificación para información de depuración"
-#: src/strip.c:2541
+#: src/strip.c:2537
#, c-format
msgid "%s: error while creating ELF header: %s"
msgstr "%s: error al crear encabezamiento ELF: %s"
-#: src/strip.c:2559
+#: src/strip.c:2555
#, c-format
msgid "%s: error while reading the file: %s"
msgstr "%s: error al leer el fichero: %s"
-#: src/strip.c:2599 src/strip.c:2619
+#: src/strip.c:2595 src/strip.c:2615
#, c-format
msgid "while writing '%s'"
msgstr "al escribir '%s'"
-#: src/strip.c:2656 src/strip.c:2663
+#: src/strip.c:2652 src/strip.c:2659
#, c-format
msgid "error while finishing '%s': %s"
msgstr "Error al terminar '%s': %s"
-#: src/strip.c:2680 src/strip.c:2756
+#: src/strip.c:2676 src/strip.c:2752
#, c-format
msgid "cannot set access and modification date of '%s'"
msgstr "no es posible establecer acceso y fecha de modificación de '%s'"
@@ -7119,13 +7123,13 @@ msgstr "no pueden copiar datos de sección: %s"
msgid "cannot create directory '%s'"
msgstr "no se puede crear el directorio '%s'"
-#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859
+#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860
#: src/unstrip.c:1750
#, c-format
msgid "cannot get symbol table entry: %s"
msgstr "no se puede obtener entrada de tabla de símbolos: %s"
-#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694
+#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695
#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990
#, c-format
msgid "cannot update symbol table: %s"
@@ -7136,123 +7140,131 @@ msgstr "no se puede actualizar tabla de símbolos: %s"
msgid "cannot update section header: %s"
msgstr "no se puede actualizar encabezamiento de sección: %s"
-#: src/unstrip.c:467 src/unstrip.c:481
+#: src/unstrip.c:465
+#, c-format
+msgid "gelf_getrel failed: %s"
+msgstr ""
+
+#: src/unstrip.c:468 src/unstrip.c:483
#, c-format
msgid "cannot update relocation: %s"
msgstr "no se puede actualizar reubicación: %s"
-#: src/unstrip.c:580
+#: src/unstrip.c:480
+#, c-format
+msgid "gelf_getrela failed: %s"
+msgstr ""
+
+#: src/unstrip.c:581
#, c-format
msgid "cannot get symbol version: %s"
msgstr "no se puede obtener versión de símbolo: %s"
-#: src/unstrip.c:593
+#: src/unstrip.c:594
#, fuzzy, c-format
msgid "unexpected section type in [%zu] with sh_link to symtab"
msgstr "tipo de sección inesperado en [%Zu] con sh_link para symtab"
-#: src/unstrip.c:848
+#: src/unstrip.c:849
#, fuzzy, c-format
msgid "cannot get symbol section data: %s"
msgstr "no se pueden obtener datos de sección: %s"
-#: src/unstrip.c:850
+#: src/unstrip.c:851
#, fuzzy, c-format
msgid "cannot get string section data: %s"
msgstr "no se pueden obtener datos de sección: %s"
-#: src/unstrip.c:867
+#: src/unstrip.c:868
#, fuzzy, c-format
msgid "invalid string offset in symbol [%zu]"
msgstr "compensación de cadena inválida en símbolo [%Zu]"
-#: src/unstrip.c:1025 src/unstrip.c:1433
+#: src/unstrip.c:1026 src/unstrip.c:1434
#, fuzzy, c-format
msgid "cannot read section [%zu] name: %s"
msgstr "no se puede leer nombre [%Zu]: %s"
-#: src/unstrip.c:1040
+#: src/unstrip.c:1041
#, fuzzy, c-format
msgid "bad sh_link for group section: %s"
msgstr ".debug_line section inválida"
-#: src/unstrip.c:1046
+#: src/unstrip.c:1047
#, fuzzy, c-format
msgid "couldn't get shdr for group section: %s"
msgstr "No se puede obtener encabezamiento de sección 0th: %s"
-#: src/unstrip.c:1051
+#: src/unstrip.c:1052
#, fuzzy, c-format
msgid "bad data for group symbol section: %s"
msgstr "no se puede obtener sección para símbolos\n"
-#: src/unstrip.c:1057
+#: src/unstrip.c:1058
#, fuzzy, c-format
msgid "couldn't get symbol for group section: %s"
msgstr "no se puede obtener versión de símbolo: %s"
-#: src/unstrip.c:1062
+#: src/unstrip.c:1063
#, fuzzy, c-format
msgid "bad symbol name for group section: %s"
msgstr "No se puede obtener el encabezamiento de sección %zu: %s"
-#: src/unstrip.c:1073 src/unstrip.c:1554
+#: src/unstrip.c:1074 src/unstrip.c:1554
#, fuzzy, c-format
msgid "cannot find matching section for [%zu] '%s'"
msgstr "no se puede hallar sección coincidente para [%Zu] '%s'"
-#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175
+#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176
#, c-format
msgid "cannot read '.gnu.prelink_undo' section: %s"
msgstr "no se puede leer sección '.gnu.prelink_undo': %s"
-#: src/unstrip.c:1155
+#: src/unstrip.c:1156
#, c-format
msgid "overflow with shnum = %zu in '%s' section"
msgstr ""
-#: src/unstrip.c:1166
+#: src/unstrip.c:1167
#, c-format
msgid "invalid contents in '%s' section"
msgstr "contenido inválido en sección '%s'"
-#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925
+#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925
#, c-format
msgid "cannot add section name to string table: %s"
msgstr "no se puede añadir nombre de sección a tabla de cadenas: %s"
-#: src/unstrip.c:1362
+#: src/unstrip.c:1363
#, c-format
msgid "cannot update section header string table data: %s"
msgstr ""
"no se pueden actualizar datos de tabla de cadenas de encabezamiento de "
"sección: %s"
-#: src/unstrip.c:1391 src/unstrip.c:1395
+#: src/unstrip.c:1392 src/unstrip.c:1396
#, c-format
msgid "cannot get section header string table section index: %s"
msgstr ""
"no se puede obtener índice de sección de tabla de cadenas de encabezamiento "
"de sección: %s"
-#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649
+#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649
#, c-format
msgid "cannot get section count: %s"
msgstr "No se puede obtener cuenta de sección: %s"
-#: src/unstrip.c:1406
-#, c-format
+#: src/unstrip.c:1407
msgid "more sections in stripped file than debug file -- arguments reversed?"
msgstr ""
"más secciones en el archivo despojado que en el archivo de depuración -- "
"¿argumentos invertidos?"
-#: src/unstrip.c:1410
-#, c-format
+#: src/unstrip.c:1411
msgid "no sections in stripped file"
msgstr ""
-#: src/unstrip.c:1458 src/unstrip.c:1569
+#: src/unstrip.c:1459 src/unstrip.c:1569
#, c-format
msgid "cannot read section header string table: %s"
msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s"
@@ -7367,17 +7379,15 @@ msgid "cannot cache section addresses for module '%s': %s"
msgstr ""
"No puede almacenar en cache direcciones de sección para módulo '%s': %s"
-#: src/unstrip.c:2505
-#, c-format
+#: src/unstrip.c:2503
msgid "no matching modules found"
msgstr "No se encontraron módulos coincidentes"
-#: src/unstrip.c:2515
-#, c-format
+#: src/unstrip.c:2513
msgid "matched more than one module"
msgstr "coincidió con más de un módulo"
-#: src/unstrip.c:2560
+#: src/unstrip.c:2558
msgid ""
"STRIPPED-FILE DEBUG-FILE\n"
"[MODULE...]"
@@ -7385,7 +7395,7 @@ msgstr ""
"STRIPPED-FILE DEBUG-FILE\n"
"[MODULE...]"
-#: src/unstrip.c:2561
+#: src/unstrip.c:2559
#, fuzzy
msgid ""
"Combine stripped files with separate symbols and debug information.\n"
@@ -7454,7 +7464,7 @@ msgid ""
"source PATH /FILENAME\n"
msgstr ""
-#: tests/backtrace.c:436
+#: tests/backtrace.c:483
msgid "Run executable"
msgstr ""
@@ -7467,6 +7477,10 @@ msgstr "También mostrar nombres de función"
msgid "Show instances of inlined functions"
msgstr ""
+#, fuzzy, c-format
+#~ msgid "cannot allocate memory"
+#~ msgstr "No se puede asignar sección PLT: %s"
+
#, fuzzy
#~ msgid ""
#~ " [%6tx] base address\n"
diff --git a/po/ja.po b/po/ja.po
index a9f86dc2..8a987212 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-05-22 15:33+0200\n"
+"POT-Creation-Date: 2022-04-25 18:22+0200\n"
"PO-Revision-Date: 2009-09-20 15:32+0900\n"
"Last-Translator: Hyu_gabaru Ryu_ichi <hyu_gabaru@yahoo.co.jp>\n"
"Language-Team: Japanese <jp@li.org>\n"
@@ -34,27 +34,19 @@ msgid ""
" - 'auto', 'tty', 'if-tty'\n"
msgstr ""
-#: lib/color.c:194 src/objdump.c:728
-#, fuzzy, c-format
-msgid "cannot allocate memory"
-msgstr "PLT セクションを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
-
#: lib/printversion.c:40
-#, fuzzy, c-format
+#, c-format
msgid ""
"Copyright (C) %s The elfutils developers <%s>.\n"
"This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
msgstr ""
-"Copyright (C) %s Red Hat, Inc.\n"
-"This is free software; see the source for copying conditions. There is NO\n"
-"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
-#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461
-#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609
+#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580
+#: src/unstrip.c:312
#, c-format
msgid "memory exhausted"
-msgstr "メモリー消費済ã¿"
+msgstr "メモリー枯渇"
#: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51
#: libelf/elf_error.c:60
@@ -64,7 +56,7 @@ msgstr "エラー無ã—"
#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53
#: libelf/elf_error.c:91
msgid "out of memory"
-msgstr "メモリーä¸è¶³"
+msgstr "メモリーä¸è¶³ã§ã™"
#: libasm/asm_error.c:67
msgid "cannot create output file"
@@ -72,7 +64,7 @@ msgstr "出力ファイルを作æˆã§ãã¾ã›ã‚“"
#: libasm/asm_error.c:68
msgid "invalid parameter"
-msgstr "ä¸å½“ãªãƒ‘ラメーター"
+msgstr "ä¸å½“ãªãƒ‘ラメーターã§ã™"
#: libasm/asm_error.c:69
msgid "cannot change mode of output file"
@@ -84,46 +76,43 @@ msgstr "出力ファイルã®åå‰ã‚’変更ã§ãã¾ã›ã‚“"
#: libasm/asm_error.c:71
msgid "duplicate symbol"
-msgstr "é‡è¤‡ã‚·ãƒ³ãƒœãƒ«"
+msgstr "é‡è¤‡ã‚·ãƒ³ãƒœãƒ«ã§ã™"
#: libasm/asm_error.c:72
msgid "invalid section type for operation"
-msgstr "æ“作ã«ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—"
+msgstr "æ“作ã«ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã§ã™"
#: libasm/asm_error.c:73
msgid "error during output of data"
-msgstr "データã®å‡ºåŠ›ä¸­ã«ã‚¨ãƒ©ãƒ¼"
+msgstr "データ出力中ã®ã‚¨ãƒ©ãƒ¼ã§ã™"
#: libasm/asm_error.c:74
msgid "no backend support available"
-msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚µãƒãƒ¼ãƒˆãŒåˆ©ç”¨ã§ãã¾ã›ã‚“"
+msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚µãƒãƒ¼ãƒˆã‚’利用ã§ãã¾ã›ã‚“"
#: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52
#: libelf/elf_error.c:63
msgid "unknown error"
-msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
+msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ã§ã™"
#: libcpu/i386_lex.l:122
-#, fuzzy, c-format
-#| msgid "invalid page size value '%s': ignored"
+#, c-format
msgid "invalid character '%c' at line %d; ignored"
-msgstr "ä¸å½“ãªãƒšãƒ¼ã‚¸ã‚µã‚¤ã‚ºå€¤ '%s': 無視ã—ã¾ã—ãŸ"
+msgstr "ä¸å½“ãªæ–‡å­— '%c' ㌠%d 行目ã«ã‚ã‚Šã¾ã™; 無視ã—ã¾ã—ãŸ"
#: libcpu/i386_lex.l:123
-#, fuzzy, c-format
-#| msgid "invalid page size value '%s': ignored"
+#, c-format
msgid "invalid character '\\%o' at line %d; ignored"
-msgstr "ä¸å½“ãªãƒšãƒ¼ã‚¸ã‚µã‚¤ã‚ºå€¤ '%s': 無視ã—ã¾ã—ãŸ"
+msgstr "ä¸å½“ãªæ–‡å­— '\\%o' ㌠%d 行目ã«ã‚ã‚Šã¾ã™; 無視ã—ã¾ã—ãŸ"
#: libcpu/i386_parse.y:554
-#, fuzzy, c-format
-#| msgid "while reading linker script '%s': %s at line %d"
+#, c-format
msgid "while reading i386 CPU description: %s at line %d"
-msgstr "リンカースクリプト '%1$s' 読込ã¿ä¸­: %3$d 行目㮠%2$s"
+msgstr "i386 CPU description ã®èª­ã¿è¾¼ã¿ä¸­: %2$d 行目㮠%1$s"
#: libdw/dwarf_error.c:59
msgid "invalid access"
-msgstr "ä¸å½“ãªã‚¢ã‚¯ã‚»ã‚¹"
+msgstr "ä¸å½“ãªã‚¢ã‚¯ã‚»ã‚¹ã§ã™"
#: libdw/dwarf_error.c:60
msgid "no regular file"
@@ -131,11 +120,11 @@ msgstr "一般ファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:61
msgid "I/O error"
-msgstr "I/O エラー"
+msgstr "I/O エラーã§ã™"
#: libdw/dwarf_error.c:62
msgid "invalid ELF file"
-msgstr "ä¸å½“㪠ELF ファイル"
+msgstr "ä¸å½“㪠ELF ファイルã§ã™"
#: libdw/dwarf_error.c:63
msgid "no DWARF information"
@@ -143,31 +132,31 @@ msgstr "DWARF 情報ãŒã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:64
msgid "cannot decompress DWARF"
-msgstr ""
+msgstr "DWARF を展開ã§ãã¾ã›ã‚“"
#: libdw/dwarf_error.c:65
msgid "no ELF file"
-msgstr "ELF ファイルãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr "ELF ファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:66
msgid "cannot get ELF header"
-msgstr "ELF ヘッダーを得られã¾ã›ã‚“"
+msgstr "ELF ヘッダーをå–å¾—ã§ãã¾ã›ã‚“"
#: libdw/dwarf_error.c:68
msgid "not implemented"
-msgstr "未実装"
+msgstr "未実装ã§ã™"
#: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159
msgid "invalid command"
-msgstr "ä¸å½“ãªã‚³ãƒžãƒ³ãƒ‰"
+msgstr "ä¸å½“ãªã‚³ãƒžãƒ³ãƒ‰ã§ã™"
#: libdw/dwarf_error.c:70
msgid "invalid version"
-msgstr "ä¸å½“ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+msgstr "ä¸å½“ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™"
#: libdw/dwarf_error.c:71
msgid "invalid file"
-msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«"
+msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«ã§ã™"
#: libdw/dwarf_error.c:72
msgid "no entries found"
@@ -175,26 +164,23 @@ msgstr "é …ç›®ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:73
msgid "invalid DWARF"
-msgstr "ä¸å½“㪠DWARF"
+msgstr "ä¸å½“㪠DWARFã§ã™"
#: libdw/dwarf_error.c:74
msgid "no string data"
-msgstr "文字データãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr "文字列データã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:75
-#, fuzzy
msgid ".debug_str section missing"
-msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_str セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:76
-#, fuzzy
msgid ".debug_line_str section missing"
-msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_line_str セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:77
-#, fuzzy
msgid ".debug_str_offsets section missing"
-msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_str_offsets セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:78
msgid "no address value"
@@ -202,23 +188,23 @@ msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:79
msgid "no constant value"
-msgstr "固定値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "定数値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:80
msgid "no reference value"
-msgstr "å‚照値ãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr "å‚照値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:81
msgid "invalid reference value"
-msgstr "ä¸å½“ãªå‚照値"
+msgstr "ä¸å½“ãªå‚照値ã§ã™"
#: libdw/dwarf_error.c:82
msgid ".debug_line section missing"
-msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_line セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:83
msgid "invalid .debug_line section"
-msgstr "ä¸å½“㪠.debug_line セクション"
+msgstr "ä¸å½“㪠.debug_line セクションã§ã™"
#: libdw/dwarf_error.c:84
msgid "debug information too big"
@@ -226,28 +212,25 @@ msgstr "デãƒãƒƒã‚°æƒ…å ±ãŒå¤§ãã™ãŽã¾ã™"
#: libdw/dwarf_error.c:85
msgid "invalid DWARF version"
-msgstr "ä¸å½“㪠DWARF ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+msgstr "ä¸å½“㪠DWARF ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™"
#: libdw/dwarf_error.c:86
msgid "invalid directory index"
-msgstr "ä¸å½“ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ç´¢å¼•"
+msgstr "ä¸å½“ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ç´¢å¼•ã§ã™"
#: libdw/dwarf_error.c:87 libdwfl/libdwflP.h:73
msgid "address out of range"
msgstr "アドレスãŒç¯„囲外ã§ã™"
#: libdw/dwarf_error.c:88
-#, fuzzy
msgid ".debug_loc section missing"
-msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_loc セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:89
-#, fuzzy
msgid ".debug_loclists section missing"
-msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_loclists セクション見ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:90
-#, fuzzy
msgid "not a location list value"
msgstr "ロケーションリスト値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
@@ -257,95 +240,91 @@ msgstr "ブロックデータã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:92
msgid "invalid line index"
-msgstr "ä¸å½“ãªè¡Œç´¢å¼•"
+msgstr "ä¸å½“ãªè¡Œç´¢å¼•ã§ã™"
#: libdw/dwarf_error.c:93
msgid "invalid address range index"
-msgstr "ä¸å½“ãªã‚¢ãƒ‰ãƒ¬ã‚¹ç¯„囲索引"
+msgstr "ä¸å½“ãªã‚¢ãƒ‰ãƒ¬ã‚¹ç¯„囲索引ã§ã™"
#: libdw/dwarf_error.c:94 libdwfl/libdwflP.h:74
msgid "no matching address range"
-msgstr "アドレス範囲ã«å¯¾å¿œã—ã¾ã›ã‚“"
+msgstr "一致ã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ç¯„囲ãŒã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:95
msgid "no flag value"
-msgstr "フラグ値ãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr "フラグ値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:96 libelf/elf_error.c:236
msgid "invalid offset"
-msgstr "ä¸å½“ãªã‚ªãƒ•ã‚»ãƒƒãƒˆ"
+msgstr "ä¸å½“ãªã‚ªãƒ•ã‚»ãƒƒãƒˆã§ã™"
#: libdw/dwarf_error.c:97
msgid ".debug_ranges section missing"
-msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_ranges セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:98
-#, fuzzy
msgid ".debug_rnglists section missing"
-msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_rnglists セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:99
msgid "invalid CFI section"
-msgstr "ä¸å½“㪠CFI セクション"
+msgstr "ä¸å½“㪠CFI セクションã§ã™"
#: libdw/dwarf_error.c:100
msgid "no alternative debug link found"
-msgstr ""
+msgstr "代替デãƒãƒƒã‚°ãƒªãƒ³ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:101
-#, fuzzy
msgid "invalid opcode"
-msgstr "ä¸å½“ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰"
+msgstr "ä¸å½“ãªã‚ªãƒšã‚³ãƒ¼ãƒ‰ã§ã™"
#: libdw/dwarf_error.c:102
msgid "not a CU (unit) DIE"
-msgstr ""
+msgstr "CU (unit) DIE ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdw/dwarf_error.c:103
-#, fuzzy
msgid "unknown language code"
-msgstr "ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰"
+msgstr "ä¸æ˜Žãªè¨€èªžã‚³ãƒ¼ãƒ‰ã§ã™"
#: libdw/dwarf_error.c:104
-#, fuzzy
msgid ".debug_addr section missing"
-msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ".debug_addr セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550
+#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548
msgid "Input selection options:"
-msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:"
+msgstr "入力é¸æŠžã‚ªãƒ—ション:"
#: libdwfl/argp-std.c:48
msgid "Find addresses in FILE"
-msgstr "ãµãã„ã‚‹ 中ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™"
+msgstr "FILE ã®ä¸­ã‹ã‚‰ アドレスを探ã™"
#: libdwfl/argp-std.c:50
msgid "Find addresses from signatures found in COREFILE"
-msgstr "COREFILE 中ã§è¦‹ã¤ã‹ã£ãŸç½²åã‹ã‚‰ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™"
+msgstr "COREFILE 中㧠見ã¤ã‹ã£ãŸ ç½²åã‹ã‚‰ アドレスを 探ã™"
#: libdwfl/argp-std.c:52
msgid "Find addresses in files mapped into process PID"
-msgstr "プロセス PID ã«å¯¾å¿œã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™"
+msgstr "プロセス PID 㫠対応ã™ã‚‹ ファイル中㮠アドレスを 探ã™"
#: libdwfl/argp-std.c:54
msgid ""
"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps "
"format"
msgstr ""
-"Linux ã® /proc/PID/maps å½¢å¼ã® ãµãã„ã‚‹ ã‹ã‚‰èª­ã¿è¾¼ã‚“ã ã‚‚ã®ã«å¯¾å¿œã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«"
-"ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™"
+"Linux ã® /proc/PID/maps å½¢å¼ã® FILE ã‹ã‚‰ 読ã¿è¾¼ã‚“ã  ãƒžãƒƒãƒ”ãƒ³ã‚° ã•ã‚ŒãŸ ファイ"
+"ル ã‹ã‚‰ アドレスを 探ã™"
#: libdwfl/argp-std.c:56
msgid "Find addresses in the running kernel"
-msgstr "実行中ã®ã‚«ãƒ¼ãƒãƒ«ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™"
+msgstr "実行中㮠カーãƒãƒ«ã‹ã‚‰ アドレスを 探ã™"
#: libdwfl/argp-std.c:58
msgid "Kernel with all modules"
-msgstr "å…¨ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»˜ãã®ã‚«ãƒ¼ãƒãƒ«"
+msgstr "å…¨ã¦ã® モジュール付ã㮠カーãƒãƒ«"
#: libdwfl/argp-std.c:60 src/stack.c:650
msgid "Search path for separate debuginfo files"
-msgstr "分離ã—㟠debuginfo ファイルã¹ãパスを探ã™"
+msgstr "分離ã•ã‚ŒãŸ debuginfo ファイルを 探索ã™ã‚‹ パス"
#: libdwfl/argp-std.c:161
msgid "only one of -e, -p, -k, -K, or --core allowed"
@@ -358,21 +337,20 @@ msgstr "カーãƒãƒ«ã‚·ãƒ³ãƒœãƒ«ã‚’ロードã§ãã¾ã›ã‚“"
#. Non-fatal to have no modules since we do have the kernel.
#: libdwfl/argp-std.c:238
msgid "cannot find kernel modules"
-msgstr "カーãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘られã¾ã›ã‚“"
+msgstr "カーãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/argp-std.c:255
msgid "cannot find kernel or modules"
-msgstr "カーãƒãƒ«ã‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘られã¾ã›ã‚“"
+msgstr "カーãƒãƒ«ã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/argp-std.c:294
#, c-format
msgid "cannot read ELF core file: %s"
-msgstr "ELF コアファイルを読ã‚ã¾ã›ã‚“: %s"
+msgstr "ELF コアファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
#: libdwfl/argp-std.c:317
-#, fuzzy
msgid "Not enough memory"
-msgstr "メモリーä¸è¶³"
+msgstr "メモリーãŒå分ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdwfl/argp-std.c:327
msgid "No modules recognized in core file"
@@ -380,177 +358,166 @@ msgstr "コアファイルã®ä¸­ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’èªè­˜ã§ãã¾ã›ã‚“"
#: libdwfl/libdwflP.h:54
msgid "See errno"
-msgstr ""
+msgstr "errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
#: libdwfl/libdwflP.h:55
msgid "See elf_errno"
-msgstr ""
+msgstr "elf_errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
#: libdwfl/libdwflP.h:56
msgid "See dwarf_errno"
-msgstr ""
+msgstr "dwarf_errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
#: libdwfl/libdwflP.h:57
msgid "See ebl_errno (XXX missing)"
-msgstr ""
+msgstr "ebl_errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„(XXX ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“)"
#: libdwfl/libdwflP.h:58
msgid "gzip decompression failed"
-msgstr ""
+msgstr "gzip ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
#: libdwfl/libdwflP.h:59
msgid "bzip2 decompression failed"
-msgstr ""
+msgstr "bzip2 ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
#: libdwfl/libdwflP.h:60
msgid "LZMA decompression failed"
-msgstr ""
+msgstr "LZMA ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
#: libdwfl/libdwflP.h:61
msgid "zstd decompression failed"
-msgstr ""
+msgstr "zstd ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
#: libdwfl/libdwflP.h:62
msgid "no support library found for machine"
-msgstr ""
+msgstr "マシン用ã®ã‚µãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:63
msgid "Callbacks missing for ET_REL file"
-msgstr ""
+msgstr "ET_REL ファイル用ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:64
msgid "Unsupported relocation type"
-msgstr ""
+msgstr "未対応ã®ãƒªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã§ã™"
#: libdwfl/libdwflP.h:65
msgid "r_offset is bogus"
-msgstr ""
+msgstr "r_offset ãŒå½ç‰©ã§ã™"
#: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175
msgid "offset out of range"
-msgstr "オフセットãŒç¯„囲を越ãˆã¦ã„ã‚‹"
+msgstr "オフセットãŒç¯„囲外ã§ã™"
#: libdwfl/libdwflP.h:67
-#, fuzzy
msgid "relocation refers to undefined symbol"
-msgstr "定義ã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã®å°åˆ·ã‚µã‚¤ã‚º"
+msgstr "リロケーションãŒæœªå®šç¾©ã‚·ãƒ³ãƒœãƒ«ã‚’å‚ç…§ã—ã¦ã„ã¾ã™"
#: libdwfl/libdwflP.h:68
msgid "Callback returned failure"
-msgstr ""
+msgstr "コールãƒãƒƒã‚¯ãŒå¤±æ•—ã‚’è¿”ã—ã¾ã—ãŸ"
#: libdwfl/libdwflP.h:69
-#, fuzzy
msgid "No DWARF information found"
-msgstr "DWARF 情報ãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr "DWARF 情報ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:70
msgid "No symbol table found"
-msgstr ""
+msgstr "シンボルテーブルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:71
-#, fuzzy
msgid "No ELF program headers"
-msgstr "プログラムヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "ELF プログラムヘッダーã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:72
msgid "address range overlaps an existing module"
-msgstr ""
+msgstr "アドレス範囲ãŒæ—¢å­˜ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨é‡ãªã‚Šã¾ã™"
#: libdwfl/libdwflP.h:75
msgid "image truncated"
-msgstr ""
+msgstr "イメージãŒåˆ‡ã‚Šè©°ã‚られã¦ã„ã¾ã™"
#: libdwfl/libdwflP.h:76
-#, fuzzy
msgid "ELF file opened"
-msgstr "ファイルã®ã‚ªãƒ¼ãƒ—ンを追跡ã—ã¾ã™ã€‚"
+msgstr "既㫠ELF ファイルを開ã„ã¦ã„ã¾ã™"
#: libdwfl/libdwflP.h:77
-#, fuzzy
msgid "not a valid ELF file"
-msgstr "ä¸å½“㪠ELF ファイル"
+msgstr "ä¸å½“㪠ELF ファイルã§ã™"
#: libdwfl/libdwflP.h:78
-#, fuzzy
msgid "cannot handle DWARF type description"
-msgstr "Elf 記述å­ã‚’生æˆã§ãã¾ã›ã‚“: %s"
+msgstr "DWARF type description ã‚’æ“作ã§ãã¾ã›ã‚“"
#: libdwfl/libdwflP.h:79
msgid "ELF file does not match build ID"
-msgstr ""
+msgstr "ELF ファイルãŒãƒ“ルド ID ã¨ä¸€è‡´ã—ã¾ã›ã‚“"
#: libdwfl/libdwflP.h:80
-#, fuzzy
msgid "corrupt .gnu.prelink_undo section data"
-msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s"
+msgstr ".gnu.prelink_undo セクションデータãŒå£Šã‚Œã¦ã„ã¾ã™"
#: libdwfl/libdwflP.h:81
msgid "Internal error due to ebl"
-msgstr ""
+msgstr "ebl ã«èµ·å› ã™ã‚‹å†…部エラー"
#: libdwfl/libdwflP.h:82
msgid "Missing data in core file"
-msgstr ""
+msgstr "コアファイルã®ä¸­ã«ãƒ‡ãƒ¼ã‚¿ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:83
-#, fuzzy
msgid "Invalid register"
-msgstr "ä¸å½“ãªãƒ‘ラメーター"
+msgstr "ä¸å½“ãªãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼ã§ã™"
#: libdwfl/libdwflP.h:84
msgid "Error reading process memory"
-msgstr ""
+msgstr "プロセスメモリーã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã§ã™"
#: libdwfl/libdwflP.h:85
msgid "Couldn't find architecture of any ELF"
-msgstr ""
+msgstr "ELF ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãŒï¼‘ã¤ã‚‚見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
#: libdwfl/libdwflP.h:86
msgid "Error parsing /proc filesystem"
-msgstr ""
+msgstr "/proc ファイルシステムã®ãƒ‘ースエラーã§ã™"
#: libdwfl/libdwflP.h:87
-#, fuzzy
msgid "Invalid DWARF"
-msgstr "ä¸å½“㪠DWARF"
+msgstr "ä¸å½“㪠DWARF ã§ã™"
#: libdwfl/libdwflP.h:88
msgid "Unsupported DWARF"
-msgstr ""
+msgstr "未対応㮠DWARF ã§ã™"
#: libdwfl/libdwflP.h:89
msgid "Unable to find more threads"
-msgstr ""
+msgstr "ã“れ以上スレッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:90
msgid "Dwfl already has attached state"
-msgstr ""
+msgstr "Dwfl ã¯æ—¢ã«ã‚¢ã‚¿ãƒƒãƒçŠ¶æ…‹ã§ã™"
#: libdwfl/libdwflP.h:91
msgid "Dwfl has no attached state"
-msgstr ""
+msgstr "Dwfl ã¯ã‚¢ã‚¿ãƒƒãƒçŠ¶æ…‹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libdwfl/libdwflP.h:92
msgid "Unwinding not supported for this architecture"
-msgstr ""
+msgstr "ã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã«å¯¾å¿œã—ã¦ã„ãªã„å·»ã戻ã—ã§ã™"
#: libdwfl/libdwflP.h:93
-#, fuzzy
msgid "Invalid argument"
-msgstr "ä¸å½“ãªãƒ‘ラメーター"
+msgstr "ä¸å½“ãªå¼•æ•°ã§ã™"
#: libdwfl/libdwflP.h:94
-#, fuzzy
msgid "Not an ET_CORE ELF file"
-msgstr "ä¸å½“㪠ELF ファイル"
+msgstr "ET_CORE ELF ファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libebl/eblbackendname.c:41
msgid "No backend"
msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79
-#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131
+#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
@@ -562,14 +529,14 @@ msgid "<unknown>: %#<PRIx64>"
msgstr "<ä¸æ˜Ž>: %#<PRIx64>"
#: libebl/eblobjnote.c:58
-#, fuzzy, c-format
+#, c-format
msgid "unknown SDT version %u\n"
-msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+msgstr "ä¸æ˜Žãª SDT ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %u ã§ã™\n"
#: libebl/eblobjnote.c:76
-#, fuzzy, c-format
+#, c-format
msgid "invalid SDT probe descriptor\n"
-msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°å­"
+msgstr "ä¸å½“㪠SDT probe 記述å­ã§ã™\n"
#: libebl/eblobjnote.c:126
#, c-format
@@ -601,21 +568,21 @@ msgstr ""
msgid " Args: "
msgstr ""
-#: libebl/eblobjnote.c:300
+#: libebl/eblobjnote.c:304
#, c-format
msgid " Build ID: "
-msgstr " ビルト ID: "
+msgstr " ビルド ID: "
#. A non-null terminated version string.
-#: libebl/eblobjnote.c:311
+#: libebl/eblobjnote.c:315
#, c-format
msgid " Linker version: %.*s\n"
msgstr ""
-#: libebl/eblobjnote.c:638
+#: libebl/eblobjnote.c:642
#, c-format
msgid " OS: %s, ABI: "
-msgstr " OS: %sã€ABI: "
+msgstr ""
#: libebl/eblosabiname.c:70
msgid "Stand alone"
@@ -628,98 +595,96 @@ msgstr "<ä¸æ˜Ž>: %d"
#: libelf/elf_error.c:67
msgid "unknown version"
-msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™"
#: libelf/elf_error.c:71
msgid "unknown type"
-msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—"
+msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—ã§ã™"
#: libelf/elf_error.c:75
msgid "invalid `Elf' handle"
-msgstr "無効㪠`Elf' ã®å‡¦ç†"
+msgstr "無効㪠`Elf' ã®ãƒãƒ³ãƒ‰ãƒ«ã§ã™"
#: libelf/elf_error.c:79
msgid "invalid size of source operand"
-msgstr "ソース演算å­ã®å¤§ãã•ãŒç„¡åŠ¹"
+msgstr "ソース演算å­ã®å¤§ãã•ãŒç„¡åŠ¹ã§ã™"
#: libelf/elf_error.c:83
msgid "invalid size of destination operand"
-msgstr "宛先演算å­ã®å¤§ãã•ãŒç„¡åŠ¹"
+msgstr "宛先演算å­ã®å¤§ãã•ãŒç„¡åŠ¹ã§ã™"
-#: libelf/elf_error.c:87 src/readelf.c:6217
+#: libelf/elf_error.c:87 src/readelf.c:6214
#, c-format
msgid "invalid encoding"
-msgstr "無効ãªã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰"
+msgstr "無効ãªã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã§ã™"
#: libelf/elf_error.c:95
msgid "invalid file descriptor"
-msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°å­"
+msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°å­ã§ã™"
#: libelf/elf_error.c:99
-#, fuzzy
msgid "invalid ELF file data"
-msgstr "ä¸å½“㪠ELF ファイル"
+msgstr "ä¸å½“㪠ELF ファイルデータã§ã™"
#: libelf/elf_error.c:103
msgid "invalid operation"
-msgstr "ä¸å½“ãªæ“作"
+msgstr "ä¸å½“ãªæ“作ã§ã™"
#: libelf/elf_error.c:107
msgid "ELF version not set"
-msgstr "ELF ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¨­å®šã•ã‚Œã¦ã„ãªã„"
+msgstr "ELF ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
#: libelf/elf_error.c:119
msgid "invalid fmag field in archive header"
-msgstr "アーカイブヘッダーã®ä¸å½“㪠fmag 領域"
+msgstr "アーカイブヘッダーã®ä¸å½“㪠fmag 領域ã§ã™"
#: libelf/elf_error.c:123
msgid "invalid archive file"
-msgstr "ä¸å½“ãªã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイル"
+msgstr "ä¸å½“ãªã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイルã§ã™"
#: libelf/elf_error.c:127
msgid "descriptor is not for an archive"
-msgstr "記述å­ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–用ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "記述å­ãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–用ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libelf/elf_error.c:131
msgid "no index available"
-msgstr "索引ãŒä½¿ãˆã¾ã›ã‚“"
+msgstr "利用ã§ãる索引ãŒã‚ã‚Šã¾ã›ã‚“"
#: libelf/elf_error.c:135
msgid "cannot read data from file"
-msgstr "ファイルã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿ã¾ã›ã‚“"
+msgstr "ファイルã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã‚ã¾ã›ã‚“"
#: libelf/elf_error.c:139
msgid "cannot write data to file"
-msgstr "ファイルã¸ãƒ‡ãƒ¼ã‚¿ã‚’書ã‘ã¾ã›ã‚“"
+msgstr "ファイルã¸ãƒ‡ãƒ¼ã‚¿ã‚’書ãè¾¼ã‚ã¾ã›ã‚“"
#: libelf/elf_error.c:143
msgid "invalid binary class"
-msgstr "ä¸å½“ãªãƒã‚¤ãƒŠãƒªãƒ¼ã‚¯ãƒ©ã‚¹"
+msgstr "ä¸å½“ãªãƒã‚¤ãƒŠãƒªãƒ¼ã‚¯ãƒ©ã‚¹ã§ã™"
#: libelf/elf_error.c:147
msgid "invalid section index"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•ã§ã™"
#: libelf/elf_error.c:151
msgid "invalid operand"
-msgstr "ä¸å½“ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰"
+msgstr "ä¸å½“ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰ã§ã™"
#: libelf/elf_error.c:155
msgid "invalid section"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã™"
#: libelf/elf_error.c:163
msgid "executable header not created first"
-msgstr "エクゼキュータブルヘッダーãŒæœ€åˆã«ä½œã‚‰ã‚Œã¦ã„ã¾ã›ã‚“"
+msgstr "実行å¯èƒ½ãƒ˜ãƒƒãƒ€ãƒ¼ãŒæœ€åˆã«ä½œã‚‰ã‚Œã¦ã„ã¾ã›ã‚“"
#: libelf/elf_error.c:167
msgid "file descriptor disabled"
-msgstr "ファイル記述å­ãŒæ©Ÿèƒ½ã—ã¾ã›ã‚“"
+msgstr "ファイル記述å­ãŒç„¡åŠ¹åŒ–ã•ã‚Œã¦ã„ã¾ã™"
#: libelf/elf_error.c:171
-#, fuzzy
msgid "archive/member file descriptor mismatch"
-msgstr "アーカイブ/メンãƒãƒ¼é ˜åŸŸãŒä¸æ•´åˆã§ã™"
+msgstr "アーカイブ/メンãƒãƒ¼ã®ãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°å­ã®ä¸æ•´åˆã§ã™"
#: libelf/elf_error.c:179
msgid "cannot manipulate null section"
@@ -727,21 +692,21 @@ msgstr "null セクションをæ“作ã§ãã¾ã›ã‚“"
#: libelf/elf_error.c:183
msgid "data/scn mismatch"
-msgstr "データ/scnãŒä¸æ•´åˆã§ã™"
+msgstr "データ/scnã®ä¸æ•´åˆã§ã™"
#: libelf/elf_error.c:187
msgid "invalid section header"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼ã§ã™"
-#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623
-#: src/readelf.c:10724 src/readelf.c:10906
+#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692
+#: src/readelf.c:10793 src/readelf.c:10975
#, c-format
msgid "invalid data"
-msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
+msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿ã§ã™"
#: libelf/elf_error.c:195
msgid "unknown data encoding"
-msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰"
+msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã§ã™"
#: libelf/elf_error.c:199
msgid "section `sh_size' too small for data"
@@ -749,15 +714,15 @@ msgstr "`sh_size' セクションãŒãƒ‡ãƒ¼ã‚¿ã«ã¯å°ã•ã™ãŽã¾ã™"
#: libelf/elf_error.c:203
msgid "invalid section alignment"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³èª¿æ•´"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ©ã‚¤ãƒ³ãƒ¡ãƒ³ãƒˆã§ã™"
#: libelf/elf_error.c:207
msgid "invalid section entry size"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³é …ç›®ã®å¤§ãã•"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³é …ç›®ã®å¤§ãã•ã§ã™"
#: libelf/elf_error.c:211
msgid "update() for write on read-only file"
-msgstr "読込ã¿å°‚用ファイルã§ã®æ›¸è¾¼ã¿ã®ãŸã‚ã® update()"
+msgstr "読ã¿è¾¼ã¿å°‚用ファイルã¸ã®æ›¸ãè¾¼ã¿ã® update() ã§ã™"
#: libelf/elf_error.c:215
msgid "no such file"
@@ -765,148 +730,150 @@ msgstr "ãã®ã‚ˆã†ãªãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“"
#: libelf/elf_error.c:219
msgid "only relocatable files can contain section groups"
-msgstr "リロケータブルファイルã®ã¿ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™"
+msgstr "リロケータブルファイルã®ã¿ãŒã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™"
#: libelf/elf_error.c:224
msgid ""
"program header only allowed in executables, shared objects, and core files"
msgstr ""
-"プログラムヘッダーã¯ã‚¨ã‚¯ã‚¼ã‚­ãƒ¥ãƒ¼ã‚¿ãƒ–ルã‹ã€å…±ç”¨ã‚ªãƒ–ジェクトã€ã‚³ã‚¢ãƒ•ã‚¡ã‚¤ãƒ«ã«ã®"
-"ã¿èªã‚られã¦ã„ã¾ã™"
+"プログラムヘッダーã¯ã€å®Ÿè¡Œå¯èƒ½ãƒ•ã‚¡ã‚¤ãƒ«ã€å…±æœ‰ã‚ªãƒ–ジェクトã€ã‚³ã‚¢ãƒ•ã‚¡ã‚¤ãƒ«ã«ã®ã¿"
+"èªã‚られã¦ã„ã¾ã™"
#: libelf/elf_error.c:231
msgid "file has no program header"
msgstr "ファイルã«ãƒ—ログラムヘッダーãŒã‚ã‚Šã¾ã›ã‚“"
#: libelf/elf_error.c:241
-#, fuzzy
msgid "invalid section type"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã§ã™"
#: libelf/elf_error.c:246
-#, fuzzy
msgid "invalid section flags"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³"
+msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ•ãƒ©ã‚°ã§ã™"
#: libelf/elf_error.c:251
-#, fuzzy
msgid "section does not contain compressed data"
-msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
+msgstr "セクションãŒåœ§ç¸®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“"
#: libelf/elf_error.c:256
msgid "section contains compressed data"
-msgstr ""
+msgstr "セクションãŒåœ§ç¸®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚“ã§ã„ã¾ã™"
#: libelf/elf_error.c:261
-#, fuzzy
msgid "unknown compression type"
-msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—"
+msgstr "ä¸æ˜Žãªåœ§ç¸®ã‚¿ã‚¤ãƒ—ã§ã™"
#: libelf/elf_error.c:266
-#, fuzzy
msgid "cannot compress data"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "データを圧縮ã§ãã¾ã›ã‚“"
#: libelf/elf_error.c:271
-#, fuzzy
msgid "cannot decompress data"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "データを展開ã§ãã¾ã›ã‚“"
-#: src/addr2line.c:57
-#, fuzzy
+#: src/addr2line.c:59
msgid "Input format options:"
-msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:"
+msgstr "入力フォーマットオプション:"
-#: src/addr2line.c:59
+#: src/addr2line.c:61
msgid "Treat addresses as offsets relative to NAME section."
-msgstr ""
+msgstr "アドレスを NAME セクション㫠対ã™ã‚‹ 相対 オフセット ã¨ã—㦠扱ã†"
-#: src/addr2line.c:61
-#, fuzzy
+#: src/addr2line.c:63
msgid "Output format options:"
-msgstr "出力形å¼:"
+msgstr "出力フォーマットオプション:"
-#: src/addr2line.c:62
+#: src/addr2line.c:64
msgid "Print address before each entry"
-msgstr ""
+msgstr "å„é …ç›®ã®å‰ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’表示"
-#: src/addr2line.c:63
+#: src/addr2line.c:65
msgid "Show only base names of source files"
-msgstr ""
+msgstr "ソースファイル㮠ベースãƒãƒ¼ãƒ  ã®ã¿ 表示"
-#: src/addr2line.c:65
-msgid "Show absolute file names using compilation directory"
-msgstr ""
+#: src/addr2line.c:67
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show absolute file names using compilation directory (default)"
+msgstr "コンパイルディレクトリを 使用ã—㦠絶対ファイルåã‚’ 表示"
-#: src/addr2line.c:66
+#: src/addr2line.c:68
msgid "Also show function names"
-msgstr ""
+msgstr "関数åも表示"
-#: src/addr2line.c:67
+#: src/addr2line.c:69
msgid "Also show symbol or section names"
-msgstr ""
+msgstr "シンボルå ã¾ãŸã¯ セクションåã‚‚ 表示"
-#: src/addr2line.c:68
+#: src/addr2line.c:70
msgid "Also show symbol and the section names"
-msgstr ""
+msgstr "シンボルå㨠セクションåã‚‚ 表示"
-#: src/addr2line.c:69
+#: src/addr2line.c:71
msgid "Also show line table flags"
-msgstr ""
+msgstr "行テーブルフラグも表示"
-#: src/addr2line.c:71
+#: src/addr2line.c:73
msgid ""
"Show all source locations that caused inline expansion of subroutines at the "
"address."
msgstr ""
+"アドレス㮠サブルーãƒãƒ³ã® インライン展開を 引ãèµ·ã“ã—㟠全ã¦ã® ソースä½ç½®ã‚’ "
+"表示"
-#: src/addr2line.c:74
+#: src/addr2line.c:76
msgid "Show demangled symbols (ARG is always ignored)"
-msgstr ""
+msgstr "デマングルã•ã‚ŒãŸ シンボルを 表示 (ARGã¯å¸¸ã«ç„¡è¦–ã•ã‚Œã‚‹ï¼‰"
-#: src/addr2line.c:76
+#: src/addr2line.c:78
msgid "Print all information on one line, and indent inlines"
-msgstr ""
+msgstr "å…¨ã¦ã® 情報を 一行㧠表示ã—〠字下ã’ã™ã‚‹"
+
+#: src/addr2line.c:80
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show relative file names without compilation directory"
+msgstr "コンパイルディレクトリを 使用ã—㦠絶対ファイルåã‚’ 表示"
-#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100
+#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100
#: src/strings.c:78
msgid "Miscellaneous:"
-msgstr "雑則:"
+msgstr "Misc:"
#. Short description of program.
-#: src/addr2line.c:86
+#: src/addr2line.c:90
msgid ""
"Locate source files and line information for ADDRs (in a.out by default)."
msgstr ""
+"ADDR ã®ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¨è¡Œã®æƒ…報を 検索ã™ã‚‹ (デフォルトã§ã¯ a.out ã‹ã‚‰ï¼‰"
#. Strings for arguments in help texts.
-#: src/addr2line.c:90
+#: src/addr2line.c:94
msgid "[ADDR...]"
msgstr ""
-#: src/addr2line.c:519
-#, c-format
+#: src/addr2line.c:527
msgid "Section syntax requires exactly one module"
msgstr ""
-#: src/addr2line.c:542
+#: src/addr2line.c:549
#, c-format
msgid "offset %#<PRIxMAX> lies outside section '%s'"
msgstr ""
-#: src/addr2line.c:652
+#: src/addr2line.c:659
#, c-format
msgid "cannot find symbol '%s'"
-msgstr ""
+msgstr "シンボル '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: src/addr2line.c:657
+#: src/addr2line.c:664
#, c-format
msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
msgstr ""
#: src/ar.c:67
msgid "Commands:"
-msgstr "コマンド:"
+msgstr "コマンド:"
#: src/ar.c:68
msgid "Delete files from archive."
@@ -922,23 +889,23 @@ msgstr "アーカイブ内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å°åˆ·ã€‚"
#: src/ar.c:71
msgid "Quick append files to archive."
-msgstr "アーカイブã¸ã®å³åº§ã®ãƒ•ã‚¡ã‚¤ãƒ«è¿½åŠ ã€‚"
+msgstr "アーカイブ㸠ファイルを ç´ æ—©ã 追加。"
#: src/ar.c:73
msgid "Replace existing or insert new file into archive."
-msgstr "アーカイブã¸ã®æ—¢å­˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç½®ãæ›ãˆã‹ã€æ–°ã—ã„ファイルã®æŒ¿å…¥ã€‚"
+msgstr "アーカイブã®æ—¢å­˜ãƒ•ã‚¡ã‚¤ãƒ«ã®ç½®ãæ›ãˆã¾ãŸã¯æ–°ã—ã„ファイルã®æŒ¿å…¥ã€‚"
#: src/ar.c:74
msgid "Display content of archive."
-msgstr "アーカイブã®å†…容ã®è¡¨ç¤º"
+msgstr "アーカイブã®å†…容ã®è¡¨ç¤ºã€‚"
#: src/ar.c:75
msgid "Extract files from archive."
-msgstr "アーカイブã‹ã‚‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å–出ã—"
+msgstr "アーカイブã‹ã‚‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å–出ã—。"
#: src/ar.c:77
msgid "Command Modifiers:"
-msgstr "コマンド修飾å­:"
+msgstr "コマンド修飾å­ï¼š"
#: src/ar.c:78
msgid "Preserve original dates."
@@ -950,11 +917,11 @@ msgstr "åå‰ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ [COUNT] ã®ä½¿ç”¨ã€‚"
#: src/ar.c:81
msgid "Do not replace existing files with extracted files."
-msgstr "既存ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’抽出ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã§ç½®ãæ›ãˆãªã„。"
+msgstr "抽出ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã§æ—¢å­˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãæ›ãˆãªã„。"
#: src/ar.c:82
msgid "Allow filename to be truncated if necessary."
-msgstr "å¿…è¦ãªã‚‰ã°ãƒ•ã‚¡ã‚¤ãƒ«åã®åˆ‡ã‚Šæ¨ã¦ã‚’èªã‚る。"
+msgstr "å¿…è¦ãªã‚‰ã° ファイルå㮠切り詰ã‚ã‚’ èªã‚る。"
#: src/ar.c:84
msgid "Provide verbose output."
@@ -978,7 +945,7 @@ msgstr "-b ã¨åŒã˜ã€‚"
#: src/ar.c:89
msgid "Suppress message when library has to be created."
-msgstr "ライブラリーを生æˆã—ãªã‘ã‚Œã°ãªã‚‰ãªã„時ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’抑止ã™ã‚‹ã€‚"
+msgstr "ライブラリーを 生作æˆãªã‘れ㰠ãªã‚‰ãªã„時㫠メッセージを 抑止ã™ã‚‹ã€‚"
#: src/ar.c:91
msgid "Use full path for file matching."
@@ -986,17 +953,17 @@ msgstr "ファイル照åˆã«ãƒ•ãƒ«ãƒ‘スを使ã†ã€‚"
#: src/ar.c:92
msgid "Update only older files in archive."
-msgstr "アーカイブã®å¤ã„ファイルã®ã¿æ›´æ–°ã™ã‚‹ã€‚"
+msgstr "アーカイブ㮠å¤ã„ ファイルã®ã¿ æ›´æ–°ã™ã‚‹ã€‚"
#. Short description of program.
#: src/ar.c:98
msgid "Create, modify, and extract from archives."
-msgstr "アーカイブã‹ã‚‰ä½œæˆã‚„ã€ä¿®æ­£ã€æŠ½å‡ºã™ã‚‹ã€‚"
+msgstr "アーカイブã®ä½œæˆã‚„修正ã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã‹ã‚‰ã®æŠ½å‡ºã‚’è¡Œã†ã€‚"
#. Strings for arguments in help texts.
#: src/ar.c:101
msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]"
-msgstr "[メンãƒãƒ¼] [åˆè¨ˆ] アーカイブ [ファイル...]"
+msgstr ""
#: src/ar.c:180
#, c-format
@@ -1021,7 +988,7 @@ msgstr "COUNT パラメーターãŒå¿…è¦ã§ã™"
#: src/ar.c:218
#, c-format
msgid "invalid COUNT parameter %s"
-msgstr "ä¸å½“㪠COUNT パラメーター %s"
+msgstr "ä¸å½“㪠COUNT パラメーター %s ã§ã™"
#: src/ar.c:225
#, c-format
@@ -1036,7 +1003,7 @@ msgstr "アーカイブåãŒå¿…è¦ã§ã™"
#: src/ar.c:244
#, c-format
msgid "command option required"
-msgstr ""
+msgstr "コマンドオプションãŒå¿…è¦ã§ã™"
#: src/ar.c:295
#, c-format
@@ -1046,7 +1013,7 @@ msgstr "1ã¤ã‚’越ãˆã‚‹æ“作ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸ"
#: src/ar.c:389
#, c-format
msgid "cannot open archive '%s'"
-msgstr "アーカイブ '%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“"
+msgstr "アーカイブ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“"
#: src/ar.c:399
#, c-format
@@ -1061,135 +1028,133 @@ msgstr "%s: アーカイブファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: src/ar.c:407
#, c-format
msgid "cannot stat archive '%s'"
-msgstr "アーカイブ㫠stat ã§ãã¾ã›ã‚“: '%s'"
+msgstr "アーカイブ '%s' ã‚’ stat ã§ãã¾ã›ã‚“"
#: src/ar.c:419
#, c-format
msgid "no entry %s in archive\n"
msgstr "アーカイブã«é …ç›® %s ãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: src/ar.c:472 src/ar.c:927 src/ar.c:1134
-#, c-format
+#: src/ar.c:472 src/ar.c:926 src/ar.c:1132
msgid "cannot create hash table"
-msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを生æˆã§ãã¾ã›ã‚“"
+msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを作æˆã§ãã¾ã›ã‚“"
-#: src/ar.c:479 src/ar.c:934 src/ar.c:1143
-#, c-format
+#: src/ar.c:478 src/ar.c:932 src/ar.c:1140
msgid "cannot insert into hash table"
-msgstr "ãƒãƒƒã‚·ãƒ¥ã«æŒ¿å…¥ã§ãã¾ã›ã‚“"
+msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã«æŒ¿å…¥ã§ãã¾ã›ã‚“"
-#: src/ar.c:487 src/ranlib.c:148
+#: src/ar.c:486 src/ranlib.c:148
#, c-format
msgid "cannot stat '%s'"
-msgstr "'%s' ã« stat ã§ãã¾ã›ã‚“"
+msgstr "'%s' ã‚’ stat ã§ãã¾ã›ã‚“"
-#: src/ar.c:589
+#: src/ar.c:588
#, c-format
msgid "cannot read content of %s: %s"
-msgstr "%s ã®å†…容を読むã“ã¨ãŒã§ãã¾ã›ã‚“: %s"
+msgstr "%s ã®å†…容を読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: src/ar.c:632
+#: src/ar.c:631
#, c-format
msgid "cannot open %.*s"
msgstr "%.*s ã‚’é–‹ã‘ã¾ã›ã‚“"
-#: src/ar.c:654
+#: src/ar.c:653
#, c-format
msgid "failed to write %s"
-msgstr "%s ã¸ã®æ›¸è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
+msgstr "%s ã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: src/ar.c:666
+#: src/ar.c:665
#, c-format
msgid "cannot change mode of %s"
msgstr "%s ã®ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã§ãã¾ã›ã‚“"
-#: src/ar.c:682
+#: src/ar.c:681
#, c-format
msgid "cannot change modification time of %s"
msgstr "%s ã®æ›´æ–°æ™‚間を変更ã§ãã¾ã›ã‚“"
-#: src/ar.c:728
+#: src/ar.c:727
#, c-format
msgid "cannot rename temporary file to %.*s"
msgstr "一時ファイルを %.*s ã«åå‰å¤‰æ›´ã§ãã¾ã›ã‚“"
-#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222
+#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222
#, c-format
msgid "cannot create new file"
-msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“"
+msgstr "æ–°ã—ã„ファイルを作æˆã§ãã¾ã›ã‚“"
-#: src/ar.c:1225
+#: src/ar.c:1222
#, c-format
msgid "position member %s not found"
msgstr "ä½ç½®ãƒ¡ãƒ³ãƒãƒ¼ %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: src/ar.c:1235
+#: src/ar.c:1232
#, c-format
msgid "%s: no entry %s in archive!\n"
msgstr "%s: é …ç›® %s ãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã«ã‚ã‚Šã¾ã›ã‚“!\n"
-#: src/ar.c:1264 src/objdump.c:241
+#: src/ar.c:1261 src/objdump.c:241
#, c-format
msgid "cannot open %s"
msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“"
-#: src/ar.c:1269
+#: src/ar.c:1266
#, c-format
msgid "cannot stat %s"
msgstr "%s ã‚’ stat ã§ãã¾ã›ã‚“"
-#: src/ar.c:1275
+#: src/ar.c:1272
#, c-format
msgid "%s is no regular file"
msgstr "%s ã¯ä¸€èˆ¬ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/ar.c:1288
+#: src/ar.c:1285
#, c-format
msgid "cannot get ELF descriptor for %s: %s\n"
-msgstr "%s ã® ELF 記述å­ã‚’得られã¾ã›ã‚“: %s\n"
+msgstr "%s ã® ELF 記述å­ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s\n"
-#: src/ar.c:1308
+#: src/ar.c:1305
#, c-format
msgid "cannot read %s: %s"
-msgstr "%s を読ã¿ã¾ã›ã‚“: %s"
+msgstr "%s を読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: src/ar.c:1483
-#, fuzzy, c-format
+#: src/ar.c:1480
+#, c-format
msgid "cannot represent ar_date"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "ar_date を表ç¾ã§ãã¾ã›ã‚“"
-#: src/ar.c:1489
-#, fuzzy, c-format
+#: src/ar.c:1486
+#, c-format
msgid "cannot represent ar_uid"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "ar_uid を表ç¾ã§ãã¾ã›ã‚“"
-#: src/ar.c:1495
-#, fuzzy, c-format
+#: src/ar.c:1492
+#, c-format
msgid "cannot represent ar_gid"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "ar_gid を表ç¾ã§ãã¾ã›ã‚“"
-#: src/ar.c:1501
-#, fuzzy, c-format
+#: src/ar.c:1498
+#, c-format
msgid "cannot represent ar_mode"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "ar_mode を表ç¾ã§ãã¾ã›ã‚“"
-#: src/ar.c:1507
-#, fuzzy, c-format
+#: src/ar.c:1504
+#, c-format
msgid "cannot represent ar_size"
-msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“"
+msgstr "ar_size を表ç¾ã§ãã¾ã›ã‚“"
#: src/arlib-argp.c:32
msgid "Use zero for uid, gid, and date in archive members."
-msgstr ""
+msgstr "アーカイブメンãƒã® uid〠gid〠日付㫠ゼロを 使用ã™ã‚‹ã€‚"
#: src/arlib-argp.c:34
msgid "Use actual uid, gid, and date in archive members."
-msgstr ""
+msgstr "アーカイブメンãƒã« 実際ã®uid〠gid〠日付を 使用ã™ã‚‹ã€‚"
#: src/arlib-argp.c:63
#, c-format
msgid "%s (default)"
-msgstr ""
+msgstr "%s (デフォルト)"
#. The archive is too big.
#: src/arlib.c:213
@@ -1200,197 +1165,192 @@ msgstr "アーカイブ '%s' ã¯å¤§ãã™ãŽã¾ã™"
#: src/arlib.c:226
#, c-format
msgid "cannot read ELF header of %s(%s): %s"
-msgstr "%s(%s) ã® ELF ヘッダーを読ã‚ã¾ã›ã‚“: %s"
+msgstr "%s(%s) ã® ELF ヘッダーを読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: src/elfclassify.c:92
+#: src/elfclassify.c:91
msgid "opening"
msgstr ""
-#: src/elfclassify.c:99
+#: src/elfclassify.c:98
msgid "reading"
msgstr ""
-#: src/elfclassify.c:245
-#, fuzzy
-#| msgid "cannot get ELF header"
+#: src/elfclassify.c:244
msgid "ELF header"
-msgstr "ELF ヘッダーを得られã¾ã›ã‚“"
+msgstr ""
-#: src/elfclassify.c:256
-#, fuzzy
-#| msgid "Program Headers:"
+#: src/elfclassify.c:255
msgid "program headers"
-msgstr "プログラムヘッダー:"
+msgstr ""
-#: src/elfclassify.c:265
-#, fuzzy
-#| msgid "Program Headers:"
+#: src/elfclassify.c:264
msgid "program header"
-msgstr "プログラムヘッダー:"
+msgstr ""
-#: src/elfclassify.c:285
-#, fuzzy
-#| msgid "Section Headers:"
+#: src/elfclassify.c:284
msgid "section headers"
-msgstr "セクションヘッダー:"
+msgstr ""
-#: src/elfclassify.c:296
-#, fuzzy
-#| msgid "cannot get section header string table index"
+#: src/elfclassify.c:295
msgid "section header string table index"
-msgstr "セクションヘッダー文字列テーブル索引ãŒå¾—られã¾ã›ã‚“"
+msgstr ""
-#: src/elfclassify.c:310
-#, fuzzy
+#: src/elfclassify.c:309
msgid "could not obtain section header"
-msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: src/elfclassify.c:316
-#, fuzzy
+#: src/elfclassify.c:315
msgid "could not obtain section name"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "セクションåã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: src/elfclassify.c:829
+#: src/elfclassify.c:828
msgid "writing to standard output"
msgstr ""
-#: src/elfclassify.c:856
+#: src/elfclassify.c:855
msgid "reading from standard input"
msgstr ""
-#: src/elfclassify.c:877
-#, fuzzy
-#| msgid "Input selection options:"
+#: src/elfclassify.c:876
msgid "Classification options"
-msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:"
+msgstr "分類オプション"
-#: src/elfclassify.c:879
+#: src/elfclassify.c:878
msgid "File looks like an ELF object or archive/static library (default)"
msgstr ""
+"ELF オブジェクト ã¾ãŸã¯ アーカイブ/é™çš„ライブラリ㫠見ãˆã‚‹ãƒ•ã‚¡ã‚¤ãƒ« (デフォル"
+"ト)"
-#: src/elfclassify.c:882
+#: src/elfclassify.c:881
msgid "File is an regular ELF object (not an archive/static library)"
msgstr ""
+"ファイル㯠通常㮠ELF オブジェクト (アーカイブ/é™çš„ライブラリ ã§ãªã„)"
-#: src/elfclassify.c:885
+#: src/elfclassify.c:884
msgid "File is an ELF archive or static library"
-msgstr ""
+msgstr "ファイル㯠ELF アーカイブ ã¾ãŸã¯ é™çš„ライブラリ"
-#: src/elfclassify.c:888
+#: src/elfclassify.c:887
msgid "File is an ELF core dump file"
-msgstr ""
+msgstr "ファイル㯠ELF コアダンプファイル"
-#: src/elfclassify.c:891
+#: src/elfclassify.c:890
msgid ""
"File is an ELF file with symbol table or .debug_* sections and can be "
"stripped further"
msgstr ""
+"ファイル㯠シンボルテーブル ã¾ãŸã¯ .debug_* セクション付ãã® ã•ã‚‰ã«ã‚¹ãƒˆãƒªãƒƒãƒ—"
+"å¯èƒ½ãª ELF ファイル"
-#: src/elfclassify.c:894
+#: src/elfclassify.c:893
msgid "File is (primarily) an ELF program executable (not primarily a DSO)"
-msgstr ""
+msgstr "ファイル㯠(主ã«ï¼‰ ELF 実行å¯èƒ½ãƒ—ログラム (主ã¨ã—㦠DSO ã§ã¯ãªã„)"
-#: src/elfclassify.c:897
+#: src/elfclassify.c:896
msgid "File is an ELF program executable (might also be a DSO)"
-msgstr ""
+msgstr "ファイル㯠ELF 実行å¯èƒ½ãƒ—ログラム (DSO ã‹ã‚‚ã—ã‚Œãªã„)"
-#: src/elfclassify.c:900
+#: src/elfclassify.c:899
msgid ""
"File is (primarily) an ELF shared object (DSO) (not primarily an executable)"
msgstr ""
+"ファイル㯠(主ã«ï¼‰ ELF 共有オブジェクト(DSO) (主ã¨ã—㦠実行å¯èƒ½ãƒ—ログラム"
+"ã§ãªã„)"
-#: src/elfclassify.c:903
+#: src/elfclassify.c:902
msgid "File is an ELF shared object (DSO) (might also be an executable)"
msgstr ""
+"ファイル㯠ELF 共有オブジェクト(DSO) (実行å¯èƒ½ãƒ—ログラム ã‹ã‚‚ã—ã‚Œãªã„)"
-#: src/elfclassify.c:907
-#, fuzzy
-#| msgid "cannot find kernel modules"
+#: src/elfclassify.c:906
msgid "File is a linux kernel module"
-msgstr "カーãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘られã¾ã›ã‚“"
+msgstr "ファイル㯠linux カーãƒãƒ« モジュール"
-#: src/elfclassify.c:909
+#: src/elfclassify.c:908
msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)"
msgstr ""
+"ファイル㯠デãƒãƒƒã‚°å°‚用 ELF ファイル (分離ã—㟠.debug〠.dwo ã¾ãŸã¯ dwz マル"
+"ãƒãƒ•ã‚¡ã‚¤ãƒ«ï¼‰"
-#: src/elfclassify.c:912
+#: src/elfclassify.c:911
msgid "File is a loadable ELF object (program or shared object)"
msgstr ""
+"ファイル㯠ロードå¯èƒ½ãª ELF オブジェクト (プログラム ã¾ãŸã¯ 共有オブジェク"
+"ト)"
-#: src/elfclassify.c:941
+#: src/elfclassify.c:940
msgid "Input flags"
-msgstr ""
+msgstr "入力フラグ"
-#: src/elfclassify.c:943
+#: src/elfclassify.c:942
msgid "Only classify regular (not symlink nor special device) files"
msgstr ""
+"通常 (シンボリックリンク ã‚„ 特別デãƒã‚¤ã‚¹ ã§ãªã„) ファイルã®ã¿ã‚’ 分類ã™ã‚‹"
-#: src/elfclassify.c:945
+#: src/elfclassify.c:944
msgid ""
"Also read file names to process from standard input, separated by newlines"
-msgstr ""
+msgstr "処ç†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ 標準入力ã‹ã‚‰ 改行区切り㧠読ã¿è¾¼ã‚€"
-#: src/elfclassify.c:948
+#: src/elfclassify.c:947
msgid ""
"Also read file names to process from standard input, separated by ASCII NUL "
"bytes"
-msgstr ""
+msgstr "処ç†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ 標準入力ã‹ã‚‰ ASCII ヌル文字区切り㧠読ã¿è¾¼ã‚€"
-#: src/elfclassify.c:951
+#: src/elfclassify.c:950
msgid "Do not read files from standard input (default)"
-msgstr ""
+msgstr "標準入力ã‹ã‚‰ ファイルを 読ã¿è¾¼ã¾ãªã„ (デフォルト)"
-#: src/elfclassify.c:953
+#: src/elfclassify.c:952
msgid "Try to open compressed files or embedded (kernel) ELF images"
msgstr ""
+"圧縮ファイル ã¾ãŸã¯ 組ã¿è¾¼ã¿ï¼ˆã‚«ãƒ¼ãƒãƒ«ï¼‰ ELF イメージ ã®ã‚ªãƒ¼ãƒ—ンを 試ã¿ã‚‹"
-#: src/elfclassify.c:956
-#, fuzzy
-#| msgid "Output format:"
+#: src/elfclassify.c:955
msgid "Output flags"
-msgstr "出力形å¼:"
+msgstr "出力フラグ"
-#: src/elfclassify.c:958
+#: src/elfclassify.c:957
msgid "Output names of files, separated by newline"
-msgstr ""
+msgstr "改行区切り㧠ファイルåã‚’ 出力ã™ã‚‹"
-#: src/elfclassify.c:960
+#: src/elfclassify.c:959
msgid "Output names of files, separated by ASCII NUL"
-msgstr ""
+msgstr "ASCII ヌル文字区切り㧠ファイルåã‚’ 出力ã™ã‚‹"
-#: src/elfclassify.c:962
-#, fuzzy
-#| msgid "More than one output file name given."
+#: src/elfclassify.c:961
msgid "Do not output file names"
-msgstr "ã²ã¨ã¤ã‚’越ãˆã‚‹å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸã€‚"
+msgstr "ファイルåを出力ã—ãªã„"
-#: src/elfclassify.c:964
+#: src/elfclassify.c:963
msgid "If printing file names, print matching files (default)"
msgstr ""
+"ファイルåã‚’ 表示ã™ã‚‹ãªã‚‰ã°ã€ 一致ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ 表示ã™ã‚‹ (デフォルト)"
-#: src/elfclassify.c:966
+#: src/elfclassify.c:965
msgid "If printing file names, print files that do not match"
-msgstr ""
+msgstr "ファイルåã‚’ 表示ã™ã‚‹ãªã‚‰ã°ã€ 一致ã—ãªã„ファイルを 表示ã™ã‚‹"
-#: src/elfclassify.c:968
+#: src/elfclassify.c:967
msgid "Additional flags"
-msgstr ""
+msgstr "追加ã®ãƒ•ãƒ©ã‚°"
-#: src/elfclassify.c:970
+#: src/elfclassify.c:969
msgid "Output additional information (can be specified multiple times)"
-msgstr ""
+msgstr "追加ã®æƒ…報を 出力ã™ã‚‹ (複数回指定ã•ã‚Œã†ã‚‹ï¼‰"
-#: src/elfclassify.c:972
+#: src/elfclassify.c:971
msgid "Suppress some error output (counterpart to --verbose)"
-msgstr ""
+msgstr "ã„ãã¤ã‹ã®ã‚¨ãƒ©ãƒ¼å‡ºåŠ›ã‚’ 抑制ã™ã‚‹ ( --verbose ã®å対)"
#. Strings for arguments in help texts.
-#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77
+#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77
#: src/readelf.c:158
msgid "FILE..."
-msgstr "ãµãã„ã‚‹..."
+msgstr ""
-#: src/elfclassify.c:981
+#: src/elfclassify.c:980
msgid ""
"Determine the type of an ELF file.\n"
"\n"
@@ -1431,34 +1391,36 @@ msgstr ""
#: src/elfcmp.c:60
msgid "Control options:"
-msgstr ""
+msgstr "制御オプション:"
#: src/elfcmp.c:62
msgid "Output all differences, not just the first"
-msgstr ""
+msgstr "最åˆã®ã‚‚ã®ã«é™ã‚‰ãšã€ å…¨ã¦ã®å·®ç•°ã‚’ 出力ã™ã‚‹"
#: src/elfcmp.c:63
msgid ""
"Control treatment of gaps in loadable segments [ignore|match] (default: "
"ignore)"
msgstr ""
+"ロードå¯èƒ½ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® gap 㮠扱ã„ã‚’ 制御ã™ã‚‹ [ignore|match] (デフォルト: "
+"ignore)"
#: src/elfcmp.c:65
msgid "Ignore permutation of buckets in SHT_HASH section"
-msgstr ""
+msgstr "SHT_HASH セクション㮠ãƒã‚±ãƒƒãƒˆã® 並ã¹æ›¿ãˆã‚’ 無視"
#: src/elfcmp.c:67
msgid "Ignore differences in build ID"
-msgstr ""
+msgstr "ビルド ID ã®å·®ç•°ã‚’ 無視"
#: src/elfcmp.c:68
msgid "Output nothing; yield exit status only"
-msgstr ""
+msgstr "何も出力ã—ãªã„。 終了ステータスã®ã¿ã‚’生ã˜ã•ã›ã‚‹"
#. Short description of program.
#: src/elfcmp.c:75
msgid "Compare relevant parts of two ELF files for equality."
-msgstr ""
+msgstr "ï¼’ã¤ã® ELF ファイル㮠関連ã®ã‚る部分㮠等価性を 比較ã™ã‚‹ã€‚"
#. Strings for arguments in help texts.
#: src/elfcmp.c:79
@@ -1467,12 +1429,12 @@ msgstr ""
#: src/elfcmp.c:141
msgid "Invalid number of parameters.\n"
-msgstr ""
+msgstr "ä¸å½“ãªãƒ‘ラメータ数ã§ã™\n"
#: src/elfcmp.c:172 src/elfcmp.c:177
#, c-format
msgid "cannot get ELF header of '%s': %s"
-msgstr ""
+msgstr "'%s' ã® ELF ヘッダーをå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:203
#, c-format
@@ -1480,9 +1442,9 @@ msgid "%s %s diff: ELF header"
msgstr ""
#: src/elfcmp.c:210 src/elfcmp.c:213
-#, fuzzy, c-format
+#, c-format
msgid "cannot get section count of '%s': %s"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "'%s' ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼æ•°ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:218
#, c-format
@@ -1490,19 +1452,19 @@ msgid "%s %s diff: section count"
msgstr ""
#: src/elfcmp.c:225 src/elfcmp.c:228
-#, fuzzy, c-format
+#, c-format
msgid "cannot get program header count of '%s': %s"
-msgstr "プログラムヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "'%s' ã®ãƒ—ログラムヘッダー数をå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:233
-#, fuzzy, c-format
+#, c-format
msgid "%s %s diff: program header count"
-msgstr "ファイルã«ãƒ—ログラムヘッダーãŒã‚ã‚Šã¾ã›ã‚“"
+msgstr ""
#: src/elfcmp.c:241 src/elfcmp.c:244
-#, fuzzy, c-format
+#, c-format
msgid "cannot get hdrstrndx of '%s': %s"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "'%s' ã® hdrstrndx ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:249
#, c-format
@@ -1515,9 +1477,9 @@ msgid "%s %s differ: section [%zu], [%zu] name"
msgstr ""
#: src/elfcmp.c:330
-#, fuzzy, c-format
+#, c-format
msgid "%s %s differ: section [%zu] '%s' header"
-msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
+msgstr ""
#: src/elfcmp.c:338 src/elfcmp.c:344
#, c-format
@@ -1525,16 +1487,14 @@ msgid "cannot get content of section %zu in '%s': %s"
msgstr ""
#: src/elfcmp.c:353
-#, fuzzy, c-format
+#, c-format
msgid "symbol table [%zu] in '%s' has zero sh_entsize"
msgstr ""
-"\n"
-"シンボルテーブル [%2u] '%s' ã«ã¯ %u 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n"
#: src/elfcmp.c:365 src/elfcmp.c:371
#, c-format
msgid "cannot get symbol in '%s': %s"
-msgstr ""
+msgstr "'%s' ã®ã‚·ãƒ³ãƒœãƒ«ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:393
#, c-format
@@ -1552,9 +1512,9 @@ msgid "%s %s differ: section [%zu] '%s' number of notes"
msgstr ""
#: src/elfcmp.c:451
-#, fuzzy, c-format
+#, c-format
msgid "cannot read note section [%zu] '%s' in '%s': %s"
-msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s"
+msgstr ""
#: src/elfcmp.c:462
#, c-format
@@ -1599,7 +1559,7 @@ msgstr ""
#: src/elfcmp.c:595 src/elfcmp.c:600
#, c-format
msgid "cannot load data of '%s': %s"
-msgstr ""
+msgstr "'%s' ã®ãƒ‡ãƒ¼ã‚¿ã‚’ロードã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:619 src/elfcmp.c:625
#, c-format
@@ -1619,70 +1579,69 @@ msgstr ""
#: src/elfcmp.c:706
#, c-format
msgid "Invalid value '%s' for --gaps parameter."
-msgstr ""
+msgstr "--gaps パラメータ ã«å¯¾ã™ã‚‹ä¸å½“ãªå€¤ '%s' ã§ã™"
-#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141
-#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067
+#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141
+#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070
#: src/unstrip.c:2195 src/unstrip.c:2224
#, c-format
msgid "cannot open '%s'"
msgstr "'%s' ã‚’é–‹ã‘ã¾ã›ã‚“"
-#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158
+#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158
#, c-format
msgid "cannot create ELF descriptor for '%s': %s"
-msgstr ""
+msgstr "'%s' ã® ELF 記述å­ã‚’作æˆã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:743
#, c-format
msgid "cannot create EBL descriptor for '%s'"
-msgstr ""
+msgstr "'%s' ã® EBL 記述å­ã‚’作æˆã§ãã¾ã›ã‚“"
-#: src/elfcmp.c:761 src/findtextrel.c:394
+#: src/elfcmp.c:761 src/findtextrel.c:385
#, c-format
msgid "cannot get section header of section %zu: %s"
-msgstr ""
+msgstr "セクション %zu ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:771
#, c-format
msgid "cannot get content of section %zu: %s"
-msgstr ""
+msgstr "セクション %zu ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/elfcmp.c:781 src/elfcmp.c:795
#, c-format
msgid "cannot get relocation: %s"
-msgstr ""
+msgstr "リロケーションをå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117
+#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117
#, c-format
msgid "-o option specified twice"
msgstr "-o オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™"
#: src/elfcompress.c:124
-#, fuzzy, c-format
+#, c-format
msgid "-t option specified twice"
-msgstr "-f オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™"
+msgstr "-t オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™"
#: src/elfcompress.c:133
-#, fuzzy, c-format
+#, c-format
msgid "unknown compression type '%s'"
-msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—"
+msgstr "ä¸æ˜Žãªåœ§ç¸®ã‚¿ã‚¤ãƒ— '%s'"
#. We need at least one input file.
#: src/elfcompress.c:145 src/elfcompress.c:1345
-#, fuzzy, c-format
+#, c-format
msgid "No input file given"
-msgstr "入力ファイルãŒç©ºã§ã™"
+msgstr "入力ファイルãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“"
-#: src/elfcompress.c:151 src/elfcompress.c:1350
-#, fuzzy, c-format
+#: src/elfcompress.c:151 src/elfcompress.c:1349
+#, c-format
msgid "Only one input file allowed together with '-o'"
-msgstr "'-o' 㨠'-f' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“"
+msgstr "'-o' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“"
#: src/elfcompress.c:1307
-#, fuzzy
msgid "Place (de)compressed output into FILE"
-msgstr "ã¯ãŽå–ã£ãŸå‡ºåŠ›ã‚’ ãµãã„ã‚‹ ã«ç½®ã"
+msgstr "圧縮(展開)ã—ãŸå‡ºåŠ›ã‚’ FILE ã«ç½®ã"
#: src/elfcompress.c:1310
msgid ""
@@ -1696,10 +1655,12 @@ msgid ""
"SECTION name to (de)compress, SECTION is an extended wildcard pattern "
"(defaults to '.?(z)debug*')"
msgstr ""
+"圧縮(展開)ã™ã‚‹ セクションå。 SECTION 㯠拡張 ワイルドカード パターン(デ"
+"フォルト㧠'.?(z)debug*')"
#: src/elfcompress.c:1316
msgid "Print a message for each section being (de)compressed"
-msgstr ""
+msgstr "圧縮(展開) ã•ã‚Œã¦ã„ã‚‹ å„セクション ã«å¯¾ã™ã‚‹ メッセージを 表示"
#: src/elfcompress.c:1319
msgid ""
@@ -1712,21 +1673,20 @@ msgid "Relax a few rules to handle slightly broken ELF files"
msgstr "å°‘ã—壊れ㟠ELF ファイルをå–り扱ã†ãŸã‚ã«ãƒ«ãƒ¼ãƒ«ã‚’å°‘ã—ç·©å’Œã™ã‚‹"
#: src/elfcompress.c:1325
-#, fuzzy
msgid "Be silent when a section cannot be compressed"
-msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
+msgstr "セクションを圧縮ã§ããªã„ã¨ãã«é™ã‹ã«ã™ã‚‹"
#: src/elfcompress.c:1335
msgid "Compress or decompress sections in an ELF file."
-msgstr ""
+msgstr "ELF ファイル㮠セクションを 圧縮 ã¾ãŸã¯ 展開ã™ã‚‹"
#: src/elflint.c:63
msgid "Be extremely strict, flag level 2 features."
-msgstr "éžå¸¸ã«åŽ³å¯†ã«ã‚„ã£ã¦ãã ã•ã„ã€ãƒ•ãƒ©ã‚°ãƒ¬ãƒ™ãƒ« 2 機能。"
+msgstr "éžå¸¸ã«åŽ³æ ¼ã«ã™ã‚‹ã€‚ フラグレベル 2 機能。"
#: src/elflint.c:64
msgid "Do not print anything if successful"
-msgstr "æˆåŠŸã—ãŸã‚‰ä½•ã‚‚å°åˆ·ã—ãªã„"
+msgstr "æˆåŠŸã—ãŸå ´åˆã¯ä½•ã‚‚表示ã—ãªã„"
#: src/elflint.c:65
msgid "Binary is a separate debuginfo file"
@@ -1737,7 +1697,8 @@ msgid ""
"Binary has been created with GNU ld and is therefore known to be broken in "
"certain ways"
msgstr ""
-"ãƒã‚¤ãƒŠãƒªãƒ¼ã¯ GNU ld ã§ä½œæˆã•ã‚Œã€å¾“ã£ã¦ã‚る方法ã§å£Šã‚Œã¦ã„ã‚‹ã®ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã‚‹"
+"ãƒã‚¤ãƒŠãƒªãƒ¼ã¯ GNU ld ã§ä½œæˆã•ã‚Œã€ 従ã£ã¦ã€ ã‚る方法㧠壊れるã“ã¨ãŒ 知られã¦ã„"
+"ã‚‹"
#. Short description of program.
#: src/elflint.c:73
@@ -1745,14 +1706,14 @@ msgid "Pedantic checking of ELF files compliance with gABI/psABI spec."
msgstr "ELF ファイル㌠gABI/psABI 仕様ã¸æº–æ‹ ã—ã¦ã„ã‚‹ã‹ã®åŽ³å¯†ãªãƒã‚§ãƒƒã‚¯ã€‚"
#: src/elflint.c:154 src/readelf.c:368
-#, fuzzy, c-format
+#, c-format
msgid "cannot open input file '%s'"
-msgstr "入力ファイルを開ã‘ã¾ã›ã‚“"
+msgstr "入力ファイル '%s' ã‚’é–‹ã‘ã¾ã›ã‚“"
#: src/elflint.c:161
-#, fuzzy, c-format
+#, c-format
msgid "cannot generate Elf descriptor for '%s': %s\n"
-msgstr "Elf 記述å­ã‚’生æˆã§ãã¾ã›ã‚“: %s\n"
+msgstr "'%s' ã«å¯¾ã™ã‚‹ Elf 記述å­ã‚’生æˆã§ãã¾ã›ã‚“: %s\n"
#: src/elflint.c:180
#, c-format
@@ -1770,7 +1731,7 @@ msgstr "ファイルåãŒã‚ã‚Šã¾ã›ã‚“。\n"
#: src/elflint.c:284
#, c-format
msgid " error while freeing sub-ELF descriptor: %s\n"
-msgstr "副-ELF 記述å­ã‚’解放ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s\n"
+msgstr "sub-ELF 記述å­ã‚’解放ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s\n"
#. We cannot do anything.
#: src/elflint.c:292
@@ -1799,7 +1760,7 @@ msgid "unsupported OS ABI e_ident[%d] == '%s'\n"
msgstr "ä¸æ˜Žãª OS ABI e_ident[%d] == '%s'\n"
#: src/elflint.c:380
-#, fuzzy, c-format
+#, c-format
msgid "unsupported ABI version e_ident[%d] == %d\n"
msgstr "ä¸æ˜Žãª ABI ãƒãƒ¼ã‚¸ãƒ§ãƒ³ e_ident[%d] == %d\n"
@@ -1865,7 +1826,7 @@ msgid "Can only check %u headers, shnum was %u\n"
msgstr ""
#: src/elflint.c:487
-#, fuzzy, c-format
+#, c-format
msgid "invalid number of program header table entries\n"
msgstr "プログラムヘッダー項目数ã¨ã—ã¦ä¸å½“ãªæ•°\n"
@@ -1914,16 +1875,16 @@ msgstr ""
"一部分ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
#: src/elflint.c:594
-#, fuzzy, c-format
+#, c-format
msgid ""
"section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n"
msgstr ""
-"セクション [%2d] '%s': セクショングループ [%2zu] '%s' ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’継"
-"続ã—ã¦ã„ã¾ã›ã‚“\n"
+"セクション [%2d] '%s': セクショングループ [%2zu] '%s' ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚ˆã‚Š"
+"å‰ã«ã‚ã‚Šã¾ã›ã‚“\n"
#: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655
#: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106
-#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458
+#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
@@ -3362,325 +3323,333 @@ msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
msgstr ""
-#: src/elflint.c:4397
+#: src/elflint.c:4404
#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
"offset %zu\n"
msgstr ""
-#: src/elflint.c:4402
+#: src/elflint.c:4409
#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
"'%s' at offset %zu\n"
msgstr ""
-#: src/elflint.c:4421
+#: src/elflint.c:4428
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4441
+#: src/elflint.c:4448
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr ""
-#: src/elflint.c:4444
+#: src/elflint.c:4451
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4465
+#: src/elflint.c:4472
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4472
+#: src/elflint.c:4479
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr ""
-#: src/elflint.c:4475
+#: src/elflint.c:4482
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4493
+#: src/elflint.c:4500
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
msgstr ""
-#: src/elflint.c:4508
+#: src/elflint.c:4515
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr ""
-#: src/elflint.c:4518
+#: src/elflint.c:4525
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:4529
+#: src/elflint.c:4536
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr ""
-#: src/elflint.c:4537
+#: src/elflint.c:4544
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr ""
-#: src/elflint.c:4544
+#: src/elflint.c:4551
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr ""
-#: src/elflint.c:4558
+#: src/elflint.c:4565
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4561
+#: src/elflint.c:4568
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4571
+#: src/elflint.c:4578
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr ""
-#: src/elflint.c:4592
+#: src/elflint.c:4599
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr ""
-#: src/elflint.c:4603
+#: src/elflint.c:4610
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
-#: src/elflint.c:4610
+#: src/elflint.c:4617
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
-#: src/elflint.c:4619 src/elflint.c:4642
+#: src/elflint.c:4626 src/elflint.c:4649
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr ""
-#: src/elflint.c:4648
+#: src/elflint.c:4655
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr ""
-#: src/elflint.c:4675
+#: src/elflint.c:4682
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4678
+#: src/elflint.c:4685
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4691
+#: src/elflint.c:4698
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr ""
-#: src/elflint.c:4699
+#: src/elflint.c:4706
#, c-format
msgid "call frame search table must be allocated\n"
msgstr ""
-#: src/elflint.c:4702
+#: src/elflint.c:4709
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr ""
-#: src/elflint.c:4706
+#: src/elflint.c:4713
#, c-format
msgid "call frame search table must not be writable\n"
msgstr ""
-#: src/elflint.c:4709
+#: src/elflint.c:4716
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr ""
-#: src/elflint.c:4714
+#: src/elflint.c:4721
#, c-format
msgid "call frame search table must not be executable\n"
msgstr ""
-#: src/elflint.c:4717
+#: src/elflint.c:4724
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr ""
-#: src/elflint.c:4728
+#: src/elflint.c:4735
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr ""
-#: src/elflint.c:4735
+#: src/elflint.c:4742
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr ""
-#: src/elflint.c:4738
+#: src/elflint.c:4745
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
"alignment\n"
msgstr ""
-#: src/elflint.c:4751
+#: src/elflint.c:4758
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
"program header entry"
msgstr ""
-#: src/elflint.c:4785
+#: src/elflint.c:4792
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr ""
-#: src/elflint.c:4797
+#: src/elflint.c:4804
#, fuzzy, c-format
msgid "cannot create backend for ELF file\n"
msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“"
-#: src/elflint.c:4818
+#: src/elflint.c:4825
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr ""
-#: src/findtextrel.c:60
+#: src/findtextrel.c:61
msgid "Input Selection:"
-msgstr ""
+msgstr "入力é¸æŠžï¼š"
-#: src/findtextrel.c:61
+#: src/findtextrel.c:62
msgid "Prepend PATH to all file names"
-msgstr ""
+msgstr "å…¨ã¦ã® ファイルåã«å¯¾ã—㦠PATH を先頭㫠付ã‘加ãˆã‚‹"
-#: src/findtextrel.c:63
+#: src/findtextrel.c:64
msgid "Use PATH as root of debuginfo hierarchy"
-msgstr ""
+msgstr "debuginfo 階層㮠ルートã¨ã—㦠PATH を使用ã™ã‚‹"
#. Short description of program.
-#: src/findtextrel.c:70
+#: src/findtextrel.c:71
msgid "Locate source of text relocations in FILEs (a.out by default)."
msgstr ""
+"FILE (デフォルトã§ã¯ a.out)㮠テキスト リロケーション㮠ソースを 検索ã™ã‚‹"
#. Strings for arguments in help texts.
-#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80
+#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80
#: src/strings.c:87 src/strip.c:101
msgid "[FILE...]"
-msgstr "[ãµãã„ã‚‹...]"
+msgstr ""
-#: src/findtextrel.c:222
+#: src/findtextrel.c:224
#, c-format
msgid "cannot get ELF header '%s': %s"
-msgstr ""
+msgstr "ELF ヘッダー '%s' ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/findtextrel.c:233
+#: src/findtextrel.c:235
#, c-format
msgid "'%s' is not a DSO or PIE"
-msgstr ""
+msgstr "'%s' 㯠DSO ã¾ãŸã¯ PIE ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/findtextrel.c:253
+#: src/findtextrel.c:255
#, c-format
msgid "getting get section header of section %zu: %s"
msgstr ""
-#: src/findtextrel.c:277
+#: src/findtextrel.c:279
#, c-format
msgid "cannot read dynamic section: %s"
-msgstr ""
+msgstr "dynamic セクションを読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: src/findtextrel.c:298
+#: src/findtextrel.c:300
#, c-format
msgid "no text relocations reported in '%s'"
msgstr ""
-#: src/findtextrel.c:310
+#: src/findtextrel.c:311
#, c-format
msgid "while reading ELF file"
-msgstr ""
+msgstr "ELF ファイルã®èª­ã¿è¾¼ã¿ä¸­"
-#: src/findtextrel.c:314
-#, fuzzy, c-format
+#: src/findtextrel.c:315
+#, c-format
msgid "cannot get program header count: %s"
-msgstr "プログラムヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "プログラムヘッダー数をå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/findtextrel.c:325 src/findtextrel.c:342
-#, fuzzy, c-format
+#: src/findtextrel.c:326 src/findtextrel.c:341
+#, c-format
msgid "cannot get program header index at offset %zd: %s"
-msgstr "プログラムヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "オフセット %zd ã«ä½ç½®ã™ã‚‹ãƒ—ログラムヘッダー索引をå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/findtextrel.c:406
+#: src/findtextrel.c:397
#, c-format
msgid "cannot get symbol table section %zu in '%s': %s"
msgstr ""
-#: src/findtextrel.c:427 src/findtextrel.c:450
+#: src/findtextrel.c:418 src/findtextrel.c:441
#, c-format
msgid "cannot get relocation at index %d in section %zu in '%s': %s"
msgstr ""
-#: src/findtextrel.c:516
+#: src/findtextrel.c:507
#, c-format
msgid "%s not compiled with -fpic/-fPIC\n"
-msgstr ""
+msgstr "%s 㯠-fpic/-fPIC 付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: src/findtextrel.c:570
+#: src/findtextrel.c:561
#, c-format
msgid ""
"the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
msgstr ""
+"関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯ -fpic/-fPIC 付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: src/findtextrel.c:577 src/findtextrel.c:597
+#: src/findtextrel.c:568 src/findtextrel.c:588
#, c-format
msgid ""
"the file containing the function '%s' might not be compiled with -fpic/-"
"fPIC\n"
msgstr ""
+"関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯ -fpic/-fPIC 付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ãªã„ã‹ã‚‚ã—ã‚Œã¾"
+"ã›ã‚“\n"
-#: src/findtextrel.c:585
+#: src/findtextrel.c:576
#, c-format
msgid ""
"either the file containing the function '%s' or the file containing the "
"function '%s' is not compiled with -fpic/-fPIC\n"
msgstr ""
+"関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ« ã¾ãŸã¯ 関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯ -fpic/-fPIC 付ãã§"
+"コンパイルã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: src/findtextrel.c:605
+#: src/findtextrel.c:596
#, c-format
msgid ""
"a relocation modifies memory at offset %llu in a write-protected segment\n"
msgstr ""
+"リロケーション㯠書ãè¾¼ã¿ç¦æ­¢ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® オフセット %llu ã«ä½ç½®ã™ã‚‹ãƒ¡ãƒ¢ãƒªã‚’ "
+"修正ã—ã¾ã™\n"
#: src/nm.c:66 src/strip.c:70
msgid "Output selection:"
-msgstr "出力é¸æŠž:"
+msgstr "出力é¸æŠžï¼š"
#: src/nm.c:67
msgid "Display debugger-only symbols"
-msgstr "デãƒãƒƒã‚¬ãƒ¼å°‚用シンボルを表示"
+msgstr "デãƒãƒƒã‚¬å°‚用シンボルを表示"
#: src/nm.c:68
msgid "Display only defined symbols"
-msgstr "定義ã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã®ã¿ã‚’表示"
+msgstr "定義済ã¿ã‚·ãƒ³ãƒœãƒ«ã®ã¿ã‚’表示"
#: src/nm.c:71
msgid "Display dynamic symbols instead of normal symbols"
-msgstr "通常シンボルã®ä»£ã‚ã‚Šã«å‹•çš„シンボルを表示"
+msgstr "通常シンボル㮠代ã‚り㫠動的シンボルを 表示"
#: src/nm.c:72
msgid "Display only external symbols"
@@ -3692,23 +3661,23 @@ msgstr "未定義シンボルã®ã¿ã‚’表示"
#: src/nm.c:75
msgid "Include index for symbols from archive members"
-msgstr "アーカイブメンãƒãƒ¼ã‹ã‚‰ã®ã‚·ãƒ³ãƒœãƒ«ã®ç´¢å¼•ã‚’å«ã‚ã‚‹"
+msgstr "アーカイブメンãƒã‹ã‚‰ã® シンボル㮠索引を å«ã‚ã‚‹"
#: src/nm.c:77 src/size.c:54
msgid "Output format:"
-msgstr "出力形å¼:"
+msgstr "出力形å¼ï¼š"
#: src/nm.c:79
msgid "Print name of the input file before every symbol"
-msgstr "å…¨ã¦ã®ã‚·ãƒ³ãƒœãƒ«ã®å‰ã«å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«åã‚’å°åˆ·"
+msgstr "å„シンボル㮠å‰ã« 入力ファイルåã‚’ 表示"
#: src/nm.c:82
msgid ""
"Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The "
"default is `sysv'"
msgstr ""
-"出力形å¼ã¨ã—㦠FORMATを使ã†ã€‚FORMAT 㯠`bsd'ã‹ã€`sysv'ã€`posix' ã®ã©ã‚Œã‹ã€‚çœ"
-"略値㯠`sysv'"
+"出力形å¼ã¨ã—㦠FORMAT を使ã†ã€‚ FORMAT 㯠`bsd'ã€`sysv'ã€`posix' ã®ã„ãšã‚Œã‹ã€‚"
+"デフォルト㯠`sysv'"
#: src/nm.c:84
msgid "Same as --format=bsd"
@@ -3720,24 +3689,23 @@ msgstr "--format=posix ã¨åŒã˜"
#: src/nm.c:86 src/size.c:60
msgid "Use RADIX for printing symbol values"
-msgstr "シンボル値をå°åˆ·ã™ã‚‹ãŸã‚ã« RADIX を使ã†"
+msgstr "シンボル値㮠表示㫠RADIX を使ã†"
#: src/nm.c:87
-#, fuzzy
msgid "Mark special symbols"
-msgstr "å¼±ã„シンボルã«å°ã‚’点ã‘ã‚‹"
+msgstr "特別ãªã‚·ãƒ³ãƒœãƒ«ã«å°ã‚’点ã‘ã‚‹"
#: src/nm.c:89
msgid "Print size of defined symbols"
-msgstr "定義ã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã®å°åˆ·ã‚µã‚¤ã‚º"
+msgstr "定義済ã¿ã‚·ãƒ³ãƒœãƒ«ã®ã‚µã‚¤ã‚ºã‚’表示"
#: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69
msgid "Output options:"
-msgstr "出力オプション:"
+msgstr "出力オプション:"
#: src/nm.c:92
msgid "Sort symbols numerically by address"
-msgstr "シンボルをアドレスã«ã‚ˆã‚Šæ•°å€¤çš„ã«ä¸¦ã¹æ›¿ãˆã‚‹"
+msgstr "シンボルを アドレスã«ã‚ˆã‚Š 数値的㫠並ã¹æ›¿ãˆã‚‹"
#: src/nm.c:94
msgid "Do not sort the symbols"
@@ -3749,17 +3717,16 @@ msgstr "並ã¹æ›¿ãˆã®æ„味を逆ã«ã™ã‚‹"
#: src/nm.c:98
msgid "Decode low-level symbol names into source code names"
-msgstr ""
+msgstr "低水準㮠シンボルåã‚’ ソースコード上㮠åå‰ã« デコードã™ã‚‹"
#. Short description of program.
#: src/nm.c:105
msgid "List symbols from FILEs (a.out by default)."
-msgstr "ãµãã„ã‚‹ ã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’表示 (デフォルトã§ã¯a.out)。"
+msgstr "FILE ã®ã‚·ãƒ³ãƒœãƒ«ã‚’一覧表示 (デフォルトã§ã¯a.out)。"
#: src/nm.c:116 src/objdump.c:79
-#, fuzzy
msgid "Output formatting"
-msgstr "出力形å¼:"
+msgstr "出力形å¼ï¼š"
#: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133
#, fuzzy, c-format
@@ -3767,12 +3734,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s"
msgstr "%s: 内部エラー %d (%s-%s): %s"
#: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308
-#: src/strip.c:2763
+#: src/strip.c:2759
#, c-format
msgid "while closing '%s'"
msgstr "'%s' ã‚’é–‰ã˜ã¦ã„る最中"
-#: src/nm.c:403 src/objdump.c:280 src/strip.c:818
+#: src/nm.c:403 src/objdump.c:280 src/strip.c:820
#, c-format
msgid "%s: File format not recognized"
msgstr "%s: ファイル形å¼ã‚’èªè­˜ã§ãã¾ã›ã‚“ã§ã—ãŸ"
@@ -3807,24 +3774,23 @@ msgstr "アーカイブã®ã‚ªãƒ•ã‚»ãƒƒãƒˆã‚’最åˆã«ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“
msgid "%s%s%s: file format not recognized"
msgstr "%s%s%s: ファイル形å¼ã‚’èªè­˜ã§ãã¾ã›ã‚“"
-#: src/nm.c:705
-#, c-format
+#: src/nm.c:703
msgid "cannot create search tree"
msgstr "検索ツリーを生æˆã§ãã¾ã›ã‚“"
-#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637
-#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009
-#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719
-#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530
-#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533
-#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470
-#: src/strip.c:1084
+#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637
+#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017
+#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724
+#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528
+#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597
+#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468
+#: src/strip.c:1086
#, c-format
msgid "cannot get section header string table index"
msgstr "セクションヘッダー文字列テーブル索引ãŒå¾—られã¾ã›ã‚“"
#. We always print this prolog.
-#: src/nm.c:771
+#: src/nm.c:768
#, c-format
msgid ""
"\n"
@@ -3838,7 +3804,7 @@ msgstr ""
"\n"
#. The header line.
-#: src/nm.c:774
+#: src/nm.c:771
#, c-format
msgid ""
"%*s%-*s %-*s Class Type %-*s %*s Section\n"
@@ -3847,84 +3813,83 @@ msgstr ""
"%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n"
"\n"
-#: src/nm.c:776
+#: src/nm.c:773
msgctxt "sysv"
msgid "Name"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:778
+#: src/nm.c:775
msgctxt "sysv"
msgid "Value"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:780
+#: src/nm.c:777
msgctxt "sysv"
msgid "Size"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:782
+#: src/nm.c:779
msgctxt "sysv"
msgid "Line"
msgstr ""
-#: src/nm.c:1250
+#: src/nm.c:1246
#, fuzzy, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr "%s: セクションã®é …ç›®ã®å¤§ãã• `%s' ã¯äºˆæœŸã—ãŸã‚‚ã®ã¨ã¯ç•°ãªã‚Šã¾ã™"
-#: src/nm.c:1255
+#: src/nm.c:1251
#, fuzzy, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: セクション `%s' ã®å¤§ãã•ã¯é …ç›®ã®å¤§ãã•ã®æ•´æ•°å€ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/nm.c:1336
+#: src/nm.c:1331
#, fuzzy, c-format
msgid "%s: entries (%zd) in section %zd `%s' is too large"
msgstr "%s: セクションã®é …ç›®ã®å¤§ãã• `%s' ã¯äºˆæœŸã—ãŸã‚‚ã®ã¨ã¯ç•°ãªã‚Šã¾ã™"
#. XXX Add machine specific object file types.
-#: src/nm.c:1572
+#: src/nm.c:1567
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: ä¸å½“ãªæ“作"
-#: src/nm.c:1622
+#: src/nm.c:1617
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: シンボルãŒã‚ã‚Šã¾ã›ã‚“"
#: src/objdump.c:52
msgid "Mode selection:"
-msgstr ""
+msgstr "モードé¸æŠžï¼š"
#: src/objdump.c:53
msgid "Display relocation information."
-msgstr ""
+msgstr "リロケーション 情報㮠表示"
#: src/objdump.c:55
msgid "Display the full contents of all sections requested"
-msgstr ""
+msgstr "è¦æ±‚ã•ã‚ŒãŸ å…¨ã¦ã® セクション㮠最大é™ã® 内容を 表示"
#: src/objdump.c:57
msgid "Display assembler code of executable sections"
-msgstr ""
+msgstr "実行å¯èƒ½ セクション㮠アセンブラコードを 表示"
#: src/objdump.c:59
-#, fuzzy
msgid "Output content selection:"
-msgstr "出力é¸æŠž:"
+msgstr "出力内容é¸æŠž:"
#: src/objdump.c:61
msgid "Only display information for section NAME."
-msgstr ""
+msgstr "NAME セクションã®æƒ…å ±ã®ã¿ã‚’表示"
#. Short description of program.
#: src/objdump.c:67
msgid "Show information from FILEs (a.out by default)."
-msgstr ""
+msgstr "FILE ã‹ã‚‰æƒ…報を表示ã™ã‚‹ (デフォルトã§ã¯ a.out)"
#: src/objdump.c:218 src/readelf.c:582
msgid "No operation specified.\n"
@@ -3935,11 +3900,11 @@ msgstr "æ“作ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。\n"
msgid "while close `%s'"
msgstr ""
-#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296
+#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303
msgid "INVALID SYMBOL"
msgstr "ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«"
-#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332
+#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339
msgid "INVALID SECTION"
msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³"
@@ -3961,19 +3926,17 @@ msgid "Contents of section %s:\n"
msgstr ""
#: src/objdump.c:687
-#, c-format
msgid "cannot disassemble"
-msgstr ""
+msgstr "逆アセンブルã§ãã¾ã›ã‚“"
-#: src/objdump.c:760
-#, fuzzy, c-format
+#: src/objdump.c:758
msgid "cannot create backend for elf file"
-msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“"
+msgstr "elf ファイル用ã«ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’作æˆã§ãã¾ã›ã‚“"
#. Short description of program.
#: src/ranlib.c:63
msgid "Generate an index to speed access to archives."
-msgstr ""
+msgstr "アーカイブã¸ã®ã‚¢ã‚¯ã‚»ã‚¹åŠ é€Ÿã®ãŸã‚ã®ç´¢å¼•ç”Ÿæˆ"
#. Strings for arguments in help texts.
#: src/ranlib.c:66
@@ -3983,12 +3946,12 @@ msgstr ""
#: src/ranlib.c:102
#, c-format
msgid "Archive name required"
-msgstr ""
+msgstr "アーカイブåãŒå¿…è¦ã§ã™"
#: src/ranlib.c:166
#, c-format
msgid "'%s' is no archive"
-msgstr ""
+msgstr "'%s' ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
#: src/ranlib.c:201
#, c-format
@@ -3996,14 +3959,14 @@ msgid "error while freeing sub-ELF descriptor: %s"
msgstr ""
#: src/readelf.c:97
-#, fuzzy
msgid "ELF input selection:"
-msgstr "出力é¸æŠž:"
+msgstr "ELF入力é¸æŠžï¼š"
#: src/readelf.c:99
msgid ""
"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data"
msgstr ""
+"ELF 入力データã¨ã—㦠SECTION (デフォルトã§ã¯ .gnu_debugdata) を使用ã™ã‚‹"
#: src/readelf.c:102
msgid ""
@@ -4012,9 +3975,8 @@ msgid ""
msgstr ""
#: src/readelf.c:104
-#, fuzzy
msgid "ELF output selection:"
-msgstr "出力é¸æŠž:"
+msgstr "ELF出力é¸æŠžï¼š"
#: src/readelf.c:106
msgid "All these plus -p .strtab -p .dynstr -p .comment"
@@ -4030,7 +3992,7 @@ msgstr "ELF ファイルヘッダーを表示"
#: src/readelf.c:110
msgid "Display histogram of bucket list lengths"
-msgstr "ãƒã‚±ãƒƒãƒˆãƒªã‚¹ãƒˆé•·ã®æŸ±çŠ¶å›³ã‚’表示"
+msgstr "ãƒã‚±ãƒƒãƒˆãƒªã‚¹ãƒˆé•·ã®ãƒ’ストグラムを表示"
#: src/readelf.c:111
msgid "Display the program headers"
@@ -4041,47 +4003,40 @@ msgid "Display relocations"
msgstr "リロケーションを表示"
#: src/readelf.c:114
-#, fuzzy
msgid "Display the section groups"
-msgstr "セクションã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’表示"
+msgstr "セクショングループを表示"
#: src/readelf.c:115
-#, fuzzy
msgid "Display the sections' headers"
-msgstr "セクションã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’表示"
+msgstr "セクションヘッダーを表示"
#: src/readelf.c:118
-#, fuzzy
msgid "Display the symbol table sections"
-msgstr "シンボルテーブルを表示"
+msgstr "シンボルテーブルセクションを表示"
#: src/readelf.c:120
-#, fuzzy
msgid "Display (only) the dynamic symbol table"
-msgstr "外部シンボルã®ã¿ã‚’表示"
+msgstr "動的シンボルテーブル(ã®ã¿ï¼‰ã‚’表示"
#: src/readelf.c:121
msgid "Display versioning information"
-msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°æƒ…å ±ã®è¡¨ç¤º"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°æƒ…報を表示"
#: src/readelf.c:122
-#, fuzzy
msgid "Display the ELF notes"
-msgstr "コアノートを表示"
+msgstr "ELF notes を表示"
#: src/readelf.c:124
-#, fuzzy
msgid "Display architecture specific information, if any"
msgstr "(ã‚‚ã—ã‚ã‚Œã°)アーキテクãƒãƒ£ãƒ¼å›ºæœ‰ã®æƒ…報を表示"
#: src/readelf.c:126
msgid "Display sections for exception handling"
-msgstr "例外をå–り扱ã†ãŸã‚ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’表示"
+msgstr "例外ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’表示"
#: src/readelf.c:128
-#, fuzzy
msgid "Additional output selection:"
-msgstr "出力é¸æŠž:"
+msgstr "追加ã®å‡ºåŠ›é¸æŠžï¼š"
#: src/readelf.c:130
#, fuzzy
@@ -4095,11 +4050,11 @@ msgstr ""
#: src/readelf.c:134
msgid "Dump the uninterpreted contents of SECTION, by number or name"
-msgstr "æ•°å­—ã‹åå‰ã§è§£é‡ˆã§ããªã„セクションã®å†…容をダンプã™ã‚‹"
+msgstr "SECTION 㮠未解釈㮠内容を ダンプã™ã‚‹ã€‚ ç•ªå· ã¾ãŸã¯ åå‰ã§æŒ‡å®šã™ã‚‹"
#: src/readelf.c:136
msgid "Print string contents of sections"
-msgstr "セクションã®æ–‡å­—列内容をå°åˆ·ã™ã‚‹"
+msgstr "セクションã®æ–‡å­—列内容を表示"
#: src/readelf.c:139
msgid "Display the symbol index of an archive"
@@ -4107,7 +4062,7 @@ msgstr "アーカイブã®ã‚·ãƒ³ãƒœãƒ«ç´¢å¼•ã‚’表示"
#: src/readelf.c:141
msgid "Output control:"
-msgstr "出力制御:"
+msgstr "出力制御:"
#: src/readelf.c:143
msgid "Do not find symbol names for addresses in DWARF data"
@@ -4132,7 +4087,7 @@ msgstr ""
#. Short description of program.
#: src/readelf.c:154
msgid "Print information from ELF file in human-readable form."
-msgstr "ELF ファイルã‹ã‚‰äººé–“ãŒèª­ã‚ã‚‹å½¢ã§æƒ…報をå°åˆ·ã™ã‚‹ã€‚"
+msgstr "ELF ファイルã‹ã‚‰äººé–“ãŒèª­ã‚ã‚‹å½¢ã§æƒ…報を表示ã™ã‚‹ã€‚"
#. Look up once.
#: src/readelf.c:350
@@ -4153,45 +4108,45 @@ msgstr "ä¸æ˜Žãª DWARF デãƒãƒƒã‚°ã‚»ã‚¯ã‚·ãƒ§ãƒ³ `%s'.\n"
msgid "cannot generate Elf descriptor: %s"
msgstr "Elf 記述å­ã‚’生æˆã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179
+#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181
#, c-format
msgid "cannot determine number of sections: %s"
msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475
+#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469
#, c-format
msgid "cannot get section: %s"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "セクションをå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764
-#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610
-#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222
-#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470
+#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827
+#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611
+#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223
+#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471
#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056
#, c-format
msgid "cannot get section header: %s"
-msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/readelf.c:663
-#, fuzzy, c-format
+#, c-format
msgid "cannot get section name"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "セクションåã‚’å–å¾—ã§ãã¾ã›ã‚“"
-#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713
-#: src/readelf.c:10891
+#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782
+#: src/readelf.c:10960
#, c-format
msgid "cannot get %s content: %s"
-msgstr "%s ã®å†…容を得られã¾ã›ã‚“: %s"
+msgstr "%s ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/readelf.c:688
-#, fuzzy, c-format
+#, c-format
msgid "cannot create temp file '%s'"
-msgstr "æ–°ã—ã„ファイル '%s' を生æˆã§ãã¾ã›ã‚“: %s"
+msgstr "一時ファイル '%s' を作æˆã§ãã¾ã›ã‚“"
#: src/readelf.c:697
-#, fuzzy, c-format
+#, c-format
msgid "cannot write section data"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "セクションデータを書ãè¾¼ã¿ã§ãã¾ã›ã‚“"
#: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749
#, c-format
@@ -4199,14 +4154,14 @@ msgid "error while closing Elf descriptor: %s"
msgstr "Elf 記述å­ã‚’é–‰ã˜ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s"
#: src/readelf.c:710
-#, fuzzy, c-format
+#, c-format
msgid "error while rewinding file descriptor"
-msgstr "Elf 記述å­ã‚’é–‰ã˜ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s"
+msgstr "ファイル記述å­ã‚’å·»ã戻ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼"
#: src/readelf.c:744
#, c-format
msgid "'%s' is not an archive, cannot print archive index"
-msgstr "'%s' ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ãªãã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–索引をå°åˆ·ã§ãã¾ã›ã‚“"
+msgstr "'%s' ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ãªãã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–索引を表示ã§ãã¾ã›ã‚“"
#: src/readelf.c:848
#, c-format
@@ -4231,55 +4186,55 @@ msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s"
#: src/readelf.c:940
#, c-format
msgid "cannot read ELF header: %s"
-msgstr "ELF ヘッダーãŒèª­ã‚ã¾ã›ã‚“: %s"
+msgstr "ELF ヘッダーを読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
#: src/readelf.c:948
#, c-format
msgid "cannot create EBL handle"
-msgstr "EBL ヘッダーを生æˆã§ãã¾ã›ã‚“"
+msgstr "EBL ãƒãƒ³ãƒ‰ãƒ«ã‚’作æˆã§ãã¾ã›ã‚“"
-#: src/readelf.c:961
-#, fuzzy, c-format
+#: src/readelf.c:959
+#, c-format
msgid "cannot determine number of program headers: %s"
-msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
+msgstr "プログラムヘッダã®æ•°ã‚’決定ã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:993
-#, fuzzy, c-format
+#: src/readelf.c:991
+#, c-format
msgid "cannot read ELF: %s"
-msgstr "%s を読ã¿ã¾ã›ã‚“: %s"
+msgstr "ELFを読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: src/readelf.c:1054
+#: src/readelf.c:1052
msgid "NONE (None)"
msgstr "ãªã— (ãªã—)"
-#: src/readelf.c:1055
+#: src/readelf.c:1053
msgid "REL (Relocatable file)"
msgstr "REL (リロケータブルファイル)"
-#: src/readelf.c:1056
+#: src/readelf.c:1054
msgid "EXEC (Executable file)"
msgstr "(EXEC (実行ファイル)"
-#: src/readelf.c:1057
+#: src/readelf.c:1055
msgid "DYN (Shared object file)"
msgstr "DYN (共用オブジェクトファイル)"
-#: src/readelf.c:1058
+#: src/readelf.c:1056
msgid "CORE (Core file)"
msgstr "CORE (コアファイル)"
-#: src/readelf.c:1063
+#: src/readelf.c:1061
#, c-format
msgid "OS Specific: (%x)\n"
msgstr "OS 固有: (%x)\n"
#. && e_type <= ET_HIPROC always true
-#: src/readelf.c:1065
+#: src/readelf.c:1063
#, c-format
msgid "Processor Specific: (%x)\n"
msgstr "プロセッサー固有: (%x)\n"
-#: src/readelf.c:1075
+#: src/readelf.c:1073
msgid ""
"ELF Header:\n"
" Magic: "
@@ -4287,7 +4242,7 @@ msgstr ""
"ELF ヘッダー:\n"
" マジック: "
-#: src/readelf.c:1079
+#: src/readelf.c:1077
#, c-format
msgid ""
"\n"
@@ -4296,123 +4251,123 @@ msgstr ""
"\n"
" クラス: %s\n"
-#: src/readelf.c:1084
+#: src/readelf.c:1082
#, c-format
msgid " Data: %s\n"
msgstr " データ: %s\n"
-#: src/readelf.c:1090
+#: src/readelf.c:1088
#, c-format
msgid " Ident Version: %hhd %s\n"
msgstr " 識別ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hhd %s\n"
-#: src/readelf.c:1092 src/readelf.c:1114
+#: src/readelf.c:1090 src/readelf.c:1112
msgid "(current)"
msgstr "(ç¾åœ¨)"
-#: src/readelf.c:1096
+#: src/readelf.c:1094
#, c-format
msgid " OS/ABI: %s\n"
msgstr " OS/ABI: %s\n"
-#: src/readelf.c:1099
+#: src/readelf.c:1097
#, c-format
msgid " ABI Version: %hhd\n"
msgstr " ABI ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hhd\n"
-#: src/readelf.c:1102
+#: src/readelf.c:1100
msgid " Type: "
msgstr " タイプ: "
-#: src/readelf.c:1107
+#: src/readelf.c:1105
#, c-format
msgid " Machine: %s\n"
msgstr " マシン : %s\n"
-#: src/readelf.c:1109
+#: src/readelf.c:1107
#, fuzzy, c-format
msgid " Machine: <unknown>: 0x%x\n"
msgstr " マシン : %s\n"
-#: src/readelf.c:1112
+#: src/readelf.c:1110
#, c-format
msgid " Version: %d %s\n"
msgstr " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %d %s\n"
-#: src/readelf.c:1116
+#: src/readelf.c:1114
#, c-format
msgid " Entry point address: %#<PRIx64>\n"
msgstr " å…¥å£ç‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹ : %#<PRIx64>\n"
-#: src/readelf.c:1119
+#: src/readelf.c:1117
#, c-format
msgid " Start of program headers: %<PRId64> %s\n"
msgstr " プログラムヘッダーã®é–‹å§‹: %<PRId64> %s\n"
-#: src/readelf.c:1120 src/readelf.c:1123
+#: src/readelf.c:1118 src/readelf.c:1121
msgid "(bytes into file)"
msgstr "(ファイルã¸ã®ãƒã‚¤ãƒˆæ•°)"
-#: src/readelf.c:1122
+#: src/readelf.c:1120
#, c-format
msgid " Start of section headers: %<PRId64> %s\n"
msgstr " セクションヘッダーã®é–‹å§‹: %<PRId64> %s\n"
-#: src/readelf.c:1125
+#: src/readelf.c:1123
#, c-format
msgid " Flags: %s\n"
msgstr " フラグ: %s\n"
-#: src/readelf.c:1128
+#: src/readelf.c:1126
#, c-format
msgid " Size of this header: %<PRId16> %s\n"
msgstr " ã“ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã®å¤§ãã•: %<PRId16> %s\n"
-#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149
+#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147
msgid "(bytes)"
msgstr "(ãƒã‚¤ãƒˆ)"
-#: src/readelf.c:1131
+#: src/readelf.c:1129
#, c-format
msgid " Size of program header entries: %<PRId16> %s\n"
msgstr " プログラムヘッダー項目ã®å¤§ãã•:%<PRId16> %s\n"
-#: src/readelf.c:1134
+#: src/readelf.c:1132
#, fuzzy, c-format
msgid " Number of program headers entries: %<PRId16>"
msgstr " プログラムヘッダー項目ã®æ•° : %<PRId16>\n"
-#: src/readelf.c:1141
+#: src/readelf.c:1139
#, fuzzy, c-format
msgid " (%<PRIu32> in [0].sh_info)"
msgstr "([0].sh_link ã® %<PRIu32>)"
-#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175
+#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173
msgid " ([0] not available)"
msgstr "([0]ã¯ä½¿ãˆã¾ã›ã‚“)"
-#: src/readelf.c:1148
+#: src/readelf.c:1146
#, c-format
msgid " Size of section header entries: %<PRId16> %s\n"
msgstr " セクションヘッダー項目ã®å¤§ãã•:%<PRId16> %s\n"
-#: src/readelf.c:1151
+#: src/readelf.c:1149
#, c-format
msgid " Number of section headers entries: %<PRId16>"
msgstr " セクションヘッダー項目ã®æ•° : %<PRId16>"
-#: src/readelf.c:1158
+#: src/readelf.c:1156
#, c-format
msgid " (%<PRIu32> in [0].sh_size)"
msgstr " ([0].sh_size ã® %<PRIu32>)"
#. We managed to get the zeroth section.
-#: src/readelf.c:1171
+#: src/readelf.c:1169
#, c-format
msgid " (%<PRIu32> in [0].sh_link)"
msgstr "([0].sh_link ã® %<PRIu32>)"
-#: src/readelf.c:1179
+#: src/readelf.c:1177
#, c-format
msgid ""
" Section header string table index: XINDEX%s\n"
@@ -4421,7 +4376,7 @@ msgstr ""
" セクションヘッダー文字列テーブル索引: XINDEX%s\n"
"\n"
-#: src/readelf.c:1183
+#: src/readelf.c:1181
#, c-format
msgid ""
" Section header string table index: %<PRId16>\n"
@@ -4430,12 +4385,12 @@ msgstr ""
" セクションヘッダー文字列テーブル索引: %<PRId16>\n"
"\n"
-#: src/readelf.c:1230 src/readelf.c:1440
+#: src/readelf.c:1227 src/readelf.c:1435
#, fuzzy, c-format
msgid "cannot get number of sections: %s"
msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:1233
+#: src/readelf.c:1230
#, fuzzy, c-format
msgid ""
"There are %zd section headers, starting at offset %#<PRIx64>:\n"
@@ -4444,16 +4399,16 @@ msgstr ""
"オフセット %2$#<PRIx64> ã‹ã‚‰å§‹ã¾ã‚‹ %1$d 個ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼ãŒã‚ã‚Šã¾ã™:\n"
"\n"
-#: src/readelf.c:1242
+#: src/readelf.c:1238
#, fuzzy, c-format
msgid "cannot get section header string table index: %s"
msgstr "セクションヘッダー文字列テーブル索引ãŒå¾—られã¾ã›ã‚“"
-#: src/readelf.c:1245
+#: src/readelf.c:1241
msgid "Section Headers:"
msgstr "セクションヘッダー:"
-#: src/readelf.c:1248
+#: src/readelf.c:1244
msgid ""
"[Nr] Name Type Addr Off Size ES Flags Lk "
"Inf Al"
@@ -4461,7 +4416,7 @@ msgstr ""
"[番] åå‰ ã‚¿ã‚¤ãƒ— アドレス オフセ 大ãã• ES フラグLk "
"Inf Al"
-#: src/readelf.c:1250
+#: src/readelf.c:1246
msgid ""
"[Nr] Name Type Addr Off Size ES "
"Flags Lk Inf Al"
@@ -4469,35 +4424,35 @@ msgstr ""
"[番] åå‰ ã‚¿ã‚¤ãƒ— アドレス オフセ 大ãã• ES "
"フラグLk Inf Al"
-#: src/readelf.c:1255
+#: src/readelf.c:1251
msgid " [Compression Size Al]"
msgstr ""
-#: src/readelf.c:1257
+#: src/readelf.c:1253
msgid " [Compression Size Al]"
msgstr ""
-#: src/readelf.c:1335
+#: src/readelf.c:1331
#, fuzzy, c-format
msgid "bad compression header for section %zd: %s"
msgstr "セクションヘッダー文字列セクションを生æˆã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:1346
+#: src/readelf.c:1342
#, fuzzy, c-format
msgid "bad gnu compressed size for section %zd: %s"
msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s"
-#: src/readelf.c:1364
+#: src/readelf.c:1360
msgid "Program Headers:"
msgstr "プログラムヘッダー:"
-#: src/readelf.c:1366
+#: src/readelf.c:1362
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
msgstr ""
" タイプ オフセ 仮アドレス 物アドレス ãƒ•ã‚¡ã‚¤é‡ ãƒ¡ãƒ¢é‡ Flg 調整 "
-#: src/readelf.c:1369
+#: src/readelf.c:1365
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align"
@@ -4505,12 +4460,12 @@ msgstr ""
" タイプ オフセ 仮想アドレス 物ç†ã‚¢ãƒ‰ãƒ¬ã‚¹ ファイルé‡ãƒ¡ãƒ¢"
"é‡ Flg 調整 "
-#: src/readelf.c:1426
+#: src/readelf.c:1422
#, c-format
msgid "\t[Requesting program interpreter: %s]\n"
msgstr "\t[プログラム割込ã¿ã‚’è¦æ±‚: %s]\n"
-#: src/readelf.c:1453
+#: src/readelf.c:1447
msgid ""
"\n"
" Section to Segment mapping:\n"
@@ -4520,12 +4475,12 @@ msgstr ""
" セクションã‹ã‚‰ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã¸ã®ãƒžãƒƒãƒ“ング:\n"
" セグメント セクション..."
-#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
+#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
#, c-format
msgid "cannot get program header: %s"
msgstr "プログラムヘッダーを得られã¾ã›ã‚“: %s"
-#: src/readelf.c:1610
+#: src/readelf.c:1602
#, c-format
msgid ""
"\n"
@@ -4538,7 +4493,7 @@ msgstr[0] ""
"ç½²å '%3$s' ã‚’æŒã¤ COMDAT セクショングループ [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®"
"é …ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:1615
+#: src/readelf.c:1607
#, c-format
msgid ""
"\n"
@@ -4551,31 +4506,31 @@ msgstr[0] ""
"ç½²å '%3$s' ã‚’æŒã¤ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ— [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …ç›®ãŒã‚"
"ã‚Šã¾ã™:\n"
-#: src/readelf.c:1623
+#: src/readelf.c:1615
msgid "<INVALID SYMBOL>"
msgstr "<ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«>"
-#: src/readelf.c:1637
+#: src/readelf.c:1629
msgid "<INVALID SECTION>"
msgstr "<ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³>"
-#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635
-#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693
+#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699
+#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757
msgid "Couldn't uncompress section"
msgstr ""
-#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501
+#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500
#, fuzzy, c-format
msgid "cannot get section [%zd] header: %s"
msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s"
-#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801
-#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409
+#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805
+#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406
#, fuzzy, c-format
msgid "invalid sh_link value in section %zu"
msgstr "ä¸å½“㪠.debug_line セクション"
-#: src/readelf.c:1812
+#: src/readelf.c:1821
#, c-format
msgid ""
"\n"
@@ -4591,36 +4546,36 @@ msgstr[0] ""
" アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: "
"[%2u] '%s'\n"
-#: src/readelf.c:1822
+#: src/readelf.c:1831
msgid " Type Value\n"
msgstr " タイプ 値\n"
-#: src/readelf.c:1846
+#: src/readelf.c:1855
#, c-format
msgid "Shared library: [%s]\n"
msgstr "共用ライブラリー: [%s]\n"
-#: src/readelf.c:1851
+#: src/readelf.c:1860
#, c-format
msgid "Library soname: [%s]\n"
msgstr "ライブラリー so å: [%s]\n"
-#: src/readelf.c:1856
+#: src/readelf.c:1865
#, c-format
msgid "Library rpath: [%s]\n"
msgstr "ライブラリー rパス: [%s]\n"
-#: src/readelf.c:1861
+#: src/readelf.c:1870
#, c-format
msgid "Library runpath: [%s]\n"
msgstr "ライブラリー run パス: [%s]\n"
-#: src/readelf.c:1881
+#: src/readelf.c:1890
#, c-format
msgid "%<PRId64> (bytes)\n"
msgstr "%<PRId64> (ãƒã‚¤ãƒˆ)\n"
-#: src/readelf.c:1994 src/readelf.c:2184
+#: src/readelf.c:2003 src/readelf.c:2192
#, c-format
msgid ""
"\n"
@@ -4629,7 +4584,7 @@ msgstr ""
"\n"
"オフセット %#0<PRIx64> ã«ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ル\n"
-#: src/readelf.c:2012 src/readelf.c:2202
+#: src/readelf.c:2020 src/readelf.c:2209
#, c-format
msgid ""
"\n"
@@ -4650,7 +4605,7 @@ msgstr[0] ""
#. The .rela.dyn section does not refer to a specific section but
#. instead of section index zero. Do not try to print a section
#. name.
-#: src/readelf.c:2027 src/readelf.c:2217
+#: src/readelf.c:2035 src/readelf.c:2224
#, c-format
msgid ""
"\n"
@@ -4663,29 +4618,29 @@ msgstr[0] ""
"オフセット %3$#0<PRIx64> ã®ãƒªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$2u] '%2$s' ã«ã¯ %4$d "
"個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:2037
+#: src/readelf.c:2045
msgid " Offset Type Value Name\n"
msgstr " オフセット タイプ 値 åå‰\n"
-#: src/readelf.c:2039
+#: src/readelf.c:2047
msgid " Offset Type Value Name\n"
msgstr " オフセット タイプ 値 åå‰\n"
-#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137
-#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309
-#: src/readelf.c:2331 src/readelf.c:2344
+#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145
+#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316
+#: src/readelf.c:2338 src/readelf.c:2351
msgid "<INVALID RELOC>"
msgstr "<ä¸å½“ãªRELOC>"
-#: src/readelf.c:2227
+#: src/readelf.c:2234
msgid " Offset Type Value Addend Name\n"
msgstr " オフセット タイプ 値 付加å\n"
-#: src/readelf.c:2229
+#: src/readelf.c:2236
msgid " Offset Type Value Addend Name\n"
msgstr " オフセット タイプ 値 付加å\n"
-#: src/readelf.c:2467
+#: src/readelf.c:2473
#, c-format
msgid ""
"\n"
@@ -4697,39 +4652,39 @@ msgstr[0] ""
"\n"
"シンボルテーブル [%2u] '%s' ã«ã¯ %u 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:2472
+#: src/readelf.c:2478
#, c-format
msgid " %lu local symbol String table: [%2u] '%s'\n"
msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
msgstr[0] " %lu ローカルシンボル文字列テーブル: [%2u] '%s'\n"
-#: src/readelf.c:2480
+#: src/readelf.c:2486
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " æ•° : 値 大ã タイプ Bind Vis Ndx åå‰\n"
-#: src/readelf.c:2482
+#: src/readelf.c:2488
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " æ•° : 値 大ã タイプ Bind Vis Ndx åå‰\n"
-#: src/readelf.c:2502
+#: src/readelf.c:2508
#, c-format
msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
-#: src/readelf.c:2595
+#: src/readelf.c:2601
#, c-format
msgid "bad dynamic symbol"
msgstr "ä¸æ­£ãªå‹•çš„シンボル"
-#: src/readelf.c:2680
+#: src/readelf.c:2686
msgid "none"
msgstr "ãªã—"
-#: src/readelf.c:2697
+#: src/readelf.c:2703
msgid "| <unknown>"
msgstr "| <ä¸æ˜Ž>"
-#: src/readelf.c:2728
+#: src/readelf.c:2733
#, c-format
msgid ""
"\n"
@@ -4745,17 +4700,17 @@ msgstr[0] ""
" アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: "
"[%2u] '%s'\n"
-#: src/readelf.c:2749
+#: src/readelf.c:2754
#, c-format
msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
msgstr " %#06x: ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hu ファイル: %s æ•°: %hu\n"
-#: src/readelf.c:2762
+#: src/readelf.c:2767
#, c-format
msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
msgstr " %#06x: åå‰: %s フラグ: %s ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hu\n"
-#: src/readelf.c:2805
+#: src/readelf.c:2809
#, c-format
msgid ""
"\n"
@@ -4771,18 +4726,18 @@ msgstr[0] ""
" アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: "
"[%2u] '%s'\n"
-#: src/readelf.c:2833
+#: src/readelf.c:2837
#, c-format
msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
msgstr " %#06x: ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hd フラグ: %s 索引: %hd æ•°: %hd åå‰: %s\n"
-#: src/readelf.c:2848
+#: src/readelf.c:2852
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr " %#06x: 親 %d: %s\n"
#. Print the header.
-#: src/readelf.c:3109
+#: src/readelf.c:3112
#, c-format
msgid ""
"\n"
@@ -4798,15 +4753,15 @@ msgstr[0] ""
" アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: "
"[%2u] '%s'"
-#: src/readelf.c:3137
+#: src/readelf.c:3140
msgid " 0 *local* "
msgstr " 0 *ローカル* "
-#: src/readelf.c:3142
+#: src/readelf.c:3145
msgid " 1 *global* "
msgstr " 1 *グローãƒãƒ«* "
-#: src/readelf.c:3184
+#: src/readelf.c:3187
#, c-format
msgid ""
"\n"
@@ -4824,22 +4779,22 @@ msgstr[0] ""
" アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: "
"[%2u] '%s'\n"
-#: src/readelf.c:3206
+#: src/readelf.c:3209
#, fuzzy, no-c-format
msgid " Length Number % of total Coverage\n"
msgstr " é•·ã• æ•° 全体ã®% 範囲 \n"
-#: src/readelf.c:3208
+#: src/readelf.c:3211
#, c-format
msgid " 0 %6<PRIu32> %5.1f%%\n"
msgstr " 0 %6<PRIu32> %5.1f%%\n"
-#: src/readelf.c:3215
+#: src/readelf.c:3218
#, c-format
msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
-#: src/readelf.c:3228
+#: src/readelf.c:3231
#, fuzzy, c-format
msgid ""
" Average number of tests: successful lookup: %f\n"
@@ -4848,37 +4803,37 @@ msgstr ""
" テストã®å¹³å‡æ•°: 検索æˆåŠŸ: %f\n"
" 検索失敗: %f\n"
-#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376
+#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379
#, c-format
msgid "cannot get data for section %d: %s"
msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s"
-#: src/readelf.c:3254
+#: src/readelf.c:3257
#, fuzzy, c-format
msgid "invalid data in sysv.hash section %d"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:3283
+#: src/readelf.c:3286
#, fuzzy, c-format
msgid "invalid chain in sysv.hash section %d"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:3318
+#: src/readelf.c:3321
#, fuzzy, c-format
msgid "invalid data in sysv.hash64 section %d"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:3349
+#: src/readelf.c:3352
#, fuzzy, c-format
msgid "invalid chain in sysv.hash64 section %d"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:3385
+#: src/readelf.c:3388
#, fuzzy, c-format
msgid "invalid data in gnu.hash section %d"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:3452
+#: src/readelf.c:3454
#, c-format
msgid ""
" Symbol Bias: %u\n"
@@ -4888,7 +4843,7 @@ msgstr ""
" ビットマスクã®å¤§ãã•: %zu ãƒã‚¤ãƒˆ %<PRIuFAST32>%% ビット設定 第2ãƒãƒƒã‚·ãƒ¥ã‚·ãƒ•"
"ト: %u\n"
-#: src/readelf.c:3541
+#: src/readelf.c:3539
#, c-format
msgid ""
"\n"
@@ -4901,7 +4856,7 @@ msgstr[0] ""
"オフセット %3$#0<PRIx64> ã®ãƒ©ã‚¤ãƒ–ラリー一覧セクション [%1$2zu] '%2$s' ã«ã¯ "
"%4$d 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:3555
+#: src/readelf.c:3553
msgid ""
" Library Time Stamp Checksum Version "
"Flags"
@@ -4909,7 +4864,7 @@ msgstr ""
" ライブラリー タイムスタンプ ãƒã‚§ãƒƒã‚¯ã‚µãƒ  ãƒãƒ¼"
"ジョン フラグ"
-#: src/readelf.c:3614
+#: src/readelf.c:3611
#, c-format
msgid ""
"\n"
@@ -4920,102 +4875,101 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ã‚ªãƒ–ジェクト属性セクション "
"[%1$2zu] '%2$s':\n"
-#: src/readelf.c:3631
+#: src/readelf.c:3628
msgid " Owner Size\n"
msgstr " 所有者 大ãã•\n"
-#: src/readelf.c:3655
+#: src/readelf.c:3652
#, c-format
msgid " %-13s %4<PRIu32>\n"
msgstr " %-13s %4<PRIu32>\n"
#. Unknown subsection, print and skip.
-#: src/readelf.c:3694
+#: src/readelf.c:3691
#, c-format
msgid " %-4u %12<PRIu32>\n"
msgstr " %-4u %12<PRIu32>\n"
#. Tag_File
-#: src/readelf.c:3699
+#: src/readelf.c:3696
#, c-format
msgid " File: %11<PRIu32>\n"
msgstr " ファイル: %11<PRIu32>\n"
-#: src/readelf.c:3748
+#: src/readelf.c:3745
#, c-format
msgid " %s: %<PRId64>, %s\n"
msgstr " %s: %<PRId64>ã€%s\n"
-#: src/readelf.c:3751
+#: src/readelf.c:3748
#, c-format
msgid " %s: %<PRId64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:3754
+#: src/readelf.c:3751
#, c-format
msgid " %s: %s\n"
msgstr " %s: %s\n"
-#: src/readelf.c:3764
+#: src/readelf.c:3761
#, c-format
msgid " %u: %<PRId64>\n"
msgstr " %u: %<PRId64>\n"
-#: src/readelf.c:3767
+#: src/readelf.c:3764
#, c-format
msgid " %u: %s\n"
msgstr " %u: %s\n"
-#: src/readelf.c:3837
-#, c-format
+#: src/readelf.c:3834
msgid "sprintf failure"
msgstr ""
-#: src/readelf.c:4319
+#: src/readelf.c:4316
msgid "empty block"
msgstr "空ブロック"
-#: src/readelf.c:4322
+#: src/readelf.c:4319
#, c-format
msgid "%zu byte block:"
msgstr "%zu ãƒã‚¤ãƒˆã®ãƒ–ロック:"
-#: src/readelf.c:4800
+#: src/readelf.c:4797
#, fuzzy, c-format
msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n"
msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n"
-#: src/readelf.c:4867
+#: src/readelf.c:4864
#, c-format
msgid "%s %#<PRIx64> used with different address sizes"
msgstr ""
-#: src/readelf.c:4874
+#: src/readelf.c:4871
#, c-format
msgid "%s %#<PRIx64> used with different offset sizes"
msgstr ""
-#: src/readelf.c:4881
+#: src/readelf.c:4878
#, c-format
msgid "%s %#<PRIx64> used with different base addresses"
msgstr ""
-#: src/readelf.c:4888
+#: src/readelf.c:4885
#, c-format
msgid "%s %#<PRIx64> used with different attribute %s and %s"
msgstr ""
-#: src/readelf.c:4988
+#: src/readelf.c:4985
#, c-format
msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n"
msgstr ""
-#: src/readelf.c:4996
+#: src/readelf.c:4993
#, c-format
msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n"
msgstr ""
-#: src/readelf.c:5099
+#: src/readelf.c:5096
#, c-format
msgid ""
"\n"
@@ -5026,7 +4980,7 @@ msgstr ""
"オフセット %3$#<PRIx64> 㮠DWARF セクション [%1$2zu] '%2$s':\n"
" [ コード]\n"
-#: src/readelf.c:5107
+#: src/readelf.c:5104
#, c-format
msgid ""
"\n"
@@ -5035,20 +4989,20 @@ msgstr ""
"\n"
"オフセット %<PRIu64> ã®ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³:\n"
-#: src/readelf.c:5120
+#: src/readelf.c:5117
#, c-format
msgid " *** error while reading abbreviation: %s\n"
msgstr " *** 略語を読んã§ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s\n"
-#: src/readelf.c:5136
+#: src/readelf.c:5133
#, c-format
msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
msgstr " [%5u] オフセット: %<PRId64>ã€å­: %sã€ã‚¿ã‚°: %s\n"
-#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030
-#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548
-#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352
-#: src/readelf.c:10412
+#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027
+#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617
+#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421
+#: src/readelf.c:10481
#, c-format
msgid ""
"\n"
@@ -5057,52 +5011,52 @@ msgstr ""
"\n"
"オフセット %3$#<PRIx64> 㮠DWARF セクション [%1$2zu] '%2$s':\n"
-#: src/readelf.c:5182
+#: src/readelf.c:5179
#, fuzzy, c-format
msgid "cannot get .debug_addr section data: %s"
msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
-#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120
+#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189
#, fuzzy, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133
+#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202
#, fuzzy, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142
+#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211
#, fuzzy, c-format
msgid " Address size: %8<PRIu64>\n"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152
+#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221
#, fuzzy, c-format
msgid " Segment size: %8<PRIu64>\n"
msgstr " ファイルを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544
+#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613
#, fuzzy, c-format
msgid "Unknown version"
msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³"
-#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147
+#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216
#, fuzzy, c-format
msgid "unsupported address size"
msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157
+#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226
#, c-format
msgid "unsupported segment size"
msgstr ""
-#: src/readelf.c:5399 src/readelf.c:5473
+#: src/readelf.c:5396 src/readelf.c:5470
#, c-format
msgid "cannot get .debug_aranges content: %s"
msgstr ".debug_aragnes ã®å†…容を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:5414
+#: src/readelf.c:5411
#, c-format
msgid ""
"\n"
@@ -5115,19 +5069,19 @@ msgstr[0] ""
"オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …"
"ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:5445
+#: src/readelf.c:5442
#, c-format
msgid " [%*zu] ???\n"
msgstr " [%*zu] ???\n"
-#: src/readelf.c:5447
+#: src/readelf.c:5444
#, c-format
msgid ""
" [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
msgstr ""
" [%*zu] 開始: %0#*<PRIx64>ã€é•·ã•: %5<PRIu64>ã€CU DIE オフセット: %6<PRId64>\n"
-#: src/readelf.c:5491 src/readelf.c:8413
+#: src/readelf.c:5488 src/readelf.c:8425
#, fuzzy, c-format
msgid ""
"\n"
@@ -5136,152 +5090,152 @@ msgstr ""
"\n"
"オフセット %Zu ã®ãƒ†ãƒ¼ãƒ–ル:\n"
-#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424
-#: src/readelf.c:9101
+#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436
+#: src/readelf.c:9170
#, c-format
msgid "invalid data in section [%zu] '%s'"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:5511
+#: src/readelf.c:5508
#, fuzzy, c-format
msgid ""
"\n"
" Length: %6<PRIu64>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:5523
+#: src/readelf.c:5520
#, fuzzy, c-format
msgid " DWARF version: %6<PRIuFAST16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:5527
+#: src/readelf.c:5524
#, c-format
msgid "unsupported aranges version"
msgstr ""
-#: src/readelf.c:5538
+#: src/readelf.c:5535
#, fuzzy, c-format
msgid " CU offset: %6<PRIx64>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:5544
+#: src/readelf.c:5541
#, fuzzy, c-format
msgid " Address size: %6<PRIu64>\n"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:5555
+#: src/readelf.c:5552
#, fuzzy, c-format
msgid ""
" Segment size: %6<PRIu64>\n"
"\n"
msgstr " ファイルを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:5610
+#: src/readelf.c:5607
#, c-format
msgid " %zu padding bytes\n"
msgstr ""
-#: src/readelf.c:5654
+#: src/readelf.c:5651
#, fuzzy, c-format
msgid "cannot get .debug_rnglists content: %s"
msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:5677 src/readelf.c:9107
+#: src/readelf.c:5674 src/readelf.c:9176
#, fuzzy, c-format
msgid ""
"Table at Offset 0x%<PRIx64>:\n"
"\n"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:5732 src/readelf.c:9162
+#: src/readelf.c:5729 src/readelf.c:9231
#, fuzzy, c-format
msgid " Offset entries: %8<PRIu64>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:5748 src/readelf.c:9178
+#: src/readelf.c:5745 src/readelf.c:9247
#, c-format
msgid " Unknown CU base: "
msgstr ""
-#: src/readelf.c:5750 src/readelf.c:9180
+#: src/readelf.c:5747 src/readelf.c:9249
#, c-format
msgid " CU [%6<PRIx64>] base: "
msgstr ""
-#: src/readelf.c:5756 src/readelf.c:9186
+#: src/readelf.c:5753 src/readelf.c:9255
#, c-format
msgid " Not associated with a CU.\n"
msgstr ""
-#: src/readelf.c:5767 src/readelf.c:9197
+#: src/readelf.c:5764 src/readelf.c:9266
#, c-format
msgid "too many offset entries for unit length"
msgstr ""
-#: src/readelf.c:5771 src/readelf.c:9201
+#: src/readelf.c:5768 src/readelf.c:9270
#, fuzzy, c-format
msgid " Offsets starting at 0x%<PRIx64>:\n"
msgstr " 所有者 大ãã•\n"
-#: src/readelf.c:5823
+#: src/readelf.c:5820
#, fuzzy, c-format
msgid "invalid range list data"
msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:6008 src/readelf.c:9526
+#: src/readelf.c:6005 src/readelf.c:9595
#, c-format
msgid ""
" %zu padding bytes\n"
"\n"
msgstr ""
-#: src/readelf.c:6025
+#: src/readelf.c:6022
#, c-format
msgid "cannot get .debug_ranges content: %s"
msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:6061 src/readelf.c:9581
+#: src/readelf.c:6058 src/readelf.c:9650
#, c-format
msgid ""
"\n"
" Unknown CU base: "
msgstr ""
-#: src/readelf.c:6063 src/readelf.c:9583
+#: src/readelf.c:6060 src/readelf.c:9652
#, c-format
msgid ""
"\n"
" CU [%6<PRIx64>] base: "
msgstr ""
-#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635
+#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704
#, c-format
msgid " [%6tx] <INVALID DATA>\n"
msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n"
-#: src/readelf.c:6097 src/readelf.c:9719
+#: src/readelf.c:6094 src/readelf.c:9788
#, fuzzy
msgid "base address"
msgstr "アドレスを %s ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:6107 src/readelf.c:9729
+#: src/readelf.c:6104 src/readelf.c:9798
#, fuzzy, c-format
msgid " [%6tx] empty list\n"
msgstr ""
"\n"
" [%6tx] ゼロ終端\n"
-#: src/readelf.c:6367
+#: src/readelf.c:6364
#, fuzzy
msgid " <INVALID DATA>\n"
msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n"
-#: src/readelf.c:6624
+#: src/readelf.c:6621
#, fuzzy, c-format
msgid "cannot get ELF: %s"
msgstr "次㮠DIE を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:6642
+#: src/readelf.c:6639
#, c-format
msgid ""
"\n"
@@ -5290,7 +5244,7 @@ msgstr ""
"\n"
"オフセット %3$#<PRIx64> 㮠フレーム情報呼出ã—セクション [%1$2zu] '%2$s':\n"
-#: src/readelf.c:6692
+#: src/readelf.c:6689
#, c-format
msgid ""
"\n"
@@ -5299,65 +5253,65 @@ msgstr ""
"\n"
" [%6tx] ゼロ終端\n"
-#: src/readelf.c:6793 src/readelf.c:6947
+#: src/readelf.c:6790 src/readelf.c:6944
#, fuzzy, c-format
msgid "invalid augmentation length"
msgstr "ä¸å½“ãªæ‹¡å¤§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰"
-#: src/readelf.c:6808
+#: src/readelf.c:6805
msgid "FDE address encoding: "
msgstr "FDE アドレスエンコード"
-#: src/readelf.c:6814
+#: src/readelf.c:6811
msgid "LSDA pointer encoding: "
msgstr "LSDA ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰:"
-#: src/readelf.c:6924
+#: src/readelf.c:6921
#, c-format
msgid " (offset: %#<PRIx64>)"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:6931
+#: src/readelf.c:6928
#, c-format
msgid " (end offset: %#<PRIx64>)"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:6968
+#: src/readelf.c:6965
#, c-format
msgid " %-26sLSDA pointer: %#<PRIx64>\n"
msgstr " %-26sLSDA ãƒã‚¤ãƒ³ã‚¿ãƒ¼: %#<PRIx64>\n"
-#: src/readelf.c:7053
+#: src/readelf.c:7050
#, fuzzy, c-format
msgid "DIE [%<PRIx64>] cannot get attribute code: %s"
msgstr "属性コードを得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7063
+#: src/readelf.c:7060
#, fuzzy, c-format
msgid "DIE [%<PRIx64>] cannot get attribute form: %s"
msgstr "属性様å¼ã‚’得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7085
+#: src/readelf.c:7082
#, fuzzy, c-format
msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s"
msgstr "属性値を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7415
+#: src/readelf.c:7412
#, fuzzy, c-format
msgid "invalid file (%<PRId64>): %s"
msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«"
-#: src/readelf.c:7419
+#: src/readelf.c:7416
#, fuzzy, c-format
msgid "no srcfiles for CU [%<PRIx64>]"
msgstr " ファイルを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:7423
+#: src/readelf.c:7420
#, fuzzy, c-format
msgid "couldn't get DWARF CU: %s"
msgstr "次㮠DIE を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7738
+#: src/readelf.c:7735
#, c-format
msgid ""
"\n"
@@ -5368,12 +5322,12 @@ msgstr ""
"オフセット %3$#<PRIx64> 㮠DWARF セクション [%1$2zu] '%2$s':\n"
" [オフセット]\n"
-#: src/readelf.c:7788
+#: src/readelf.c:7785
#, fuzzy, c-format
msgid "cannot get next unit: %s"
msgstr "次㮠DIE を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7808
+#: src/readelf.c:7805
#, fuzzy, c-format
msgid ""
" Type unit at offset %<PRIu64>:\n"
@@ -5385,7 +5339,7 @@ msgstr ""
" ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§"
"ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n"
-#: src/readelf.c:7820
+#: src/readelf.c:7817
#, c-format
msgid ""
" Compilation unit at offset %<PRIu64>:\n"
@@ -5396,39 +5350,39 @@ msgstr ""
" ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§"
"ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n"
-#: src/readelf.c:7830 src/readelf.c:7993
+#: src/readelf.c:7827 src/readelf.c:7988
#, c-format
msgid " Unit type: %s (%<PRIu8>)"
msgstr ""
-#: src/readelf.c:7857
+#: src/readelf.c:7854
#, c-format
msgid "unknown version (%d) or unit type (%d)"
msgstr ""
-#: src/readelf.c:7886
+#: src/readelf.c:7883
#, c-format
msgid "cannot get DIE offset: %s"
msgstr "DIE オフセットを得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7895
+#: src/readelf.c:7892
#, fuzzy, c-format
msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s"
msgstr ""
"セクション '%2$s' 中ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$<PRIu64> ã® DIE ã®ã‚¿ã‚°ã‚’得られã¾ã›ã‚“: "
"%3$s"
-#: src/readelf.c:7933
+#: src/readelf.c:7928
#, c-format
msgid "cannot get next DIE: %s\n"
msgstr "次㮠DIE を得られã¾ã›ã‚“: %s\n"
-#: src/readelf.c:7941
+#: src/readelf.c:7936
#, c-format
msgid "cannot get next DIE: %s"
msgstr "次㮠DIE を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:7985
+#: src/readelf.c:7980
#, fuzzy, c-format
msgid ""
" Split compilation unit at offset %<PRIu64>:\n"
@@ -5439,7 +5393,7 @@ msgstr ""
" ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§"
"ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n"
-#: src/readelf.c:8037
+#: src/readelf.c:8032
#, fuzzy, c-format
msgid ""
"\n"
@@ -5449,18 +5403,18 @@ msgstr ""
"\n"
"オフセット %3$#<PRIx64> 㮠DWARF セクション [%1$2zu] '%2$s':\n"
-#: src/readelf.c:8369
+#: src/readelf.c:8364
#, fuzzy, c-format
msgid "unknown form: %s"
msgstr "ä¸æ˜Žãªæ§˜å¼ %<PRIx64>"
-#: src/readelf.c:8400
+#: src/readelf.c:8412
#, c-format
msgid "cannot get line data section data: %s"
msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s"
#. Print what we got so far.
-#: src/readelf.c:8502
+#: src/readelf.c:8516
#, fuzzy, c-format
msgid ""
"\n"
@@ -5490,33 +5444,33 @@ msgstr ""
"\n"
"命令コード:\n"
-#: src/readelf.c:8524
-#, fuzzy, c-format
+#: src/readelf.c:8538
+#, c-format
msgid "cannot handle .debug_line version: %u\n"
-msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s"
+msgstr ".debug_line ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’扱ãˆã¾ã›ã‚“: %u\n"
-#: src/readelf.c:8532
-#, fuzzy, c-format
+#: src/readelf.c:8546
+#, c-format
msgid "cannot handle address size: %u\n"
-msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgstr "アドレスサイズを扱ãˆã¾ã›ã‚“: %u\n"
-#: src/readelf.c:8540
-#, fuzzy, c-format
+#: src/readelf.c:8554
+#, c-format
msgid "cannot handle segment selector size: %u\n"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "セグメントセレクタサイズを扱ãˆã¾ã›ã‚“: %u\n"
-#: src/readelf.c:8550
+#: src/readelf.c:8564
#, c-format
msgid "invalid data at offset %tu in section [%zu] '%s'"
msgstr "セクション [%2$zu] '%3$s' 中ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$tu ã«ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:8565
+#: src/readelf.c:8579
#, c-format
msgid " [%*<PRIuFAST8>] %hhu argument\n"
msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
msgstr[0] " [%*<PRIuFAST8>] %hhu パラメーター\n"
-#: src/readelf.c:8576
+#: src/readelf.c:8590
msgid ""
"\n"
"Directory table:"
@@ -5524,12 +5478,12 @@ msgstr ""
"\n"
"ディレクトリーテーブル:"
-#: src/readelf.c:8582 src/readelf.c:8659
+#: src/readelf.c:8596 src/readelf.c:8673
#, fuzzy, c-format
msgid " ["
msgstr " %s: %s\n"
-#: src/readelf.c:8653
+#: src/readelf.c:8667
#, fuzzy
msgid ""
"\n"
@@ -5538,7 +5492,7 @@ msgstr ""
"\n"
" 呼出ã—サイトテーブル:"
-#: src/readelf.c:8714
+#: src/readelf.c:8728
#, fuzzy
msgid " Entry Dir Time Size Name"
msgstr ""
@@ -5546,7 +5500,7 @@ msgstr ""
"ファイルåテーブル:\n"
" Entry Dir 時刻 大ãã• åå‰"
-#: src/readelf.c:8753
+#: src/readelf.c:8774
#, fuzzy
msgid ""
"\n"
@@ -5555,7 +5509,7 @@ msgstr ""
"\n"
"è¡Œ ç•ªå· æ–‡:"
-#: src/readelf.c:8757
+#: src/readelf.c:8778
msgid ""
"\n"
"Line number statements:"
@@ -5563,119 +5517,129 @@ msgstr ""
"\n"
"è¡Œ ç•ªå· æ–‡:"
-#: src/readelf.c:8777
+#: src/readelf.c:8793
#, c-format
msgid "invalid maximum operations per instruction is zero"
msgstr ""
-#: src/readelf.c:8811
+#: src/readelf.c:8827
#, fuzzy, c-format
msgid " special opcode %u: address+%u = "
msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n"
-#: src/readelf.c:8815
+#: src/readelf.c:8831
#, fuzzy, c-format
msgid ", op_index = %u, line%+d = %zu\n"
msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n"
-#: src/readelf.c:8818
+#: src/readelf.c:8834
#, c-format
msgid ", line%+d = %zu\n"
msgstr ""
-#: src/readelf.c:8836
+#: src/readelf.c:8852
#, c-format
msgid " extended opcode %u: "
msgstr " 拡張命令コード %u: "
-#: src/readelf.c:8841
+#: src/readelf.c:8857
#, fuzzy
msgid " end of sequence"
msgstr "列ã®çµ‚ã‚ã‚Š"
-#: src/readelf.c:8859
+#: src/readelf.c:8875
#, fuzzy, c-format
msgid " set address to "
msgstr "アドレスを %s ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:8887
+#: src/readelf.c:8903
#, fuzzy, c-format
msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
msgstr ""
"新ファイルを定義ã™ã‚‹: dir=%uã€mtime=%<PRIu64>ã€é•·ã•h=%<PRIu64>ã€åå‰=%s\n"
-#: src/readelf.c:8901
+#: src/readelf.c:8917
#, fuzzy, c-format
msgid " set discriminator to %u\n"
msgstr "カラムを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
+#: src/readelf.c:8944
+#, c-format
+msgid " set inlined context %u, function name %s (0x%x)\n"
+msgstr ""
+
+#: src/readelf.c:8968
+#, fuzzy, c-format
+#| msgid "Also show function names"
+msgid " set function name %s (0x%x)\n"
+msgstr "関数åも表示"
+
#. Unknown, ignore it.
-#: src/readelf.c:8906
-#, fuzzy
+#: src/readelf.c:8975
msgid " unknown opcode"
-msgstr "ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰"
+msgstr "ä¸æ˜Žãªã‚ªãƒšã‚³ãƒ¼ãƒ‰"
#. Takes no argument.
-#: src/readelf.c:8918
+#: src/readelf.c:8987
msgid " copy"
msgstr "複写"
-#: src/readelf.c:8929
+#: src/readelf.c:8998
#, fuzzy, c-format
msgid " advance address by %u to "
msgstr "アドレスを %u ã ã‘進ã‚㦠%s ã«ã™ã‚‹\n"
-#: src/readelf.c:8933 src/readelf.c:8994
+#: src/readelf.c:9002 src/readelf.c:9063
#, c-format
msgid ", op_index to %u"
msgstr ""
-#: src/readelf.c:8945
+#: src/readelf.c:9014
#, c-format
msgid " advance line by constant %d to %<PRId64>\n"
msgstr "行を定数 %d ã ã‘進ã‚㦠%<PRId64> ã«ã™ã‚‹\n"
-#: src/readelf.c:8955
+#: src/readelf.c:9024
#, c-format
msgid " set file to %<PRIu64>\n"
msgstr " ファイルを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:8966
+#: src/readelf.c:9035
#, c-format
msgid " set column to %<PRIu64>\n"
msgstr "カラムを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
-#: src/readelf.c:8973
+#: src/readelf.c:9042
#, c-format
msgid " set '%s' to %<PRIuFAST8>\n"
msgstr " '%s' ã‚’ %<PRIuFAST8> ã«è¨­å®šã™ã‚‹\n"
#. Takes no argument.
-#: src/readelf.c:8979
+#: src/readelf.c:9048
msgid " set basic block flag"
msgstr "基本ブロックフラグを設定ã™ã‚‹"
-#: src/readelf.c:8990
+#: src/readelf.c:9059
#, fuzzy, c-format
msgid " advance address by constant %u to "
msgstr "アドレスを定数 %u ã ã‘済ã‚㦠%s ã«ã™ã‚‹\n"
-#: src/readelf.c:9010
+#: src/readelf.c:9079
#, fuzzy, c-format
msgid " advance address by fixed value %u to \n"
msgstr "アドレスを固定値 %u ã ã‘進ã‚㦠%s ã«ã™ã‚‹\n"
#. Takes no argument.
-#: src/readelf.c:9020
+#: src/readelf.c:9089
msgid " set prologue end flag"
msgstr "プロローグ終了フラグを設定ã™ã‚‹"
#. Takes no argument.
-#: src/readelf.c:9025
+#: src/readelf.c:9094
msgid " set epilogue begin flag"
msgstr "エピローグ開始フラグを設定ã™ã‚‹"
-#: src/readelf.c:9035
+#: src/readelf.c:9104
#, fuzzy, c-format
msgid " set isa to %u\n"
msgstr " ファイルを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
@@ -5683,103 +5647,103 @@ msgstr " ファイルを %<PRIu64> ã«è¨­å®šã™ã‚‹\n"
#. This is a new opcode the generator but not we know about.
#. Read the parameters associated with it but then discard
#. everything. Read all the parameters for this opcode.
-#: src/readelf.c:9044
+#: src/readelf.c:9113
#, c-format
msgid " unknown opcode with %<PRIu8> parameter:"
msgid_plural " unknown opcode with %<PRIu8> parameters:"
msgstr[0] " %<PRIu8> 個ã®ãƒ‘ラメーターã®ã‚ã‚‹ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰:"
-#: src/readelf.c:9084
-#, fuzzy, c-format
+#: src/readelf.c:9153
+#, c-format
msgid "cannot get .debug_loclists content: %s"
-msgstr ".debug_loc ã®å†…容を得られã¾ã›ã‚“: %s"
+msgstr ".debug_loclists ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:9250
+#: src/readelf.c:9319
#, fuzzy, c-format
msgid " <INVALID DATA>\n"
msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n"
-#: src/readelf.c:9290
+#: src/readelf.c:9359
#, fuzzy, c-format
msgid "invalid loclists data"
msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/readelf.c:9543
+#: src/readelf.c:9612
#, c-format
msgid "cannot get .debug_loc content: %s"
msgstr ".debug_loc ã®å†…容を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:9756 src/readelf.c:10800
+#: src/readelf.c:9825 src/readelf.c:10869
#, fuzzy
msgid " <INVALID DATA>\n"
msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n"
-#: src/readelf.c:9811 src/readelf.c:9974
+#: src/readelf.c:9880 src/readelf.c:10043
#, c-format
msgid "cannot get macro information section data: %s"
msgstr "マクロ情報セクションã®ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“: %s"
-#: src/readelf.c:9891
+#: src/readelf.c:9960
#, c-format
msgid "%*s*** non-terminated string at end of section"
msgstr "%*s*** 最後ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®çµ‚端ã—ã¦ã„ãªã„文字列"
-#: src/readelf.c:9914
+#: src/readelf.c:9983
#, fuzzy, c-format
msgid "%*s*** missing DW_MACINFO_start_file argument at end of section"
msgstr "%*s*** 最後ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®çµ‚端ã—ã¦ã„ãªã„文字列"
-#: src/readelf.c:10015
+#: src/readelf.c:10084
#, fuzzy, c-format
msgid " Offset: 0x%<PRIx64>\n"
msgstr " 所有者 大ãã•\n"
-#: src/readelf.c:10027
+#: src/readelf.c:10096
#, fuzzy, c-format
msgid " Version: %<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10033 src/readelf.c:10920
+#: src/readelf.c:10102 src/readelf.c:10989
#, c-format
msgid " unknown version, cannot parse section\n"
msgstr ""
-#: src/readelf.c:10040
+#: src/readelf.c:10109
#, fuzzy, c-format
msgid " Flag: 0x%<PRIx8>"
msgstr " å…¥å£ç‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹ : %#<PRIx64>\n"
-#: src/readelf.c:10069
+#: src/readelf.c:10138
#, fuzzy, c-format
msgid " Offset length: %<PRIu8>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10077
+#: src/readelf.c:10146
#, fuzzy, c-format
msgid " .debug_line offset: 0x%<PRIx64>\n"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:10102
+#: src/readelf.c:10171
#, fuzzy, c-format
msgid " extension opcode table, %<PRIu8> items:\n"
msgstr " %<PRIu8> 個ã®ãƒ‘ラメーターã®ã‚ã‚‹ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰:"
-#: src/readelf.c:10109
+#: src/readelf.c:10178
#, c-format
msgid " [%<PRIx8>]"
msgstr ""
-#: src/readelf.c:10121
+#: src/readelf.c:10190
#, fuzzy, c-format
msgid " %<PRIu8> arguments:"
msgstr " [%*<PRIuFAST8>] %hhu パラメーター\n"
-#: src/readelf.c:10136
+#: src/readelf.c:10205
#, c-format
msgid " no arguments."
msgstr ""
-#: src/readelf.c:10337
+#: src/readelf.c:10406
#, c-format
msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
msgstr ""
@@ -5787,7 +5751,7 @@ msgstr ""
# # "オフセット %3$#<PRIx64> 㮠DWARF セクション [%1$2zu] '%2$s':\n"
# # " %4$*s 文字列\n" ãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã®ã¯ä½•æ•…? å–ã‚Šæ•¢ãˆãš fuzzy扱ã„
-#: src/readelf.c:10381
+#: src/readelf.c:10450
#, fuzzy, c-format
msgid ""
"\n"
@@ -5799,42 +5763,42 @@ msgstr ""
" %4$*s 文字列\n"
#. TRANS: the debugstr| prefix makes the string unique.
-#: src/readelf.c:10386
+#: src/readelf.c:10455
msgctxt "debugstr"
msgid "Offset"
msgstr ""
-#: src/readelf.c:10396
+#: src/readelf.c:10465
#, fuzzy, c-format
msgid " *** error, missing string terminator\n"
msgstr " *** 文字列ã®èª­è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s\n"
-#: src/readelf.c:10425
+#: src/readelf.c:10494
#, fuzzy, c-format
msgid "cannot get .debug_str_offsets section data: %s"
msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:10524
+#: src/readelf.c:10593
#, fuzzy, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10526
+#: src/readelf.c:10595
#, fuzzy, c-format
msgid " Offset size: %8<PRIu8>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10540
+#: src/readelf.c:10609
#, fuzzy, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10549
+#: src/readelf.c:10618
#, fuzzy, c-format
msgid " Padding: %8<PRIx16>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10603
+#: src/readelf.c:10672
#, c-format
msgid ""
"\n"
@@ -5843,7 +5807,7 @@ msgstr ""
"\n"
"呼出ã—フレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n"
-#: src/readelf.c:10705
+#: src/readelf.c:10774
#, c-format
msgid ""
"\n"
@@ -5852,22 +5816,22 @@ msgstr ""
"\n"
"例外å–扱ã„テーブルセクション [%2zu] '.gcc_except_table':\n"
-#: src/readelf.c:10728
+#: src/readelf.c:10797
#, c-format
msgid " LPStart encoding: %#x "
msgstr " LPStart コード化: %#x "
-#: src/readelf.c:10740
+#: src/readelf.c:10809
#, c-format
msgid " TType encoding: %#x "
msgstr "TType コード化: %#x "
-#: src/readelf.c:10755
+#: src/readelf.c:10824
#, c-format
msgid " Call site encoding: %#x "
msgstr "呼出ã—サイトコード化: %#x "
-#: src/readelf.c:10768
+#: src/readelf.c:10837
msgid ""
"\n"
" Call site table:"
@@ -5875,7 +5839,7 @@ msgstr ""
"\n"
" 呼出ã—サイトテーブル:"
-#: src/readelf.c:10782
+#: src/readelf.c:10851
#, c-format
msgid ""
" [%4u] Call site start: %#<PRIx64>\n"
@@ -5888,12 +5852,12 @@ msgstr ""
" 離ç€é™¸å ´: %#<PRIx64>\n"
" 行動: %u\n"
-#: src/readelf.c:10855
+#: src/readelf.c:10924
#, c-format
msgid "invalid TType encoding"
msgstr "ä¸å½“㪠TType コード化"
-#: src/readelf.c:10882
+#: src/readelf.c:10951
#, fuzzy, c-format
msgid ""
"\n"
@@ -5903,37 +5867,37 @@ msgstr ""
"オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …"
"ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:10911
+#: src/readelf.c:10980
#, fuzzy, c-format
msgid " Version: %<PRId32>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:10929
+#: src/readelf.c:10998
#, fuzzy, c-format
msgid " CU offset: %#<PRIx32>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10936
+#: src/readelf.c:11005
#, fuzzy, c-format
msgid " TU offset: %#<PRIx32>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10943
+#: src/readelf.c:11012
#, fuzzy, c-format
msgid " address offset: %#<PRIx32>\n"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:10950
+#: src/readelf.c:11019
#, fuzzy, c-format
msgid " symbol offset: %#<PRIx32>\n"
msgstr " (オフセット: %#<PRIx64>)"
-#: src/readelf.c:10957
+#: src/readelf.c:11026
#, fuzzy, c-format
msgid " constant offset: %#<PRIx32>\n"
msgstr " (終了オフセット: %#<PRIx64>)"
-#: src/readelf.c:10971
+#: src/readelf.c:11040
#, fuzzy, c-format
msgid ""
"\n"
@@ -5943,7 +5907,7 @@ msgstr ""
"オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …"
"ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:10996
+#: src/readelf.c:11065
#, fuzzy, c-format
msgid ""
"\n"
@@ -5953,7 +5917,7 @@ msgstr ""
"オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …"
"ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:11025
+#: src/readelf.c:11094
#, fuzzy, c-format
msgid ""
"\n"
@@ -5963,7 +5927,7 @@ msgstr ""
"オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …"
"ç›®ãŒã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:11057
+#: src/readelf.c:11126
#, fuzzy, c-format
msgid ""
"\n"
@@ -5972,18 +5936,18 @@ msgstr ""
"\n"
"オフセット %#0<PRIx64> ã«ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ル\n"
-#: src/readelf.c:11195
+#: src/readelf.c:11264
#, c-format
msgid "cannot get debug context descriptor: %s"
msgstr "デãƒãƒƒã‚°å†…容記述å­ã‚’得られã¾ã›ã‚“: %s"
-#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301
-#: src/readelf.c:12359
+#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367
+#: src/readelf.c:12424
#, c-format
msgid "cannot convert core note data: %s"
msgstr "コアノートデータã®å¤‰æ›ãŒã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:11926
+#: src/readelf.c:11994
#, c-format
msgid ""
"\n"
@@ -5992,21 +5956,21 @@ msgstr ""
"\n"
"%*s... < %u 回ã®ç¹°è¿”ã—> ..."
-#: src/readelf.c:12438
+#: src/readelf.c:12503
msgid " Owner Data size Type\n"
msgstr " 所有者 データ大ãã•ã‚¿ã‚¤ãƒ—\n"
-#: src/readelf.c:12466
+#: src/readelf.c:12531
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12518
-#, fuzzy, c-format
+#: src/readelf.c:12583
+#, c-format
msgid "cannot get content of note: %s"
-msgstr "ノートセクションã®å†…容を得られã¾ã›ã‚“: %s"
+msgstr "ノートセクションã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:12552
+#: src/readelf.c:12616
#, c-format
msgid ""
"\n"
@@ -6016,7 +5980,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$2zu] "
"'%2$s':\n"
-#: src/readelf.c:12575
+#: src/readelf.c:12639
#, c-format
msgid ""
"\n"
@@ -6025,7 +5989,7 @@ msgstr ""
"\n"
"オフセット %2$#0<PRIx64> ã® %1$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚°ãƒ¡ãƒ³ãƒˆ:\n"
-#: src/readelf.c:12622
+#: src/readelf.c:12686
#, fuzzy, c-format
msgid ""
"\n"
@@ -6034,12 +5998,12 @@ msgstr ""
"\n"
"セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n"
-#: src/readelf.c:12649 src/readelf.c:12700
+#: src/readelf.c:12713 src/readelf.c:12764
#, fuzzy, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s"
-#: src/readelf.c:12654
+#: src/readelf.c:12718
#, fuzzy, c-format
msgid ""
"\n"
@@ -6049,7 +6013,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン"
"プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n"
-#: src/readelf.c:12659
+#: src/readelf.c:12723
#, fuzzy, c-format
msgid ""
"\n"
@@ -6060,7 +6024,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン"
"プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n"
-#: src/readelf.c:12673
+#: src/readelf.c:12737
#, fuzzy, c-format
msgid ""
"\n"
@@ -6069,7 +6033,7 @@ msgstr ""
"\n"
"セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n"
-#: src/readelf.c:12705
+#: src/readelf.c:12769
#, fuzzy, c-format
msgid ""
"\n"
@@ -6079,7 +6043,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> 文字列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ"
"イトã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:12710
+#: src/readelf.c:12774
#, fuzzy, c-format
msgid ""
"\n"
@@ -6090,7 +6054,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> 文字列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ"
"イトã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:12759
+#: src/readelf.c:12822
#, c-format
msgid ""
"\n"
@@ -6099,7 +6063,7 @@ msgstr ""
"\n"
"セクション [%lu] ãŒã‚ã‚Šã¾ã›ã‚“"
-#: src/readelf.c:12789
+#: src/readelf.c:12852
#, c-format
msgid ""
"\n"
@@ -6108,12 +6072,12 @@ msgstr ""
"\n"
"セクション '%s' ãŒã‚ã‚Šã¾ã›ã‚“"
-#: src/readelf.c:12846
+#: src/readelf.c:12907
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "アーカイブã®ã‚·ãƒ³ãƒœãƒ«ç´¢å¼• '%s' を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:12849
+#: src/readelf.c:12910
#, c-format
msgid ""
"\n"
@@ -6122,21 +6086,21 @@ msgstr ""
"\n"
"アーカイブ '%s' ã«ã¯ã‚·ãƒ³ãƒœãƒ«ç´¢å¼•ãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: src/readelf.c:12853
-#, fuzzy, c-format
+#: src/readelf.c:12914
+#, c-format
msgid ""
"\n"
"Index of archive '%s' has %zu entries:\n"
msgstr ""
"\n"
-"アーカイブ '%s' ã®ç´¢å¼•ã«ã¯ %Zu é …ç›®ã‚ã‚Šã¾ã™:\n"
+"アーカイブ '%s' ã®ç´¢å¼•ã¯ %zu 個ã®é …目をæŒã¡ã¾ã™:\n"
-#: src/readelf.c:12871
-#, fuzzy, c-format
+#: src/readelf.c:12932
+#, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
-msgstr "'%2$s' 㮠オフセット %1$Zu ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’抽出ã§ãã¾ã›ã‚“: %3$s"
+msgstr "'%2$s' 㮠オフセット %1$zu ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’抽出ã§ãã¾ã›ã‚“: %3$s"
-#: src/readelf.c:12876
+#: src/readelf.c:12937
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "アーカイブメンãƒãƒ¼ '%s' ã«ã¯ä»¥ä¸‹ãŒã‚ã‚Šã¾ã™:\n"
@@ -6146,8 +6110,8 @@ msgid ""
"Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default "
"is `bsd'"
msgstr ""
-"出力形å¼ã¨ã—㦠FORMAT を使ã£ã¦ãã ã•ã„。FORMAT 㯠`bsd'ã‹ã€`sysv' ã®ã©ã¡ã‚‰ã‹"
-"ã§ã™ã€‚çœç•¥å€¤ã¯ `bsd'ã§ã™"
+"出力形å¼ã¨ã—㦠FORMAT を使ã£ã¦ãã ã•ã„。 FORMAT 㯠`bsd'〠`sysv' ã®ã©ã¡ã‚‰ã‹"
+"ã§ã™ã€‚ デフォルト㯠`bsd'ã§ã™"
#: src/size.c:58
msgid "Same as `--format=sysv'"
@@ -6171,11 +6135,11 @@ msgstr "`--radix=16' ã¨åŒã˜"
#: src/size.c:66
msgid "Similar to `--format=sysv' output but in one line"
-msgstr "`--format=sysv' ã®å‡ºåŠ›ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€1è¡Œã§ã™"
+msgstr "`--format=sysv' ã®å‡ºåŠ›ã¨ ä¼¼ã¦ã„ã¾ã™ãŒã€ 1è¡Œã§ã™"
#: src/size.c:70
msgid "Print size and permission flags for loadable segments"
-msgstr "ロードå¯èƒ½ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã®ãŸã‚ã®å°åˆ·ã®å¤§ãã•ã¨è¨±å¯ãƒ•ãƒ©ã‚°"
+msgstr "ロードå¯èƒ½ã‚»ã‚°ãƒ¡ãƒ³ãƒˆ ã®å¤§ãã•ã¨ 許å¯ãƒ•ãƒ©ã‚°ã® 表示"
#: src/size.c:71
msgid "Display the total sizes (bsd only)"
@@ -6184,7 +6148,7 @@ msgstr "åˆè¨ˆã®å¤§ãã•ã‚’表示 (bsd ã®ã¿)"
#. Short description of program.
#: src/size.c:76
msgid "List section sizes of FILEs (a.out by default)."
-msgstr "ãµãã„ã‚‹ ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®å¤§ãã•ã®ä¸€è¦§ (çœç•¥å€¤ã¯ a.out)"
+msgstr "FILE ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã® 大ãã•ã® 一覧表示 (デフォルトã§ã¯ a.out)"
#: src/size.c:240
#, c-format
@@ -6231,39 +6195,36 @@ msgctxt "bsd"
msgid "filename"
msgstr ""
-#: src/size.c:418 src/size.c:560
+#: src/size.c:417 src/size.c:558
#, c-format
msgid " (ex %s)"
msgstr " (ex %s)"
-#: src/size.c:420
-#, fuzzy
-#| msgid "invalid section"
+#: src/size.c:419
msgctxt "sysv"
msgid "section"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³"
+msgstr ""
-#: src/size.c:421
+#: src/size.c:420
msgctxt "sysv"
msgid "size"
msgstr ""
-#: src/size.c:422
+#: src/size.c:421
msgctxt "sysv"
msgid "addr"
msgstr ""
-#: src/size.c:451 src/size.c:454 src/size.c:457
+#: src/size.c:450 src/size.c:453 src/size.c:456
msgctxt "sysv"
msgid "Total"
msgstr ""
-#: src/size.c:482
-#, fuzzy, c-format
+#: src/size.c:480
msgid "cannot get section header"
-msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s"
+msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“"
-#: src/size.c:585
+#: src/size.c:583
msgid "(TOTALS)\n"
msgstr "(åˆè¨ˆ)\n"
@@ -6273,9 +6234,9 @@ msgid "-p PID should be a positive process id."
msgstr ""
#: src/stack.c:493
-#, fuzzy, c-format
+#, c-format
msgid "Cannot open core file '%s'"
-msgstr "アーカイブ '%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“"
+msgstr "コアファイル'%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“"
#: src/stack.c:553
#, c-format
@@ -6298,68 +6259,67 @@ msgid "One of -p PID or --core COREFILE should be given."
msgstr ""
#: src/stack.c:645
-#, fuzzy
msgid "Show stack of process PID"
-msgstr "検索ツリーを生æˆã§ãã¾ã›ã‚“"
+msgstr "process PID ã®ã‚¹ã‚¿ãƒƒã‚¯ã‚’表示"
#: src/stack.c:647
msgid "Show stack found in COREFILE"
-msgstr ""
+msgstr "COREFILE ã§è¦‹ã¤ã‹ã£ãŸã‚¹ã‚¿ãƒƒã‚¯ã‚’表示"
#: src/stack.c:648
msgid "(optional) EXECUTABLE that produced COREFILE"
-msgstr ""
+msgstr "(optional) COREFILE を生æˆã—㟠EXECUTABLE"
#: src/stack.c:652
-#, fuzzy
msgid "Output selection options:"
-msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:"
+msgstr "出力é¸æŠžã‚ªãƒ—ション:"
#: src/stack.c:654
-#, fuzzy
msgid "Additionally show frame activation"
-msgstr "出力é¸æŠž:"
+msgstr "frame activation ã‚’ ã•ã‚‰ã« 表示"
#: src/stack.c:656
msgid "Additionally try to lookup DWARF debuginfo name for frame address"
-msgstr ""
+msgstr "フレーム アドレス㫠対ã™ã‚‹ DWARF debuginfo name ã®æ¤œç´¢ã‚’ ã•ã‚‰ã«è©¦ã¿ã‚‹"
#: src/stack.c:659
msgid ""
"Additionally show inlined function frames using DWARF debuginfo if available "
"(implies -d)"
msgstr ""
+"å¯èƒ½ã§ã‚れ㰠DWARF debuginfo を使ã£ã¦ インライン 関数㮠フレームを表示 (暗黙"
+"çš„ã« -d ã‚’ä¼´ã†ï¼‰"
#: src/stack.c:661
msgid "Additionally show module file information"
-msgstr ""
+msgstr "モジュール ファイル情報を ã•ã‚‰ã« 表示"
#: src/stack.c:663
-#, fuzzy
msgid "Additionally show source file information"
-msgstr "出力é¸æŠž:"
+msgstr "ソース ファイル情報を ã•ã‚‰ã« 表示"
#: src/stack.c:665
msgid ""
"Show all additional information (activation, debugname, inlines, module and "
"source)"
msgstr ""
+"å…¨ã¦ã® 追加情報を 表示 (activation, debugname, inlines, module, source)"
#: src/stack.c:667
msgid "Do not resolve address to function symbol name"
-msgstr ""
+msgstr "アドレスを 関数シンボルå㫠解決ã—ãªã„"
#: src/stack.c:669
msgid "Show raw function symbol names, do not try to demangle names"
-msgstr ""
+msgstr "生㮠関数シンボルåã‚’ 表示ã—〠デマングルを 試ã¿ãªã„"
#: src/stack.c:671
msgid "Show module build-id, load address and pc offset"
-msgstr ""
+msgstr "モジュール㮠ビルド IDã€ãƒ­ãƒ¼ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ PC オフセット を表示"
#: src/stack.c:673
msgid "Show the backtrace of only one thread"
-msgstr ""
+msgstr "1ã¤ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã ã‘ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’表示"
#: src/stack.c:675
msgid "Show at most MAXFRAMES per thread (default 256, use 0 for unlimited)"
@@ -6368,6 +6328,8 @@ msgstr ""
#: src/stack.c:677
msgid "Show module memory map with build-id, elf and debug files detected"
msgstr ""
+"検出ã•ã‚ŒãŸ ビルド ID〠elf〠debug ファイル付ã㧠モジュール㮠メモリマップ"
+"を 表示"
#: src/stack.c:685
msgid ""
@@ -6384,96 +6346,94 @@ msgstr ""
#: src/stack.c:760
#, c-format
msgid "Couldn't show any frames."
-msgstr ""
+msgstr "フレームを表示ã§ãã¾ã›ã‚“"
#: src/strings.c:65
msgid "Output Selection:"
-msgstr ""
+msgstr "出力é¸æŠžï¼š"
#: src/strings.c:66
msgid "Scan entire file, not only loaded sections"
-msgstr ""
+msgstr "ロードã•ã‚Œã‚‹ セクションã ã‘ ã§ãªã ファイル全体を スキャンã™ã‚‹"
#: src/strings.c:68
msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed"
-msgstr ""
+msgstr "ヌル終端ã•ã‚ŒãŸ MIN-LEN 文字以上㮠シーケンス ã®ã¿ã‚’ 表示"
#: src/strings.c:69
msgid ""
"Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, "
"{B,L} = 32-bit"
msgstr ""
+"文字サイズ㨠エンディアンを é¸æŠžï¼š s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,"
+"L} = 32-bit"
#: src/strings.c:73
msgid "Print name of the file before each string."
-msgstr ""
+msgstr "å„文字列㮠å‰ã« ファイルåを表示"
#: src/strings.c:75
msgid "Print location of the string in base 8, 10, or 16 respectively."
-msgstr ""
+msgstr "文字列㮠ä½ç½®ã‚’ 基数 8〠10〠16 㧠å„々表示"
#: src/strings.c:76
msgid "Alias for --radix=o"
-msgstr ""
+msgstr "--radix=o ã¨åŒã˜"
#. Short description of program.
#: src/strings.c:83
msgid "Print the strings of printable characters in files."
-msgstr ""
+msgstr "ファイル中ã®è¡¨ç¤ºå¯èƒ½æ–‡å­—ã‹ã‚‰ãªã‚‹æ–‡å­—列を表示ã™ã‚‹ã€‚"
#: src/strings.c:256 src/strings.c:291
#, c-format
msgid "invalid value '%s' for %s parameter"
msgstr ""
-#: src/strings.c:302
-#, c-format
+#: src/strings.c:301
msgid "invalid minimum length of matched string size"
msgstr ""
-#: src/strings.c:585
-#, c-format
+#: src/strings.c:584
msgid "lseek failed"
msgstr ""
-#: src/strings.c:602 src/strings.c:666
-#, c-format
+#: src/strings.c:601 src/strings.c:665
msgid "re-mmap failed"
msgstr ""
-#: src/strings.c:639
-#, c-format
+#: src/strings.c:638
msgid "mprotect failed"
msgstr ""
-#: src/strings.c:728
+#: src/strings.c:727
#, c-format
msgid "Skipping section %zd '%s' data outside file"
msgstr ""
#: src/strip.c:71
msgid "Place stripped output into FILE"
-msgstr "ã¯ãŽå–ã£ãŸå‡ºåŠ›ã‚’ ãµãã„ã‚‹ ã«ç½®ã"
+msgstr "ストリップã—㟠出力を FILE ã«ç½®ã"
#: src/strip.c:72
msgid "Extract the removed sections into FILE"
-msgstr "抽出ã—ãŸå–り除ã„ãŸã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ ãµãã„ã‚‹ ã«ç½®ã"
+msgstr "抽出ã—㦠å–り除ã„㟠セクションを FILE ã«ç½®ã"
#: src/strip.c:73
msgid "Embed name FILE instead of -f argument"
-msgstr "-f パラメーターã®ä»£ã‚ã‚Šã« åå‰ ãµãã„ã‚‹ を有効ã«ã™ã‚‹"
+msgstr "-f 引数㮠代ã‚ã‚Šã« åå‰ FILE を有効ã«ã™ã‚‹"
#: src/strip.c:77
msgid "Remove all debugging symbols"
-msgstr "デãƒãƒƒã‚°ç”¨ã®ã‚·ãƒ³ãƒœãƒ«ã‚’å…¨ã¦å–り除ã"
+msgstr "デãƒãƒƒã‚°ç”¨ シンボルを 全㦠å–り除ã"
#: src/strip.c:81
msgid "Remove section headers (not recommended)"
-msgstr ""
+msgstr "セクションヘッダーを å–り除ã (éžæŽ¨å¥¨ï¼‰"
#: src/strip.c:83
msgid "Copy modified/access timestamps to the output"
-msgstr "修正/アクセスタイムスタンプを出力ã¸è¤‡å†™ã™ã‚‹"
+msgstr "修正/アクセス タイムスタンプを 出力㸠複製ã™ã‚‹"
#: src/strip.c:85
msgid ""
@@ -6499,66 +6459,67 @@ msgid ""
"Remove the named section. SECTION is an extended wildcard pattern. May be "
"given more than once. Only non-allocated sections can be removed."
msgstr ""
+"指定ã•ã‚ŒãŸ セクションを å–り除ã。 SECTION 㯠拡張 ワイルド カード パター"
+"ン。 2回以上 与㈠られã¦ã‚‚ よã„。割り当㦠ã•ã‚Œãªã„ セクション ã®ã¿ å–り除ã‘"
+"る。"
#: src/strip.c:91
msgid ""
"Keep the named section. SECTION is an extended wildcard pattern. May be "
"given more than once."
msgstr ""
+"指定ã•ã‚ŒãŸ セクションを ä¿æŒã™ã‚‹ã€‚ SECTION 㯠拡張 ワイルド カード パター"
+"ン。 2回以上 与㈠られã¦ã‚‚ よã„。"
#. Short description of program.
#: src/strip.c:98
msgid "Discard symbols from object files."
-msgstr "オブジェクトファイルã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’破棄ã™ã‚‹"
+msgstr "オブジェクトファイルã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’æ¨ã¦åŽ»ã‚‹"
-#: src/strip.c:247
-#, c-format
+#: src/strip.c:246
msgid "--reloc-debug-sections used without -f"
msgstr ""
-#: src/strip.c:253
-#, c-format
+#: src/strip.c:252
msgid ""
"--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --"
"remove-section"
msgstr ""
-#: src/strip.c:267
-#, c-format
+#: src/strip.c:266
msgid "Only one input file allowed together with '-o' and '-f'"
msgstr "'-o' 㨠'-f' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“"
-#: src/strip.c:290
+#: src/strip.c:288
#, c-format
msgid "-f option specified twice"
msgstr "-f オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™"
-#: src/strip.c:299
+#: src/strip.c:297
#, c-format
msgid "-F option specified twice"
msgstr "-F オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™"
-#: src/strip.c:362
-#, fuzzy, c-format
+#: src/strip.c:360
+#, c-format
msgid "cannot both keep and remove .comment section"
-msgstr ".comment セクションをå–り除ã"
+msgstr ".comment セクションをä¿æŒã—ã¤ã¤å–り除ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
-#: src/strip.c:481
-#, fuzzy, c-format
+#: src/strip.c:479
msgid "bad relocation"
-msgstr "リロケーションを表示"
+msgstr ""
-#: src/strip.c:747 src/strip.c:771
+#: src/strip.c:749 src/strip.c:773
#, c-format
msgid "cannot stat input file '%s'"
msgstr "入力ファイル '%s' ã‚’ stat ã§ãã¾ã›ã‚“"
-#: src/strip.c:761
+#: src/strip.c:763
#, c-format
msgid "while opening '%s'"
msgstr "'%s' ã‚’é–‹ã„ã¦ã„ã‚‹é–“"
-#: src/strip.c:799
+#: src/strip.c:801
#, c-format
msgid "%s: cannot use -o or -f when stripping archive"
msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆã¾ã›ã‚“"
@@ -6569,45 +6530,44 @@ msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆ
#. result = handle_ar (fd, elf, NULL, fname,
#. preserve_dates ? tv : NULL);
#.
-#: src/strip.c:811
-#, fuzzy, c-format
+#: src/strip.c:813
+#, c-format
msgid "%s: no support for stripping archive"
-msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆã¾ã›ã‚“"
+msgstr "%s: アーカイブã®ã‚¹ãƒˆãƒªãƒƒãƒ—ã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“"
-#: src/strip.c:1047
+#: src/strip.c:1050
#, c-format
msgid "cannot open EBL backend"
msgstr "EBL ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é–‹ã‘ã¾ã›ã‚“"
-#: src/strip.c:1092
-#, fuzzy, c-format
+#: src/strip.c:1094
msgid "cannot get number of phdrs"
-msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
+msgstr "phdrs ã®æ•°ã‚’å–å¾—ã§ãã¾ã›ã‚“"
-#: src/strip.c:1106 src/strip.c:1149
-#, fuzzy, c-format
+#: src/strip.c:1108 src/strip.c:1151
+#, c-format
msgid "cannot create new ehdr for file '%s': %s"
-msgstr "æ–°ã—ã„ファイル '%s' を生æˆã§ãã¾ã›ã‚“: %s"
+msgstr "ファイル '%s' ã®æ–°ã—ã„ ehdr を作æˆã§ãã¾ã›ã‚“: %s"
-#: src/strip.c:1116 src/strip.c:1159
-#, fuzzy, c-format
+#: src/strip.c:1118 src/strip.c:1161
+#, c-format
msgid "cannot create new phdr for file '%s': %s"
-msgstr "æ–°ã—ã„ファイル '%s' を生æˆã§ãã¾ã›ã‚“: %s"
+msgstr "ファイル '%s' ã®æ–°ã—ã„ phdr を作æˆã§ãã¾ã›ã‚“: %s"
-#: src/strip.c:1240
+#: src/strip.c:1241
#, c-format
msgid "illformed file '%s'"
msgstr "ä¸é©æ ¼ãªãƒ•ã‚¡ã‚¤ãƒ« '%s'"
-#: src/strip.c:1250
-#, fuzzy, c-format
+#: src/strip.c:1251
+#, c-format
msgid "Cannot remove allocated section '%s'"
-msgstr "PLT セクションを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "割り当ã¦ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ '%s' ã¯å–り除ã‘ã¾ã›ã‚“"
-#: src/strip.c:1259
-#, fuzzy, c-format
+#: src/strip.c:1260
+#, c-format
msgid "Cannot both keep and remove section '%s'"
-msgstr "0番目ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’得られã¾ã›ã‚“: %s"
+msgstr "セクション '%s' ã‚’ä¿æŒã—ã¤ã¤å–り除ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
#: src/strip.c:1624 src/strip.c:1739
#, c-format
@@ -6615,125 +6575,126 @@ msgid "while generating output file: %s"
msgstr "出力ファイルを生æˆã—ã¦ã„ã‚‹é–“: %s"
#: src/strip.c:1688
-#, fuzzy, c-format
+#, c-format
msgid "%s: error while updating ELF header: %s"
-msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s"
+msgstr "%s: ELF ヘッダーã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
#: src/strip.c:1697
-#, fuzzy, c-format
+#, c-format
msgid "%s: error while getting shdrstrndx: %s"
-msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s"
+msgstr "%s: shdrstrndx ã®å–得中ã«ã‚¨ãƒ©ãƒ¼: %s"
-#: src/strip.c:1705 src/strip.c:2550
-#, fuzzy, c-format
+#: src/strip.c:1705 src/strip.c:2546
+#, c-format
msgid "%s: error updating shdrstrndx: %s"
-msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s"
+msgstr "%s: shdrstrndx ã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
#: src/strip.c:1722
#, c-format
msgid "while preparing output for '%s'"
msgstr "'%s' ã®ãŸã‚ã®å‡ºåŠ›ã‚’準備ã—ã¦ã„ã‚‹é–“"
-#: src/strip.c:1784 src/strip.c:1847
+#: src/strip.c:1783 src/strip.c:1845
#, c-format
msgid "while create section header section: %s"
msgstr "セクションヘッダーセクションを生æˆã—ã¦ã„ã‚‹é–“: %s"
-#: src/strip.c:1793
+#: src/strip.c:1792
#, c-format
msgid "cannot allocate section data: %s"
msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
-#: src/strip.c:1859
+#: src/strip.c:1856
#, c-format
msgid "while create section header string table: %s"
msgstr "セクションヘッダー文字列テーブルを生æˆä¸­: %s"
-#: src/strip.c:1866
-#, fuzzy, c-format
+#: src/strip.c:1862
msgid "no memory to create section header string table"
-msgstr "セクションヘッダー文字列テーブルを生æˆä¸­: %s"
+msgstr "セクションヘッダー文字列テーブルを作æˆã™ã‚‹ãƒ¡ãƒ¢ãƒªãŒã‚ã‚Šã¾ã›ã‚“"
-#: src/strip.c:2079
+#: src/strip.c:2075
#, c-format
msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]"
msgstr ""
-#: src/strip.c:2466 src/strip.c:2574
+#: src/strip.c:2462 src/strip.c:2570
#, c-format
msgid "while writing '%s': %s"
msgstr "'%s' を書込ã¿ä¸­: %s"
-#: src/strip.c:2477
+#: src/strip.c:2473
#, c-format
msgid "while creating '%s'"
msgstr "'%s' を生æˆä¸­"
-#: src/strip.c:2500
+#: src/strip.c:2496
#, c-format
msgid "while computing checksum for debug information"
msgstr "デãƒãƒƒã‚°æƒ…å ±ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’計算中"
-#: src/strip.c:2541
+#: src/strip.c:2537
#, c-format
msgid "%s: error while creating ELF header: %s"
msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s"
-#: src/strip.c:2559
+#: src/strip.c:2555
#, c-format
msgid "%s: error while reading the file: %s"
msgstr "%s: ファイルを読込ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
-#: src/strip.c:2599 src/strip.c:2619
-#, fuzzy, c-format
+#: src/strip.c:2595 src/strip.c:2615
+#, c-format
msgid "while writing '%s'"
-msgstr "'%s' を書込ã¿ä¸­: %s"
+msgstr "書ãè¾¼ã¿ä¸­ '%s'"
-#: src/strip.c:2656 src/strip.c:2663
+#: src/strip.c:2652 src/strip.c:2659
#, c-format
msgid "error while finishing '%s': %s"
msgstr "'%s' ã®çµ‚了中ã«ã‚¨ãƒ©ãƒ¼: %s"
-#: src/strip.c:2680 src/strip.c:2756
+#: src/strip.c:2676 src/strip.c:2752
#, c-format
msgid "cannot set access and modification date of '%s'"
msgstr "'%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ã¨å¤‰æ›´æ—¥ä»˜ã‚’設定ã§ãã¾ã›ã‚“"
#: src/unstrip.c:66
msgid "Match MODULE against file names, not module names"
-msgstr ""
+msgstr "モジュールåã§ã¯ãªã ファイルå㧠MODULE を一致ã•ã›ã‚‹"
#: src/unstrip.c:67
msgid "Silently skip unfindable files"
-msgstr ""
+msgstr "見ã¤ã‹ã‚‰ãªã„ ファイルを é™ã‹ã« スキップ"
#: src/unstrip.c:70
msgid "Place output into FILE"
-msgstr ""
+msgstr "出力を FILE ã«ç½®ã"
#: src/unstrip.c:72
msgid "Create multiple output files under DIRECTORY"
-msgstr ""
+msgstr "複数㮠出力ファイルを DIRECTORY ã®ä¸‹ã« 作æˆ"
#: src/unstrip.c:73
msgid "Use module rather than file names"
-msgstr ""
+msgstr "ファイルåã§ã¯ãªã モジュールåã‚’ 使用"
#: src/unstrip.c:75
msgid "Create output for modules that have no separate debug information"
-msgstr ""
+msgstr "分離ã•ã‚ŒãŸ デãƒãƒƒã‚°æƒ…報を æŒãŸãªã„ モジュール用㫠出力を 作æˆ"
#: src/unstrip.c:78
msgid "Apply relocations to section contents in ET_REL files"
-msgstr ""
+msgstr "ET_REL ファイル㮠セクション内容㫠リロケーションを é©ç”¨"
#: src/unstrip.c:80
msgid "Only list module and file names, build IDs"
-msgstr ""
+msgstr "モジュールå〠ファイルå〠ビルドID㮠リスト表示ã®ã¿"
#: src/unstrip.c:82
msgid "Force combining files even if some ELF headers don't seem to match"
msgstr ""
+"ã„ãã¤ã‹ã® ELF ヘッダー ㌠一致ã—ãªã„ よã†ã« 見ãˆãŸ ã¨ã—ã¦ã‚‚ ファイル㮠çµåˆ"
+"を 強制"
#: src/unstrip.c:126
#, c-format
@@ -6753,216 +6714,225 @@ msgstr ""
#: src/unstrip.c:185
#, c-format
msgid "output directory '%s'"
-msgstr ""
+msgstr "出力ディレクトリ '%s'"
#: src/unstrip.c:194
#, c-format
msgid "exactly two file arguments are required"
-msgstr ""
+msgstr "ã¡ã‚‡ã†ã©ï¼’ã¤ã®å¼•æ•°ãŒå¿…è¦ã§ã™"
#: src/unstrip.c:200
#, c-format
msgid "-m, -a, -R, and -i options not allowed with explicit files"
msgstr ""
+"明示的ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用ã™ã‚‹éš›ã¯ -m, -a, -R, -i オプションã¯èªã‚られã¦ã„ã¾ã›ã‚“"
#: src/unstrip.c:213
#, c-format
msgid "-o or -d is required when using implicit files"
-msgstr ""
+msgstr "暗黙的ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用ã™ã‚‹éš›ã¯ -o ã¾ãŸã¯ -d ãŒå¿…è¦ã§ã™"
#: src/unstrip.c:236
#, c-format
msgid "cannot create ELF header: %s"
-msgstr ""
+msgstr "ELF ヘッダーを作æˆã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:240
-#, fuzzy, c-format
+#, c-format
msgid "cannot get shdrstrndx:%s"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "shdrstrndx ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:244 src/unstrip.c:2086
#, c-format
msgid "cannot get ELF header: %s"
-msgstr ""
+msgstr "ELF ヘッダーをå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:254
-#, fuzzy, c-format
+#, c-format
msgid "cannot get new zero section: %s"
-msgstr "セクションを得られã¾ã›ã‚“: %s"
+msgstr "æ–°ã—ã„ zero セクションをå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:257
-#, fuzzy, c-format
+#, c-format
msgid "cannot update new zero section: %s"
-msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
+msgstr "æ–°ã—ã„ zero セクションを更新ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:261
#, c-format
msgid "cannot copy ELF header: %s"
-msgstr ""
+msgstr "ELF ヘッダーを複製ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147
-#, fuzzy, c-format
+#, c-format
msgid "cannot get number of program headers: %s"
-msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
+msgstr "プログラムヘッダ数をå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:270 src/unstrip.c:2108
#, c-format
msgid "cannot create program headers: %s"
-msgstr ""
+msgstr "プログラムヘッダーを作æˆã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:276
#, c-format
msgid "cannot copy program header: %s"
-msgstr ""
+msgstr "プログラムヘッダーを複製ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:286
#, c-format
msgid "cannot copy section header: %s"
-msgstr ""
+msgstr "セクションヘッダーを複製ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:289 src/unstrip.c:1708
#, c-format
msgid "cannot get section data: %s"
-msgstr ""
+msgstr "セクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:291 src/unstrip.c:1710
#, c-format
msgid "cannot copy section data: %s"
-msgstr ""
+msgstr "セクションデータを複製ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:319
#, c-format
msgid "cannot create directory '%s'"
-msgstr ""
+msgstr "ディレクトリ '%s' を作æˆã§ãã¾ã›ã‚“"
-#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859
+#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860
#: src/unstrip.c:1750
#, c-format
msgid "cannot get symbol table entry: %s"
-msgstr ""
+msgstr "シンボルテーブル項目をå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694
+#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695
#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990
#, c-format
msgid "cannot update symbol table: %s"
-msgstr ""
+msgstr "シンボルテーブルを更新ã§ãã¾ã›ã‚“: %s"
#: src/unstrip.c:419
#, c-format
msgid "cannot update section header: %s"
+msgstr "セクションヘッダーを更新ã§ãã¾ã›ã‚“: %s"
+
+#: src/unstrip.c:465
+#, c-format
+msgid "gelf_getrel failed: %s"
msgstr ""
-#: src/unstrip.c:467 src/unstrip.c:481
+#: src/unstrip.c:468 src/unstrip.c:483
#, c-format
msgid "cannot update relocation: %s"
+msgstr "リロケーションを更新ã§ãã¾ã›ã‚“: %s"
+
+#: src/unstrip.c:480
+#, c-format
+msgid "gelf_getrela failed: %s"
msgstr ""
-#: src/unstrip.c:580
+#: src/unstrip.c:581
#, c-format
msgid "cannot get symbol version: %s"
-msgstr ""
+msgstr "シンボルãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/unstrip.c:593
+#: src/unstrip.c:594
#, c-format
msgid "unexpected section type in [%zu] with sh_link to symtab"
msgstr ""
-#: src/unstrip.c:848
-#, fuzzy, c-format
+#: src/unstrip.c:849
+#, c-format
msgid "cannot get symbol section data: %s"
-msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s"
+msgstr "シンボルセクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/unstrip.c:850
-#, fuzzy, c-format
+#: src/unstrip.c:851
+#, c-format
msgid "cannot get string section data: %s"
-msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s"
+msgstr "文字列セクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s"
-#: src/unstrip.c:867
-#, fuzzy, c-format
+#: src/unstrip.c:868
+#, c-format
msgid "invalid string offset in symbol [%zu]"
-msgstr "シンボル %2$sã®ä¸æ­£ãªã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$zu "
+msgstr "シンボル [%zu] ã®ä¸­ã«ä¸å½“ãªæ–‡å­—列オフセットãŒã‚ã‚Šã¾ã™"
-#: src/unstrip.c:1025 src/unstrip.c:1433
-#, fuzzy, c-format
+#: src/unstrip.c:1026 src/unstrip.c:1434
+#, c-format
msgid "cannot read section [%zu] name: %s"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "セクション [%zu] ã®åå‰ã‚’読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: src/unstrip.c:1040
-#, fuzzy, c-format
+#: src/unstrip.c:1041
+#, c-format
msgid "bad sh_link for group section: %s"
-msgstr "ä¸å½“㪠.debug_line セクション"
+msgstr "グループセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸ sh_link ã§ã™: %s"
-#: src/unstrip.c:1046
-#, fuzzy, c-format
+#: src/unstrip.c:1047
+#, c-format
msgid "couldn't get shdr for group section: %s"
-msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s"
+msgstr "グループセクションã«å¯¾ã™ã‚‹ shdr ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
-#: src/unstrip.c:1051
-#, fuzzy, c-format
+#: src/unstrip.c:1052
+#, c-format
msgid "bad data for group symbol section: %s"
-msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s"
+msgstr "グループシンボルセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸãƒ‡ãƒ¼ã‚¿ã§ã™: %s"
-#: src/unstrip.c:1057
-#, fuzzy, c-format
+#: src/unstrip.c:1058
+#, c-format
msgid "couldn't get symbol for group section: %s"
-msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
+msgstr "グループセクションã«å¯¾ã™ã‚‹ã‚·ãƒ³ãƒœãƒ«ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
-#: src/unstrip.c:1062
-#, fuzzy, c-format
+#: src/unstrip.c:1063
+#, c-format
msgid "bad symbol name for group section: %s"
-msgstr "セクションヘッダー文字列セクションを生æˆã§ãã¾ã›ã‚“: %s"
+msgstr "グループセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸã‚·ãƒ³ãƒœãƒ«åã§ã™: %s"
-#: src/unstrip.c:1073 src/unstrip.c:1554
+#: src/unstrip.c:1074 src/unstrip.c:1554
#, fuzzy, c-format
msgid "cannot find matching section for [%zu] '%s'"
msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿"
-#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175
+#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176
#, c-format
msgid "cannot read '.gnu.prelink_undo' section: %s"
msgstr ""
-#: src/unstrip.c:1155
+#: src/unstrip.c:1156
#, c-format
msgid "overflow with shnum = %zu in '%s' section"
msgstr ""
-#: src/unstrip.c:1166
+#: src/unstrip.c:1167
#, c-format
msgid "invalid contents in '%s' section"
msgstr ""
-#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925
+#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925
#, c-format
msgid "cannot add section name to string table: %s"
msgstr ""
-#: src/unstrip.c:1362
+#: src/unstrip.c:1363
#, c-format
msgid "cannot update section header string table data: %s"
msgstr ""
-#: src/unstrip.c:1391 src/unstrip.c:1395
+#: src/unstrip.c:1392 src/unstrip.c:1396
#, c-format
msgid "cannot get section header string table section index: %s"
msgstr ""
-#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649
+#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649
#, c-format
msgid "cannot get section count: %s"
msgstr ""
-#: src/unstrip.c:1406
-#, c-format
+#: src/unstrip.c:1407
msgid "more sections in stripped file than debug file -- arguments reversed?"
msgstr ""
-#: src/unstrip.c:1410
-#, c-format
+#: src/unstrip.c:1411
msgid "no sections in stripped file"
msgstr ""
-#: src/unstrip.c:1458 src/unstrip.c:1569
+#: src/unstrip.c:1459 src/unstrip.c:1569
#, c-format
msgid "cannot read section header string table: %s"
msgstr ""
@@ -6973,19 +6943,19 @@ msgid "cannot add new section: %s"
msgstr ""
#: src/unstrip.c:1758
-#, fuzzy, c-format
+#, c-format
msgid "symbol [%zu] has invalid section index"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•"
+msgstr "シンボル [%zu] ãŒä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•ã‚’æŒã£ã¦ã„ã¾ã™"
#: src/unstrip.c:1790
-#, fuzzy, c-format
+#, c-format
msgid "group has invalid section index [%zd]"
-msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•"
+msgstr "グループãŒä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼• [%zd] ã‚’æŒã£ã¦ã„ã¾ã™"
#: src/unstrip.c:2065
-#, fuzzy, c-format
+#, c-format
msgid "cannot read section data: %s"
-msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s"
+msgstr "セクションデータを読ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
#: src/unstrip.c:2094
#, c-format
@@ -7072,23 +7042,21 @@ msgstr ""
msgid "cannot cache section addresses for module '%s': %s"
msgstr ""
-#: src/unstrip.c:2505
-#, c-format
+#: src/unstrip.c:2503
msgid "no matching modules found"
msgstr ""
-#: src/unstrip.c:2515
-#, c-format
+#: src/unstrip.c:2513
msgid "matched more than one module"
msgstr ""
-#: src/unstrip.c:2560
+#: src/unstrip.c:2558
msgid ""
"STRIPPED-FILE DEBUG-FILE\n"
"[MODULE...]"
msgstr ""
-#: src/unstrip.c:2561
+#: src/unstrip.c:2559
msgid ""
"Combine stripped files with separate symbols and debug information.\n"
"\n"
@@ -7132,18 +7100,20 @@ msgid ""
"source PATH /FILENAME\n"
msgstr ""
-#: tests/backtrace.c:436
+#: tests/backtrace.c:483
msgid "Run executable"
msgstr ""
#: tests/dwflmodtest.c:209
-#, fuzzy
msgid "Additionally show function names"
-msgstr "出力é¸æŠž:"
+msgstr "関数åã‚’ ã•ã‚‰ã« 表示"
#: tests/dwflmodtest.c:210
msgid "Show instances of inlined functions"
-msgstr ""
+msgstr "インライン関数ã®å®Ÿä½“を表示"
+
+#~ msgid "cannot allocate memory"
+#~ msgstr "メモリーを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“"
#, fuzzy
#~ msgid ""
diff --git a/po/pl.po b/po/pl.po
index 51d41ebd..9f159d33 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: elfutils\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-05-22 15:33+0200\n"
+"POT-Creation-Date: 2022-04-25 18:22+0200\n"
"PO-Revision-Date: 2021-02-22 16:25+0100\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n"
@@ -41,11 +41,6 @@ msgstr ""
" • „neverâ€, „noâ€, „noneâ€\n"
" • „autoâ€, „ttyâ€, „if-ttyâ€\n"
-#: lib/color.c:194 src/objdump.c:728
-#, c-format
-msgid "cannot allocate memory"
-msgstr "nie można przydzielić pamięci"
-
#: lib/printversion.c:40
#, c-format
msgid ""
@@ -59,8 +54,8 @@ msgstr ""
"BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI\n"
"HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n"
-#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461
-#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609
+#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580
+#: src/unstrip.c:312
#, c-format
msgid "memory exhausted"
msgstr "pamięć wyczerpana"
@@ -307,7 +302,7 @@ msgstr "nieznany kod języka"
msgid ".debug_addr section missing"
msgstr "brak sekcji .debug_addr"
-#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550
+#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548
msgid "Input selection options:"
msgstr "Opcje wyboru wejścia:"
@@ -534,7 +529,7 @@ msgid "No backend"
msgstr "Brak zaplecza"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79
-#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131
+#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
@@ -585,18 +580,18 @@ msgstr " Nazwa: "
msgid " Args: "
msgstr " Parametry: "
-#: libebl/eblobjnote.c:300
+#: libebl/eblobjnote.c:304
#, c-format
msgid " Build ID: "
msgstr " Identyfikator kopii: "
#. A non-null terminated version string.
-#: libebl/eblobjnote.c:311
+#: libebl/eblobjnote.c:315
#, c-format
msgid " Linker version: %.*s\n"
msgstr " Wersja konsolidatora: %.*s\n"
-#: libebl/eblobjnote.c:638
+#: libebl/eblobjnote.c:642
#, c-format
msgid " OS: %s, ABI: "
msgstr " System operacyjny: %s, ABI: "
@@ -630,7 +625,7 @@ msgstr "nieprawidłowy rozmiar operandu źródłowego"
msgid "invalid size of destination operand"
msgstr "nieprawidłowy rozmiar operandu docelowego"
-#: libelf/elf_error.c:87 src/readelf.c:6217
+#: libelf/elf_error.c:87 src/readelf.c:6214
#, c-format
msgid "invalid encoding"
msgstr "nieprawidłowe kodowanie"
@@ -715,8 +710,8 @@ msgstr "dane/scn nie zgadzajÄ… siÄ™"
msgid "invalid section header"
msgstr "nieprawidłowy nagłówek sekcji"
-#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623
-#: src/readelf.c:10724 src/readelf.c:10906
+#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692
+#: src/readelf.c:10793 src/readelf.c:10975
#, c-format
msgid "invalid data"
msgstr "nieprawidłowe dane"
@@ -788,47 +783,49 @@ msgstr "nie można kompresować danych"
msgid "cannot decompress data"
msgstr "nie można dekompresować danych"
-#: src/addr2line.c:57
+#: src/addr2line.c:59
msgid "Input format options:"
msgstr "Opcje formatowania wejścia:"
-#: src/addr2line.c:59
+#: src/addr2line.c:61
msgid "Treat addresses as offsets relative to NAME section."
msgstr "Traktuje adresy jako offsety względne do sekcji NAZWA."
-#: src/addr2line.c:61
+#: src/addr2line.c:63
msgid "Output format options:"
msgstr "Opcje formatowania wyjścia:"
-#: src/addr2line.c:62
+#: src/addr2line.c:64
msgid "Print address before each entry"
msgstr "Wyświetla adres pliku przed każdym wpisem"
-#: src/addr2line.c:63
+#: src/addr2line.c:65
msgid "Show only base names of source files"
msgstr "Wyświetla tylko podstawowe nazwy plików źródłowych"
-#: src/addr2line.c:65
-msgid "Show absolute file names using compilation directory"
+#: src/addr2line.c:67
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show absolute file names using compilation directory (default)"
msgstr "Wyświetla bezwzględne nazwy plików używając katalogu kompilacji"
-#: src/addr2line.c:66
+#: src/addr2line.c:68
msgid "Also show function names"
msgstr "Wyświetla także nazwy funkcji"
-#: src/addr2line.c:67
+#: src/addr2line.c:69
msgid "Also show symbol or section names"
msgstr "Wyświetla także nazwy symboli lub sekcji"
-#: src/addr2line.c:68
+#: src/addr2line.c:70
msgid "Also show symbol and the section names"
msgstr "Wyświetla także nazwy symboli i sekcji"
-#: src/addr2line.c:69
+#: src/addr2line.c:71
msgid "Also show line table flags"
msgstr "Wyświetla także flagi tabeli wierszy"
-#: src/addr2line.c:71
+#: src/addr2line.c:73
msgid ""
"Show all source locations that caused inline expansion of subroutines at the "
"address."
@@ -836,22 +833,28 @@ msgstr ""
"Wyświetla wszystkie położenia źródłowe, które spowodowały wstawione "
"rozszerzenie podprogramów pod tym adresem."
-#: src/addr2line.c:74
+#: src/addr2line.c:76
msgid "Show demangled symbols (ARG is always ignored)"
msgstr ""
"Wyświetla symbole z usuniętym dekorowaniem (PARAMETR jest zawsze ignorowany)"
-#: src/addr2line.c:76
+#: src/addr2line.c:78
msgid "Print all information on one line, and indent inlines"
msgstr "Wyświetla wszystkie informacje w jednym wierszy i wyrównuje wstawki"
-#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100
+#: src/addr2line.c:80
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show relative file names without compilation directory"
+msgstr "Wyświetla bezwzględne nazwy plików używając katalogu kompilacji"
+
+#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100
#: src/strings.c:78
msgid "Miscellaneous:"
msgstr "Różne:"
#. Short description of program.
-#: src/addr2line.c:86
+#: src/addr2line.c:90
msgid ""
"Locate source files and line information for ADDRs (in a.out by default)."
msgstr ""
@@ -859,26 +862,25 @@ msgstr ""
"w a.out)."
#. Strings for arguments in help texts.
-#: src/addr2line.c:90
+#: src/addr2line.c:94
msgid "[ADDR...]"
msgstr "[ADRES…]"
-#: src/addr2line.c:519
-#, c-format
+#: src/addr2line.c:527
msgid "Section syntax requires exactly one module"
msgstr "Składnia sekcji wymaga dokładnie jednego modułu"
-#: src/addr2line.c:542
+#: src/addr2line.c:549
#, c-format
msgid "offset %#<PRIxMAX> lies outside section '%s'"
msgstr "offset %#<PRIxMAX> leży poza sekcjÄ… „%sâ€"
-#: src/addr2line.c:652
+#: src/addr2line.c:659
#, c-format
msgid "cannot find symbol '%s'"
msgstr "nie można odnaleźć symbolu „%sâ€"
-#: src/addr2line.c:657
+#: src/addr2line.c:664
#, c-format
msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
msgstr "offset %#<PRIxMAX> leży poza zawartoÅ›ciÄ… „%sâ€"
@@ -1047,112 +1049,110 @@ msgstr "nie można wykonać stat na archiwum „%sâ€"
msgid "no entry %s in archive\n"
msgstr "brak wpisu %s w archiwum\n"
-#: src/ar.c:472 src/ar.c:927 src/ar.c:1134
-#, c-format
+#: src/ar.c:472 src/ar.c:926 src/ar.c:1132
msgid "cannot create hash table"
msgstr "nie można utworzyć tabeli mieszającej"
-#: src/ar.c:479 src/ar.c:934 src/ar.c:1143
-#, c-format
+#: src/ar.c:478 src/ar.c:932 src/ar.c:1140
msgid "cannot insert into hash table"
msgstr "nie można umieścić w tabeli mieszającej"
-#: src/ar.c:487 src/ranlib.c:148
+#: src/ar.c:486 src/ranlib.c:148
#, c-format
msgid "cannot stat '%s'"
msgstr "nie można wykonać stat na „%sâ€"
-#: src/ar.c:589
+#: src/ar.c:588
#, c-format
msgid "cannot read content of %s: %s"
msgstr "nie można odczytać zawartości %s: %s"
-#: src/ar.c:632
+#: src/ar.c:631
#, c-format
msgid "cannot open %.*s"
msgstr "nie można otworzyć %.*s"
-#: src/ar.c:654
+#: src/ar.c:653
#, c-format
msgid "failed to write %s"
msgstr "zapisanie %s się nie powiodło"
-#: src/ar.c:666
+#: src/ar.c:665
#, c-format
msgid "cannot change mode of %s"
msgstr "nie można zmienić trybu %s"
-#: src/ar.c:682
+#: src/ar.c:681
#, c-format
msgid "cannot change modification time of %s"
msgstr "nie można zmienić czasu modyfikacji %s"
-#: src/ar.c:728
+#: src/ar.c:727
#, c-format
msgid "cannot rename temporary file to %.*s"
msgstr "nie można zmienić nazwy pliku tymczasowego na %.*s"
-#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222
+#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222
#, c-format
msgid "cannot create new file"
msgstr "nie można utworzyć nowego pliku"
-#: src/ar.c:1225
+#: src/ar.c:1222
#, c-format
msgid "position member %s not found"
msgstr "nie odnaleziono położenia elementu %s"
-#: src/ar.c:1235
+#: src/ar.c:1232
#, c-format
msgid "%s: no entry %s in archive!\n"
msgstr "%s: brak wpisu %s w archiwum.\n"
-#: src/ar.c:1264 src/objdump.c:241
+#: src/ar.c:1261 src/objdump.c:241
#, c-format
msgid "cannot open %s"
msgstr "nie można otworzyć %s"
-#: src/ar.c:1269
+#: src/ar.c:1266
#, c-format
msgid "cannot stat %s"
msgstr "nie można wykonać stat na %s"
-#: src/ar.c:1275
+#: src/ar.c:1272
#, c-format
msgid "%s is no regular file"
msgstr "%s nie jest zwykłym plikiem"
-#: src/ar.c:1288
+#: src/ar.c:1285
#, c-format
msgid "cannot get ELF descriptor for %s: %s\n"
msgstr "nie można uzyskać deskryptora ELF dla %s: %s\n"
-#: src/ar.c:1308
+#: src/ar.c:1305
#, c-format
msgid "cannot read %s: %s"
msgstr "nie można odczytać %s: %s"
-#: src/ar.c:1483
+#: src/ar.c:1480
#, c-format
msgid "cannot represent ar_date"
msgstr "nie można przedstawić ar_date"
-#: src/ar.c:1489
+#: src/ar.c:1486
#, c-format
msgid "cannot represent ar_uid"
msgstr "nie można przedstawić ar_uid"
-#: src/ar.c:1495
+#: src/ar.c:1492
#, c-format
msgid "cannot represent ar_gid"
msgstr "nie można przedstawić ar_gid"
-#: src/ar.c:1501
+#: src/ar.c:1498
#, c-format
msgid "cannot represent ar_mode"
msgstr "nie można przedstawić ar_mode"
-#: src/ar.c:1507
+#: src/ar.c:1504
#, c-format
msgid "cannot represent ar_size"
msgstr "nie można przedstawić ar_size"
@@ -1181,73 +1181,73 @@ msgstr "archiwum „%s†jest za duże"
msgid "cannot read ELF header of %s(%s): %s"
msgstr "nie można odczytać nagłówka ELF %s(%s): %s"
-#: src/elfclassify.c:92
+#: src/elfclassify.c:91
msgid "opening"
msgstr "otwieranie"
-#: src/elfclassify.c:99
+#: src/elfclassify.c:98
msgid "reading"
msgstr "odczytywanie"
-#: src/elfclassify.c:245
+#: src/elfclassify.c:244
msgid "ELF header"
msgstr "nagłówek ELF"
-#: src/elfclassify.c:256
+#: src/elfclassify.c:255
msgid "program headers"
msgstr "nagłówki programu"
-#: src/elfclassify.c:265
+#: src/elfclassify.c:264
msgid "program header"
msgstr "nagłówek programu"
-#: src/elfclassify.c:285
+#: src/elfclassify.c:284
msgid "section headers"
msgstr "nagłówki sekcji"
-#: src/elfclassify.c:296
+#: src/elfclassify.c:295
msgid "section header string table index"
msgstr "sekcja nagłówek ciąg tabela indeks"
-#: src/elfclassify.c:310
+#: src/elfclassify.c:309
msgid "could not obtain section header"
msgstr "nie można uzyskać nagłówka sekcji"
-#: src/elfclassify.c:316
+#: src/elfclassify.c:315
msgid "could not obtain section name"
msgstr "nie można uzyskać nazwy sekcji"
-#: src/elfclassify.c:829
+#: src/elfclassify.c:828
msgid "writing to standard output"
msgstr "zapisywanie do standardowego wyjścia"
-#: src/elfclassify.c:856
+#: src/elfclassify.c:855
msgid "reading from standard input"
msgstr "odczytywanie ze standardowego wejścia"
-#: src/elfclassify.c:877
+#: src/elfclassify.c:876
msgid "Classification options"
msgstr "Opcje klasyfikacji"
-#: src/elfclassify.c:879
+#: src/elfclassify.c:878
msgid "File looks like an ELF object or archive/static library (default)"
msgstr ""
"Plik wygląda jak obiekt ELF lub archiwum/biblioteka statyczna (domyślnie)"
-#: src/elfclassify.c:882
+#: src/elfclassify.c:881
msgid "File is an regular ELF object (not an archive/static library)"
msgstr ""
"Plik jest zwykłym obiektem ELF (nie jest archiwum/biblioteką statyczną)"
-#: src/elfclassify.c:885
+#: src/elfclassify.c:884
msgid "File is an ELF archive or static library"
msgstr "Plik jest archiwum lub bibliotekÄ… statycznÄ… ELF"
-#: src/elfclassify.c:888
+#: src/elfclassify.c:887
msgid "File is an ELF core dump file"
msgstr "Plik jest plikiem zrzutu core ELF"
-#: src/elfclassify.c:891
+#: src/elfclassify.c:890
msgid ""
"File is an ELF file with symbol table or .debug_* sections and can be "
"stripped further"
@@ -1255,60 +1255,60 @@ msgstr ""
"Plik jest plikiem ELF z tabelą symboli lub sekcjami .debug_* i może być "
"dalej okrojony"
-#: src/elfclassify.c:894
+#: src/elfclassify.c:893
msgid "File is (primarily) an ELF program executable (not primarily a DSO)"
msgstr "Plik jest (głównie) wykonywalnym programem ELF (nie jest głównie DSO)"
-#: src/elfclassify.c:897
+#: src/elfclassify.c:896
msgid "File is an ELF program executable (might also be a DSO)"
msgstr "Plik jest wykonywalnym programem ELF (może być także DSO)"
-#: src/elfclassify.c:900
+#: src/elfclassify.c:899
msgid ""
"File is (primarily) an ELF shared object (DSO) (not primarily an executable)"
msgstr ""
"Plik jest (głównie) obiektem współdzielonym ELF (DSO) (nie jest głównie "
"plikiem wykonywalnym)"
-#: src/elfclassify.c:903
+#: src/elfclassify.c:902
msgid "File is an ELF shared object (DSO) (might also be an executable)"
msgstr ""
"Plik jest obiektem współdzielonym ELF (DSO) (może być także plikiem "
"wykonywalnym)"
-#: src/elfclassify.c:907
+#: src/elfclassify.c:906
msgid "File is a linux kernel module"
msgstr "Plik jest modułem jądra Linux"
-#: src/elfclassify.c:909
+#: src/elfclassify.c:908
msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)"
msgstr ""
"Plik jest wyłącznie plikiem debugowania ELF (oddzielne .debug, .dwo lub "
"wieloplikowe dwz)"
-#: src/elfclassify.c:912
+#: src/elfclassify.c:911
msgid "File is a loadable ELF object (program or shared object)"
msgstr ""
"Plik jest wczytywalnym obiektem ELF (programem lub obiektem współdzielonym)"
-#: src/elfclassify.c:941
+#: src/elfclassify.c:940
msgid "Input flags"
msgstr "Flagi wejścia"
-#: src/elfclassify.c:943
+#: src/elfclassify.c:942
msgid "Only classify regular (not symlink nor special device) files"
msgstr ""
"Klasyfikuje tylko zwykłe (niebędące dowiązaniami symbolicznymi lub "
"urzÄ…dzeniami specjalnymi) pliki"
-#: src/elfclassify.c:945
+#: src/elfclassify.c:944
msgid ""
"Also read file names to process from standard input, separated by newlines"
msgstr ""
"Odczytuje także nazwy plików do przetworzenia ze standardowego wejścia, "
"rozdzielone znakami nowego wiersza"
-#: src/elfclassify.c:948
+#: src/elfclassify.c:947
msgid ""
"Also read file names to process from standard input, separated by ASCII NUL "
"bytes"
@@ -1316,57 +1316,57 @@ msgstr ""
"Odczytuje także nazwy plików do przetworzenia ze standardowego wejścia, "
"rozdzielone bajtami NUL ASCII"
-#: src/elfclassify.c:951
+#: src/elfclassify.c:950
msgid "Do not read files from standard input (default)"
msgstr "Bez odczytywania plików ze standardowego wejścia (domyślnie)"
-#: src/elfclassify.c:953
+#: src/elfclassify.c:952
msgid "Try to open compressed files or embedded (kernel) ELF images"
msgstr "Próbuje otwierać skompresowane pliki lub osadzone obrazy ELF (jądra)"
-#: src/elfclassify.c:956
+#: src/elfclassify.c:955
msgid "Output flags"
msgstr "Flagi wyjścia"
-#: src/elfclassify.c:958
+#: src/elfclassify.c:957
msgid "Output names of files, separated by newline"
msgstr "Wyświetla nazwy plików, rozdzielone znakami nowego wiersza"
-#: src/elfclassify.c:960
+#: src/elfclassify.c:959
msgid "Output names of files, separated by ASCII NUL"
msgstr "Wyświetla nazwy plików, rozdzielone znakami NUL ASCII"
-#: src/elfclassify.c:962
+#: src/elfclassify.c:961
msgid "Do not output file names"
msgstr "Bez wyświetlania nazw plików"
-#: src/elfclassify.c:964
+#: src/elfclassify.c:963
msgid "If printing file names, print matching files (default)"
msgstr "Podczas wyświetlana nazw plików wyświetla pasujące pliki (domyślnie)"
-#: src/elfclassify.c:966
+#: src/elfclassify.c:965
msgid "If printing file names, print files that do not match"
msgstr "Podczas wyświetlania nazw plików wyświetla niepasujące pliki"
-#: src/elfclassify.c:968
+#: src/elfclassify.c:967
msgid "Additional flags"
msgstr "Dodatkowe flagi"
-#: src/elfclassify.c:970
+#: src/elfclassify.c:969
msgid "Output additional information (can be specified multiple times)"
msgstr "Wyświetla dodatkowe informacje (można podać wiele razy)"
-#: src/elfclassify.c:972
+#: src/elfclassify.c:971
msgid "Suppress some error output (counterpart to --verbose)"
msgstr "Zmniejsza wyjście błędów (odpowiednik opcji --verbose)"
#. Strings for arguments in help texts.
-#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77
+#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77
#: src/readelf.c:158
msgid "FILE..."
msgstr "PLIK…"
-#: src/elfclassify.c:981
+#: src/elfclassify.c:980
msgid ""
"Determine the type of an ELF file.\n"
"\n"
@@ -1633,14 +1633,14 @@ msgstr "%s %s różnią się: luka"
msgid "Invalid value '%s' for --gaps parameter."
msgstr "Nieprawidłowa wartość „%s†dla parametru --gaps."
-#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141
-#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067
+#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141
+#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070
#: src/unstrip.c:2195 src/unstrip.c:2224
#, c-format
msgid "cannot open '%s'"
msgstr "nie można otworzyć „%sâ€"
-#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158
+#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158
#, c-format
msgid "cannot create ELF descriptor for '%s': %s"
msgstr "nie można utworzyć deskryptora ELF dla „%sâ€: %s"
@@ -1650,7 +1650,7 @@ msgstr "nie można utworzyć deskryptora ELF dla „%sâ€: %s"
msgid "cannot create EBL descriptor for '%s'"
msgstr "nie można utworzyć deskryptora EBL dla „%sâ€"
-#: src/elfcmp.c:761 src/findtextrel.c:394
+#: src/elfcmp.c:761 src/findtextrel.c:385
#, c-format
msgid "cannot get section header of section %zu: %s"
msgstr "nie można uzyskać nagłówka sekcji dla sekcji %zu: %s"
@@ -1665,7 +1665,7 @@ msgstr "nie można uzyskać zawartości sekcji %zu: %s"
msgid "cannot get relocation: %s"
msgstr "nie można uzyskać relokacji: %s"
-#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117
+#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117
#, c-format
msgid "-o option specified twice"
msgstr "OpcjÄ™ -o podano dwukrotnie"
@@ -1686,7 +1686,7 @@ msgstr "nieznany typ kompresji „%sâ€"
msgid "No input file given"
msgstr "Nie podano pliku wejściowego"
-#: src/elfcompress.c:151 src/elfcompress.c:1350
+#: src/elfcompress.c:151 src/elfcompress.c:1349
#, c-format
msgid "Only one input file allowed together with '-o'"
msgstr "Tylko jeden plik wejÅ›ciowy jest dozwolony z „-oâ€"
@@ -1941,7 +1941,7 @@ msgstr ""
#: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655
#: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106
-#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458
+#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać danych sekcji\n"
@@ -3511,7 +3511,7 @@ msgstr ""
"sekcja [%2d]: „%sâ€: nieznany typ notatki pliku core %<PRIu32> pod offsetem "
"%zu\n"
-#: src/elflint.c:4397
+#: src/elflint.c:4404
#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
@@ -3520,7 +3520,7 @@ msgstr ""
"phdr[%d]: nieznany typ notatki pliku obiektu %<PRIu32> o nazwie właściciela "
"„%s†pod offsetem %zu\n"
-#: src/elflint.c:4402
+#: src/elflint.c:4409
#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
@@ -3529,37 +3529,37 @@ msgstr ""
"sekcja [%2d] „%sâ€: nieznany typ notatki pliku obiektu %<PRIu32> o nazwie "
"właściciela „%s†pod offsetem %zu\n"
-#: src/elflint.c:4421
+#: src/elflint.c:4428
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr "phdr[%d]: brak określonych wpisów notatek dla typu pliku\n"
-#: src/elflint.c:4441
+#: src/elflint.c:4448
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr "phdr[%d]: nie można uzyskać zawartości sekcji notatki: %s\n"
-#: src/elflint.c:4444
+#: src/elflint.c:4451
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr "phdr[%d]: dodatkowe %<PRIu64> B po ostatniej notatce\n"
-#: src/elflint.c:4465
+#: src/elflint.c:4472
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr "sekcja [%2d] „%sâ€: brak okreÅ›lonych wpisów notatek dla typu pliku\n"
-#: src/elflint.c:4472
+#: src/elflint.c:4479
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać zawartoÅ›ci sekcji notatek\n"
-#: src/elflint.c:4475
+#: src/elflint.c:4482
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr "sekcja [%2d] „%sâ€: dodatkowe %<PRIu64> B po ostatniej notatce\n"
-#: src/elflint.c:4493
+#: src/elflint.c:4500
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
@@ -3567,135 +3567,135 @@ msgstr ""
"tylko pliki wykonywalne, obiekty współdzielone i pliki core mogą mieć "
"nagłówki programu\n"
-#: src/elflint.c:4508
+#: src/elflint.c:4515
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr "nie można uzyskać wpisu nagłówka programu %d: %s\n"
-#: src/elflint.c:4518
+#: src/elflint.c:4525
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
"wpis nagłówka programu %d: nieznany typ wpisu nagłówka programu %#<PRIx64>\n"
-#: src/elflint.c:4529
+#: src/elflint.c:4536
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr "więcej niż jeden wpis INTERP w nagłówku programu\n"
-#: src/elflint.c:4537
+#: src/elflint.c:4544
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr "więcej niż jeden wpis TLS w nagłówku programu\n"
-#: src/elflint.c:4544
+#: src/elflint.c:4551
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr "statyczny plik wykonywalny nie może mieć sekcji dynamicznych\n"
-#: src/elflint.c:4558
+#: src/elflint.c:4565
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr "odniesienie sekcji dynamicznej w nagłówku programu ma błędny offset\n"
-#: src/elflint.c:4561
+#: src/elflint.c:4568
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr "różne rozmiary sekcji dynamicznej w nagłówku programu i sekcji\n"
-#: src/elflint.c:4571
+#: src/elflint.c:4578
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr "więcej niż jeden wpis GNU_RELRO w nagłówku programu\n"
-#: src/elflint.c:4592
+#: src/elflint.c:4599
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr "wczytywalny segment wskazywany przez GNU_RELRO nie jest zapisywalny\n"
-#: src/elflint.c:4603
+#: src/elflint.c:4610
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr "flagi wczytywalnego segmentu [%u] nie pasujÄ… do flag GNU_RELRO [%u]\n"
-#: src/elflint.c:4610
+#: src/elflint.c:4617
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
"flagi GNU_RELRO [%u] nie sÄ… podzbiorem flag wczytywalnego segmentu [%u]\n"
-#: src/elflint.c:4619 src/elflint.c:4642
+#: src/elflint.c:4626 src/elflint.c:4649
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr "segment %s nie zawiera siÄ™ we wczytywalnym segmencie\n"
-#: src/elflint.c:4648
+#: src/elflint.c:4655
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr ""
"offsety nagłówka programu w nagłówku ELF i wpisie PHDR nie zgadzają się"
-#: src/elflint.c:4675
+#: src/elflint.c:4682
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
"odniesienie tabeli wyszukiwania ramki wywołania w nagłówku programu ma "
"błędny offset\n"
-#: src/elflint.c:4678
+#: src/elflint.c:4685
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
"różne rozmiary tabel wyszukiwania ramki wywołania w nagłówku programu "
"i sekcji\n"
-#: src/elflint.c:4691
+#: src/elflint.c:4698
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr "PT_GNU_EH_FRAME jest obecne, ale brak sekcji .eh_frame_hdr\n"
-#: src/elflint.c:4699
+#: src/elflint.c:4706
#, c-format
msgid "call frame search table must be allocated\n"
msgstr "tabela wyszukiwania ramki wywołania musi być przydzielona\n"
-#: src/elflint.c:4702
+#: src/elflint.c:4709
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr "sekcja [%2zu] „%sâ€: musi być przydzielona\n"
-#: src/elflint.c:4706
+#: src/elflint.c:4713
#, c-format
msgid "call frame search table must not be writable\n"
msgstr "tabela wyszukiwania ramki wywołania nie może być zapisywalna\n"
-#: src/elflint.c:4709
+#: src/elflint.c:4716
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr "sekcja [%2zu] „%s†nie może być zapisywalna\n"
-#: src/elflint.c:4714
+#: src/elflint.c:4721
#, c-format
msgid "call frame search table must not be executable\n"
msgstr "tabela wyszukiwania ramki wywołania nie może być wykonywalna\n"
-#: src/elflint.c:4717
+#: src/elflint.c:4724
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr "sekcja [%2zu] „%s†nie może być wykonywalna\n"
-#: src/elflint.c:4728
+#: src/elflint.c:4735
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr "wpis nagłówka programu %d: rozmiar pliku większy niż rozmiar pamięci\n"
-#: src/elflint.c:4735
+#: src/elflint.c:4742
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr "wpis nagłówka programu %d: wyrównanie nie jest potęgą 2\n"
-#: src/elflint.c:4738
+#: src/elflint.c:4745
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
@@ -3704,7 +3704,7 @@ msgstr ""
"wpis nagłówka programu %d: offset w pliku i adres wirtualny nie są "
"wielokrotnością wyrównania\n"
-#: src/elflint.c:4751
+#: src/elflint.c:4758
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
@@ -3713,106 +3713,106 @@ msgstr ""
"plik wykonywalny/DSO z sekcją .eh_frame_hdr nie ma wpisu nagłówka programu "
"PT_GNU_EH_FRAME"
-#: src/elflint.c:4785
+#: src/elflint.c:4792
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr "nie można odczytać nagłówka ELF: %s\n"
-#: src/elflint.c:4797
+#: src/elflint.c:4804
#, c-format
msgid "cannot create backend for ELF file\n"
msgstr "nie można utworzyć zaplecza dla pliku ELF\n"
-#: src/elflint.c:4818
+#: src/elflint.c:4825
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n"
-#: src/findtextrel.c:60
+#: src/findtextrel.c:61
msgid "Input Selection:"
msgstr "Wybór wejścia:"
-#: src/findtextrel.c:61
+#: src/findtextrel.c:62
msgid "Prepend PATH to all file names"
msgstr "Dołącza ŚCIEŻKĘ do wszystkich nazw plików"
-#: src/findtextrel.c:63
+#: src/findtextrel.c:64
msgid "Use PATH as root of debuginfo hierarchy"
msgstr "Używa ŚCIEŻKI jako korzenia dla hierarchii debuginfo"
#. Short description of program.
-#: src/findtextrel.c:70
+#: src/findtextrel.c:71
msgid "Locate source of text relocations in FILEs (a.out by default)."
msgstr "Odnajduje źródło relokacji tekstu w PLIKACH (domyślnie a.out)."
#. Strings for arguments in help texts.
-#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80
+#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80
#: src/strings.c:87 src/strip.c:101
msgid "[FILE...]"
msgstr "[PLIK…]"
-#: src/findtextrel.c:222
+#: src/findtextrel.c:224
#, c-format
msgid "cannot get ELF header '%s': %s"
msgstr "nie można uzyskać nagłówka ELF „%sâ€: %s"
-#: src/findtextrel.c:233
+#: src/findtextrel.c:235
#, c-format
msgid "'%s' is not a DSO or PIE"
msgstr "„%s†nie jest DSO ani PIE"
-#: src/findtextrel.c:253
+#: src/findtextrel.c:255
#, c-format
msgid "getting get section header of section %zu: %s"
msgstr "uzyskiwanie nagłówka sekcji dla sekcji %zu: %s"
-#: src/findtextrel.c:277
+#: src/findtextrel.c:279
#, c-format
msgid "cannot read dynamic section: %s"
msgstr "nie można odczytać sekcji dynamicznej: %s"
-#: src/findtextrel.c:298
+#: src/findtextrel.c:300
#, c-format
msgid "no text relocations reported in '%s'"
msgstr "brak relokacji tekstu w „%sâ€"
-#: src/findtextrel.c:310
+#: src/findtextrel.c:311
#, c-format
msgid "while reading ELF file"
msgstr "podczas odczytywania pliku ELF"
-#: src/findtextrel.c:314
+#: src/findtextrel.c:315
#, c-format
msgid "cannot get program header count: %s"
msgstr "nie można uzyskać liczby nagłówków programu: %s"
-#: src/findtextrel.c:325 src/findtextrel.c:342
+#: src/findtextrel.c:326 src/findtextrel.c:341
#, c-format
msgid "cannot get program header index at offset %zd: %s"
msgstr "nie można uzyskać indeksu nagłówka programu pod offsetem %zd: %s"
-#: src/findtextrel.c:406
+#: src/findtextrel.c:397
#, c-format
msgid "cannot get symbol table section %zu in '%s': %s"
msgstr "nie można uzyskać sekcji tabeli symboli %zu w „%sâ€: %s"
-#: src/findtextrel.c:427 src/findtextrel.c:450
+#: src/findtextrel.c:418 src/findtextrel.c:441
#, c-format
msgid "cannot get relocation at index %d in section %zu in '%s': %s"
msgstr "nie można uzyskać relokacji pod indeksem %d w sekcji %zu w „%sâ€: %s"
-#: src/findtextrel.c:516
+#: src/findtextrel.c:507
#, c-format
msgid "%s not compiled with -fpic/-fPIC\n"
msgstr "%s nie został skompilowany z -fpic/-fPIC\n"
-#: src/findtextrel.c:570
+#: src/findtextrel.c:561
#, c-format
msgid ""
"the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
msgstr "plik zawierający funkcję „%s†nie został skompilowany z -fpic/-fPIC\n"
-#: src/findtextrel.c:577 src/findtextrel.c:597
+#: src/findtextrel.c:568 src/findtextrel.c:588
#, c-format
msgid ""
"the file containing the function '%s' might not be compiled with -fpic/-"
@@ -3820,7 +3820,7 @@ msgid ""
msgstr ""
"plik zawierający funkcję „%s†mógł nie zostać skompilowany z -fpic/-fPIC\n"
-#: src/findtextrel.c:585
+#: src/findtextrel.c:576
#, c-format
msgid ""
"either the file containing the function '%s' or the file containing the "
@@ -3829,7 +3829,7 @@ msgstr ""
"plik zawierający funkcję „%s†lub plik zawierający funkcję „%s†nie został "
"skompilowany z -fpic/-fPIC\n"
-#: src/findtextrel.c:605
+#: src/findtextrel.c:596
#, c-format
msgid ""
"a relocation modifies memory at offset %llu in a write-protected segment\n"
@@ -3936,12 +3936,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s"
msgstr "%s: BÅÄ„D WEWNĘTRZNY %d (%s): %s"
#: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308
-#: src/strip.c:2763
+#: src/strip.c:2759
#, c-format
msgid "while closing '%s'"
msgstr "podczas zamykania „%sâ€"
-#: src/nm.c:403 src/objdump.c:280 src/strip.c:818
+#: src/nm.c:403 src/objdump.c:280 src/strip.c:820
#, c-format
msgid "%s: File format not recognized"
msgstr "%s: nie rozpoznano formatu pliku"
@@ -3975,24 +3975,23 @@ msgstr "nie można przywrócić offsetu w archiwum na początek"
msgid "%s%s%s: file format not recognized"
msgstr "%s%s%s: nie rozpoznano formatu pliku"
-#: src/nm.c:705
-#, c-format
+#: src/nm.c:703
msgid "cannot create search tree"
msgstr "nie można utworzyć drzewa wyszukiwania"
-#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637
-#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009
-#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719
-#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530
-#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533
-#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470
-#: src/strip.c:1084
+#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637
+#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017
+#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724
+#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528
+#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597
+#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468
+#: src/strip.c:1086
#, c-format
msgid "cannot get section header string table index"
msgstr "nie można uzyskać indeksu tabeli ciągów nagłówków sekcji"
#. We always print this prolog.
-#: src/nm.c:771
+#: src/nm.c:768
#, c-format
msgid ""
"\n"
@@ -4006,7 +4005,7 @@ msgstr ""
"\n"
#. The header line.
-#: src/nm.c:774
+#: src/nm.c:771
#, c-format
msgid ""
"%*s%-*s %-*s Class Type %-*s %*s Section\n"
@@ -4015,7 +4014,7 @@ msgstr ""
"%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n"
"\n"
-#: src/nm.c:776
+#: src/nm.c:773
#, fuzzy
#| msgid " Name: "
msgctxt "sysv"
@@ -4023,45 +4022,45 @@ msgid "Name"
msgstr " Nazwa: "
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:778
+#: src/nm.c:775
msgctxt "sysv"
msgid "Value"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:780
+#: src/nm.c:777
msgctxt "sysv"
msgid "Size"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:782
+#: src/nm.c:779
msgctxt "sysv"
msgid "Line"
msgstr ""
-#: src/nm.c:1250
+#: src/nm.c:1246
#, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr "%s: rozmiar wpisu w sekcji %zd „%s†nie jest tym, czego oczekiwano"
-#: src/nm.c:1255
+#: src/nm.c:1251
#, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: rozmiar sekcji %zd „%s†nie jest wielokrotnością rozmiaru wpisu"
-#: src/nm.c:1336
+#: src/nm.c:1331
#, c-format
msgid "%s: entries (%zd) in section %zd `%s' is too large"
msgstr "%s: wpisy (%zd) w sekcji %zd „%s†są za duże"
#. XXX Add machine specific object file types.
-#: src/nm.c:1572
+#: src/nm.c:1567
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: nieprawidłowe działanie"
-#: src/nm.c:1622
+#: src/nm.c:1617
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: brak symboli"
@@ -4104,11 +4103,11 @@ msgstr "Nie podano działania.\n"
msgid "while close `%s'"
msgstr "podczas zamykania „%sâ€"
-#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296
+#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303
msgid "INVALID SYMBOL"
msgstr "NIEPRAWIDÅOWY SYMBOL"
-#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332
+#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339
msgid "INVALID SECTION"
msgstr "NIEPRAWIDÅOWA SEKCJA"
@@ -4133,12 +4132,10 @@ msgid "Contents of section %s:\n"
msgstr "Zawartość sekcji %s:\n"
#: src/objdump.c:687
-#, c-format
msgid "cannot disassemble"
msgstr "nie można deasemblować"
-#: src/objdump.c:760
-#, c-format
+#: src/objdump.c:758
msgid "cannot create backend for elf file"
msgstr "nie można utworzyć zaplecza dla pliku ELF"
@@ -4324,20 +4321,20 @@ msgstr "Nieznana sekcja debugowania DWARF „%sâ€.\n"
msgid "cannot generate Elf descriptor: %s"
msgstr "nie można utworzyć deskryptora ELF: %s"
-#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179
+#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181
#, c-format
msgid "cannot determine number of sections: %s"
msgstr "nie można określić liczby sekcji: %s"
-#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475
+#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469
#, c-format
msgid "cannot get section: %s"
msgstr "nie można uzyskać sekcji: %s"
-#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764
-#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610
-#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222
-#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470
+#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827
+#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611
+#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223
+#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471
#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056
#, c-format
msgid "cannot get section header: %s"
@@ -4348,8 +4345,8 @@ msgstr "nie można uzyskać nagłówka sekcji: %s"
msgid "cannot get section name"
msgstr "nie można uzyskać nazwy sekcji"
-#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713
-#: src/readelf.c:10891
+#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782
+#: src/readelf.c:10960
#, c-format
msgid "cannot get %s content: %s"
msgstr "nie można uzyskać zwartości %s: %s"
@@ -4409,48 +4406,48 @@ msgstr "nie można odczytać nagłówka ELF: %s"
msgid "cannot create EBL handle"
msgstr "nie można utworzyć uchwytu EBL"
-#: src/readelf.c:961
+#: src/readelf.c:959
#, c-format
msgid "cannot determine number of program headers: %s"
msgstr "nie można określić liczby nagłówków programu: %s"
-#: src/readelf.c:993
+#: src/readelf.c:991
#, c-format
msgid "cannot read ELF: %s"
msgstr "nie można odczytać danych ELF: %s"
-#: src/readelf.c:1054
+#: src/readelf.c:1052
msgid "NONE (None)"
msgstr "NONE (żaden)"
-#: src/readelf.c:1055
+#: src/readelf.c:1053
msgid "REL (Relocatable file)"
msgstr "REL (plik relokowalny)"
-#: src/readelf.c:1056
+#: src/readelf.c:1054
msgid "EXEC (Executable file)"
msgstr "EXEC (plik wykonywalny)"
-#: src/readelf.c:1057
+#: src/readelf.c:1055
msgid "DYN (Shared object file)"
msgstr "DYN (plik obiektu współdzielonego)"
-#: src/readelf.c:1058
+#: src/readelf.c:1056
msgid "CORE (Core file)"
msgstr "CORE (plik core)"
-#: src/readelf.c:1063
+#: src/readelf.c:1061
#, c-format
msgid "OS Specific: (%x)\n"
msgstr "Zależny od systemu: (%x)\n"
#. && e_type <= ET_HIPROC always true
-#: src/readelf.c:1065
+#: src/readelf.c:1063
#, c-format
msgid "Processor Specific: (%x)\n"
msgstr "Zależny od procesora: (%x)\n"
-#: src/readelf.c:1075
+#: src/readelf.c:1073
msgid ""
"ELF Header:\n"
" Magic: "
@@ -4458,7 +4455,7 @@ msgstr ""
"Nagłówek ELF:\n"
" Magic: "
-#: src/readelf.c:1079
+#: src/readelf.c:1077
#, c-format
msgid ""
"\n"
@@ -4467,123 +4464,123 @@ msgstr ""
"\n"
" Klasa: %s\n"
-#: src/readelf.c:1084
+#: src/readelf.c:1082
#, c-format
msgid " Data: %s\n"
msgstr " Dane: %s\n"
-#: src/readelf.c:1090
+#: src/readelf.c:1088
#, c-format
msgid " Ident Version: %hhd %s\n"
msgstr " Wersja Ident: %hhd %s\n"
-#: src/readelf.c:1092 src/readelf.c:1114
+#: src/readelf.c:1090 src/readelf.c:1112
msgid "(current)"
msgstr "(bieżąca)"
-#: src/readelf.c:1096
+#: src/readelf.c:1094
#, c-format
msgid " OS/ABI: %s\n"
msgstr " System operacyjny/ABI: %s\n"
-#: src/readelf.c:1099
+#: src/readelf.c:1097
#, c-format
msgid " ABI Version: %hhd\n"
msgstr " Wersja ABI: %hhd\n"
-#: src/readelf.c:1102
+#: src/readelf.c:1100
msgid " Type: "
msgstr " Typ: "
-#: src/readelf.c:1107
+#: src/readelf.c:1105
#, c-format
msgid " Machine: %s\n"
msgstr " Komputer: %s\n"
-#: src/readelf.c:1109
+#: src/readelf.c:1107
#, c-format
msgid " Machine: <unknown>: 0x%x\n"
msgstr " Komputer: <nieznany>: 0x%x\n"
-#: src/readelf.c:1112
+#: src/readelf.c:1110
#, c-format
msgid " Version: %d %s\n"
msgstr " Wersja: %d %s\n"
-#: src/readelf.c:1116
+#: src/readelf.c:1114
#, c-format
msgid " Entry point address: %#<PRIx64>\n"
msgstr " Adres punktu wejściowego: %#<PRIx64>\n"
-#: src/readelf.c:1119
+#: src/readelf.c:1117
#, c-format
msgid " Start of program headers: %<PRId64> %s\n"
msgstr " Początek nagłówków programu: %<PRId64> %s\n"
-#: src/readelf.c:1120 src/readelf.c:1123
+#: src/readelf.c:1118 src/readelf.c:1121
msgid "(bytes into file)"
msgstr "(bajtów w pliku)"
-#: src/readelf.c:1122
+#: src/readelf.c:1120
#, c-format
msgid " Start of section headers: %<PRId64> %s\n"
msgstr " Początek nagłówków sekcji: %<PRId64> %s\n"
-#: src/readelf.c:1125
+#: src/readelf.c:1123
#, c-format
msgid " Flags: %s\n"
msgstr " Flagi: %s\n"
-#: src/readelf.c:1128
+#: src/readelf.c:1126
#, c-format
msgid " Size of this header: %<PRId16> %s\n"
msgstr " Rozmiar tego nagłówka: %<PRId16> %s\n"
-#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149
+#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147
msgid "(bytes)"
msgstr "(bajtów)"
-#: src/readelf.c:1131
+#: src/readelf.c:1129
#, c-format
msgid " Size of program header entries: %<PRId16> %s\n"
msgstr " Rozmiar wpisów nagłówka programu: %<PRId16> %s\n"
-#: src/readelf.c:1134
+#: src/readelf.c:1132
#, c-format
msgid " Number of program headers entries: %<PRId16>"
msgstr " Liczba wpisów nagłówków programu: %<PRId16>"
-#: src/readelf.c:1141
+#: src/readelf.c:1139
#, c-format
msgid " (%<PRIu32> in [0].sh_info)"
msgstr " (%<PRIu32> w [0].sh_info)"
-#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175
+#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173
msgid " ([0] not available)"
msgstr " ([0] niedostępny)"
-#: src/readelf.c:1148
+#: src/readelf.c:1146
#, c-format
msgid " Size of section header entries: %<PRId16> %s\n"
msgstr " Rozmiar wpisów nagłówka sekcji: %<PRId16> %s\n"
-#: src/readelf.c:1151
+#: src/readelf.c:1149
#, c-format
msgid " Number of section headers entries: %<PRId16>"
msgstr " Liczba wpisów nagłówków sekcji: %<PRId16>"
-#: src/readelf.c:1158
+#: src/readelf.c:1156
#, c-format
msgid " (%<PRIu32> in [0].sh_size)"
msgstr " (%<PRIu32> w [0].sh_size)"
#. We managed to get the zeroth section.
-#: src/readelf.c:1171
+#: src/readelf.c:1169
#, c-format
msgid " (%<PRIu32> in [0].sh_link)"
msgstr " (%<PRIu32> w [0].sh_link)"
-#: src/readelf.c:1179
+#: src/readelf.c:1177
#, c-format
msgid ""
" Section header string table index: XINDEX%s\n"
@@ -4592,7 +4589,7 @@ msgstr ""
" Indeks tabeli ciągów nagłówków sekcji: XINDEX%s\n"
"\n"
-#: src/readelf.c:1183
+#: src/readelf.c:1181
#, c-format
msgid ""
" Section header string table index: %<PRId16>\n"
@@ -4601,12 +4598,12 @@ msgstr ""
" Indeks tabeli ciągów nagłówków sekcji: %<PRId16>\n"
"\n"
-#: src/readelf.c:1230 src/readelf.c:1440
+#: src/readelf.c:1227 src/readelf.c:1435
#, c-format
msgid "cannot get number of sections: %s"
msgstr "nie można uzyskać liczby sekcji: %s"
-#: src/readelf.c:1233
+#: src/readelf.c:1230
#, c-format
msgid ""
"There are %zd section headers, starting at offset %#<PRIx64>:\n"
@@ -4615,16 +4612,16 @@ msgstr ""
"Liczba nagłówków sekcji: %zd, rozpoczynających się od offsetu %#<PRIx64>:\n"
"\n"
-#: src/readelf.c:1242
+#: src/readelf.c:1238
#, c-format
msgid "cannot get section header string table index: %s"
msgstr "nie można uzyskać indeksu tabeli ciągów nagłówków sekcji: %s"
-#: src/readelf.c:1245
+#: src/readelf.c:1241
msgid "Section Headers:"
msgstr "Nagłówki sekcji:"
-#: src/readelf.c:1248
+#: src/readelf.c:1244
msgid ""
"[Nr] Name Type Addr Off Size ES Flags Lk "
"Inf Al"
@@ -4632,7 +4629,7 @@ msgstr ""
"[Nr] Nazwa Typ Adres Offset Rozm. ES Flagi Lk "
"Inf Al"
-#: src/readelf.c:1250
+#: src/readelf.c:1246
msgid ""
"[Nr] Name Type Addr Off Size ES "
"Flags Lk Inf Al"
@@ -4640,36 +4637,36 @@ msgstr ""
"[Nr] Nazwa Typ Adres Offset Rozmiar ES "
"Flagi Lk Inf Al"
-#: src/readelf.c:1255
+#: src/readelf.c:1251
msgid " [Compression Size Al]"
msgstr " [Kompresja Rozmiar Al]"
-#: src/readelf.c:1257
+#: src/readelf.c:1253
msgid " [Compression Size Al]"
msgstr " [Kompresja Rozmiar Al]"
-#: src/readelf.c:1335
+#: src/readelf.c:1331
#, c-format
msgid "bad compression header for section %zd: %s"
msgstr "błędny nagłówek kompresji dla sekcji %zd: %s"
-#: src/readelf.c:1346
+#: src/readelf.c:1342
#, c-format
msgid "bad gnu compressed size for section %zd: %s"
msgstr "błędny rozmiar kompresji gnu dla sekcji %zd: %s"
-#: src/readelf.c:1364
+#: src/readelf.c:1360
msgid "Program Headers:"
msgstr "Nagłówki programu:"
-#: src/readelf.c:1366
+#: src/readelf.c:1362
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
msgstr ""
" Typ Offset AdresWirt AdresFiz RozmPlik RozmPam Flg "
"Wyrównanie"
-#: src/readelf.c:1369
+#: src/readelf.c:1365
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align"
@@ -4677,12 +4674,12 @@ msgstr ""
" Typ Offset AdresWirtualny AdresFizyczny RozmPlik "
"RozmPam Flg Wyrównanie"
-#: src/readelf.c:1426
+#: src/readelf.c:1422
#, c-format
msgid "\t[Requesting program interpreter: %s]\n"
msgstr "\t[Wywołanie interpretera programu: %s]\n"
-#: src/readelf.c:1453
+#: src/readelf.c:1447
msgid ""
"\n"
" Section to Segment mapping:\n"
@@ -4692,12 +4689,12 @@ msgstr ""
" Mapowanie sekcji do segmentów:\n"
" Segment sekcji…"
-#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
+#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
#, c-format
msgid "cannot get program header: %s"
msgstr "nie można uzyskać nagłówka programu: %s"
-#: src/readelf.c:1610
+#: src/readelf.c:1602
#, c-format
msgid ""
"\n"
@@ -4715,7 +4712,7 @@ msgstr[2] ""
"\n"
"Grupa sekcji COMDAT [%2zu] „%s†z podpisem „%s†zawiera %zu wpisów:\n"
-#: src/readelf.c:1615
+#: src/readelf.c:1607
#, c-format
msgid ""
"\n"
@@ -4733,31 +4730,31 @@ msgstr[2] ""
"\n"
"Grupa sekcji [%2zu] „%s†z podpisem „%s†zawiera %zu wpisów:\n"
-#: src/readelf.c:1623
+#: src/readelf.c:1615
msgid "<INVALID SYMBOL>"
msgstr "<NIEPRAWIDÅOWY SYMBOL>"
-#: src/readelf.c:1637
+#: src/readelf.c:1629
msgid "<INVALID SECTION>"
msgstr "<NIEPRAWIDÅOWY SEKCJA>"
-#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635
-#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693
+#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699
+#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757
msgid "Couldn't uncompress section"
msgstr "Nie można dekompresować sekcji"
-#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501
+#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500
#, c-format
msgid "cannot get section [%zd] header: %s"
msgstr "nie można uzyskać nagłówka sekcji [%zd]: %s"
-#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801
-#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409
+#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805
+#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406
#, c-format
msgid "invalid sh_link value in section %zu"
msgstr "nieprawidłowa wartość sh_link w sekcji %zu"
-#: src/readelf.c:1812
+#: src/readelf.c:1821
#, c-format
msgid ""
"\n"
@@ -4783,36 +4780,36 @@ msgstr[2] ""
" Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] "
"'%s'\n"
-#: src/readelf.c:1822
+#: src/readelf.c:1831
msgid " Type Value\n"
msgstr " Typ Wartość\n"
-#: src/readelf.c:1846
+#: src/readelf.c:1855
#, c-format
msgid "Shared library: [%s]\n"
msgstr "Biblioteka współdzielona: [%s]\n"
-#: src/readelf.c:1851
+#: src/readelf.c:1860
#, c-format
msgid "Library soname: [%s]\n"
msgstr "soname biblioteki: [%s]\n"
-#: src/readelf.c:1856
+#: src/readelf.c:1865
#, c-format
msgid "Library rpath: [%s]\n"
msgstr "rpath biblioteki: [%s]\n"
-#: src/readelf.c:1861
+#: src/readelf.c:1870
#, c-format
msgid "Library runpath: [%s]\n"
msgstr "runpath biblioteki: [%s]\n"
-#: src/readelf.c:1881
+#: src/readelf.c:1890
#, c-format
msgid "%<PRId64> (bytes)\n"
msgstr "%<PRId64> (bajtów)\n"
-#: src/readelf.c:1994 src/readelf.c:2184
+#: src/readelf.c:2003 src/readelf.c:2192
#, c-format
msgid ""
"\n"
@@ -4821,7 +4818,7 @@ msgstr ""
"\n"
"Nieprawidłowa tabela symboli pod offsetem %#0<PRIx64>\n"
-#: src/readelf.c:2012 src/readelf.c:2202
+#: src/readelf.c:2020 src/readelf.c:2209
#, c-format
msgid ""
"\n"
@@ -4850,7 +4847,7 @@ msgstr[2] ""
#. The .rela.dyn section does not refer to a specific section but
#. instead of section index zero. Do not try to print a section
#. name.
-#: src/readelf.c:2027 src/readelf.c:2217
+#: src/readelf.c:2035 src/readelf.c:2224
#, c-format
msgid ""
"\n"
@@ -4868,30 +4865,30 @@ msgstr[2] ""
"\n"
"Sekcja relokacji [%2u] „%s†pod offsetem %#0<PRIx64> zawiera %d wpisów:\n"
-#: src/readelf.c:2037
+#: src/readelf.c:2045
msgid " Offset Type Value Name\n"
msgstr " Offset Typ Wartość Nazwa\n"
-#: src/readelf.c:2039
+#: src/readelf.c:2047
msgid " Offset Type Value Name\n"
msgstr " Offset Typ Wartość Nazwa\n"
-#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137
-#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309
-#: src/readelf.c:2331 src/readelf.c:2344
+#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145
+#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316
+#: src/readelf.c:2338 src/readelf.c:2351
msgid "<INVALID RELOC>"
msgstr "<NIEPRAWIDÅOWA RELOKACJA>"
-#: src/readelf.c:2227
+#: src/readelf.c:2234
msgid " Offset Type Value Addend Name\n"
msgstr " Offset Typ Wartość Koniec Nazwa\n"
-#: src/readelf.c:2229
+#: src/readelf.c:2236
msgid " Offset Type Value Addend Name\n"
msgstr ""
" Offset Typ Wartość Koniec Nazwa\n"
-#: src/readelf.c:2467
+#: src/readelf.c:2473
#, c-format
msgid ""
"\n"
@@ -4909,7 +4906,7 @@ msgstr[2] ""
"\n"
"Tabela symboli [%2u] „%s†zawiera %u wpisów:\n"
-#: src/readelf.c:2472
+#: src/readelf.c:2478
#, c-format
msgid " %lu local symbol String table: [%2u] '%s'\n"
msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
@@ -4917,33 +4914,33 @@ msgstr[0] " %lu symbol lokalny Tabela ciÄ…gów: [%2u] „%sâ€\n"
msgstr[1] " %lu symbole lokalne Tabela ciÄ…gów: [%2u] „%sâ€\n"
msgstr[2] " %lu symboli lokalnych Tabela ciÄ…gów: [%2u] „%sâ€\n"
-#: src/readelf.c:2480
+#: src/readelf.c:2486
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n"
-#: src/readelf.c:2482
+#: src/readelf.c:2488
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n"
-#: src/readelf.c:2502
+#: src/readelf.c:2508
#, c-format
msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
-#: src/readelf.c:2595
+#: src/readelf.c:2601
#, c-format
msgid "bad dynamic symbol"
msgstr "błędny symbol dynamiczny"
-#: src/readelf.c:2680
+#: src/readelf.c:2686
msgid "none"
msgstr "brak"
-#: src/readelf.c:2697
+#: src/readelf.c:2703
msgid "| <unknown>"
msgstr "| <nieznany>"
-#: src/readelf.c:2728
+#: src/readelf.c:2733
#, c-format
msgid ""
"\n"
@@ -4969,17 +4966,17 @@ msgstr[2] ""
" Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] "
"„%sâ€\n"
-#: src/readelf.c:2749
+#: src/readelf.c:2754
#, c-format
msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
msgstr " %#06x: Wersja: %hu Plik: %s Licznik: %hu\n"
-#: src/readelf.c:2762
+#: src/readelf.c:2767
#, c-format
msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
msgstr " %#06x: Nazwa: %s Flagi: %s Wersja: %hu\n"
-#: src/readelf.c:2805
+#: src/readelf.c:2809
#, c-format
msgid ""
"\n"
@@ -5005,19 +5002,19 @@ msgstr[2] ""
" Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] "
"„%sâ€\n"
-#: src/readelf.c:2833
+#: src/readelf.c:2837
#, c-format
msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
msgstr ""
" %#06x: Wersja: %hd Flagi: %s Indeks: %hd Licznik: %hd Nazwa: %s\n"
-#: src/readelf.c:2848
+#: src/readelf.c:2852
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr " %#06x: Rodzic %d: %s\n"
#. Print the header.
-#: src/readelf.c:3109
+#: src/readelf.c:3112
#, c-format
msgid ""
"\n"
@@ -5040,15 +5037,15 @@ msgstr[2] ""
"Sekcja symboli wersji [%2u] „%s†zawiera %d wpisów:\n"
" Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] „%sâ€"
-#: src/readelf.c:3137
+#: src/readelf.c:3140
msgid " 0 *local* "
msgstr " 0 *lokalny* "
-#: src/readelf.c:3142
+#: src/readelf.c:3145
msgid " 1 *global* "
msgstr " 1 *globalny* "
-#: src/readelf.c:3184
+#: src/readelf.c:3187
#, c-format
msgid ""
"\n"
@@ -5079,22 +5076,22 @@ msgstr[2] ""
" Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] "
"„%sâ€\n"
-#: src/readelf.c:3206
+#: src/readelf.c:3209
#, no-c-format
msgid " Length Number % of total Coverage\n"
msgstr " Długość Liczba % całości Pokrycie\n"
-#: src/readelf.c:3208
+#: src/readelf.c:3211
#, c-format
msgid " 0 %6<PRIu32> %5.1f%%\n"
msgstr " 0 %6<PRIu32> %5.1f%%\n"
-#: src/readelf.c:3215
+#: src/readelf.c:3218
#, c-format
msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
-#: src/readelf.c:3228
+#: src/readelf.c:3231
#, c-format
msgid ""
" Average number of tests: successful lookup: %f\n"
@@ -5103,37 +5100,37 @@ msgstr ""
" Średnia liczba testów: udane wyszukania: %f\n"
"\t\t\t nieudane wyszukania: %f\n"
-#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376
+#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379
#, c-format
msgid "cannot get data for section %d: %s"
msgstr "nie można uzyskać danych dla sekcji %d: %s"
-#: src/readelf.c:3254
+#: src/readelf.c:3257
#, c-format
msgid "invalid data in sysv.hash section %d"
msgstr "nieprawidłowe dane w sekcji sysv.hash %d"
-#: src/readelf.c:3283
+#: src/readelf.c:3286
#, c-format
msgid "invalid chain in sysv.hash section %d"
msgstr "nieprawidłowy łańcuch w sekcji sysv.hash %d"
-#: src/readelf.c:3318
+#: src/readelf.c:3321
#, c-format
msgid "invalid data in sysv.hash64 section %d"
msgstr "nieprawidłowe dane w sekcji sysv.hash64 %d"
-#: src/readelf.c:3349
+#: src/readelf.c:3352
#, c-format
msgid "invalid chain in sysv.hash64 section %d"
msgstr "nieprawidłowy łańcuch w sekcji sysv.hash64 %d"
-#: src/readelf.c:3385
+#: src/readelf.c:3388
#, c-format
msgid "invalid data in gnu.hash section %d"
msgstr "nieprawidłowe dane w sekcji gnu.hash %d"
-#: src/readelf.c:3452
+#: src/readelf.c:3454
#, c-format
msgid ""
" Symbol Bias: %u\n"
@@ -5143,7 +5140,7 @@ msgstr ""
" Rozmiar maski bitowej: %zu B %<PRIuFAST32>%% b ustawionych drugie "
"przesunięcie skrótu: %u\n"
-#: src/readelf.c:3541
+#: src/readelf.c:3539
#, c-format
msgid ""
"\n"
@@ -5164,7 +5161,7 @@ msgstr[2] ""
"Sekcja listy bibliotek [%2zu] „%s†pod offsetem %#0<PRIx64> zawiera %d "
"wpisów:\n"
-#: src/readelf.c:3555
+#: src/readelf.c:3553
msgid ""
" Library Time Stamp Checksum Version "
"Flags"
@@ -5172,7 +5169,7 @@ msgstr ""
" Biblioteka Czas Suma k. Wersja "
"Flagi"
-#: src/readelf.c:3614
+#: src/readelf.c:3611
#, c-format
msgid ""
"\n"
@@ -5182,102 +5179,101 @@ msgstr ""
"\n"
"Sekcja atrybutów obiektu [%2zu] „%s†%<PRIu64> B pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:3631
+#: src/readelf.c:3628
msgid " Owner Size\n"
msgstr " Właściciel Rozmiar\n"
-#: src/readelf.c:3655
+#: src/readelf.c:3652
#, c-format
msgid " %-13s %4<PRIu32>\n"
msgstr " %-13s %4<PRIu32>\n"
#. Unknown subsection, print and skip.
-#: src/readelf.c:3694
+#: src/readelf.c:3691
#, c-format
msgid " %-4u %12<PRIu32>\n"
msgstr " %-4u %12<PRIu32>\n"
#. Tag_File
-#: src/readelf.c:3699
+#: src/readelf.c:3696
#, c-format
msgid " File: %11<PRIu32>\n"
msgstr " Plik: %11<PRIu32>\n"
-#: src/readelf.c:3748
+#: src/readelf.c:3745
#, c-format
msgid " %s: %<PRId64>, %s\n"
msgstr " %s: %<PRId64>, %s\n"
-#: src/readelf.c:3751
+#: src/readelf.c:3748
#, c-format
msgid " %s: %<PRId64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:3754
+#: src/readelf.c:3751
#, c-format
msgid " %s: %s\n"
msgstr " %s: %s\n"
-#: src/readelf.c:3764
+#: src/readelf.c:3761
#, c-format
msgid " %u: %<PRId64>\n"
msgstr " %u: %<PRId64>\n"
-#: src/readelf.c:3767
+#: src/readelf.c:3764
#, c-format
msgid " %u: %s\n"
msgstr " %u: %s\n"
-#: src/readelf.c:3837
-#, c-format
+#: src/readelf.c:3834
msgid "sprintf failure"
msgstr "sprintf się nie powiodło"
-#: src/readelf.c:4319
+#: src/readelf.c:4316
msgid "empty block"
msgstr "pusty blok"
-#: src/readelf.c:4322
+#: src/readelf.c:4319
#, c-format
msgid "%zu byte block:"
msgstr "blok o %zu B:"
-#: src/readelf.c:4800
+#: src/readelf.c:4797
#, c-format
msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n"
msgstr "%*s[%2<PRIuMAX>] %s <SKRÓCONE>\n"
-#: src/readelf.c:4867
+#: src/readelf.c:4864
#, c-format
msgid "%s %#<PRIx64> used with different address sizes"
msgstr "%s %#<PRIx64> zostało użyte z różnymi rozmiarami adresu"
-#: src/readelf.c:4874
+#: src/readelf.c:4871
#, c-format
msgid "%s %#<PRIx64> used with different offset sizes"
msgstr "%s %#<PRIx64> zostało użyte z różnymi rozmiarami offsetu"
-#: src/readelf.c:4881
+#: src/readelf.c:4878
#, c-format
msgid "%s %#<PRIx64> used with different base addresses"
msgstr "%s %#<PRIx64> zostało użyte z różnymi adresami podstawowymi"
-#: src/readelf.c:4888
+#: src/readelf.c:4885
#, c-format
msgid "%s %#<PRIx64> used with different attribute %s and %s"
msgstr "%s %#<PRIx64> zostało użyte z różnymi atrybutami %s i %s"
-#: src/readelf.c:4988
+#: src/readelf.c:4985
#, c-format
msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n"
msgstr " [%6tx] <NIEUŻYWANE ŚMIECIE W RESZCIE SEKCJI>\n"
-#: src/readelf.c:4996
+#: src/readelf.c:4993
#, c-format
msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n"
msgstr " [%6tx] <NIEUŻYWANE ŚMIECIE>… %<PRIu64> B…\n"
-#: src/readelf.c:5099
+#: src/readelf.c:5096
#, c-format
msgid ""
"\n"
@@ -5288,7 +5284,7 @@ msgstr ""
"Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n"
" [ Kod]\n"
-#: src/readelf.c:5107
+#: src/readelf.c:5104
#, c-format
msgid ""
"\n"
@@ -5297,20 +5293,20 @@ msgstr ""
"\n"
"Sekcja skrótów pod offsetem %<PRIu64>:\n"
-#: src/readelf.c:5120
+#: src/readelf.c:5117
#, c-format
msgid " *** error while reading abbreviation: %s\n"
msgstr " *** błąd podczas odczytywania skrótu: %s\n"
-#: src/readelf.c:5136
+#: src/readelf.c:5133
#, c-format
msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
msgstr " [%5u] offset: %<PRId64>, potomek: %s, znacznik: %s\n"
-#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030
-#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548
-#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352
-#: src/readelf.c:10412
+#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027
+#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617
+#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421
+#: src/readelf.c:10481
#, c-format
msgid ""
"\n"
@@ -5319,52 +5315,52 @@ msgstr ""
"\n"
"Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n"
-#: src/readelf.c:5182
+#: src/readelf.c:5179
#, c-format
msgid "cannot get .debug_addr section data: %s"
msgstr "nie można uzyskać danych sekcji .debug_addr: %s"
-#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120
+#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189
#, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " Długość: %8<PRIu64>\n"
-#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133
+#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202
#, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " Wersja DWARF: %8<PRIu16>\n"
-#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142
+#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211
#, c-format
msgid " Address size: %8<PRIu64>\n"
msgstr " Rozmiar adresu: %8<PRIu64>\n"
-#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152
+#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221
#, c-format
msgid " Segment size: %8<PRIu64>\n"
msgstr " Rozmiar segmentu: %8<PRIu64>\n"
-#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544
+#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613
#, c-format
msgid "Unknown version"
msgstr "Nieznana wersja"
-#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147
+#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216
#, c-format
msgid "unsupported address size"
msgstr "nieobsługiwany rozmiar adresu"
-#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157
+#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226
#, c-format
msgid "unsupported segment size"
msgstr "nieobsługiwany rozmiar segmentu"
-#: src/readelf.c:5399 src/readelf.c:5473
+#: src/readelf.c:5396 src/readelf.c:5470
#, c-format
msgid "cannot get .debug_aranges content: %s"
msgstr "nie można uzyskać zawartości .debug_aranges: %s"
-#: src/readelf.c:5414
+#: src/readelf.c:5411
#, c-format
msgid ""
"\n"
@@ -5382,12 +5378,12 @@ msgstr[2] ""
"\n"
"Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %zu wpisów:\n"
-#: src/readelf.c:5445
+#: src/readelf.c:5442
#, c-format
msgid " [%*zu] ???\n"
msgstr " [%*zu] ???\n"
-#: src/readelf.c:5447
+#: src/readelf.c:5444
#, c-format
msgid ""
" [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
@@ -5395,7 +5391,7 @@ msgstr ""
" [%*zu] początek: %0#*<PRIx64>, długość: %5<PRIu64>, offset CU DIE: "
"%6<PRId64>\n"
-#: src/readelf.c:5491 src/readelf.c:8413
+#: src/readelf.c:5488 src/readelf.c:8425
#, c-format
msgid ""
"\n"
@@ -5404,13 +5400,13 @@ msgstr ""
"\n"
"Tabela pod offsetem %zu:\n"
-#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424
-#: src/readelf.c:9101
+#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436
+#: src/readelf.c:9170
#, c-format
msgid "invalid data in section [%zu] '%s'"
msgstr "nieprawidÅ‚owe dane w sekcji [%zu] „%sâ€"
-#: src/readelf.c:5511
+#: src/readelf.c:5508
#, c-format
msgid ""
"\n"
@@ -5419,27 +5415,27 @@ msgstr ""
"\n"
" Długość: %6<PRIu64>\n"
-#: src/readelf.c:5523
+#: src/readelf.c:5520
#, c-format
msgid " DWARF version: %6<PRIuFAST16>\n"
msgstr " Wersja DWARF: %6<PRIuFAST16>\n"
-#: src/readelf.c:5527
+#: src/readelf.c:5524
#, c-format
msgid "unsupported aranges version"
msgstr "nieobsługiwana wersja aranges"
-#: src/readelf.c:5538
+#: src/readelf.c:5535
#, c-format
msgid " CU offset: %6<PRIx64>\n"
msgstr " Offset CU: %6<PRIx64>\n"
-#: src/readelf.c:5544
+#: src/readelf.c:5541
#, c-format
msgid " Address size: %6<PRIu64>\n"
msgstr " Offset adresu: %6<PRIu64>\n"
-#: src/readelf.c:5555
+#: src/readelf.c:5552
#, c-format
msgid ""
" Segment size: %6<PRIu64>\n"
@@ -5448,17 +5444,17 @@ msgstr ""
" Rozmiar segmentu: %6<PRIu64>\n"
"\n"
-#: src/readelf.c:5610
+#: src/readelf.c:5607
#, c-format
msgid " %zu padding bytes\n"
msgstr " %zu B wypełnienia\n"
-#: src/readelf.c:5654
+#: src/readelf.c:5651
#, c-format
msgid "cannot get .debug_rnglists content: %s"
msgstr "nie można uzyskać zawartości .debug_rnglists: %s"
-#: src/readelf.c:5677 src/readelf.c:9107
+#: src/readelf.c:5674 src/readelf.c:9176
#, c-format
msgid ""
"Table at Offset 0x%<PRIx64>:\n"
@@ -5467,42 +5463,42 @@ msgstr ""
"Tabela pod offsetem 0x%<PRIx64>:\n"
"\n"
-#: src/readelf.c:5732 src/readelf.c:9162
+#: src/readelf.c:5729 src/readelf.c:9231
#, c-format
msgid " Offset entries: %8<PRIu64>\n"
msgstr " Wpisy offsetu: %8<PRIu64>\n"
-#: src/readelf.c:5748 src/readelf.c:9178
+#: src/readelf.c:5745 src/readelf.c:9247
#, c-format
msgid " Unknown CU base: "
msgstr " Nieznana podstawa CU: "
-#: src/readelf.c:5750 src/readelf.c:9180
+#: src/readelf.c:5747 src/readelf.c:9249
#, c-format
msgid " CU [%6<PRIx64>] base: "
msgstr " Podstawa CU [%6<PRIx64>]: "
-#: src/readelf.c:5756 src/readelf.c:9186
+#: src/readelf.c:5753 src/readelf.c:9255
#, c-format
msgid " Not associated with a CU.\n"
msgstr " Brak powiązania z CU.\n"
-#: src/readelf.c:5767 src/readelf.c:9197
+#: src/readelf.c:5764 src/readelf.c:9266
#, c-format
msgid "too many offset entries for unit length"
msgstr "za dużo wpisów offsetu dla długości jednostki"
-#: src/readelf.c:5771 src/readelf.c:9201
+#: src/readelf.c:5768 src/readelf.c:9270
#, c-format
msgid " Offsets starting at 0x%<PRIx64>:\n"
msgstr " Offsety zaczynające się w 0x%<PRIx64>:\n"
-#: src/readelf.c:5823
+#: src/readelf.c:5820
#, c-format
msgid "invalid range list data"
msgstr "nieprawidłowe dane listy zakresów"
-#: src/readelf.c:6008 src/readelf.c:9526
+#: src/readelf.c:6005 src/readelf.c:9595
#, c-format
msgid ""
" %zu padding bytes\n"
@@ -5511,12 +5507,12 @@ msgstr ""
" %zu B wypełnienia\n"
"\n"
-#: src/readelf.c:6025
+#: src/readelf.c:6022
#, c-format
msgid "cannot get .debug_ranges content: %s"
msgstr "nie można uzyskać zawartości .debug_ranges: %s"
-#: src/readelf.c:6061 src/readelf.c:9581
+#: src/readelf.c:6058 src/readelf.c:9650
#, c-format
msgid ""
"\n"
@@ -5525,7 +5521,7 @@ msgstr ""
"\n"
" Nieznana podstawa CU: "
-#: src/readelf.c:6063 src/readelf.c:9583
+#: src/readelf.c:6060 src/readelf.c:9652
#, c-format
msgid ""
"\n"
@@ -5534,30 +5530,30 @@ msgstr ""
"\n"
" Podstawa CU [%6<PRIx64>]: "
-#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635
+#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704
#, c-format
msgid " [%6tx] <INVALID DATA>\n"
msgstr " [%6tx] <NIEPRAWIDÅOWE DANE>\n"
-#: src/readelf.c:6097 src/readelf.c:9719
+#: src/readelf.c:6094 src/readelf.c:9788
msgid "base address"
msgstr "adres podstawowy"
-#: src/readelf.c:6107 src/readelf.c:9729
+#: src/readelf.c:6104 src/readelf.c:9798
#, c-format
msgid " [%6tx] empty list\n"
msgstr " [%6tx] pusta lista\n"
-#: src/readelf.c:6367
+#: src/readelf.c:6364
msgid " <INVALID DATA>\n"
msgstr " <NIEPRAWIDÅOWE DANE>\n"
-#: src/readelf.c:6624
+#: src/readelf.c:6621
#, c-format
msgid "cannot get ELF: %s"
msgstr "nie można uzyskać ELF: %s"
-#: src/readelf.c:6642
+#: src/readelf.c:6639
#, c-format
msgid ""
"\n"
@@ -5566,7 +5562,7 @@ msgstr ""
"\n"
"Sekcja informacji o ramce wywołania [%2zu] „%s†pod offsetem %#<PRIx64>:\n"
-#: src/readelf.c:6692
+#: src/readelf.c:6689
#, c-format
msgid ""
"\n"
@@ -5575,65 +5571,65 @@ msgstr ""
"\n"
" [%6tx] Zerowy koniec\n"
-#: src/readelf.c:6793 src/readelf.c:6947
+#: src/readelf.c:6790 src/readelf.c:6944
#, c-format
msgid "invalid augmentation length"
msgstr "nieprawidłowa długość powiększenia"
-#: src/readelf.c:6808
+#: src/readelf.c:6805
msgid "FDE address encoding: "
msgstr "Kodowanie adresu FDE: "
-#: src/readelf.c:6814
+#: src/readelf.c:6811
msgid "LSDA pointer encoding: "
msgstr "Kodowanie wskaźnika LSDA: "
-#: src/readelf.c:6924
+#: src/readelf.c:6921
#, c-format
msgid " (offset: %#<PRIx64>)"
msgstr " (offset: %#<PRIx64>)"
-#: src/readelf.c:6931
+#: src/readelf.c:6928
#, c-format
msgid " (end offset: %#<PRIx64>)"
msgstr " (kończący offset: %#<PRIx64>)"
-#: src/readelf.c:6968
+#: src/readelf.c:6965
#, c-format
msgid " %-26sLSDA pointer: %#<PRIx64>\n"
msgstr " %-26sWskaźnik LSDA: %#<PRIx64>\n"
-#: src/readelf.c:7053
+#: src/readelf.c:7050
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute code: %s"
msgstr "DIE [%<PRIx64>] nie można uzyskać kodu atrybutu: %s"
-#: src/readelf.c:7063
+#: src/readelf.c:7060
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute form: %s"
msgstr "DIE [%<PRIx64>] nie można uzyskać formy atrybutu: %s"
-#: src/readelf.c:7085
+#: src/readelf.c:7082
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s"
msgstr "DIE [%<PRIx64>] nie można uzyskać wartości atrybutu „%s†(%s): %s"
-#: src/readelf.c:7415
+#: src/readelf.c:7412
#, c-format
msgid "invalid file (%<PRId64>): %s"
msgstr "nieprawidłowy plik (%<PRId64>): %s"
-#: src/readelf.c:7419
+#: src/readelf.c:7416
#, c-format
msgid "no srcfiles for CU [%<PRIx64>]"
msgstr "brak plików źródłowych dla CU [%<PRIx64>]"
-#: src/readelf.c:7423
+#: src/readelf.c:7420
#, c-format
msgid "couldn't get DWARF CU: %s"
msgstr "nie można uzyskać CU DWARF: %s"
-#: src/readelf.c:7738
+#: src/readelf.c:7735
#, c-format
msgid ""
"\n"
@@ -5644,12 +5640,12 @@ msgstr ""
"Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n"
" [Offset]\n"
-#: src/readelf.c:7788
+#: src/readelf.c:7785
#, c-format
msgid "cannot get next unit: %s"
msgstr "nie można uzyskać następnej jednostki: %s"
-#: src/readelf.c:7808
+#: src/readelf.c:7805
#, c-format
msgid ""
" Type unit at offset %<PRIu64>:\n"
@@ -5662,7 +5658,7 @@ msgstr ""
"%<PRIu8>, rozmiar offsetu: %<PRIu8>\n"
" Podpis typu: %#<PRIx64>, offset typu: %#<PRIx64> [%<PRIx64>]\n"
-#: src/readelf.c:7820
+#: src/readelf.c:7817
#, c-format
msgid ""
" Compilation unit at offset %<PRIu64>:\n"
@@ -5673,38 +5669,38 @@ msgstr ""
" Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: "
"%<PRIu8>, rozmiar offsetu: %<PRIu8>\n"
-#: src/readelf.c:7830 src/readelf.c:7993
+#: src/readelf.c:7827 src/readelf.c:7988
#, c-format
msgid " Unit type: %s (%<PRIu8>)"
msgstr " Typ jednostki: %s (%<PRIu8>)"
-#: src/readelf.c:7857
+#: src/readelf.c:7854
#, c-format
msgid "unknown version (%d) or unit type (%d)"
msgstr "nieznana wersja (%d) lub typ jednostki (%d)"
-#: src/readelf.c:7886
+#: src/readelf.c:7883
#, c-format
msgid "cannot get DIE offset: %s"
msgstr "nie można uzyskać offsetu DIE: %s"
-#: src/readelf.c:7895
+#: src/readelf.c:7892
#, c-format
msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s"
msgstr ""
"nie można uzyskać znacznika DIE pod offsetem [%<PRIx64>] w sekcji „%sâ€: %s"
-#: src/readelf.c:7933
+#: src/readelf.c:7928
#, c-format
msgid "cannot get next DIE: %s\n"
msgstr "nie można uzyskać następnego DIE: %s\n"
-#: src/readelf.c:7941
+#: src/readelf.c:7936
#, c-format
msgid "cannot get next DIE: %s"
msgstr "nie można uzyskać następnego DIE: %s"
-#: src/readelf.c:7985
+#: src/readelf.c:7980
#, c-format
msgid ""
" Split compilation unit at offset %<PRIu64>:\n"
@@ -5715,7 +5711,7 @@ msgstr ""
" Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: "
"%<PRIu8>, rozmiar offsetu: %<PRIu8>\n"
-#: src/readelf.c:8037
+#: src/readelf.c:8032
#, c-format
msgid ""
"\n"
@@ -5726,18 +5722,18 @@ msgstr ""
"Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n"
"\n"
-#: src/readelf.c:8369
+#: src/readelf.c:8364
#, c-format
msgid "unknown form: %s"
msgstr "nieznana forma: %s"
-#: src/readelf.c:8400
+#: src/readelf.c:8412
#, c-format
msgid "cannot get line data section data: %s"
msgstr "nie można uzyskać danych sekcji danych wiersza: %s"
#. Print what we got so far.
-#: src/readelf.c:8502
+#: src/readelf.c:8516
#, c-format
msgid ""
"\n"
@@ -5770,27 +5766,27 @@ msgstr ""
"\n"
"Instrukcje:\n"
-#: src/readelf.c:8524
+#: src/readelf.c:8538
#, c-format
msgid "cannot handle .debug_line version: %u\n"
msgstr "nie można obsłużyć wersji .debug_line: %u\n"
-#: src/readelf.c:8532
+#: src/readelf.c:8546
#, c-format
msgid "cannot handle address size: %u\n"
msgstr "nie można obsłużyć rozmiaru adresu: %u\n"
-#: src/readelf.c:8540
+#: src/readelf.c:8554
#, c-format
msgid "cannot handle segment selector size: %u\n"
msgstr "nie można obsłużyć rozmiaru selektora segmentu: %u\n"
-#: src/readelf.c:8550
+#: src/readelf.c:8564
#, c-format
msgid "invalid data at offset %tu in section [%zu] '%s'"
msgstr "nieprawidÅ‚owe dane pod offsetem %tu w sekcji [%zu] „%sâ€"
-#: src/readelf.c:8565
+#: src/readelf.c:8579
#, c-format
msgid " [%*<PRIuFAST8>] %hhu argument\n"
msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
@@ -5798,7 +5794,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu parametr\n"
msgstr[1] " [%*<PRIuFAST8>] %hhu parametry\n"
msgstr[2] " [%*<PRIuFAST8>] %hhu parametrów\n"
-#: src/readelf.c:8576
+#: src/readelf.c:8590
msgid ""
"\n"
"Directory table:"
@@ -5806,12 +5802,12 @@ msgstr ""
"\n"
"Tabela katalogu:"
-#: src/readelf.c:8582 src/readelf.c:8659
+#: src/readelf.c:8596 src/readelf.c:8673
#, c-format
msgid " ["
msgstr " ["
-#: src/readelf.c:8653
+#: src/readelf.c:8667
msgid ""
"\n"
"File name table:"
@@ -5819,11 +5815,11 @@ msgstr ""
"\n"
"Tabela nazw plików:"
-#: src/readelf.c:8714
+#: src/readelf.c:8728
msgid " Entry Dir Time Size Name"
msgstr " Wpis Kat Czas Rozmiar Nazwa"
-#: src/readelf.c:8753
+#: src/readelf.c:8774
msgid ""
"\n"
"No line number statements."
@@ -5831,7 +5827,7 @@ msgstr ""
"\n"
"Brak instrukcji numerów wierszy."
-#: src/readelf.c:8757
+#: src/readelf.c:8778
msgid ""
"\n"
"Line number statements:"
@@ -5839,118 +5835,129 @@ msgstr ""
"\n"
"Instrukcje numerów wierszy:"
-#: src/readelf.c:8777
+#: src/readelf.c:8793
#, c-format
msgid "invalid maximum operations per instruction is zero"
msgstr "nieprawidłowe maksimum operacji na instrukcję wynosi zero"
-#: src/readelf.c:8811
+#: src/readelf.c:8827
#, c-format
msgid " special opcode %u: address+%u = "
msgstr " instrukcja specjalna %u: adres+%u = "
-#: src/readelf.c:8815
+#: src/readelf.c:8831
#, c-format
msgid ", op_index = %u, line%+d = %zu\n"
msgstr ", op_index = %u, wiersz%+d = %zu\n"
-#: src/readelf.c:8818
+#: src/readelf.c:8834
#, c-format
msgid ", line%+d = %zu\n"
msgstr ", wiersz%+d = %zu\n"
-#: src/readelf.c:8836
+#: src/readelf.c:8852
#, c-format
msgid " extended opcode %u: "
msgstr " instrukcja rozszerzona %u: "
-#: src/readelf.c:8841
+#: src/readelf.c:8857
msgid " end of sequence"
msgstr " koniec sekwencji"
-#: src/readelf.c:8859
+#: src/readelf.c:8875
#, c-format
msgid " set address to "
msgstr " ustawienie adresu na "
-#: src/readelf.c:8887
+#: src/readelf.c:8903
#, c-format
msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
msgstr ""
" definicja nowego pliku: dir=%u, mtime=%<PRIu64>, długość=%<PRIu64>, nazwa="
"%s\n"
-#: src/readelf.c:8901
+#: src/readelf.c:8917
#, c-format
msgid " set discriminator to %u\n"
msgstr " ustawienie dyskryminatora na %u\n"
+#: src/readelf.c:8944
+#, c-format
+msgid " set inlined context %u, function name %s (0x%x)\n"
+msgstr ""
+
+#: src/readelf.c:8968
+#, fuzzy, c-format
+#| msgid "Also show function names"
+msgid " set function name %s (0x%x)\n"
+msgstr "Wyświetla także nazwy funkcji"
+
#. Unknown, ignore it.
-#: src/readelf.c:8906
+#: src/readelf.c:8975
msgid " unknown opcode"
msgstr " nieznana instrukcja"
#. Takes no argument.
-#: src/readelf.c:8918
+#: src/readelf.c:8987
msgid " copy"
msgstr " kopiowanie"
-#: src/readelf.c:8929
+#: src/readelf.c:8998
#, c-format
msgid " advance address by %u to "
msgstr " zwiększenie adresu o %u do "
-#: src/readelf.c:8933 src/readelf.c:8994
+#: src/readelf.c:9002 src/readelf.c:9063
#, c-format
msgid ", op_index to %u"
msgstr ", op_index do %u"
-#: src/readelf.c:8945
+#: src/readelf.c:9014
#, c-format
msgid " advance line by constant %d to %<PRId64>\n"
msgstr " zwiększenie wiersza o stałą %d do %<PRId64>\n"
-#: src/readelf.c:8955
+#: src/readelf.c:9024
#, c-format
msgid " set file to %<PRIu64>\n"
msgstr " ustawienie pliku na %<PRIu64>\n"
-#: src/readelf.c:8966
+#: src/readelf.c:9035
#, c-format
msgid " set column to %<PRIu64>\n"
msgstr " ustawienie kolumny na %<PRIu64>\n"
-#: src/readelf.c:8973
+#: src/readelf.c:9042
#, c-format
msgid " set '%s' to %<PRIuFAST8>\n"
msgstr " ustawienie „%s†na %<PRIuFAST8>\n"
#. Takes no argument.
-#: src/readelf.c:8979
+#: src/readelf.c:9048
msgid " set basic block flag"
msgstr " ustawienie podstawowej flagi bloku"
-#: src/readelf.c:8990
+#: src/readelf.c:9059
#, c-format
msgid " advance address by constant %u to "
msgstr " zwiększenie adresu o stałą %u do "
-#: src/readelf.c:9010
+#: src/readelf.c:9079
#, c-format
msgid " advance address by fixed value %u to \n"
msgstr " zwiększenie adresu o stałą wartość %u do \n"
#. Takes no argument.
-#: src/readelf.c:9020
+#: src/readelf.c:9089
msgid " set prologue end flag"
msgstr " ustawienie flagi końca prologu"
#. Takes no argument.
-#: src/readelf.c:9025
+#: src/readelf.c:9094
msgid " set epilogue begin flag"
msgstr " ustawienie flagi poczÄ…tku epilogu"
-#: src/readelf.c:9035
+#: src/readelf.c:9104
#, c-format
msgid " set isa to %u\n"
msgstr " ustawienie isa na %u\n"
@@ -5958,7 +5965,7 @@ msgstr " ustawienie isa na %u\n"
#. This is a new opcode the generator but not we know about.
#. Read the parameters associated with it but then discard
#. everything. Read all the parameters for this opcode.
-#: src/readelf.c:9044
+#: src/readelf.c:9113
#, c-format
msgid " unknown opcode with %<PRIu8> parameter:"
msgid_plural " unknown opcode with %<PRIu8> parameters:"
@@ -5966,101 +5973,101 @@ msgstr[0] " nieznana instrukcja z %<PRIu8> parametrem:"
msgstr[1] " nieznana instrukcja z %<PRIu8> parametrami:"
msgstr[2] " nieznana instrukcja z %<PRIu8> parametrami:"
-#: src/readelf.c:9084
+#: src/readelf.c:9153
#, c-format
msgid "cannot get .debug_loclists content: %s"
msgstr "nie można uzyskać zawartości .debug_loclists: %s"
-#: src/readelf.c:9250
+#: src/readelf.c:9319
#, c-format
msgid " <INVALID DATA>\n"
msgstr " <NIEPRAWIDÅOWE DANE>\n"
-#: src/readelf.c:9290
+#: src/readelf.c:9359
#, c-format
msgid "invalid loclists data"
msgstr "nieprawidłowe dane loclists"
-#: src/readelf.c:9543
+#: src/readelf.c:9612
#, c-format
msgid "cannot get .debug_loc content: %s"
msgstr "nie można uzyskać zawartości .debug_log: %s"
-#: src/readelf.c:9756 src/readelf.c:10800
+#: src/readelf.c:9825 src/readelf.c:10869
msgid " <INVALID DATA>\n"
msgstr " <NIEPRAWIDÅOWE DANE>\n"
-#: src/readelf.c:9811 src/readelf.c:9974
+#: src/readelf.c:9880 src/readelf.c:10043
#, c-format
msgid "cannot get macro information section data: %s"
msgstr "nie można uzyskać danych sekcji informacji o makrach: %s"
-#: src/readelf.c:9891
+#: src/readelf.c:9960
#, c-format
msgid "%*s*** non-terminated string at end of section"
msgstr "%*s*** niezakończony ciąg na końcu sekcji"
-#: src/readelf.c:9914
+#: src/readelf.c:9983
#, c-format
msgid "%*s*** missing DW_MACINFO_start_file argument at end of section"
msgstr "%*s*** brak parametru DW_MACINFO_start_file na końcu sekcji"
-#: src/readelf.c:10015
+#: src/readelf.c:10084
#, c-format
msgid " Offset: 0x%<PRIx64>\n"
msgstr " Offset: 0x%<PRIx64>\n"
-#: src/readelf.c:10027
+#: src/readelf.c:10096
#, c-format
msgid " Version: %<PRIu16>\n"
msgstr " Wersja: %<PRIu16>\n"
-#: src/readelf.c:10033 src/readelf.c:10920
+#: src/readelf.c:10102 src/readelf.c:10989
#, c-format
msgid " unknown version, cannot parse section\n"
msgstr " nieznana wersja, nie można przetworzyć sekcji\n"
-#: src/readelf.c:10040
+#: src/readelf.c:10109
#, c-format
msgid " Flag: 0x%<PRIx8>"
msgstr " Flaga: 0x%<PRIx8>"
-#: src/readelf.c:10069
+#: src/readelf.c:10138
#, c-format
msgid " Offset length: %<PRIu8>\n"
msgstr " Długość offsetu: %<PRIu8>\n"
-#: src/readelf.c:10077
+#: src/readelf.c:10146
#, c-format
msgid " .debug_line offset: 0x%<PRIx64>\n"
msgstr " Offset .debug_line: 0x%<PRIx64>\n"
-#: src/readelf.c:10102
+#: src/readelf.c:10171
#, c-format
msgid " extension opcode table, %<PRIu8> items:\n"
msgstr " tabela instrukcji rozszerzenia, %<PRIu8> elementów:\n"
-#: src/readelf.c:10109
+#: src/readelf.c:10178
#, c-format
msgid " [%<PRIx8>]"
msgstr " [%<PRIx8>]"
-#: src/readelf.c:10121
+#: src/readelf.c:10190
#, c-format
msgid " %<PRIu8> arguments:"
msgstr " Parametry %<PRIu8>:"
-#: src/readelf.c:10136
+#: src/readelf.c:10205
#, c-format
msgid " no arguments."
msgstr " brak parametrów."
-#: src/readelf.c:10337
+#: src/readelf.c:10406
#, c-format
msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
msgstr " [%5d] offset DIE: %6<PRId64>, offset CU DIE: %6<PRId64>, nazwa: %s\n"
-#: src/readelf.c:10381
+#: src/readelf.c:10450
#, c-format
msgid ""
"\n"
@@ -6072,42 +6079,42 @@ msgstr ""
" %*s CiÄ…g\n"
#. TRANS: the debugstr| prefix makes the string unique.
-#: src/readelf.c:10386
+#: src/readelf.c:10455
msgctxt "debugstr"
msgid "Offset"
msgstr ""
-#: src/readelf.c:10396
+#: src/readelf.c:10465
#, c-format
msgid " *** error, missing string terminator\n"
msgstr " *** błąd, brak znaku kończącego ciąg\n"
-#: src/readelf.c:10425
+#: src/readelf.c:10494
#, c-format
msgid "cannot get .debug_str_offsets section data: %s"
msgstr "nie można uzyskać danych sekcji .debug_str_offsets: %s"
-#: src/readelf.c:10524
+#: src/readelf.c:10593
#, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " Długość: %8<PRIu64>\n"
-#: src/readelf.c:10526
+#: src/readelf.c:10595
#, c-format
msgid " Offset size: %8<PRIu8>\n"
msgstr " Rozmiar offsetu: %8<PRIu8>\n"
-#: src/readelf.c:10540
+#: src/readelf.c:10609
#, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " Wersja DWARF: %8<PRIu16>\n"
-#: src/readelf.c:10549
+#: src/readelf.c:10618
#, c-format
msgid " Padding: %8<PRIx16>\n"
msgstr " Wypełnienie: %8<PRIx16>\n"
-#: src/readelf.c:10603
+#: src/readelf.c:10672
#, c-format
msgid ""
"\n"
@@ -6116,7 +6123,7 @@ msgstr ""
"\n"
"Sekcja tabeli wyszukiwania ramki wywoÅ‚ania [%2zu] „.eh_frame_hdrâ€:\n"
-#: src/readelf.c:10705
+#: src/readelf.c:10774
#, c-format
msgid ""
"\n"
@@ -6125,22 +6132,22 @@ msgstr ""
"\n"
"Sekcja tabeli obsÅ‚ugiwania wyjÄ…tków [%2zu] „.gcc_except_tableâ€:\n"
-#: src/readelf.c:10728
+#: src/readelf.c:10797
#, c-format
msgid " LPStart encoding: %#x "
msgstr " Kodowanie LPStart: %#x "
-#: src/readelf.c:10740
+#: src/readelf.c:10809
#, c-format
msgid " TType encoding: %#x "
msgstr " Kodowanie TType: %#x "
-#: src/readelf.c:10755
+#: src/readelf.c:10824
#, c-format
msgid " Call site encoding: %#x "
msgstr " Kodowanie strony wywołania: %#x "
-#: src/readelf.c:10768
+#: src/readelf.c:10837
msgid ""
"\n"
" Call site table:"
@@ -6148,7 +6155,7 @@ msgstr ""
"\n"
" Tabela strony wywołania:"
-#: src/readelf.c:10782
+#: src/readelf.c:10851
#, c-format
msgid ""
" [%4u] Call site start: %#<PRIx64>\n"
@@ -6161,12 +6168,12 @@ msgstr ""
" LÄ…dowisko: %#<PRIx64>\n"
" Działanie: %u\n"
-#: src/readelf.c:10855
+#: src/readelf.c:10924
#, c-format
msgid "invalid TType encoding"
msgstr "nieprawidłowe kodowanie TType"
-#: src/readelf.c:10882
+#: src/readelf.c:10951
#, c-format
msgid ""
"\n"
@@ -6175,37 +6182,37 @@ msgstr ""
"\n"
"Sekcja GDB [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %<PRId64> B:\n"
-#: src/readelf.c:10911
+#: src/readelf.c:10980
#, c-format
msgid " Version: %<PRId32>\n"
msgstr " Wersja: %<PRId32>\n"
-#: src/readelf.c:10929
+#: src/readelf.c:10998
#, c-format
msgid " CU offset: %#<PRIx32>\n"
msgstr " offset CU: %#<PRIx32>\n"
-#: src/readelf.c:10936
+#: src/readelf.c:11005
#, c-format
msgid " TU offset: %#<PRIx32>\n"
msgstr " offset TU: %#<PRIx32>\n"
-#: src/readelf.c:10943
+#: src/readelf.c:11012
#, c-format
msgid " address offset: %#<PRIx32>\n"
msgstr " offset adresu: %#<PRIx32>\n"
-#: src/readelf.c:10950
+#: src/readelf.c:11019
#, c-format
msgid " symbol offset: %#<PRIx32>\n"
msgstr " offset symbolu: %#<PRIx32>\n"
-#: src/readelf.c:10957
+#: src/readelf.c:11026
#, c-format
msgid " constant offset: %#<PRIx32>\n"
msgstr " offset stałej: %#<PRIx32>\n"
-#: src/readelf.c:10971
+#: src/readelf.c:11040
#, c-format
msgid ""
"\n"
@@ -6214,7 +6221,7 @@ msgstr ""
"\n"
" Lista CU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n"
-#: src/readelf.c:10996
+#: src/readelf.c:11065
#, c-format
msgid ""
"\n"
@@ -6223,7 +6230,7 @@ msgstr ""
"\n"
" Lista TU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n"
-#: src/readelf.c:11025
+#: src/readelf.c:11094
#, c-format
msgid ""
"\n"
@@ -6232,7 +6239,7 @@ msgstr ""
"\n"
" Lista adresów pod offsetem %#<PRIx32> zawiera %zu wpisów:\n"
-#: src/readelf.c:11057
+#: src/readelf.c:11126
#, c-format
msgid ""
"\n"
@@ -6241,18 +6248,18 @@ msgstr ""
"\n"
" Tabela symboli pod offsetem %#<PRIx32> zawiera %zu gniazd:\n"
-#: src/readelf.c:11195
+#: src/readelf.c:11264
#, c-format
msgid "cannot get debug context descriptor: %s"
msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s"
-#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301
-#: src/readelf.c:12359
+#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367
+#: src/readelf.c:12424
#, c-format
msgid "cannot convert core note data: %s"
msgstr "nie można konwertować danych notatki core: %s"
-#: src/readelf.c:11926
+#: src/readelf.c:11994
#, c-format
msgid ""
"\n"
@@ -6261,21 +6268,21 @@ msgstr ""
"\n"
"%*s… <powtarza się jeszcze %u razy>…"
-#: src/readelf.c:12438
+#: src/readelf.c:12503
msgid " Owner Data size Type\n"
msgstr " Właściciel Rozmiar danych Typ\n"
-#: src/readelf.c:12466
+#: src/readelf.c:12531
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12518
+#: src/readelf.c:12583
#, c-format
msgid "cannot get content of note: %s"
msgstr "nie można uzyskać zawartości notatki: %s"
-#: src/readelf.c:12552
+#: src/readelf.c:12616
#, c-format
msgid ""
"\n"
@@ -6285,7 +6292,7 @@ msgstr ""
"Segment notatki [%2zu] „%s†o długości %<PRIu64> B pod offsetem "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12575
+#: src/readelf.c:12639
#, c-format
msgid ""
"\n"
@@ -6294,7 +6301,7 @@ msgstr ""
"\n"
"Segment notatki o długości %<PRIu64> B pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12622
+#: src/readelf.c:12686
#, c-format
msgid ""
"\n"
@@ -6303,12 +6310,12 @@ msgstr ""
"\n"
"Sekcja [%zu] „%s†nie ma danych do zrzucenia.\n"
-#: src/readelf.c:12649 src/readelf.c:12700
+#: src/readelf.c:12713 src/readelf.c:12764
#, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "nie można uzyskać danych dla sekcji [%zu] „%sâ€: %s"
-#: src/readelf.c:12654
+#: src/readelf.c:12718
#, c-format
msgid ""
"\n"
@@ -6318,7 +6325,7 @@ msgstr ""
"Segment zrzutu szesnastkowego [%zu] „%sâ€, %<PRIu64> B pod offsetem "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12659
+#: src/readelf.c:12723
#, c-format
msgid ""
"\n"
@@ -6329,7 +6336,7 @@ msgstr ""
"Zrzut szesnastkowy sekcji [%zu] „%sâ€, %<PRIu64> B (%zd nieskompresowanych) "
"pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12673
+#: src/readelf.c:12737
#, c-format
msgid ""
"\n"
@@ -6338,7 +6345,7 @@ msgstr ""
"\n"
"Sekcja [%zu] „%s†nie ma ciągów do zrzucenia.\n"
-#: src/readelf.c:12705
+#: src/readelf.c:12769
#, c-format
msgid ""
"\n"
@@ -6347,7 +6354,7 @@ msgstr ""
"\n"
"Sekcja ciągów [%zu] „%s†zawiera %<PRIu64> B pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12710
+#: src/readelf.c:12774
#, c-format
msgid ""
"\n"
@@ -6358,7 +6365,7 @@ msgstr ""
"Sekcja ciągów [%zu] „%s†zawiera %<PRIu64> B (%zd nieskompresowanych) pod "
"offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12759
+#: src/readelf.c:12822
#, c-format
msgid ""
"\n"
@@ -6367,7 +6374,7 @@ msgstr ""
"\n"
"sekcja [%lu] nie istnieje"
-#: src/readelf.c:12789
+#: src/readelf.c:12852
#, c-format
msgid ""
"\n"
@@ -6376,12 +6383,12 @@ msgstr ""
"\n"
"sekcja „%s†nie istnieje"
-#: src/readelf.c:12846
+#: src/readelf.c:12907
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "nie można uzyskać indeksu symboli archiwum „%sâ€: %s"
-#: src/readelf.c:12849
+#: src/readelf.c:12910
#, c-format
msgid ""
"\n"
@@ -6390,7 +6397,7 @@ msgstr ""
"\n"
"Archiwum „%s†nie ma indeksu symboli\n"
-#: src/readelf.c:12853
+#: src/readelf.c:12914
#, c-format
msgid ""
"\n"
@@ -6399,12 +6406,12 @@ msgstr ""
"\n"
"Indeks archiwum „%s†ma %zu wpisów:\n"
-#: src/readelf.c:12871
+#: src/readelf.c:12932
#, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "nie można wydobyć elementów pod offsetem %zu w „%sâ€: %s"
-#: src/readelf.c:12876
+#: src/readelf.c:12937
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "Element archiwum „%s†zawiera:\n"
@@ -6498,39 +6505,38 @@ msgctxt "bsd"
msgid "filename"
msgstr ""
-#: src/size.c:418 src/size.c:560
+#: src/size.c:417 src/size.c:558
#, c-format
msgid " (ex %s)"
msgstr " (ex %s)"
-#: src/size.c:420
+#: src/size.c:419
#, fuzzy
#| msgid "invalid section"
msgctxt "sysv"
msgid "section"
msgstr "nieprawidłowa sekcja"
-#: src/size.c:421
+#: src/size.c:420
msgctxt "sysv"
msgid "size"
msgstr ""
-#: src/size.c:422
+#: src/size.c:421
msgctxt "sysv"
msgid "addr"
msgstr ""
-#: src/size.c:451 src/size.c:454 src/size.c:457
+#: src/size.c:450 src/size.c:453 src/size.c:456
msgctxt "sysv"
msgid "Total"
msgstr ""
-#: src/size.c:482
-#, c-format
+#: src/size.c:480
msgid "cannot get section header"
msgstr "nie można uzyskać nagłówka sekcji"
-#: src/size.c:585
+#: src/size.c:583
msgid "(TOTALS)\n"
msgstr "(CAÅKOWITE)\n"
@@ -6711,27 +6717,23 @@ msgstr "Wyświetla ciągi znaków drukowalnych w plikach."
msgid "invalid value '%s' for %s parameter"
msgstr "nieprawidłowa wartość „%s†dla parametru %s"
-#: src/strings.c:302
-#, c-format
+#: src/strings.c:301
msgid "invalid minimum length of matched string size"
msgstr "nieprawidłowa minimalna długość dopasowanego rozmiaru ciągu"
-#: src/strings.c:585
-#, c-format
+#: src/strings.c:584
msgid "lseek failed"
msgstr "lseek się nie powiodło"
-#: src/strings.c:602 src/strings.c:666
-#, c-format
+#: src/strings.c:601 src/strings.c:665
msgid "re-mmap failed"
msgstr "ponowne mmap się nie powiodło"
-#: src/strings.c:639
-#, c-format
+#: src/strings.c:638
msgid "mprotect failed"
msgstr "mprotect się nie powiodło"
-#: src/strings.c:728
+#: src/strings.c:727
#, c-format
msgid "Skipping section %zd '%s' data outside file"
msgstr "Pomijanie sekcji %zd „%s†dane poza plikiem"
@@ -6807,13 +6809,11 @@ msgstr ""
msgid "Discard symbols from object files."
msgstr "Odrzuca symbole z plików obiektów."
-#: src/strip.c:247
-#, c-format
+#: src/strip.c:246
msgid "--reloc-debug-sections used without -f"
msgstr "Użyto --reloc-debug-sections bez opcji -f"
-#: src/strip.c:253
-#, c-format
+#: src/strip.c:252
msgid ""
"--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --"
"remove-section"
@@ -6821,42 +6821,40 @@ msgstr ""
"Opcja --reloc-debug-sections-only jest niezgodna z -f, -g, --remove-comment "
"i --remove-section"
-#: src/strip.c:267
-#, c-format
+#: src/strip.c:266
msgid "Only one input file allowed together with '-o' and '-f'"
msgstr "Tylko jeden plik wejÅ›ciowy jest dozwolony z „-o†i „-fâ€"
-#: src/strip.c:290
+#: src/strip.c:288
#, c-format
msgid "-f option specified twice"
msgstr "OpcjÄ™ -f podano dwukrotnie"
-#: src/strip.c:299
+#: src/strip.c:297
#, c-format
msgid "-F option specified twice"
msgstr "OpcjÄ™ -F podano dwukrotnie"
-#: src/strip.c:362
+#: src/strip.c:360
#, c-format
msgid "cannot both keep and remove .comment section"
msgstr "nie można jednocześnie zachować i usunąć sekcji .comment"
-#: src/strip.c:481
-#, c-format
+#: src/strip.c:479
msgid "bad relocation"
msgstr "błędna relokacja"
-#: src/strip.c:747 src/strip.c:771
+#: src/strip.c:749 src/strip.c:773
#, c-format
msgid "cannot stat input file '%s'"
msgstr "nie można wykonać stat na pliku wejÅ›ciowym „%sâ€"
-#: src/strip.c:761
+#: src/strip.c:763
#, c-format
msgid "while opening '%s'"
msgstr "podczas otwierania „%sâ€"
-#: src/strip.c:799
+#: src/strip.c:801
#, c-format
msgid "%s: cannot use -o or -f when stripping archive"
msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum"
@@ -6867,42 +6865,41 @@ msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum"
#. result = handle_ar (fd, elf, NULL, fname,
#. preserve_dates ? tv : NULL);
#.
-#: src/strip.c:811
+#: src/strip.c:813
#, c-format
msgid "%s: no support for stripping archive"
msgstr "%s: brak obsługi okrajania archiwum"
-#: src/strip.c:1047
+#: src/strip.c:1050
#, c-format
msgid "cannot open EBL backend"
msgstr "nie można otworzyć zaplecza EBL"
-#: src/strip.c:1092
-#, c-format
+#: src/strip.c:1094
msgid "cannot get number of phdrs"
msgstr "nie można uzyskać liczby phdr"
-#: src/strip.c:1106 src/strip.c:1149
+#: src/strip.c:1108 src/strip.c:1151
#, c-format
msgid "cannot create new ehdr for file '%s': %s"
msgstr "nie można utworzyć nowego ehdr dla pliku „%sâ€: %s"
-#: src/strip.c:1116 src/strip.c:1159
+#: src/strip.c:1118 src/strip.c:1161
#, c-format
msgid "cannot create new phdr for file '%s': %s"
msgstr "nie można utworzyć nowego phdr dla pliku „%sâ€: %s"
-#: src/strip.c:1240
+#: src/strip.c:1241
#, c-format
msgid "illformed file '%s'"
msgstr "plik „%s†ma błędny format"
-#: src/strip.c:1250
+#: src/strip.c:1251
#, c-format
msgid "Cannot remove allocated section '%s'"
msgstr "Nie można usunąć przydzielonej sekcji „%sâ€"
-#: src/strip.c:1259
+#: src/strip.c:1260
#, c-format
msgid "Cannot both keep and remove section '%s'"
msgstr "Nie można jednoczeÅ›nie zachować i usunąć sekcji „%sâ€"
@@ -6922,7 +6919,7 @@ msgstr "%s: błąd podczas aktualizowania nagłówka ELF: %s"
msgid "%s: error while getting shdrstrndx: %s"
msgstr "%s: błąd podczas uzyskiwania shdrstrndx: %s"
-#: src/strip.c:1705 src/strip.c:2550
+#: src/strip.c:1705 src/strip.c:2546
#, c-format
msgid "%s: error updating shdrstrndx: %s"
msgstr "%s: błąd podczas aktualizowania shdrstrndx: %s"
@@ -6932,67 +6929,66 @@ msgstr "%s: błąd podczas aktualizowania shdrstrndx: %s"
msgid "while preparing output for '%s'"
msgstr "podczas przygotowywania wyjÅ›cia dla „%sâ€"
-#: src/strip.c:1784 src/strip.c:1847
+#: src/strip.c:1783 src/strip.c:1845
#, c-format
msgid "while create section header section: %s"
msgstr "podczas tworzenia sekcji nagłówka sekcji: %s"
-#: src/strip.c:1793
+#: src/strip.c:1792
#, c-format
msgid "cannot allocate section data: %s"
msgstr "nie można przydzielić danych sekcji: %s"
-#: src/strip.c:1859
+#: src/strip.c:1856
#, c-format
msgid "while create section header string table: %s"
msgstr "podczas tworzenia tabeli ciągów nagłówka sekcji: %s"
-#: src/strip.c:1866
-#, c-format
+#: src/strip.c:1862
msgid "no memory to create section header string table"
msgstr "brak pamięci do utworzenia tabeli ciągów nagłówka sekcji"
-#: src/strip.c:2079
+#: src/strip.c:2075
#, c-format
msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]"
msgstr "Nie można usunąć symbolu [%zd] z przydzielonej tabeli symboli [%zd]"
-#: src/strip.c:2466 src/strip.c:2574
+#: src/strip.c:2462 src/strip.c:2570
#, c-format
msgid "while writing '%s': %s"
msgstr "podczas zapisywania „%sâ€: %s"
-#: src/strip.c:2477
+#: src/strip.c:2473
#, c-format
msgid "while creating '%s'"
msgstr "podczas tworzenia „%sâ€"
-#: src/strip.c:2500
+#: src/strip.c:2496
#, c-format
msgid "while computing checksum for debug information"
msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania"
-#: src/strip.c:2541
+#: src/strip.c:2537
#, c-format
msgid "%s: error while creating ELF header: %s"
msgstr "%s: błąd podczas tworzenia nagłówka ELF: %s"
-#: src/strip.c:2559
+#: src/strip.c:2555
#, c-format
msgid "%s: error while reading the file: %s"
msgstr "%s: błąd podczas odczytywania pliku: %s"
-#: src/strip.c:2599 src/strip.c:2619
+#: src/strip.c:2595 src/strip.c:2615
#, c-format
msgid "while writing '%s'"
msgstr "podczas zapisywania „%sâ€"
-#: src/strip.c:2656 src/strip.c:2663
+#: src/strip.c:2652 src/strip.c:2659
#, c-format
msgid "error while finishing '%s': %s"
msgstr "bÅ‚Ä…d podczas koÅ„czenia „%sâ€: %s"
-#: src/strip.c:2680 src/strip.c:2756
+#: src/strip.c:2676 src/strip.c:2752
#, c-format
msgid "cannot set access and modification date of '%s'"
msgstr "nie można ustawić czasu dostÄ™pu i modyfikacji „%sâ€"
@@ -7135,13 +7131,13 @@ msgstr "nie można skopiować danych sekcji: %s"
msgid "cannot create directory '%s'"
msgstr "nie można utworzyć katalogu „%sâ€"
-#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859
+#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860
#: src/unstrip.c:1750
#, c-format
msgid "cannot get symbol table entry: %s"
msgstr "nie można uzyskać wpisu tabeli symboli: %s"
-#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694
+#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695
#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990
#, c-format
msgid "cannot update symbol table: %s"
@@ -7152,119 +7148,127 @@ msgstr "nie można zaktualizować tabeli symboli: %s"
msgid "cannot update section header: %s"
msgstr "nie można zaktualizować nagłówka sekcji: %s"
-#: src/unstrip.c:467 src/unstrip.c:481
+#: src/unstrip.c:465
+#, c-format
+msgid "gelf_getrel failed: %s"
+msgstr ""
+
+#: src/unstrip.c:468 src/unstrip.c:483
#, c-format
msgid "cannot update relocation: %s"
msgstr "nie można zaktualizować relokacji: %s"
-#: src/unstrip.c:580
+#: src/unstrip.c:480
+#, c-format
+msgid "gelf_getrela failed: %s"
+msgstr ""
+
+#: src/unstrip.c:581
#, c-format
msgid "cannot get symbol version: %s"
msgstr "nie można uzyskać wersji symbolu: %s"
-#: src/unstrip.c:593
+#: src/unstrip.c:594
#, c-format
msgid "unexpected section type in [%zu] with sh_link to symtab"
msgstr "nieoczekiwany typ sekcji w [%zu] z sh_link do tabeli symboli"
-#: src/unstrip.c:848
+#: src/unstrip.c:849
#, c-format
msgid "cannot get symbol section data: %s"
msgstr "nie można uzyskać danych sekcji symboli: %s"
-#: src/unstrip.c:850
+#: src/unstrip.c:851
#, c-format
msgid "cannot get string section data: %s"
msgstr "nie można uzyskać danych sekcji ciągów: %s"
-#: src/unstrip.c:867
+#: src/unstrip.c:868
#, c-format
msgid "invalid string offset in symbol [%zu]"
msgstr "nieprawidłowy offset ciągu w symbolu [%zu]"
-#: src/unstrip.c:1025 src/unstrip.c:1433
+#: src/unstrip.c:1026 src/unstrip.c:1434
#, c-format
msgid "cannot read section [%zu] name: %s"
msgstr "nie można odczytać nazwy sekcji [%zu]: %s"
-#: src/unstrip.c:1040
+#: src/unstrip.c:1041
#, c-format
msgid "bad sh_link for group section: %s"
msgstr "błędne sh_link dla sekcji grupy: %s"
-#: src/unstrip.c:1046
+#: src/unstrip.c:1047
#, c-format
msgid "couldn't get shdr for group section: %s"
msgstr "nie można uzyskać shdr dla sekcji grupy: %s"
-#: src/unstrip.c:1051
+#: src/unstrip.c:1052
#, c-format
msgid "bad data for group symbol section: %s"
msgstr "błędne dane dla sekcji symboli grupy: %s"
-#: src/unstrip.c:1057
+#: src/unstrip.c:1058
#, c-format
msgid "couldn't get symbol for group section: %s"
msgstr "nie można uzyskać symbolu dla sekcji grupy: %s"
-#: src/unstrip.c:1062
+#: src/unstrip.c:1063
#, c-format
msgid "bad symbol name for group section: %s"
msgstr "błędna nazwa symbolu dla sekcji grupy: %s"
-#: src/unstrip.c:1073 src/unstrip.c:1554
+#: src/unstrip.c:1074 src/unstrip.c:1554
#, c-format
msgid "cannot find matching section for [%zu] '%s'"
msgstr "nie można odnaleźć pasujÄ…cej sekcji dla [%zu] „%sâ€"
-#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175
+#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176
#, c-format
msgid "cannot read '.gnu.prelink_undo' section: %s"
msgstr "nie można odczytać sekcji „.gnu.prelink_undoâ€: %s"
-#: src/unstrip.c:1155
+#: src/unstrip.c:1156
#, c-format
msgid "overflow with shnum = %zu in '%s' section"
msgstr "przepeÅ‚nienie z shnum = %zu w sekcji „%sâ€"
-#: src/unstrip.c:1166
+#: src/unstrip.c:1167
#, c-format
msgid "invalid contents in '%s' section"
msgstr "nieprawidÅ‚owa zawartość w sekcji „%sâ€"
-#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925
+#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925
#, c-format
msgid "cannot add section name to string table: %s"
msgstr "nie można nazwy sekcji do tabeli ciągów: %s"
-#: src/unstrip.c:1362
+#: src/unstrip.c:1363
#, c-format
msgid "cannot update section header string table data: %s"
msgstr "nie można zaktualizować danych tabeli ciągów nagłówków sekcji: %s"
-#: src/unstrip.c:1391 src/unstrip.c:1395
+#: src/unstrip.c:1392 src/unstrip.c:1396
#, c-format
msgid "cannot get section header string table section index: %s"
msgstr "nie można uzyskać indeksu sekcji tabeli ciągów nagłówków sekcji: %s"
-#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649
+#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649
#, c-format
msgid "cannot get section count: %s"
msgstr "nie można uzyskać licznika sekcji: %s"
-#: src/unstrip.c:1406
-#, c-format
+#: src/unstrip.c:1407
msgid "more sections in stripped file than debug file -- arguments reversed?"
msgstr ""
"więcej sekcji w okrojonym pliku niż w pliku debugowania — odwrócono "
"parametry?"
-#: src/unstrip.c:1410
-#, c-format
+#: src/unstrip.c:1411
msgid "no sections in stripped file"
msgstr "brak sekcji w okrojonym pliku"
-#: src/unstrip.c:1458 src/unstrip.c:1569
+#: src/unstrip.c:1459 src/unstrip.c:1569
#, c-format
msgid "cannot read section header string table: %s"
msgstr "nie można odczytać tabeli ciągów nagłówków sekcji: %s"
@@ -7379,17 +7383,15 @@ msgid "cannot cache section addresses for module '%s': %s"
msgstr ""
"nie można utworzyć pamiÄ™ci podrÄ™cznej adresów sekcji dla moduÅ‚u „%sâ€: %s"
-#: src/unstrip.c:2505
-#, c-format
+#: src/unstrip.c:2503
msgid "no matching modules found"
msgstr "nie odnaleziono pasujących modułów"
-#: src/unstrip.c:2515
-#, c-format
+#: src/unstrip.c:2513
msgid "matched more than one module"
msgstr "pasuje więcej niż jeden moduł"
-#: src/unstrip.c:2560
+#: src/unstrip.c:2558
msgid ""
"STRIPPED-FILE DEBUG-FILE\n"
"[MODULE...]"
@@ -7397,7 +7399,7 @@ msgstr ""
"OKROJONY-PLIK PLIK-DEBUGOWANIA\n"
"[MODUÅ…]"
-#: src/unstrip.c:2561
+#: src/unstrip.c:2559
msgid ""
"Combine stripped files with separate symbols and debug information.\n"
"\n"
@@ -7474,7 +7476,7 @@ msgstr ""
"source IDENTYFIKATOR-KOPII /NAZWA-PLIKU\n"
"source ŚCIEŻKA /NAZWA-PLIKU\n"
-#: tests/backtrace.c:436
+#: tests/backtrace.c:483
msgid "Run executable"
msgstr "Uruchamia plik wykonywalny"
@@ -7485,3 +7487,7 @@ msgstr "Dodatkowo wyświetla nazwy funkcji"
#: tests/dwflmodtest.c:210
msgid "Show instances of inlined functions"
msgstr "Wyświetla wystąpienia wstawionych funkcji"
+
+#, c-format
+#~ msgid "cannot allocate memory"
+#~ msgstr "nie można przydzielić pamięci"
diff --git a/po/uk.po b/po/uk.po
index 27c72120..ecdb85d3 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-05-22 15:33+0200\n"
+"POT-Creation-Date: 2022-04-25 18:22+0200\n"
"PO-Revision-Date: 2020-03-28 14:59+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
@@ -41,11 +41,6 @@ msgstr ""
" - «never», «no», «none»\n"
" - «auto», «tty», «if-tty»\n"
-#: lib/color.c:194 src/objdump.c:728
-#, c-format
-msgid "cannot allocate memory"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ пам’ÑÑ‚ÑŒ"
-
#: lib/printversion.c:40
#, c-format
msgid ""
@@ -58,8 +53,8 @@ msgstr ""
"початкових кодах. Умовами Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐЕ передбачено жодних "
"гарантій, зокрема гарантій працездатноÑÑ‚Ñ– або придатноÑÑ‚Ñ– Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ— мети.\n"
-#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461
-#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609
+#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580
+#: src/unstrip.c:312
#, c-format
msgid "memory exhausted"
msgstr "пам’ÑÑ‚ÑŒ вичерпано"
@@ -309,7 +304,7 @@ msgstr "невідомий код мови"
msgid ".debug_addr section missing"
msgstr "пропущено розділ .debug_addr"
-#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550
+#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548
msgid "Input selection options:"
msgstr "Вибір параметрів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:"
@@ -538,7 +533,7 @@ msgid "No backend"
msgstr "Ðемає Ñервера"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79
-#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131
+#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
@@ -589,18 +584,18 @@ msgstr "Ðазва: "
msgid " Args: "
msgstr " Ðрг.: "
-#: libebl/eblobjnote.c:300
+#: libebl/eblobjnote.c:304
#, c-format
msgid " Build ID: "
msgstr " Ід. збираннÑ: "
#. A non-null terminated version string.
-#: libebl/eblobjnote.c:311
+#: libebl/eblobjnote.c:315
#, c-format
msgid " Linker version: %.*s\n"
msgstr " ВерÑÑ–Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°: %.*s\n"
-#: libebl/eblobjnote.c:638
+#: libebl/eblobjnote.c:642
#, c-format
msgid " OS: %s, ABI: "
msgstr " ОС: %s, ABI: "
@@ -634,7 +629,7 @@ msgstr "некоректна розмірніÑÑ‚ÑŒ вхідного парамÐ
msgid "invalid size of destination operand"
msgstr "некоректна розмірніÑÑ‚ÑŒ вихідного параметра"
-#: libelf/elf_error.c:87 src/readelf.c:6217
+#: libelf/elf_error.c:87 src/readelf.c:6214
#, c-format
msgid "invalid encoding"
msgstr "некоректне кодуваннÑ"
@@ -719,8 +714,8 @@ msgstr "невідповідніÑÑ‚ÑŒ полів data/scn"
msgid "invalid section header"
msgstr "некоректний заголовок розділу"
-#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623
-#: src/readelf.c:10724 src/readelf.c:10906
+#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692
+#: src/readelf.c:10793 src/readelf.c:10975
#, c-format
msgid "invalid data"
msgstr "некоректні дані"
@@ -792,47 +787,49 @@ msgstr "неможливо ÑтиÑнути дані"
msgid "cannot decompress data"
msgstr "неможливо розпакувати дані"
-#: src/addr2line.c:57
+#: src/addr2line.c:59
msgid "Input format options:"
msgstr "Параметри Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… даних:"
-#: src/addr2line.c:59
+#: src/addr2line.c:61
msgid "Treat addresses as offsets relative to NAME section."
msgstr "Вважати адреÑи зміщеннÑми відноÑно розділу ÐÐЗВÐ."
-#: src/addr2line.c:61
+#: src/addr2line.c:63
msgid "Output format options:"
msgstr "Параметри Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²:"
-#: src/addr2line.c:62
+#: src/addr2line.c:64
msgid "Print address before each entry"
msgstr "Виводити адреÑу перед кожним запиÑом"
-#: src/addr2line.c:63
+#: src/addr2line.c:65
msgid "Show only base names of source files"
msgstr "Показувати лише базові назви файлів коду програми"
-#: src/addr2line.c:65
-msgid "Show absolute file names using compilation directory"
+#: src/addr2line.c:67
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show absolute file names using compilation directory (default)"
msgstr "Показувати абÑолютні назви файлів з викориÑтаннÑм каталогу збираннÑ"
-#: src/addr2line.c:66
+#: src/addr2line.c:68
msgid "Also show function names"
msgstr "Показувати також назви функцій"
-#: src/addr2line.c:67
+#: src/addr2line.c:69
msgid "Also show symbol or section names"
msgstr "Показувати також назви Ñимволів та розділів"
-#: src/addr2line.c:68
+#: src/addr2line.c:70
msgid "Also show symbol and the section names"
msgstr "Показувати також назви Ñимволів та розділів"
-#: src/addr2line.c:69
+#: src/addr2line.c:71
msgid "Also show line table flags"
msgstr "Показувати також прапорці Ñ€Ñдків таблиці"
-#: src/addr2line.c:71
+#: src/addr2line.c:73
msgid ""
"Show all source locations that caused inline expansion of subroutines at the "
"address."
@@ -840,46 +837,51 @@ msgstr ""
"Показати уÑÑ– міÑÑ†Ñ Ñƒ початковому коді, у Ñких було виÑвлено вбудоване "
"Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ за вказаною адреÑою."
-#: src/addr2line.c:74
+#: src/addr2line.c:76
msgid "Show demangled symbols (ARG is always ignored)"
msgstr "Виводити розшифровані Ñимволи (ÐРГ завжди ігноруєтьÑÑ)"
-#: src/addr2line.c:76
+#: src/addr2line.c:78
msgid "Print all information on one line, and indent inlines"
msgstr "ВивеÑти уÑÑ– дані у один Ñ€Ñдок Ñ– додати відÑтупи до перенеÑених Ñ€Ñдків"
-#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100
+#: src/addr2line.c:80
+#, fuzzy
+#| msgid "Show absolute file names using compilation directory"
+msgid "Show relative file names without compilation directory"
+msgstr "Показувати абÑолютні назви файлів з викориÑтаннÑм каталогу збираннÑ"
+
+#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100
#: src/strings.c:78
msgid "Miscellaneous:"
msgstr "Інше:"
#. Short description of program.
-#: src/addr2line.c:86
+#: src/addr2line.c:90
msgid ""
"Locate source files and line information for ADDRs (in a.out by default)."
msgstr "Шукати ÐДРЕСИ у файлах кодів та даних про Ñ€Ñдки (типово, у a.out)."
#. Strings for arguments in help texts.
-#: src/addr2line.c:90
+#: src/addr2line.c:94
msgid "[ADDR...]"
msgstr "[ÐДРЕСÐ...]"
-#: src/addr2line.c:519
-#, c-format
+#: src/addr2line.c:527
msgid "Section syntax requires exactly one module"
msgstr "СинтакÑÐ¸Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² вимагає точного одного модулÑ"
-#: src/addr2line.c:542
+#: src/addr2line.c:549
#, c-format
msgid "offset %#<PRIxMAX> lies outside section '%s'"
msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %#<PRIxMAX> розташовано поза межами розділу «%s»"
-#: src/addr2line.c:652
+#: src/addr2line.c:659
#, c-format
msgid "cannot find symbol '%s'"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñимвол «%s»"
-#: src/addr2line.c:657
+#: src/addr2line.c:664
#, c-format
msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %#<PRIxMAX> розташовано поза межами вміÑту «%s»"
@@ -1051,112 +1053,110 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані архіву «%s» за Ð
msgid "no entry %s in archive\n"
msgstr "у архіві немає запиÑу %s\n"
-#: src/ar.c:472 src/ar.c:927 src/ar.c:1134
-#, c-format
+#: src/ar.c:472 src/ar.c:926 src/ar.c:1132
msgid "cannot create hash table"
msgstr "не вдалоÑÑ Ñтворити таблицю хешів"
-#: src/ar.c:479 src/ar.c:934 src/ar.c:1143
-#, c-format
+#: src/ar.c:478 src/ar.c:932 src/ar.c:1140
msgid "cannot insert into hash table"
msgstr "не вдалоÑÑ Ð²Ñтавити Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ таблиці хешів"
-#: src/ar.c:487 src/ranlib.c:148
+#: src/ar.c:486 src/ranlib.c:148
#, c-format
msgid "cannot stat '%s'"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані з «%s» за допомогою stat"
-#: src/ar.c:589
+#: src/ar.c:588
#, c-format
msgid "cannot read content of %s: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ з %s: %s"
-#: src/ar.c:632
+#: src/ar.c:631
#, c-format
msgid "cannot open %.*s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %.*s"
-#: src/ar.c:654
+#: src/ar.c:653
#, c-format
msgid "failed to write %s"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати %s"
-#: src/ar.c:666
+#: src/ar.c:665
#, c-format
msgid "cannot change mode of %s"
msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ права доÑтупу до %s"
-#: src/ar.c:682
+#: src/ar.c:681
#, c-format
msgid "cannot change modification time of %s"
msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ чаÑову мітку зміни %s"
-#: src/ar.c:728
+#: src/ar.c:727
#, c-format
msgid "cannot rename temporary file to %.*s"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ файл тимчаÑових даних на %.*s"
-#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222
+#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222
#, c-format
msgid "cannot create new file"
msgstr "не вдалоÑÑ Ñтворити файл"
-#: src/ar.c:1225
+#: src/ar.c:1222
#, c-format
msgid "position member %s not found"
msgstr "не виÑвлено елемента позиції %s"
-#: src/ar.c:1235
+#: src/ar.c:1232
#, c-format
msgid "%s: no entry %s in archive!\n"
msgstr "%s: у архіві немає запиÑу %s!\n"
-#: src/ar.c:1264 src/objdump.c:241
+#: src/ar.c:1261 src/objdump.c:241
#, c-format
msgid "cannot open %s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s"
-#: src/ar.c:1269
+#: src/ar.c:1266
#, c-format
msgid "cannot stat %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані %s за допомогою stat"
-#: src/ar.c:1275
+#: src/ar.c:1272
#, c-format
msgid "%s is no regular file"
msgstr "%s не є звичайним файлом"
-#: src/ar.c:1288
+#: src/ar.c:1285
#, c-format
msgid "cannot get ELF descriptor for %s: %s\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ деÑкриптор ELF Ð´Ð»Ñ %s: %s\n"
-#: src/ar.c:1308
+#: src/ar.c:1305
#, c-format
msgid "cannot read %s: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s: %s"
-#: src/ar.c:1483
+#: src/ar.c:1480
#, c-format
msgid "cannot represent ar_date"
msgstr "неможливо предÑтавити ar_date"
-#: src/ar.c:1489
+#: src/ar.c:1486
#, c-format
msgid "cannot represent ar_uid"
msgstr "неможливо предÑтавити ar_uid"
-#: src/ar.c:1495
+#: src/ar.c:1492
#, c-format
msgid "cannot represent ar_gid"
msgstr "неможливо предÑтавити ar_gid"
-#: src/ar.c:1501
+#: src/ar.c:1498
#, c-format
msgid "cannot represent ar_mode"
msgstr "неможливо предÑтавити ar_mode"
-#: src/ar.c:1507
+#: src/ar.c:1504
#, c-format
msgid "cannot represent ar_size"
msgstr "неможливо предÑтавити ar_size"
@@ -1187,197 +1187,197 @@ msgstr "розмір архіву «%s» є занадто великим"
msgid "cannot read ELF header of %s(%s): %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF з %s(%s): %s"
-#: src/elfclassify.c:92
+#: src/elfclassify.c:91
msgid "opening"
msgstr ""
-#: src/elfclassify.c:99
+#: src/elfclassify.c:98
msgid "reading"
msgstr ""
-#: src/elfclassify.c:245
+#: src/elfclassify.c:244
#, fuzzy
#| msgid "cannot get ELF header"
msgid "ELF header"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF"
-#: src/elfclassify.c:256
+#: src/elfclassify.c:255
#, fuzzy
#| msgid "Program Headers:"
msgid "program headers"
msgstr "Заголовки програми:"
-#: src/elfclassify.c:265
+#: src/elfclassify.c:264
#, fuzzy
#| msgid "Program Headers:"
msgid "program header"
msgstr "Заголовки програми:"
-#: src/elfclassify.c:285
+#: src/elfclassify.c:284
#, fuzzy
#| msgid "Section Headers:"
msgid "section headers"
msgstr "Заголовки розділів:"
-#: src/elfclassify.c:296
+#: src/elfclassify.c:295
#, fuzzy
#| msgid "cannot get section header string table index"
msgid "section header string table index"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків"
-#: src/elfclassify.c:310
+#: src/elfclassify.c:309
#, fuzzy
#| msgid "cannot get section header"
msgid "could not obtain section header"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу"
-#: src/elfclassify.c:316
+#: src/elfclassify.c:315
#, fuzzy
#| msgid "cannot get section name"
msgid "could not obtain section name"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу"
-#: src/elfclassify.c:829
+#: src/elfclassify.c:828
msgid "writing to standard output"
msgstr ""
-#: src/elfclassify.c:856
+#: src/elfclassify.c:855
msgid "reading from standard input"
msgstr ""
-#: src/elfclassify.c:877
+#: src/elfclassify.c:876
#, fuzzy
#| msgid "Input selection options:"
msgid "Classification options"
msgstr "Вибір параметрів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:"
-#: src/elfclassify.c:879
+#: src/elfclassify.c:878
msgid "File looks like an ELF object or archive/static library (default)"
msgstr ""
-#: src/elfclassify.c:882
+#: src/elfclassify.c:881
msgid "File is an regular ELF object (not an archive/static library)"
msgstr ""
-#: src/elfclassify.c:885
+#: src/elfclassify.c:884
msgid "File is an ELF archive or static library"
msgstr ""
-#: src/elfclassify.c:888
+#: src/elfclassify.c:887
msgid "File is an ELF core dump file"
msgstr ""
-#: src/elfclassify.c:891
+#: src/elfclassify.c:890
msgid ""
"File is an ELF file with symbol table or .debug_* sections and can be "
"stripped further"
msgstr ""
-#: src/elfclassify.c:894
+#: src/elfclassify.c:893
msgid "File is (primarily) an ELF program executable (not primarily a DSO)"
msgstr ""
-#: src/elfclassify.c:897
+#: src/elfclassify.c:896
msgid "File is an ELF program executable (might also be a DSO)"
msgstr ""
-#: src/elfclassify.c:900
+#: src/elfclassify.c:899
msgid ""
"File is (primarily) an ELF shared object (DSO) (not primarily an executable)"
msgstr ""
-#: src/elfclassify.c:903
+#: src/elfclassify.c:902
msgid "File is an ELF shared object (DSO) (might also be an executable)"
msgstr ""
-#: src/elfclassify.c:907
+#: src/elfclassify.c:906
#, fuzzy
#| msgid "cannot find kernel modules"
msgid "File is a linux kernel module"
msgstr "не вдалоÑÑ Ð²Ð¸Ñвити модулі Ñдра"
-#: src/elfclassify.c:909
+#: src/elfclassify.c:908
msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)"
msgstr ""
-#: src/elfclassify.c:912
+#: src/elfclassify.c:911
msgid "File is a loadable ELF object (program or shared object)"
msgstr ""
-#: src/elfclassify.c:941
+#: src/elfclassify.c:940
msgid "Input flags"
msgstr ""
-#: src/elfclassify.c:943
+#: src/elfclassify.c:942
msgid "Only classify regular (not symlink nor special device) files"
msgstr ""
-#: src/elfclassify.c:945
+#: src/elfclassify.c:944
msgid ""
"Also read file names to process from standard input, separated by newlines"
msgstr ""
-#: src/elfclassify.c:948
+#: src/elfclassify.c:947
msgid ""
"Also read file names to process from standard input, separated by ASCII NUL "
"bytes"
msgstr ""
-#: src/elfclassify.c:951
+#: src/elfclassify.c:950
msgid "Do not read files from standard input (default)"
msgstr ""
-#: src/elfclassify.c:953
+#: src/elfclassify.c:952
msgid "Try to open compressed files or embedded (kernel) ELF images"
msgstr ""
-#: src/elfclassify.c:956
+#: src/elfclassify.c:955
#, fuzzy
#| msgid "Output format:"
msgid "Output flags"
msgstr "Формат виводу:"
-#: src/elfclassify.c:958
+#: src/elfclassify.c:957
msgid "Output names of files, separated by newline"
msgstr ""
-#: src/elfclassify.c:960
+#: src/elfclassify.c:959
msgid "Output names of files, separated by ASCII NUL"
msgstr ""
-#: src/elfclassify.c:962
+#: src/elfclassify.c:961
#, fuzzy
#| msgid "More than one output file name given."
msgid "Do not output file names"
msgstr "Вказано декілька назв файлів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…."
-#: src/elfclassify.c:964
+#: src/elfclassify.c:963
msgid "If printing file names, print matching files (default)"
msgstr ""
-#: src/elfclassify.c:966
+#: src/elfclassify.c:965
msgid "If printing file names, print files that do not match"
msgstr ""
-#: src/elfclassify.c:968
+#: src/elfclassify.c:967
msgid "Additional flags"
msgstr ""
-#: src/elfclassify.c:970
+#: src/elfclassify.c:969
msgid "Output additional information (can be specified multiple times)"
msgstr ""
-#: src/elfclassify.c:972
+#: src/elfclassify.c:971
msgid "Suppress some error output (counterpart to --verbose)"
msgstr ""
#. Strings for arguments in help texts.
-#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77
+#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77
#: src/readelf.c:158
msgid "FILE..."
msgstr "ФÐЙЛ..."
-#: src/elfclassify.c:981
+#: src/elfclassify.c:980
msgid ""
"Determine the type of an ELF file.\n"
"\n"
@@ -1609,14 +1609,14 @@ msgstr "%s %s diff: проміжок"
msgid "Invalid value '%s' for --gaps parameter."
msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» параметра --gaps."
-#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141
-#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067
+#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141
+#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070
#: src/unstrip.c:2195 src/unstrip.c:2224
#, c-format
msgid "cannot open '%s'"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»"
-#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158
+#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158
#, c-format
msgid "cannot create ELF descriptor for '%s': %s"
msgstr "не вдалоÑÑ Ñтворити деÑкриптор ELF Ð´Ð»Ñ Â«%s»: %s"
@@ -1626,7 +1626,7 @@ msgstr "не вдалоÑÑ Ñтворити деÑкриптор ELF Ð´Ð»Ñ Â«%
msgid "cannot create EBL descriptor for '%s'"
msgstr "не вдалоÑÑ Ñтворити деÑкриптор EBL Ð´Ð»Ñ Â«%s»"
-#: src/elfcmp.c:761 src/findtextrel.c:394
+#: src/elfcmp.c:761 src/findtextrel.c:385
#, c-format
msgid "cannot get section header of section %zu: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу %zu: %s"
@@ -1641,7 +1641,7 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу %zu: %s"
msgid "cannot get relocation: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ переÑуваннÑ: %s"
-#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117
+#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117
#, c-format
msgid "-o option specified twice"
msgstr "параметр -o вказано двічі"
@@ -1662,7 +1662,7 @@ msgstr "невідомий тип ÑтиÑÐ½ÐµÐ½Ð½Ñ Â«%s»"
msgid "No input file given"
msgstr "Ðе надано файла вхідних даних"
-#: src/elfcompress.c:151 src/elfcompress.c:1350
+#: src/elfcompress.c:151 src/elfcompress.c:1349
#, c-format
msgid "Only one input file allowed together with '-o'"
msgstr "З параметром «-o» можна викориÑтовувати лише один файл вхідних даних"
@@ -1922,7 +1922,7 @@ msgstr ""
#: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655
#: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106
-#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458
+#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу\n"
@@ -3520,7 +3520,7 @@ msgstr ""
"розділ [%2d] «%s»: невідомий тип нотатки файла core %<PRIu32> за зміщеннÑм "
"%zu\n"
-#: src/elflint.c:4397
+#: src/elflint.c:4404
#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
@@ -3529,7 +3529,7 @@ msgstr ""
"phdr[%d]: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із іменем "
"влаÑника «%s» за зміщеннÑм %zu\n"
-#: src/elflint.c:4402
+#: src/elflint.c:4409
#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
@@ -3538,39 +3538,39 @@ msgstr ""
"розділ [%2d] «%s»: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із "
"іменем влаÑника «%s» за зміщеннÑм %zu\n"
-#: src/elflint.c:4421
+#: src/elflint.c:4428
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr "phdr[%d]: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n"
-#: src/elflint.c:4441
+#: src/elflint.c:4448
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr "phdr[%d]: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток: %s\n"
-#: src/elflint.c:4444
+#: src/elflint.c:4451
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr "phdr[%d]: зайві %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтаннього запиÑу нотатки\n"
-#: src/elflint.c:4465
+#: src/elflint.c:4472
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
"розділ [%2d] «%s»: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n"
-#: src/elflint.c:4472
+#: src/elflint.c:4479
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток\n"
-#: src/elflint.c:4475
+#: src/elflint.c:4482
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr ""
"розділ [%2d] «%s»: додаткові %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтанньої нотатки\n"
-#: src/elflint.c:4493
+#: src/elflint.c:4500
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
@@ -3578,66 +3578,66 @@ msgstr ""
"заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів "
"Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ файлів core\n"
-#: src/elflint.c:4508
+#: src/elflint.c:4515
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: %s\n"
-#: src/elflint.c:4518
+#: src/elflint.c:4525
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
"Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: невідомий тип запиÑу заголовка програми "
"%#<PRIx64>\n"
-#: src/elflint.c:4529
+#: src/elflint.c:4536
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ INTERP у заголовку програми\n"
-#: src/elflint.c:4537
+#: src/elflint.c:4544
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ TLS у заголовку програми\n"
-#: src/elflint.c:4544
+#: src/elflint.c:4551
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr "у Ñтатичному виконуваному файлі не може бути динамічних розділів\n"
-#: src/elflint.c:4558
+#: src/elflint.c:4565
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
"поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° динамічний розділ у заголовку програми має помилкове зміщеннÑ\n"
-#: src/elflint.c:4561
+#: src/elflint.c:4568
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
"розміри динамічного розділу у заголовку програми та у заголовку розділу не "
"збігаютьÑÑ\n"
-#: src/elflint.c:4571
+#: src/elflint.c:4578
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ GNU_RELRO у заголовку програми\n"
-#: src/elflint.c:4592
+#: src/elflint.c:4599
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr ""
"придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмент, до Ñкого звертаєтьÑÑ GNU_RELRO, "
"непридатний до запиÑу\n"
-#: src/elflint.c:4603
+#: src/elflint.c:4610
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
"прапорці придатного до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмента [%u] не відповідають прапорцÑм "
"GNU_RELRO [%u]\n"
-#: src/elflint.c:4610
+#: src/elflint.c:4617
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
@@ -3645,76 +3645,76 @@ msgstr ""
"прапорці GNU_RELRO [%u] не Ñ” підмножиною прапорців завантажуваного Ñегмента "
"[%u]\n"
-#: src/elflint.c:4619 src/elflint.c:4642
+#: src/elflint.c:4626 src/elflint.c:4649
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr "Ñегмент %s не міÑтитьÑÑ Ñƒ завантаженому Ñегменті\n"
-#: src/elflint.c:4648
+#: src/elflint.c:4655
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми у заголовку ELF Ñ– Ð·Ð°Ð¿Ð¸Ñ PHDR не збігаютьÑÑ"
-#: src/elflint.c:4675
+#: src/elflint.c:4682
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
"поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° таблицю вікон викликів у заголовку програми має помилкове "
"зміщеннÑ\n"
-#: src/elflint.c:4678
+#: src/elflint.c:4685
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
"розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку "
"розділу не збігаютьÑÑ\n"
-#: src/elflint.c:4691
+#: src/elflint.c:4698
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr "Ñ–Ñнує PT_GNU_EH_FRAME, хоча немає розділу .eh_frame_hdr\n"
-#: src/elflint.c:4699
+#: src/elflint.c:4706
#, c-format
msgid "call frame search table must be allocated\n"
msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’ÑÑ‚Ñ–\n"
-#: src/elflint.c:4702
+#: src/elflint.c:4709
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr "розділ [%2zu] «%s» має бути розміщено у пам’ÑÑ‚Ñ–\n"
-#: src/elflint.c:4706
+#: src/elflint.c:4713
#, c-format
msgid "call frame search table must not be writable\n"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до запиÑу\n"
-#: src/elflint.c:4709
+#: src/elflint.c:4716
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr "розділ [%2zu] «%s» не повинен бути придатним до запиÑу\n"
-#: src/elflint.c:4714
+#: src/elflint.c:4721
#, c-format
msgid "call frame search table must not be executable\n"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до виконаннÑ\n"
-#: src/elflint.c:4717
+#: src/elflint.c:4724
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконаннÑ\n"
-#: src/elflint.c:4728
+#: src/elflint.c:4735
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: розмір файла перевищує об’єм пам’ÑÑ‚Ñ–\n"
-#: src/elflint.c:4735
+#: src/elflint.c:4742
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” Ñтепенем 2\n"
-#: src/elflint.c:4738
+#: src/elflint.c:4745
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
@@ -3723,7 +3723,7 @@ msgstr ""
"Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ файлі Ñ– віртуальна адреÑа не "
"ÑпіввідноÑÑÑ‚ÑŒÑÑ Ð· вирівнюваннÑм\n"
-#: src/elflint.c:4751
+#: src/elflint.c:4758
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
@@ -3732,109 +3732,109 @@ msgstr ""
"виконуваний модуль/DSO з розділом .eh_frame_hdr не міÑтить запиÑу заголовка "
"програми PT_GNU_EH_FRAME"
-#: src/elflint.c:4785
+#: src/elflint.c:4792
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF: %s\n"
-#: src/elflint.c:4797
+#: src/elflint.c:4804
#, fuzzy, c-format
msgid "cannot create backend for ELF file\n"
msgstr "не вдалоÑÑ Ñтворити файл"
-#: src/elflint.c:4818
+#: src/elflint.c:4825
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr ""
"вÑтановлено прапорець переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту, але такий прапорець не потрібен\n"
-#: src/findtextrel.c:60
+#: src/findtextrel.c:61
msgid "Input Selection:"
msgstr "Вибір параметрів виводу даних:"
-#: src/findtextrel.c:61
+#: src/findtextrel.c:62
msgid "Prepend PATH to all file names"
msgstr "Додавати ШЛЯХ до вÑÑ–Ñ… назв файлів"
-#: src/findtextrel.c:63
+#: src/findtextrel.c:64
msgid "Use PATH as root of debuginfo hierarchy"
msgstr "ВикориÑтовувати ШЛЯХ Ñк кореневий каталог Ð´Ð»Ñ Ñ–Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ— debuginfo"
#. Short description of program.
-#: src/findtextrel.c:70
+#: src/findtextrel.c:71
msgid "Locate source of text relocations in FILEs (a.out by default)."
msgstr "Шукає джерело переÑуваного текÑту у ФÐЙЛÐÐ¥ (типово, a.out)."
#. Strings for arguments in help texts.
-#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80
+#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80
#: src/strings.c:87 src/strip.c:101
msgid "[FILE...]"
msgstr "[ФÐЙЛ...]"
-#: src/findtextrel.c:222
+#: src/findtextrel.c:224
#, c-format
msgid "cannot get ELF header '%s': %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF «%s»: %s"
-#: src/findtextrel.c:233
+#: src/findtextrel.c:235
#, c-format
msgid "'%s' is not a DSO or PIE"
msgstr "«%s» не є DSO або PIE"
-#: src/findtextrel.c:253
+#: src/findtextrel.c:255
#, c-format
msgid "getting get section header of section %zu: %s"
msgstr "Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу get розділу %zu: %s"
-#: src/findtextrel.c:277
+#: src/findtextrel.c:279
#, c-format
msgid "cannot read dynamic section: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ динамічний розділ: %s"
-#: src/findtextrel.c:298
+#: src/findtextrel.c:300
#, c-format
msgid "no text relocations reported in '%s'"
msgstr "у «%s» не виÑвлено переÑувань текÑту"
-#: src/findtextrel.c:310
+#: src/findtextrel.c:311
#, c-format
msgid "while reading ELF file"
msgstr "під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° ELF"
-#: src/findtextrel.c:314
+#: src/findtextrel.c:315
#, c-format
msgid "cannot get program header count: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ заголовків програми: %s"
-#: src/findtextrel.c:325 src/findtextrel.c:342
+#: src/findtextrel.c:326 src/findtextrel.c:341
#, c-format
msgid "cannot get program header index at offset %zd: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми за зміщеннÑм %zd: %s"
-#: src/findtextrel.c:406
+#: src/findtextrel.c:397
#, c-format
msgid "cannot get symbol table section %zu in '%s': %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ таблицю Ñимволів розділу %zu у «%s»: %s"
-#: src/findtextrel.c:427 src/findtextrel.c:450
+#: src/findtextrel.c:418 src/findtextrel.c:441
#, c-format
msgid "cannot get relocation at index %d in section %zu in '%s': %s"
msgstr ""
"не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° індекÑом %d у розділі %zu у «%s»: %s"
-#: src/findtextrel.c:516
+#: src/findtextrel.c:507
#, c-format
msgid "%s not compiled with -fpic/-fPIC\n"
msgstr "%s не зібрано з -fpic/-fPIC\n"
-#: src/findtextrel.c:570
+#: src/findtextrel.c:561
#, c-format
msgid ""
"the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
msgstr ""
"файл, що міÑтить функцію «%s», не було зібрано з параметрами -fpic/-fPIC\n"
-#: src/findtextrel.c:577 src/findtextrel.c:597
+#: src/findtextrel.c:568 src/findtextrel.c:588
#, c-format
msgid ""
"the file containing the function '%s' might not be compiled with -fpic/-"
@@ -3843,7 +3843,7 @@ msgstr ""
"файл, що міÑтить функцію «%s», ймовірно, не було зібрано з параметрами -"
"fpic/-fPIC\n"
-#: src/findtextrel.c:585
+#: src/findtextrel.c:576
#, c-format
msgid ""
"either the file containing the function '%s' or the file containing the "
@@ -3852,7 +3852,7 @@ msgstr ""
"файл, що міÑтить функцію «%s», або файл, що міÑтить функцію «%s», зібрано "
"без параметрів -fpic/-fPIC\n"
-#: src/findtextrel.c:605
+#: src/findtextrel.c:596
#, c-format
msgid ""
"a relocation modifies memory at offset %llu in a write-protected segment\n"
@@ -3959,12 +3959,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s"
msgstr "%s: Ð’ÐУТРІШÐЯ ПОМИЛКР%d (%s): %s"
#: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308
-#: src/strip.c:2763
+#: src/strip.c:2759
#, c-format
msgid "while closing '%s'"
msgstr "під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»"
-#: src/nm.c:403 src/objdump.c:280 src/strip.c:818
+#: src/nm.c:403 src/objdump.c:280 src/strip.c:820
#, c-format
msgid "%s: File format not recognized"
msgstr "%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла"
@@ -3998,24 +3998,23 @@ msgstr "не вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ Ð
msgid "%s%s%s: file format not recognized"
msgstr "%s%s%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла"
-#: src/nm.c:705
-#, c-format
+#: src/nm.c:703
msgid "cannot create search tree"
msgstr "не вдалоÑÑ Ñтворити дерево пошуку"
-#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637
-#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009
-#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719
-#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530
-#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533
-#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470
-#: src/strip.c:1084
+#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637
+#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017
+#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724
+#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528
+#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597
+#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468
+#: src/strip.c:1086
#, c-format
msgid "cannot get section header string table index"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків"
#. We always print this prolog.
-#: src/nm.c:771
+#: src/nm.c:768
#, c-format
msgid ""
"\n"
@@ -4029,7 +4028,7 @@ msgstr ""
"\n"
#. The header line.
-#: src/nm.c:774
+#: src/nm.c:771
#, c-format
msgid ""
"%*s%-*s %-*s Class Type %-*s %*s Section\n"
@@ -4038,7 +4037,7 @@ msgstr ""
"%*s%-*s %-*s ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ %-*s %*s Розділ\n"
"\n"
-#: src/nm.c:776
+#: src/nm.c:773
#, fuzzy
#| msgid " Name: "
msgctxt "sysv"
@@ -4046,45 +4045,45 @@ msgid "Name"
msgstr "Ðазва: "
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:778
+#: src/nm.c:775
msgctxt "sysv"
msgid "Value"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:780
+#: src/nm.c:777
msgctxt "sysv"
msgid "Size"
msgstr ""
#. TRANS: the "sysv|" parts makes the string unique.
-#: src/nm.c:782
+#: src/nm.c:779
msgctxt "sysv"
msgid "Line"
msgstr ""
-#: src/nm.c:1250
+#: src/nm.c:1246
#, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr "%s: розмір запиÑу у розділі %zd «%s» не Ñ” очікуваним"
-#: src/nm.c:1255
+#: src/nm.c:1251
#, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: розмір розділу %zd «%s» не Ñ” кратним до розміру запиÑу"
-#: src/nm.c:1336
+#: src/nm.c:1331
#, c-format
msgid "%s: entries (%zd) in section %zd `%s' is too large"
msgstr "%s: запиÑи (%zd) у розділі %zd, «%s» Ñ” завеликим"
#. XXX Add machine specific object file types.
-#: src/nm.c:1572
+#: src/nm.c:1567
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: некоректна діÑ"
-#: src/nm.c:1622
+#: src/nm.c:1617
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: немає Ñимволів"
@@ -4127,11 +4126,11 @@ msgstr "Ðе вказано дії.\n"
msgid "while close `%s'"
msgstr "під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»"
-#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296
+#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303
msgid "INVALID SYMBOL"
msgstr "ÐЕКОРЕКТÐИЙ СИМВОЛ"
-#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332
+#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339
msgid "INVALID SECTION"
msgstr "ÐЕКОРЕКТÐИЙ РОЗДІЛ"
@@ -4156,12 +4155,11 @@ msgid "Contents of section %s:\n"
msgstr "ВміÑÑ‚ розділу %s:\n"
#: src/objdump.c:687
-#, c-format
msgid "cannot disassemble"
msgstr "не вдалоÑÑ Ð´Ð¸Ð·Ð°Ñемблювати"
-#: src/objdump.c:760
-#, fuzzy, c-format
+#: src/objdump.c:758
+#, fuzzy
msgid "cannot create backend for elf file"
msgstr "не вдалоÑÑ Ñтворити файл"
@@ -4346,20 +4344,20 @@ msgstr "Ðевідомий діагноÑтичний розділ DWARF «%s».
msgid "cannot generate Elf descriptor: %s"
msgstr "не вдалоÑÑ Ñтворити деÑкриптор Elf: %s"
-#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179
+#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181
#, c-format
msgid "cannot determine number of sections: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s"
-#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475
+#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469
#, c-format
msgid "cannot get section: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s"
-#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764
-#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610
-#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222
-#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470
+#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827
+#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611
+#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223
+#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471
#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056
#, c-format
msgid "cannot get section header: %s"
@@ -4370,8 +4368,8 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу:
msgid "cannot get section name"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу"
-#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713
-#: src/readelf.c:10891
+#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782
+#: src/readelf.c:10960
#, c-format
msgid "cannot get %s content: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані %s: %s"
@@ -4431,48 +4429,48 @@ msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF: %s"
msgid "cannot create EBL handle"
msgstr "не вдалоÑÑ Ñтворити деÑкриптор EBL"
-#: src/readelf.c:961
+#: src/readelf.c:959
#, c-format
msgid "cannot determine number of program headers: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ заголовків програми: %s"
-#: src/readelf.c:993
+#: src/readelf.c:991
#, c-format
msgid "cannot read ELF: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ ELF: %s"
-#: src/readelf.c:1054
+#: src/readelf.c:1052
msgid "NONE (None)"
msgstr "NONE (Ðемає)"
-#: src/readelf.c:1055
+#: src/readelf.c:1053
msgid "REL (Relocatable file)"
msgstr "REL (Придатний до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»)"
-#: src/readelf.c:1056
+#: src/readelf.c:1054
msgid "EXEC (Executable file)"
msgstr "EXEC (Виконуваний файл)"
-#: src/readelf.c:1057
+#: src/readelf.c:1055
msgid "DYN (Shared object file)"
msgstr "DYN (Файл об’єктів Ñпільного викориÑтаннÑ)"
-#: src/readelf.c:1058
+#: src/readelf.c:1056
msgid "CORE (Core file)"
msgstr "CORE (Файл Ñдра)"
-#: src/readelf.c:1063
+#: src/readelf.c:1061
#, c-format
msgid "OS Specific: (%x)\n"
msgstr "ОС-Ñпецифічне: (%x)\n"
#. && e_type <= ET_HIPROC always true
-#: src/readelf.c:1065
+#: src/readelf.c:1063
#, c-format
msgid "Processor Specific: (%x)\n"
msgstr "Специфічне Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора: (%x)\n"
-#: src/readelf.c:1075
+#: src/readelf.c:1073
msgid ""
"ELF Header:\n"
" Magic: "
@@ -4480,7 +4478,7 @@ msgstr ""
"Заголовок ELF:\n"
" Magic: "
-#: src/readelf.c:1079
+#: src/readelf.c:1077
#, c-format
msgid ""
"\n"
@@ -4489,123 +4487,123 @@ msgstr ""
"\n"
" КлаÑ: %s\n"
-#: src/readelf.c:1084
+#: src/readelf.c:1082
#, c-format
msgid " Data: %s\n"
msgstr " Дані: %s\n"
-#: src/readelf.c:1090
+#: src/readelf.c:1088
#, c-format
msgid " Ident Version: %hhd %s\n"
msgstr " ВерÑÑ–Ñ Ident: %hhd %s\n"
-#: src/readelf.c:1092 src/readelf.c:1114
+#: src/readelf.c:1090 src/readelf.c:1112
msgid "(current)"
msgstr "(поточний)"
-#: src/readelf.c:1096
+#: src/readelf.c:1094
#, c-format
msgid " OS/ABI: %s\n"
msgstr " ОС/ABI: %s\n"
-#: src/readelf.c:1099
+#: src/readelf.c:1097
#, c-format
msgid " ABI Version: %hhd\n"
msgstr " ВерÑÑ–Ñ ABI: %hhd\n"
-#: src/readelf.c:1102
+#: src/readelf.c:1100
msgid " Type: "
msgstr " Тип: "
-#: src/readelf.c:1107
+#: src/readelf.c:1105
#, c-format
msgid " Machine: %s\n"
msgstr " Ðрхітектура: %s\n"
-#: src/readelf.c:1109
+#: src/readelf.c:1107
#, c-format
msgid " Machine: <unknown>: 0x%x\n"
msgstr " Ðрхітектура: <невідома>: 0x%x\n"
-#: src/readelf.c:1112
+#: src/readelf.c:1110
#, c-format
msgid " Version: %d %s\n"
msgstr " ВерÑÑ–Ñ: %d %s\n"
-#: src/readelf.c:1116
+#: src/readelf.c:1114
#, c-format
msgid " Entry point address: %#<PRIx64>\n"
msgstr " ÐдреÑа вхідної точки: %#<PRIx64>\n"
-#: src/readelf.c:1119
+#: src/readelf.c:1117
#, c-format
msgid " Start of program headers: %<PRId64> %s\n"
msgstr " Початок заголовків програм: %<PRId64> %s\n"
-#: src/readelf.c:1120 src/readelf.c:1123
+#: src/readelf.c:1118 src/readelf.c:1121
msgid "(bytes into file)"
msgstr "(байтів у файл)"
-#: src/readelf.c:1122
+#: src/readelf.c:1120
#, c-format
msgid " Start of section headers: %<PRId64> %s\n"
msgstr " Початок заголовків розділів: %<PRId64> %s\n"
-#: src/readelf.c:1125
+#: src/readelf.c:1123
#, c-format
msgid " Flags: %s\n"
msgstr " Прапорці: %s\n"
-#: src/readelf.c:1128
+#: src/readelf.c:1126
#, c-format
msgid " Size of this header: %<PRId16> %s\n"
msgstr " Розмір цього заголовка: %<PRId16> %s\n"
-#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149
+#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147
msgid "(bytes)"
msgstr "(байтів)"
-#: src/readelf.c:1131
+#: src/readelf.c:1129
#, c-format
msgid " Size of program header entries: %<PRId16> %s\n"
msgstr " Розмір запиÑів заголовка програми: %<PRId16> %s\n"
-#: src/readelf.c:1134
+#: src/readelf.c:1132
#, c-format
msgid " Number of program headers entries: %<PRId16>"
msgstr " КількіÑÑ‚ÑŒ запиÑів заголовків програми: %<PRId16>"
-#: src/readelf.c:1141
+#: src/readelf.c:1139
#, c-format
msgid " (%<PRIu32> in [0].sh_info)"
msgstr " (%<PRIu32> у [0].sh_info)"
-#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175
+#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173
msgid " ([0] not available)"
msgstr " ([0] недоÑтупний)"
-#: src/readelf.c:1148
+#: src/readelf.c:1146
#, c-format
msgid " Size of section header entries: %<PRId16> %s\n"
msgstr " Розмір запиÑів заголовків розділів: %<PRId16> %s\n"
-#: src/readelf.c:1151
+#: src/readelf.c:1149
#, c-format
msgid " Number of section headers entries: %<PRId16>"
msgstr " КількіÑÑ‚ÑŒ запиÑів заголовків розділів: %<PRId16>"
-#: src/readelf.c:1158
+#: src/readelf.c:1156
#, c-format
msgid " (%<PRIu32> in [0].sh_size)"
msgstr " (%<PRIu32> у [0].sh_size)"
#. We managed to get the zeroth section.
-#: src/readelf.c:1171
+#: src/readelf.c:1169
#, c-format
msgid " (%<PRIu32> in [0].sh_link)"
msgstr " (%<PRIu32> у [0].sh_link)"
-#: src/readelf.c:1179
+#: src/readelf.c:1177
#, c-format
msgid ""
" Section header string table index: XINDEX%s\n"
@@ -4614,7 +4612,7 @@ msgstr ""
" Ð†Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: XINDEX%s\n"
"\n"
-#: src/readelf.c:1183
+#: src/readelf.c:1181
#, c-format
msgid ""
" Section header string table index: %<PRId16>\n"
@@ -4623,12 +4621,12 @@ msgstr ""
" Ð†Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: %<PRId16>\n"
"\n"
-#: src/readelf.c:1230 src/readelf.c:1440
+#: src/readelf.c:1227 src/readelf.c:1435
#, c-format
msgid "cannot get number of sections: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s"
-#: src/readelf.c:1233
+#: src/readelf.c:1230
#, c-format
msgid ""
"There are %zd section headers, starting at offset %#<PRIx64>:\n"
@@ -4637,16 +4635,16 @@ msgstr ""
"ВиÑвлено %zd заголовків розділів, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ — %#<PRIx64>:\n"
"\n"
-#: src/readelf.c:1242
+#: src/readelf.c:1238
#, c-format
msgid "cannot get section header string table index: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: %s"
-#: src/readelf.c:1245
+#: src/readelf.c:1241
msgid "Section Headers:"
msgstr "Заголовки розділів:"
-#: src/readelf.c:1248
+#: src/readelf.c:1244
msgid ""
"[Nr] Name Type Addr Off Size ES Flags Lk "
"Inf Al"
@@ -4654,7 +4652,7 @@ msgstr ""
"[â„– ] Ðазва Тип Ðдр Змі Розмір ES Прап Lk "
"Інф Al"
-#: src/readelf.c:1250
+#: src/readelf.c:1246
msgid ""
"[Nr] Name Type Addr Off Size ES "
"Flags Lk Inf Al"
@@ -4662,35 +4660,35 @@ msgstr ""
"[â„– ] Ðазва Тип Ðдр Змі Розмір ES "
"Прап Lk Інф Al"
-#: src/readelf.c:1255
+#: src/readelf.c:1251
msgid " [Compression Size Al]"
msgstr " [СтиÑÐºÐ°Ð½Ð½Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðл]"
-#: src/readelf.c:1257
+#: src/readelf.c:1253
msgid " [Compression Size Al]"
msgstr " [СтиÑÐºÐ°Ð½Ð½Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðл]"
-#: src/readelf.c:1335
+#: src/readelf.c:1331
#, c-format
msgid "bad compression header for section %zd: %s"
msgstr "помилковий заголовок ÑтиÑÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zd: %s"
-#: src/readelf.c:1346
+#: src/readelf.c:1342
#, c-format
msgid "bad gnu compressed size for section %zd: %s"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑтиÑненого розміру gnu Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zd: %s"
-#: src/readelf.c:1364
+#: src/readelf.c:1360
msgid "Program Headers:"
msgstr "Заголовки програми:"
-#: src/readelf.c:1366
+#: src/readelf.c:1362
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
msgstr ""
" Тип Зміщен ВіртÐдр ФізÐдр РозмФайл РозмПам Пра Вирів"
-#: src/readelf.c:1369
+#: src/readelf.c:1365
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align"
@@ -4698,12 +4696,12 @@ msgstr ""
" Тип Зміщен ВіртÐдр ФізÐдр "
"РозмФайлРозмПам Пра Вирів"
-#: src/readelf.c:1426
+#: src/readelf.c:1422
#, c-format
msgid "\t[Requesting program interpreter: %s]\n"
msgstr "\t[Запит щодо інтерпретатора програми: %s]\n"
-#: src/readelf.c:1453
+#: src/readelf.c:1447
msgid ""
"\n"
" Section to Segment mapping:\n"
@@ -4713,12 +4711,12 @@ msgstr ""
" Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² на Ñегмент:\n"
" Розділи Ñегмента..."
-#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
+#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164
#, c-format
msgid "cannot get program header: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок програми: %s"
-#: src/readelf.c:1610
+#: src/readelf.c:1602
#, c-format
msgid ""
"\n"
@@ -4736,7 +4734,7 @@ msgstr[2] ""
"\n"
"Група розділів COMDAT [%2zu] «%s» з підпиÑом «%s» міÑтить %zu запиÑів:\n"
-#: src/readelf.c:1615
+#: src/readelf.c:1607
#, c-format
msgid ""
"\n"
@@ -4754,31 +4752,31 @@ msgstr[2] ""
"\n"
"Група розділів [%2zu] «%s» з підпиÑом «%s» міÑтить %zu запиÑів:\n"
-#: src/readelf.c:1623
+#: src/readelf.c:1615
msgid "<INVALID SYMBOL>"
msgstr "<ÐЕКОРЕКТÐИЙ СИМВОЛ>"
-#: src/readelf.c:1637
+#: src/readelf.c:1629
msgid "<INVALID SECTION>"
msgstr "<ÐЕКОРЕКТÐИЙ РОЗДІЛ>"
-#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635
-#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693
+#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699
+#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757
msgid "Couldn't uncompress section"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ розділ"
-#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501
+#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500
#, c-format
msgid "cannot get section [%zd] header: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу [%zd]: %s"
-#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801
-#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409
+#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805
+#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406
#, c-format
msgid "invalid sh_link value in section %zu"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link у розділі %zu"
-#: src/readelf.c:1812
+#: src/readelf.c:1821
#, c-format
msgid ""
"\n"
@@ -4801,36 +4799,36 @@ msgstr[2] ""
"Динамічний Ñегмент міÑтить %lu запиÑів:\n"
" Ðдр: %#0*<PRIx64> ЗміщеннÑ: %#08<PRIx64> ПоÑ. на розділ: [%2u] '%s'\n"
-#: src/readelf.c:1822
+#: src/readelf.c:1831
msgid " Type Value\n"
msgstr " Тип ЗначеннÑ\n"
-#: src/readelf.c:1846
+#: src/readelf.c:1855
#, c-format
msgid "Shared library: [%s]\n"
msgstr "Спільна бібліотека: [%s]\n"
-#: src/readelf.c:1851
+#: src/readelf.c:1860
#, c-format
msgid "Library soname: [%s]\n"
msgstr "Ðазва so бібліотеки: [%s]\n"
-#: src/readelf.c:1856
+#: src/readelf.c:1865
#, c-format
msgid "Library rpath: [%s]\n"
msgstr "Rpath бібліотеки: [%s]\n"
-#: src/readelf.c:1861
+#: src/readelf.c:1870
#, c-format
msgid "Library runpath: [%s]\n"
msgstr "Runpath бібліотеки: [%s]\n"
-#: src/readelf.c:1881
+#: src/readelf.c:1890
#, c-format
msgid "%<PRId64> (bytes)\n"
msgstr "%<PRId64> (байт)\n"
-#: src/readelf.c:1994 src/readelf.c:2184
+#: src/readelf.c:2003 src/readelf.c:2192
#, c-format
msgid ""
"\n"
@@ -4839,7 +4837,7 @@ msgstr ""
"\n"
"Ðекоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів за зміщеннÑм %#0<PRIx64>\n"
-#: src/readelf.c:2012 src/readelf.c:2202
+#: src/readelf.c:2020 src/readelf.c:2209
#, c-format
msgid ""
"\n"
@@ -4868,7 +4866,7 @@ msgstr[2] ""
#. The .rela.dyn section does not refer to a specific section but
#. instead of section index zero. Do not try to print a section
#. name.
-#: src/readelf.c:2027 src/readelf.c:2217
+#: src/readelf.c:2035 src/readelf.c:2224
#, c-format
msgid ""
"\n"
@@ -4886,30 +4884,30 @@ msgstr[2] ""
"\n"
"Розділ переÑÑƒÐ²Ð°Ð½Ð½Ñ [%2u] «%s» за зміщеннÑм %#0<PRIx64> міÑтить %d запиÑів:\n"
-#: src/readelf.c:2037
+#: src/readelf.c:2045
msgid " Offset Type Value Name\n"
msgstr " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва\n"
-#: src/readelf.c:2039
+#: src/readelf.c:2047
msgid " Offset Type Value Name\n"
msgstr " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва\n"
-#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137
-#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309
-#: src/readelf.c:2331 src/readelf.c:2344
+#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145
+#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316
+#: src/readelf.c:2338 src/readelf.c:2351
msgid "<INVALID RELOC>"
msgstr "<ÐЕКОРЕКТÐЕ ПЕРЕМІЩЕÐÐЯ>"
-#: src/readelf.c:2227
+#: src/readelf.c:2234
msgid " Offset Type Value Addend Name\n"
msgstr " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва додатка\n"
-#: src/readelf.c:2229
+#: src/readelf.c:2236
msgid " Offset Type Value Addend Name\n"
msgstr ""
" Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва додатка\n"
-#: src/readelf.c:2467
+#: src/readelf.c:2473
#, c-format
msgid ""
"\n"
@@ -4927,7 +4925,7 @@ msgstr[2] ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів [%2u] «%s» міÑтить %u запиÑів:\n"
-#: src/readelf.c:2472
+#: src/readelf.c:2478
#, c-format
msgid " %lu local symbol String table: [%2u] '%s'\n"
msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
@@ -4935,33 +4933,33 @@ msgstr[0] " %lu лок. Ñимвол Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: [%2u] «
msgstr[1] " %lu лок. Ñимволи Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: [%2u] «%s»\n"
msgstr[2] " %lu лок. Ñимволів Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: [%2u] «%s»\n"
-#: src/readelf.c:2480
+#: src/readelf.c:2486
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " â„–â„– Знач. Роз. Тип Зв’Ñз Вид. Інд Ðазва\n"
-#: src/readelf.c:2482
+#: src/readelf.c:2488
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr " â„–â„– Знач. Роз. Тип Зв’Ñз Вид. Інд Ðазва\n"
-#: src/readelf.c:2502
+#: src/readelf.c:2508
#, c-format
msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
-#: src/readelf.c:2595
+#: src/readelf.c:2601
#, c-format
msgid "bad dynamic symbol"
msgstr "помилковий динамічний Ñимвол"
-#: src/readelf.c:2680
+#: src/readelf.c:2686
msgid "none"
msgstr "немає"
-#: src/readelf.c:2697
+#: src/readelf.c:2703
msgid "| <unknown>"
msgstr "| <невідомо>"
-#: src/readelf.c:2728
+#: src/readelf.c:2733
#, c-format
msgid ""
"\n"
@@ -4984,17 +4982,17 @@ msgstr[2] ""
"Розділ потреби у верÑÑ–ÑÑ… [%2u] «%s», що міÑтить %d запиÑів:\n"
" Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n"
-#: src/readelf.c:2749
+#: src/readelf.c:2754
#, c-format
msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
msgstr " %#06x: ВерÑÑ–Ñ: %hu Файл: %s Кть: %hu\n"
-#: src/readelf.c:2762
+#: src/readelf.c:2767
#, c-format
msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
msgstr " %#06x: Ðазва: %s Прап: %s ВерÑÑ–Ñ: %hu\n"
-#: src/readelf.c:2805
+#: src/readelf.c:2809
#, c-format
msgid ""
"\n"
@@ -5017,18 +5015,18 @@ msgstr[2] ""
"Розділ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ— [%2u] «%s», що міÑтить %d запиÑів:\n"
" Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n"
-#: src/readelf.c:2833
+#: src/readelf.c:2837
#, c-format
msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
msgstr " %#06x: ВерÑÑ–Ñ: %hd Прап.: %s ІндекÑ: %hd К-Ñ‚ÑŒ: %hd Ðазва: %s\n"
-#: src/readelf.c:2848
+#: src/readelf.c:2852
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr " %#06x: батьківÑький %d: %s\n"
#. Print the header.
-#: src/readelf.c:3109
+#: src/readelf.c:3112
#, c-format
msgid ""
"\n"
@@ -5051,15 +5049,15 @@ msgstr[2] ""
"Розділ Ñимволів верÑій [%2u] «%s», що міÑтить %d запиÑів:\n"
" Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»"
-#: src/readelf.c:3137
+#: src/readelf.c:3140
msgid " 0 *local* "
msgstr " 0 *локальний* "
-#: src/readelf.c:3142
+#: src/readelf.c:3145
msgid " 1 *global* "
msgstr " 1 *загальний* "
-#: src/readelf.c:3184
+#: src/readelf.c:3187
#, c-format
msgid ""
"\n"
@@ -5087,22 +5085,22 @@ msgstr[2] ""
"блоками):\n"
" Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n"
-#: src/readelf.c:3206
+#: src/readelf.c:3209
#, no-c-format
msgid " Length Number % of total Coverage\n"
msgstr " Довжина Ðомер % від загал. ПокриттÑ\n"
-#: src/readelf.c:3208
+#: src/readelf.c:3211
#, c-format
msgid " 0 %6<PRIu32> %5.1f%%\n"
msgstr " 0 %6<PRIu32> %5.1f%%\n"
-#: src/readelf.c:3215
+#: src/readelf.c:3218
#, c-format
msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
-#: src/readelf.c:3228
+#: src/readelf.c:3231
#, c-format
msgid ""
" Average number of tests: successful lookup: %f\n"
@@ -5111,37 +5109,37 @@ msgstr ""
" Ð¡ÐµÑ€ÐµÐ´Ð½Ñ ÐºÑ–Ð»ÑŒÐºÑ–ÑÑ‚ÑŒ теÑтів: уÑпішний пошук: %f\n"
"\t\t\t неуÑпішний пошук: %f\n"
-#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376
+#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379
#, c-format
msgid "cannot get data for section %d: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d: %s"
-#: src/readelf.c:3254
+#: src/readelf.c:3257
#, c-format
msgid "invalid data in sysv.hash section %d"
msgstr "некоректні дані у розділі sysv.hash %d"
-#: src/readelf.c:3283
+#: src/readelf.c:3286
#, c-format
msgid "invalid chain in sysv.hash section %d"
msgstr "некоректний ланцюжок у розділі sysv.hash %d"
-#: src/readelf.c:3318
+#: src/readelf.c:3321
#, c-format
msgid "invalid data in sysv.hash64 section %d"
msgstr "некоректні дані у розділі sysv.hash64 %d"
-#: src/readelf.c:3349
+#: src/readelf.c:3352
#, c-format
msgid "invalid chain in sysv.hash64 section %d"
msgstr "некоректний ланцюжок у розділі sysv.hash64 %d"
-#: src/readelf.c:3385
+#: src/readelf.c:3388
#, c-format
msgid "invalid data in gnu.hash section %d"
msgstr "некоректні дані у розділі gnu.hash %d"
-#: src/readelf.c:3452
+#: src/readelf.c:3454
#, c-format
msgid ""
" Symbol Bias: %u\n"
@@ -5151,7 +5149,7 @@ msgstr ""
" Розмір бітової маÑки: %zu байтів %<PRIuFAST32>%% вÑтановлених бітів зÑув "
"2-го хешу: %u\n"
-#: src/readelf.c:3541
+#: src/readelf.c:3539
#, c-format
msgid ""
"\n"
@@ -5172,7 +5170,7 @@ msgstr[2] ""
"Розділ ÑпиÑку бібліотек [%2zu] «%s» за зміщеннÑм %#0<PRIx64> міÑтить %d "
"запиÑів:\n"
-#: src/readelf.c:3555
+#: src/readelf.c:3553
msgid ""
" Library Time Stamp Checksum Version "
"Flags"
@@ -5180,7 +5178,7 @@ msgstr ""
" Бібліотека ЧаÑовий штамп ВерÑÑ–Ñ Ñуми "
"Прапорці"
-#: src/readelf.c:3614
+#: src/readelf.c:3611
#, c-format
msgid ""
"\n"
@@ -5191,102 +5189,101 @@ msgstr ""
"Розділ атрибутів об’єктів [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм "
"%#0<PRIx64>:\n"
-#: src/readelf.c:3631
+#: src/readelf.c:3628
msgid " Owner Size\n"
msgstr " ВлаÑник Розмір\n"
-#: src/readelf.c:3655
+#: src/readelf.c:3652
#, c-format
msgid " %-13s %4<PRIu32>\n"
msgstr " %-13s %4<PRIu32>\n"
#. Unknown subsection, print and skip.
-#: src/readelf.c:3694
+#: src/readelf.c:3691
#, c-format
msgid " %-4u %12<PRIu32>\n"
msgstr " %-4u %12<PRIu32>\n"
#. Tag_File
-#: src/readelf.c:3699
+#: src/readelf.c:3696
#, c-format
msgid " File: %11<PRIu32>\n"
msgstr " Файл: %11<PRIu32>\n"
-#: src/readelf.c:3748
+#: src/readelf.c:3745
#, c-format
msgid " %s: %<PRId64>, %s\n"
msgstr " %s: %<PRId64>, %s\n"
-#: src/readelf.c:3751
+#: src/readelf.c:3748
#, c-format
msgid " %s: %<PRId64>\n"
msgstr " %s: %<PRId64>\n"
-#: src/readelf.c:3754
+#: src/readelf.c:3751
#, c-format
msgid " %s: %s\n"
msgstr " %s: %s\n"
-#: src/readelf.c:3764
+#: src/readelf.c:3761
#, c-format
msgid " %u: %<PRId64>\n"
msgstr " %u: %<PRId64>\n"
-#: src/readelf.c:3767
+#: src/readelf.c:3764
#, c-format
msgid " %u: %s\n"
msgstr " %u: %s\n"
-#: src/readelf.c:3837
-#, c-format
+#: src/readelf.c:3834
msgid "sprintf failure"
msgstr "помилка sprintf"
-#: src/readelf.c:4319
+#: src/readelf.c:4316
msgid "empty block"
msgstr "порожній блок"
-#: src/readelf.c:4322
+#: src/readelf.c:4319
#, c-format
msgid "%zu byte block:"
msgstr "%zu-байтовий блок:"
-#: src/readelf.c:4800
+#: src/readelf.c:4797
#, c-format
msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n"
msgstr "%*s[%2<PRIuMAX>] %s <ОБРІЗÐÐО>\n"
-#: src/readelf.c:4867
+#: src/readelf.c:4864
#, c-format
msgid "%s %#<PRIx64> used with different address sizes"
msgstr "%s %#<PRIx64> викориÑтано з різними розмірами адреÑ"
-#: src/readelf.c:4874
+#: src/readelf.c:4871
#, c-format
msgid "%s %#<PRIx64> used with different offset sizes"
msgstr "%s %#<PRIx64> викориÑтано з різними розмірами зміщень"
-#: src/readelf.c:4881
+#: src/readelf.c:4878
#, c-format
msgid "%s %#<PRIx64> used with different base addresses"
msgstr "%s %#<PRIx64> викориÑтано з різними базовими адреÑами"
-#: src/readelf.c:4888
+#: src/readelf.c:4885
#, c-format
msgid "%s %#<PRIx64> used with different attribute %s and %s"
msgstr "%s %#<PRIx64> викориÑтано з різними атрибутами, %s Ñ– %s"
-#: src/readelf.c:4988
+#: src/readelf.c:4985
#, c-format
msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n"
msgstr " [%6tx] <ÐЕВИКОРИСТОВУВÐÐІ ДÐÐІ У РЕШТІ РОЗДІЛУ>\n"
-#: src/readelf.c:4996
+#: src/readelf.c:4993
#, c-format
msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n"
msgstr " [%6tx] <ÐЕВИКОРИСТОВУВÐÐІ ДÐÐІ> ... %<PRIu64> байтів ...\n"
-#: src/readelf.c:5099
+#: src/readelf.c:5096
#, c-format
msgid ""
"\n"
@@ -5297,7 +5294,7 @@ msgstr ""
"Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n"
" [ Код]\n"
-#: src/readelf.c:5107
+#: src/readelf.c:5104
#, c-format
msgid ""
"\n"
@@ -5306,20 +5303,20 @@ msgstr ""
"\n"
"Розділ Ñкорочень за зміщеннÑм %<PRIu64>:\n"
-#: src/readelf.c:5120
+#: src/readelf.c:5117
#, c-format
msgid " *** error while reading abbreviation: %s\n"
msgstr " *** помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÑкороченнÑ: %s\n"
-#: src/readelf.c:5136
+#: src/readelf.c:5133
#, c-format
msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
msgstr " [%5u] зміщеннÑ: %<PRId64>, дочірній: %s, мітка: %s\n"
-#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030
-#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548
-#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352
-#: src/readelf.c:10412
+#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027
+#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617
+#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421
+#: src/readelf.c:10481
#, c-format
msgid ""
"\n"
@@ -5328,54 +5325,54 @@ msgstr ""
"\n"
"Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n"
-#: src/readelf.c:5182
+#: src/readelf.c:5179
#, c-format
msgid "cannot get .debug_addr section data: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_addr: %s"
-#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120
+#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189
#, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " Довжина: %8<PRIu64>\n"
-#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133
+#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202
#, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n"
-#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142
+#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211
#, c-format
msgid " Address size: %8<PRIu64>\n"
msgstr " Розмір адреÑи: %8<PRIu64>\n"
-#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152
+#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221
#, c-format
msgid " Segment size: %8<PRIu64>\n"
msgstr ""
" Розмір Ñегмента: %8<PRIu64>\n"
"\n"
-#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544
+#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613
#, c-format
msgid "Unknown version"
msgstr "Ðевідома верÑÑ–Ñ"
-#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147
+#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216
#, c-format
msgid "unsupported address size"
msgstr "непідтримуваний розмір адреÑи"
-#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157
+#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226
#, c-format
msgid "unsupported segment size"
msgstr "непідтримуваний розмір Ñегмента"
-#: src/readelf.c:5399 src/readelf.c:5473
+#: src/readelf.c:5396 src/readelf.c:5470
#, c-format
msgid "cannot get .debug_aranges content: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані get .debug_aranges: %s"
-#: src/readelf.c:5414
+#: src/readelf.c:5411
#, c-format
msgid ""
"\n"
@@ -5393,12 +5390,12 @@ msgstr[2] ""
"\n"
"Розділ DWARF [%2zu] «%s» за зміщеннÑм %#<PRIx64> міÑтить %zu запиÑів:\n"
-#: src/readelf.c:5445
+#: src/readelf.c:5442
#, c-format
msgid " [%*zu] ???\n"
msgstr " [%*zu] ???\n"
-#: src/readelf.c:5447
+#: src/readelf.c:5444
#, c-format
msgid ""
" [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
@@ -5406,7 +5403,7 @@ msgstr ""
" [%*zu] початок: %0#*<PRIx64>, довжина: %5<PRIu64>, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU DIE: "
"%6<PRId64>\n"
-#: src/readelf.c:5491 src/readelf.c:8413
+#: src/readelf.c:5488 src/readelf.c:8425
#, c-format
msgid ""
"\n"
@@ -5415,13 +5412,13 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм %zu:\n"
-#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424
-#: src/readelf.c:9101
+#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436
+#: src/readelf.c:9170
#, c-format
msgid "invalid data in section [%zu] '%s'"
msgstr "некоректні дані у розділі [%zu] «%s»"
-#: src/readelf.c:5511
+#: src/readelf.c:5508
#, c-format
msgid ""
"\n"
@@ -5430,27 +5427,27 @@ msgstr ""
"\n"
" Довжина: %6<PRIu64>\n"
-#: src/readelf.c:5523
+#: src/readelf.c:5520
#, c-format
msgid " DWARF version: %6<PRIuFAST16>\n"
msgstr " верÑÑ–Ñ DWARF: %6<PRIuFAST16>\n"
-#: src/readelf.c:5527
+#: src/readelf.c:5524
#, c-format
msgid "unsupported aranges version"
msgstr "непідтримувана верÑÑ–Ñ aranges"
-#: src/readelf.c:5538
+#: src/readelf.c:5535
#, c-format
msgid " CU offset: %6<PRIx64>\n"
msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU: %6<PRIx64>\n"
-#: src/readelf.c:5544
+#: src/readelf.c:5541
#, c-format
msgid " Address size: %6<PRIu64>\n"
msgstr " Розмір адреÑи: %6<PRIu64>\n"
-#: src/readelf.c:5555
+#: src/readelf.c:5552
#, c-format
msgid ""
" Segment size: %6<PRIu64>\n"
@@ -5459,17 +5456,17 @@ msgstr ""
" Розмір Ñегмента: %6<PRIu64>\n"
"\n"
-#: src/readelf.c:5610
+#: src/readelf.c:5607
#, c-format
msgid " %zu padding bytes\n"
msgstr " %zu байтів доповненнÑ\n"
-#: src/readelf.c:5654
+#: src/readelf.c:5651
#, c-format
msgid "cannot get .debug_rnglists content: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_rnglists: %s"
-#: src/readelf.c:5677 src/readelf.c:9107
+#: src/readelf.c:5674 src/readelf.c:9176
#, c-format
msgid ""
"Table at Offset 0x%<PRIx64>:\n"
@@ -5478,42 +5475,42 @@ msgstr ""
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм 0x%<PRIx64>:\n"
"\n"
-#: src/readelf.c:5732 src/readelf.c:9162
+#: src/readelf.c:5729 src/readelf.c:9231
#, c-format
msgid " Offset entries: %8<PRIu64>\n"
msgstr " ЗапиÑи зміщеннÑ: %8<PRIu64>\n"
-#: src/readelf.c:5748 src/readelf.c:9178
+#: src/readelf.c:5745 src/readelf.c:9247
#, c-format
msgid " Unknown CU base: "
msgstr " Ðевідома оÑнова CU: "
-#: src/readelf.c:5750 src/readelf.c:9180
+#: src/readelf.c:5747 src/readelf.c:9249
#, c-format
msgid " CU [%6<PRIx64>] base: "
msgstr " ОÑнова CU [%6<PRIx64>]: "
-#: src/readelf.c:5756 src/readelf.c:9186
+#: src/readelf.c:5753 src/readelf.c:9255
#, c-format
msgid " Not associated with a CU.\n"
msgstr " Ðе пов'Ñзано із CU.\n"
-#: src/readelf.c:5767 src/readelf.c:9197
+#: src/readelf.c:5764 src/readelf.c:9266
#, c-format
msgid "too many offset entries for unit length"
msgstr "забагато запиÑів зÑуву Ð´Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ модулÑ"
-#: src/readelf.c:5771 src/readelf.c:9201
+#: src/readelf.c:5768 src/readelf.c:9270
#, c-format
msgid " Offsets starting at 0x%<PRIx64>:\n"
msgstr " ЗміщеннÑ, що починаютьÑÑ Ð· 0x%<PRIx64>:\n"
-#: src/readelf.c:5823
+#: src/readelf.c:5820
#, c-format
msgid "invalid range list data"
msgstr "некоректні дані ÑпиÑку діапазонів"
-#: src/readelf.c:6008 src/readelf.c:9526
+#: src/readelf.c:6005 src/readelf.c:9595
#, c-format
msgid ""
" %zu padding bytes\n"
@@ -5522,12 +5519,12 @@ msgstr ""
" %zu байтів доповненнÑ\n"
"\n"
-#: src/readelf.c:6025
+#: src/readelf.c:6022
#, c-format
msgid "cannot get .debug_ranges content: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані .debug_ranges: %s"
-#: src/readelf.c:6061 src/readelf.c:9581
+#: src/readelf.c:6058 src/readelf.c:9650
#, c-format
msgid ""
"\n"
@@ -5536,7 +5533,7 @@ msgstr ""
"\n"
" Ðевідома оÑнова CU: "
-#: src/readelf.c:6063 src/readelf.c:9583
+#: src/readelf.c:6060 src/readelf.c:9652
#, c-format
msgid ""
"\n"
@@ -5545,31 +5542,31 @@ msgstr ""
"\n"
" ОÑнова CU [%6<PRIx64>]: "
-#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635
+#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704
#, c-format
msgid " [%6tx] <INVALID DATA>\n"
msgstr " [%6tx] <ÐЕКОРЕКТÐІ ДÐÐІ>\n"
-#: src/readelf.c:6097 src/readelf.c:9719
+#: src/readelf.c:6094 src/readelf.c:9788
#, fuzzy
msgid "base address"
msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
-#: src/readelf.c:6107 src/readelf.c:9729
+#: src/readelf.c:6104 src/readelf.c:9798
#, c-format
msgid " [%6tx] empty list\n"
msgstr " [%6tx] порожній ÑпиÑок\n"
-#: src/readelf.c:6367
+#: src/readelf.c:6364
msgid " <INVALID DATA>\n"
msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n"
-#: src/readelf.c:6624
+#: src/readelf.c:6621
#, c-format
msgid "cannot get ELF: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ELF: %s"
-#: src/readelf.c:6642
+#: src/readelf.c:6639
#, c-format
msgid ""
"\n"
@@ -5578,7 +5575,7 @@ msgstr ""
"\n"
"Розділ відомоÑтей щодо вікна викликів [%2zu] «%s» за зміщеннÑм %#<PRIx64>:\n"
-#: src/readelf.c:6692
+#: src/readelf.c:6689
#, c-format
msgid ""
"\n"
@@ -5587,65 +5584,65 @@ msgstr ""
"\n"
" [%6tx] нульовий переривач\n"
-#: src/readelf.c:6793 src/readelf.c:6947
+#: src/readelf.c:6790 src/readelf.c:6944
#, c-format
msgid "invalid augmentation length"
msgstr "некоректна довжина збільшеннÑ"
-#: src/readelf.c:6808
+#: src/readelf.c:6805
msgid "FDE address encoding: "
msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи FDE: "
-#: src/readelf.c:6814
+#: src/readelf.c:6811
msgid "LSDA pointer encoding: "
msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° LSDA: "
-#: src/readelf.c:6924
+#: src/readelf.c:6921
#, c-format
msgid " (offset: %#<PRIx64>)"
msgstr " (зміщеннÑ: %#<PRIx64>)"
-#: src/readelf.c:6931
+#: src/readelf.c:6928
#, c-format
msgid " (end offset: %#<PRIx64>)"
msgstr " (Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ кінцÑ: %#<PRIx64>)"
-#: src/readelf.c:6968
+#: src/readelf.c:6965
#, c-format
msgid " %-26sLSDA pointer: %#<PRIx64>\n"
msgstr " %-26sвказівник LSDA: %#<PRIx64>\n"
-#: src/readelf.c:7053
+#: src/readelf.c:7050
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute code: %s"
msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ код атрибута: %s"
-#: src/readelf.c:7063
+#: src/readelf.c:7060
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute form: %s"
msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ форму атрибута: %s"
-#: src/readelf.c:7085
+#: src/readelf.c:7082
#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s"
msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° «%s» (%s): %s"
-#: src/readelf.c:7415
+#: src/readelf.c:7412
#, c-format
msgid "invalid file (%<PRId64>): %s"
msgstr "некоректний файл (%<PRId64>): %s"
-#: src/readelf.c:7419
+#: src/readelf.c:7416
#, c-format
msgid "no srcfiles for CU [%<PRIx64>]"
msgstr "немає srcfiles Ð´Ð»Ñ CU [%<PRIx64>]"
-#: src/readelf.c:7423
+#: src/readelf.c:7420
#, c-format
msgid "couldn't get DWARF CU: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ CU DWARF: %s"
-#: src/readelf.c:7738
+#: src/readelf.c:7735
#, c-format
msgid ""
"\n"
@@ -5656,12 +5653,12 @@ msgstr ""
"Розділ DWARF [%2zu] «%s» за зміщеннÑм %#<PRIx64>:\n"
" [ЗміщеннÑ]\n"
-#: src/readelf.c:7788
+#: src/readelf.c:7785
#, c-format
msgid "cannot get next unit: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ наÑтупний модуль: %s"
-#: src/readelf.c:7808
+#: src/readelf.c:7805
#, c-format
msgid ""
" Type unit at offset %<PRIu64>:\n"
@@ -5674,7 +5671,7 @@ msgstr ""
"%<PRIu8>, Розмір зміщеннÑ: %<PRIu8>\n"
" ÐŸÑ–Ð´Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64> [%<PRIx64>]\n"
-#: src/readelf.c:7820
+#: src/readelf.c:7817
#, c-format
msgid ""
" Compilation unit at offset %<PRIu64>:\n"
@@ -5685,38 +5682,38 @@ msgstr ""
" ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, "
"ЗміщеннÑ: %<PRIu8>\n"
-#: src/readelf.c:7830 src/readelf.c:7993
+#: src/readelf.c:7827 src/readelf.c:7988
#, c-format
msgid " Unit type: %s (%<PRIu8>)"
msgstr " Тип модулÑ: %s (%<PRIu8>)"
-#: src/readelf.c:7857
+#: src/readelf.c:7854
#, c-format
msgid "unknown version (%d) or unit type (%d)"
msgstr "невідома верÑÑ–Ñ (%d) або тип Ð¼Ð¾Ð´ÑƒÐ»Ñ (%d)"
-#: src/readelf.c:7886
+#: src/readelf.c:7883
#, c-format
msgid "cannot get DIE offset: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ DIE: %s"
-#: src/readelf.c:7895
+#: src/readelf.c:7892
#, c-format
msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s"
msgstr ""
"не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ мітку DIE за зміщеннÑм [%<PRIu64>] у розділі «%s»: %s"
-#: src/readelf.c:7933
+#: src/readelf.c:7928
#, c-format
msgid "cannot get next DIE: %s\n"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s\n"
-#: src/readelf.c:7941
+#: src/readelf.c:7936
#, c-format
msgid "cannot get next DIE: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s"
-#: src/readelf.c:7985
+#: src/readelf.c:7980
#, c-format
msgid ""
" Split compilation unit at offset %<PRIu64>:\n"
@@ -5727,7 +5724,7 @@ msgstr ""
" ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, "
"ЗміщеннÑ: %<PRIu8>\n"
-#: src/readelf.c:8037
+#: src/readelf.c:8032
#, c-format
msgid ""
"\n"
@@ -5738,18 +5735,18 @@ msgstr ""
"Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n"
"\n"
-#: src/readelf.c:8369
+#: src/readelf.c:8364
#, c-format
msgid "unknown form: %s"
msgstr "невідома форма: %s"
-#: src/readelf.c:8400
+#: src/readelf.c:8412
#, c-format
msgid "cannot get line data section data: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу лінійних даних: %s"
#. Print what we got so far.
-#: src/readelf.c:8502
+#: src/readelf.c:8516
#, c-format
msgid ""
"\n"
@@ -5782,27 +5779,27 @@ msgstr ""
"\n"
"Коди операцій:\n"
-#: src/readelf.c:8524
+#: src/readelf.c:8538
#, c-format
msgid "cannot handle .debug_line version: %u\n"
msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ верÑÑ–ÑŽ .debug_line: %u\n"
-#: src/readelf.c:8532
+#: src/readelf.c:8546
#, c-format
msgid "cannot handle address size: %u\n"
msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір адреÑи: %u\n"
-#: src/readelf.c:8540
+#: src/readelf.c:8554
#, c-format
msgid "cannot handle segment selector size: %u\n"
msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір Ñелектора Ñегментів: %u\n"
-#: src/readelf.c:8550
+#: src/readelf.c:8564
#, c-format
msgid "invalid data at offset %tu in section [%zu] '%s'"
msgstr "некоректні дані зі зміщеннÑм %tu у розділі [%zu] «%s»"
-#: src/readelf.c:8565
+#: src/readelf.c:8579
#, c-format
msgid " [%*<PRIuFAST8>] %hhu argument\n"
msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
@@ -5810,7 +5807,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu аргумент\n"
msgstr[1] " [%*<PRIuFAST8>] %hhu аргументи\n"
msgstr[2] " [%*<PRIuFAST8>] %hhu аргументів\n"
-#: src/readelf.c:8576
+#: src/readelf.c:8590
msgid ""
"\n"
"Directory table:"
@@ -5818,12 +5815,12 @@ msgstr ""
"\n"
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ:"
-#: src/readelf.c:8582 src/readelf.c:8659
+#: src/readelf.c:8596 src/readelf.c:8673
#, c-format
msgid " ["
msgstr " ["
-#: src/readelf.c:8653
+#: src/readelf.c:8667
msgid ""
"\n"
"File name table:"
@@ -5831,11 +5828,11 @@ msgstr ""
"\n"
" Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð°Ð·Ð² файлів:"
-#: src/readelf.c:8714
+#: src/readelf.c:8728
msgid " Entry Dir Time Size Name"
msgstr " Ð—Ð°Ð¿Ð¸Ñ ÐšÐ°Ñ‚ Ð§Ð°Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðазва"
-#: src/readelf.c:8753
+#: src/readelf.c:8774
#, fuzzy
msgid ""
"\n"
@@ -5844,7 +5841,7 @@ msgstr ""
"\n"
"Оператори номерів Ñ€Ñдків:"
-#: src/readelf.c:8757
+#: src/readelf.c:8778
msgid ""
"\n"
"Line number statements:"
@@ -5852,118 +5849,129 @@ msgstr ""
"\n"
"Оператори номерів Ñ€Ñдків:"
-#: src/readelf.c:8777
+#: src/readelf.c:8793
#, c-format
msgid "invalid maximum operations per instruction is zero"
msgstr "некоректну кількіÑÑ‚ÑŒ операцій на інÑтрукцію прирівнÑно до нулÑ"
-#: src/readelf.c:8811
+#: src/readelf.c:8827
#, c-format
msgid " special opcode %u: address+%u = "
msgstr " Ñпеціальний код операції %u: адреÑа+%u = "
-#: src/readelf.c:8815
+#: src/readelf.c:8831
#, c-format
msgid ", op_index = %u, line%+d = %zu\n"
msgstr ", індекÑ_оп = %u, Ñ€Ñдок%+d = %zu\n"
-#: src/readelf.c:8818
+#: src/readelf.c:8834
#, c-format
msgid ", line%+d = %zu\n"
msgstr ", Ñ€Ñдок%+d = %zu\n"
-#: src/readelf.c:8836
+#: src/readelf.c:8852
#, c-format
msgid " extended opcode %u: "
msgstr " розширений код операції %u: "
-#: src/readelf.c:8841
+#: src/readelf.c:8857
msgid " end of sequence"
msgstr " кінець поÑлідовноÑÑ‚Ñ–"
-#: src/readelf.c:8859
+#: src/readelf.c:8875
#, c-format
msgid " set address to "
msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
-#: src/readelf.c:8887
+#: src/readelf.c:8903
#, c-format
msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
msgstr ""
" Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ файла: dir=%u, mtime=%<PRIu64>, довжина=%<PRIu64>, назва="
"%s\n"
-#: src/readelf.c:8901
+#: src/readelf.c:8917
#, c-format
msgid " set discriminator to %u\n"
msgstr " вÑтановити Ñ€Ð¾Ð·Ñ€Ñ–Ð·Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ %u\n"
+#: src/readelf.c:8944
+#, c-format
+msgid " set inlined context %u, function name %s (0x%x)\n"
+msgstr ""
+
+#: src/readelf.c:8968
+#, fuzzy, c-format
+#| msgid "Also show function names"
+msgid " set function name %s (0x%x)\n"
+msgstr "Показувати також назви функцій"
+
#. Unknown, ignore it.
-#: src/readelf.c:8906
+#: src/readelf.c:8975
msgid " unknown opcode"
msgstr " невідомий код операції"
#. Takes no argument.
-#: src/readelf.c:8918
+#: src/readelf.c:8987
msgid " copy"
msgstr " копіÑ"
-#: src/readelf.c:8929
+#: src/readelf.c:8998
#, c-format
msgid " advance address by %u to "
msgstr " Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи на %u до "
-#: src/readelf.c:8933 src/readelf.c:8994
+#: src/readelf.c:9002 src/readelf.c:9063
#, c-format
msgid ", op_index to %u"
msgstr ", op_index до %u"
-#: src/readelf.c:8945
+#: src/readelf.c:9014
#, c-format
msgid " advance line by constant %d to %<PRId64>\n"
msgstr " проÑувати Ñ€Ñдок на Ñталу %d до %<PRId64>\n"
-#: src/readelf.c:8955
+#: src/readelf.c:9024
#, c-format
msgid " set file to %<PRIu64>\n"
msgstr " вÑтановити файл у %<PRIu64>\n"
-#: src/readelf.c:8966
+#: src/readelf.c:9035
#, c-format
msgid " set column to %<PRIu64>\n"
msgstr " вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика %<PRIu64>\n"
-#: src/readelf.c:8973
+#: src/readelf.c:9042
#, c-format
msgid " set '%s' to %<PRIuFAST8>\n"
msgstr " вÑтановити «%s» у %<PRIuFAST8>\n"
#. Takes no argument.
-#: src/readelf.c:8979
+#: src/readelf.c:9048
msgid " set basic block flag"
msgstr " вÑтановити прапорець базового блоку"
-#: src/readelf.c:8990
+#: src/readelf.c:9059
#, c-format
msgid " advance address by constant %u to "
msgstr " збільшити адреÑу на Ñталу величину %u до "
-#: src/readelf.c:9010
+#: src/readelf.c:9079
#, c-format
msgid " advance address by fixed value %u to \n"
msgstr " збільшити адреÑу на фікÑовану величину %u до \n"
#. Takes no argument.
-#: src/readelf.c:9020
+#: src/readelf.c:9089
msgid " set prologue end flag"
msgstr " вÑтановити прапорець ÐºÑ–Ð½Ñ†Ñ Ð²Ñтупу"
#. Takes no argument.
-#: src/readelf.c:9025
+#: src/readelf.c:9094
msgid " set epilogue begin flag"
msgstr " вÑтановити прапорець початку епілогу"
-#: src/readelf.c:9035
+#: src/readelf.c:9104
#, c-format
msgid " set isa to %u\n"
msgstr " вÑтановити isa у %u\n"
@@ -5971,7 +5979,7 @@ msgstr " вÑтановити isa у %u\n"
#. This is a new opcode the generator but not we know about.
#. Read the parameters associated with it but then discard
#. everything. Read all the parameters for this opcode.
-#: src/readelf.c:9044
+#: src/readelf.c:9113
#, c-format
msgid " unknown opcode with %<PRIu8> parameter:"
msgid_plural " unknown opcode with %<PRIu8> parameters:"
@@ -5979,102 +5987,102 @@ msgstr[0] " невідомий код операції з %<PRIu8> парамеÑ
msgstr[1] " невідомий код операції з %<PRIu8> параметрами:"
msgstr[2] " невідомий код операції з %<PRIu8> параметрами:"
-#: src/readelf.c:9084
+#: src/readelf.c:9153
#, c-format
msgid "cannot get .debug_loclists content: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loclists: %s"
-#: src/readelf.c:9250
+#: src/readelf.c:9319
#, fuzzy, c-format
msgid " <INVALID DATA>\n"
msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n"
-#: src/readelf.c:9290
+#: src/readelf.c:9359
#, c-format
msgid "invalid loclists data"
msgstr "некоректні дані loclists"
-#: src/readelf.c:9543
+#: src/readelf.c:9612
#, c-format
msgid "cannot get .debug_loc content: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loc: %s"
-#: src/readelf.c:9756 src/readelf.c:10800
+#: src/readelf.c:9825 src/readelf.c:10869
msgid " <INVALID DATA>\n"
msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n"
-#: src/readelf.c:9811 src/readelf.c:9974
+#: src/readelf.c:9880 src/readelf.c:10043
#, c-format
msgid "cannot get macro information section data: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу відомоÑтей щодо макроÑів: %s"
-#: src/readelf.c:9891
+#: src/readelf.c:9960
#, c-format
msgid "%*s*** non-terminated string at end of section"
msgstr "%*s*** незавершений Ñ€Ñдок наприкінці розділу"
-#: src/readelf.c:9914
+#: src/readelf.c:9983
#, c-format
msgid "%*s*** missing DW_MACINFO_start_file argument at end of section"
msgstr "%*s*** пропущено аргумент DW_MACINFO_start_file наприкінці розділу"
-#: src/readelf.c:10015
+#: src/readelf.c:10084
#, c-format
msgid " Offset: 0x%<PRIx64>\n"
msgstr " ЗміщеннÑ: 0x%<PRIx64>\n"
-#: src/readelf.c:10027
+#: src/readelf.c:10096
#, c-format
msgid " Version: %<PRIu16>\n"
msgstr " ВерÑÑ–Ñ: %<PRIu16>\n"
-#: src/readelf.c:10033 src/readelf.c:10920
+#: src/readelf.c:10102 src/readelf.c:10989
#, c-format
msgid " unknown version, cannot parse section\n"
msgstr " невідома верÑÑ–Ñ, не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розділ\n"
-#: src/readelf.c:10040
+#: src/readelf.c:10109
#, c-format
msgid " Flag: 0x%<PRIx8>"
msgstr " Прапорець: 0x%<PRIx8>"
-#: src/readelf.c:10069
+#: src/readelf.c:10138
#, c-format
msgid " Offset length: %<PRIu8>\n"
msgstr " Довжина зміщеннÑ: %<PRIu8>\n"
-#: src/readelf.c:10077
+#: src/readelf.c:10146
#, c-format
msgid " .debug_line offset: 0x%<PRIx64>\n"
msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ .debug_line: 0x%<PRIx64>\n"
-#: src/readelf.c:10102
+#: src/readelf.c:10171
#, c-format
msgid " extension opcode table, %<PRIu8> items:\n"
msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ¾Ð´Ñ–Ð² операцій розширень, запиÑів — %<PRIu8>:\n"
-#: src/readelf.c:10109
+#: src/readelf.c:10178
#, c-format
msgid " [%<PRIx8>]"
msgstr " [%<PRIx8>]"
-#: src/readelf.c:10121
+#: src/readelf.c:10190
#, c-format
msgid " %<PRIu8> arguments:"
msgstr " %<PRIu8> аргументів:"
-#: src/readelf.c:10136
+#: src/readelf.c:10205
#, c-format
msgid " no arguments."
msgstr " немає аргументів."
-#: src/readelf.c:10337
+#: src/readelf.c:10406
#, c-format
msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
msgstr ""
" [%5d] Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ DIE: %6<PRId64>, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU DIE: %6<PRId64>, назва: %s\n"
-#: src/readelf.c:10381
+#: src/readelf.c:10450
#, c-format
msgid ""
"\n"
@@ -6086,42 +6094,42 @@ msgstr ""
" %*s РÑдок\n"
#. TRANS: the debugstr| prefix makes the string unique.
-#: src/readelf.c:10386
+#: src/readelf.c:10455
msgctxt "debugstr"
msgid "Offset"
msgstr ""
-#: src/readelf.c:10396
+#: src/readelf.c:10465
#, c-format
msgid " *** error, missing string terminator\n"
msgstr " *** помилка, пропущено роздільник Ñ€Ñдків\n"
-#: src/readelf.c:10425
+#: src/readelf.c:10494
#, c-format
msgid "cannot get .debug_str_offsets section data: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_str_offsets: %s"
-#: src/readelf.c:10524
+#: src/readelf.c:10593
#, c-format
msgid " Length: %8<PRIu64>\n"
msgstr " Довжина: %8<PRIu64>\n"
-#: src/readelf.c:10526
+#: src/readelf.c:10595
#, c-format
msgid " Offset size: %8<PRIu8>\n"
msgstr " Розмір зÑуву: %8<PRIu8>\n"
-#: src/readelf.c:10540
+#: src/readelf.c:10609
#, c-format
msgid " DWARF version: %8<PRIu16>\n"
msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n"
-#: src/readelf.c:10549
+#: src/readelf.c:10618
#, c-format
msgid " Padding: %8<PRIx16>\n"
msgstr " ЗаповненнÑ: %8<PRIx16>\n"
-#: src/readelf.c:10603
+#: src/readelf.c:10672
#, c-format
msgid ""
"\n"
@@ -6130,7 +6138,7 @@ msgstr ""
"\n"
"Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n"
-#: src/readelf.c:10705
+#: src/readelf.c:10774
#, c-format
msgid ""
"\n"
@@ -6139,22 +6147,22 @@ msgstr ""
"\n"
"Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n"
-#: src/readelf.c:10728
+#: src/readelf.c:10797
#, c-format
msgid " LPStart encoding: %#x "
msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ LPStart: %#x "
-#: src/readelf.c:10740
+#: src/readelf.c:10809
#, c-format
msgid " TType encoding: %#x "
msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ TType: %#x "
-#: src/readelf.c:10755
+#: src/readelf.c:10824
#, c-format
msgid " Call site encoding: %#x "
msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:%#x "
-#: src/readelf.c:10768
+#: src/readelf.c:10837
msgid ""
"\n"
" Call site table:"
@@ -6162,7 +6170,7 @@ msgstr ""
"\n"
" Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:"
-#: src/readelf.c:10782
+#: src/readelf.c:10851
#, c-format
msgid ""
" [%4u] Call site start: %#<PRIx64>\n"
@@ -6175,12 +6183,12 @@ msgstr ""
" МіÑце заÑтоÑуваннÑ: %#<PRIx64>\n"
" ДіÑ: %u\n"
-#: src/readelf.c:10855
+#: src/readelf.c:10924
#, c-format
msgid "invalid TType encoding"
msgstr "некоректне ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ TType"
-#: src/readelf.c:10882
+#: src/readelf.c:10951
#, c-format
msgid ""
"\n"
@@ -6189,37 +6197,37 @@ msgstr ""
"\n"
"Розділ GDB [%2zu] «%s» за зміщеннÑм %#<PRIx64> міÑтить %<PRId64> байтів:\n"
-#: src/readelf.c:10911
+#: src/readelf.c:10980
#, c-format
msgid " Version: %<PRId32>\n"
msgstr " ВерÑÑ–Ñ: %<PRId32>\n"
-#: src/readelf.c:10929
+#: src/readelf.c:10998
#, c-format
msgid " CU offset: %#<PRIx32>\n"
msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU: %#<PRIx32>\n"
-#: src/readelf.c:10936
+#: src/readelf.c:11005
#, c-format
msgid " TU offset: %#<PRIx32>\n"
msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ TU: %#<PRIx32>\n"
-#: src/readelf.c:10943
+#: src/readelf.c:11012
#, c-format
msgid " address offset: %#<PRIx32>\n"
msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: %#<PRIx32>\n"
-#: src/readelf.c:10950
+#: src/readelf.c:11019
#, c-format
msgid " symbol offset: %#<PRIx32>\n"
msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñимволу: %#<PRIx32>\n"
-#: src/readelf.c:10957
+#: src/readelf.c:11026
#, c-format
msgid " constant offset: %#<PRIx32>\n"
msgstr " Ñтале зміщеннÑ: %#<PRIx32>\n"
-#: src/readelf.c:10971
+#: src/readelf.c:11040
#, c-format
msgid ""
"\n"
@@ -6228,7 +6236,7 @@ msgstr ""
"\n"
" СпиÑок CU зі зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n"
-#: src/readelf.c:10996
+#: src/readelf.c:11065
#, c-format
msgid ""
"\n"
@@ -6237,7 +6245,7 @@ msgstr ""
"\n"
" СпиÑок TU зі зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n"
-#: src/readelf.c:11025
+#: src/readelf.c:11094
#, c-format
msgid ""
"\n"
@@ -6246,7 +6254,7 @@ msgstr ""
"\n"
" СпиÑок Ð°Ð´Ñ€ÐµÑ Ð·Ñ– зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n"
-#: src/readelf.c:11057
+#: src/readelf.c:11126
#, c-format
msgid ""
"\n"
@@ -6255,18 +6263,18 @@ msgstr ""
"\n"
" Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів за зміщеннÑм %#<PRIx32> міÑтить %zu позицій:\n"
-#: src/readelf.c:11195
+#: src/readelf.c:11264
#, c-format
msgid "cannot get debug context descriptor: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ деÑкриптор контекÑту зневаджуваннÑ: %s"
-#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301
-#: src/readelf.c:12359
+#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367
+#: src/readelf.c:12424
#, c-format
msgid "cannot convert core note data: %s"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ дані запиÑу Ñдра: %s"
-#: src/readelf.c:11926
+#: src/readelf.c:11994
#, c-format
msgid ""
"\n"
@@ -6275,21 +6283,21 @@ msgstr ""
"\n"
"%*s... <повторюєтьÑÑ %u разів> ..."
-#: src/readelf.c:12438
+#: src/readelf.c:12503
msgid " Owner Data size Type\n"
msgstr " ВлаÑник Розм. даних Тип\n"
-#: src/readelf.c:12466
+#: src/readelf.c:12531
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12518
+#: src/readelf.c:12583
#, c-format
msgid "cannot get content of note: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ нотатки: %s"
-#: src/readelf.c:12552
+#: src/readelf.c:12616
#, c-format
msgid ""
"\n"
@@ -6299,7 +6307,7 @@ msgstr ""
"Розділ запиÑів (note) [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12575
+#: src/readelf.c:12639
#, c-format
msgid ""
"\n"
@@ -6308,7 +6316,7 @@ msgstr ""
"\n"
"Сегмент запиÑів з %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12622
+#: src/readelf.c:12686
#, c-format
msgid ""
"\n"
@@ -6317,12 +6325,12 @@ msgstr ""
"\n"
"У розділі [%zu] «%s» не міÑтитьÑÑ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n"
-#: src/readelf.c:12649 src/readelf.c:12700
+#: src/readelf.c:12713 src/readelf.c:12764
#, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [%zu] «%s»: %s"
-#: src/readelf.c:12654
+#: src/readelf.c:12718
#, c-format
msgid ""
"\n"
@@ -6331,7 +6339,7 @@ msgstr ""
"\n"
"ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12659
+#: src/readelf.c:12723
#, c-format
msgid ""
"\n"
@@ -6342,7 +6350,7 @@ msgstr ""
"ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів (%zd неÑтиÑнено) за "
"зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12673
+#: src/readelf.c:12737
#, c-format
msgid ""
"\n"
@@ -6351,7 +6359,7 @@ msgstr ""
"\n"
"У розділі [%zu] «%s» не міÑтитьÑÑ Ñ€Ñдків Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n"
-#: src/readelf.c:12705
+#: src/readelf.c:12769
#, c-format
msgid ""
"\n"
@@ -6360,7 +6368,7 @@ msgstr ""
"\n"
"Розділ Ñ€Ñдків [%zu] «%s» міÑтить %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12710
+#: src/readelf.c:12774
#, c-format
msgid ""
"\n"
@@ -6371,7 +6379,7 @@ msgstr ""
"РÑдок розділу [%zu] «%s» міÑтить %<PRIu64> байти (%zd неÑтиÑнено) на "
"зміщенні %#0<PRIx64>:\n"
-#: src/readelf.c:12759
+#: src/readelf.c:12822
#, c-format
msgid ""
"\n"
@@ -6380,7 +6388,7 @@ msgstr ""
"\n"
"розділу [%lu] не Ñ–Ñнує"
-#: src/readelf.c:12789
+#: src/readelf.c:12852
#, c-format
msgid ""
"\n"
@@ -6389,12 +6397,12 @@ msgstr ""
"\n"
"розділу «%s» не Ñ–Ñнує"
-#: src/readelf.c:12846
+#: src/readelf.c:12907
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ покажчик Ñимволів архіву «%s»: %s"
-#: src/readelf.c:12849
+#: src/readelf.c:12910
#, c-format
msgid ""
"\n"
@@ -6403,7 +6411,7 @@ msgstr ""
"\n"
"У архіві «%s» немає покажчика Ñимволів\n"
-#: src/readelf.c:12853
+#: src/readelf.c:12914
#, c-format
msgid ""
"\n"
@@ -6412,12 +6420,12 @@ msgstr ""
"\n"
"Покажчик архіву «%s» міÑтить %zu запиÑів:\n"
-#: src/readelf.c:12871
+#: src/readelf.c:12932
#, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ елемент за зміщеннÑм %zu у «%s»: %s"
-#: src/readelf.c:12876
+#: src/readelf.c:12937
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "Елемент архіву «%s» міÑтить:\n"
@@ -6514,39 +6522,38 @@ msgctxt "bsd"
msgid "filename"
msgstr ""
-#: src/size.c:418 src/size.c:560
+#: src/size.c:417 src/size.c:558
#, c-format
msgid " (ex %s)"
msgstr " (прикл. %s)"
-#: src/size.c:420
+#: src/size.c:419
#, fuzzy
#| msgid "invalid section"
msgctxt "sysv"
msgid "section"
msgstr "некоректний розділ"
-#: src/size.c:421
+#: src/size.c:420
msgctxt "sysv"
msgid "size"
msgstr ""
-#: src/size.c:422
+#: src/size.c:421
msgctxt "sysv"
msgid "addr"
msgstr ""
-#: src/size.c:451 src/size.c:454 src/size.c:457
+#: src/size.c:450 src/size.c:453 src/size.c:456
msgctxt "sysv"
msgid "Total"
msgstr ""
-#: src/size.c:482
-#, c-format
+#: src/size.c:480
msgid "cannot get section header"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу"
-#: src/size.c:585
+#: src/size.c:583
msgid "(TOTALS)\n"
msgstr "(ЗÐГÐЛОМ)\n"
@@ -6729,27 +6736,23 @@ msgstr "ВивеÑти Ñ€Ñдки файлів з Ñимволів, придат
msgid "invalid value '%s' for %s parameter"
msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» параметра %s"
-#: src/strings.c:302
-#, c-format
+#: src/strings.c:301
msgid "invalid minimum length of matched string size"
msgstr "некоректна мінімальна довжина розмірноÑÑ‚Ñ– Ñ€Ñдка Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ"
-#: src/strings.c:585
-#, c-format
+#: src/strings.c:584
msgid "lseek failed"
msgstr "помилка lseek"
-#: src/strings.c:602 src/strings.c:666
-#, c-format
+#: src/strings.c:601 src/strings.c:665
msgid "re-mmap failed"
msgstr "помилка повторного викориÑÑ‚Ð°Ð½Ð½Ñ mmap"
-#: src/strings.c:639
-#, c-format
+#: src/strings.c:638
msgid "mprotect failed"
msgstr "помилка mprotect"
-#: src/strings.c:728
+#: src/strings.c:727
#, c-format
msgid "Skipping section %zd '%s' data outside file"
msgstr "ПропуÑкаємо дані %zd «%s» поза файлом"
@@ -6826,13 +6829,11 @@ msgstr ""
msgid "Discard symbols from object files."
msgstr "Відкинути Ñимволи з об’єктних файлів"
-#: src/strip.c:247
-#, c-format
+#: src/strip.c:246
msgid "--reloc-debug-sections used without -f"
msgstr "--reloc-debug-sections викориÑтано без -f"
-#: src/strip.c:253
-#, c-format
+#: src/strip.c:252
msgid ""
"--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --"
"remove-section"
@@ -6840,43 +6841,41 @@ msgstr ""
"--reloc-debug-sections-only Ñ” неÑуміÑним із -f, -g, --remove-comment та --"
"remove-section"
-#: src/strip.c:267
-#, c-format
+#: src/strip.c:266
msgid "Only one input file allowed together with '-o' and '-f'"
msgstr ""
"Разом з «-o» або «-f» можна викориÑтовувати лише один файл вхідних даних"
-#: src/strip.c:290
+#: src/strip.c:288
#, c-format
msgid "-f option specified twice"
msgstr "параметр -f вказано двічі"
-#: src/strip.c:299
+#: src/strip.c:297
#, c-format
msgid "-F option specified twice"
msgstr "параметр -F вказано двічі"
-#: src/strip.c:362
+#: src/strip.c:360
#, c-format
msgid "cannot both keep and remove .comment section"
msgstr "неможливо одночаÑно зберегти Ñ– вилучити розділ .comment"
-#: src/strip.c:481
-#, c-format
+#: src/strip.c:479
msgid "bad relocation"
msgstr "помилкове переÑуваннÑ"
-#: src/strip.c:747 src/strip.c:771
+#: src/strip.c:749 src/strip.c:773
#, c-format
msgid "cannot stat input file '%s'"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані з вхідного файла «%s» за допомогою stat"
-#: src/strip.c:761
+#: src/strip.c:763
#, c-format
msgid "while opening '%s'"
msgstr "під Ñ‡Ð°Ñ Ñпроби Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»"
-#: src/strip.c:799
+#: src/strip.c:801
#, c-format
msgid "%s: cannot use -o or -f when stripping archive"
msgstr ""
@@ -6889,42 +6888,41 @@ msgstr ""
#. result = handle_ar (fd, elf, NULL, fname,
#. preserve_dates ? tv : NULL);
#.
-#: src/strip.c:811
+#: src/strip.c:813
#, c-format
msgid "%s: no support for stripping archive"
msgstr "%s: підтримки Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ вміÑту з архіву не передбачено"
-#: src/strip.c:1047
+#: src/strip.c:1050
#, c-format
msgid "cannot open EBL backend"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ канал Ñервера EBL"
-#: src/strip.c:1092
-#, c-format
+#: src/strip.c:1094
msgid "cannot get number of phdrs"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ phdr"
-#: src/strip.c:1106 src/strip.c:1149
+#: src/strip.c:1108 src/strip.c:1151
#, c-format
msgid "cannot create new ehdr for file '%s': %s"
msgstr "не вдалоÑÑ Ñтворити ehdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s"
-#: src/strip.c:1116 src/strip.c:1159
+#: src/strip.c:1118 src/strip.c:1161
#, c-format
msgid "cannot create new phdr for file '%s': %s"
msgstr "не вдалоÑÑ Ñтворити phdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s"
-#: src/strip.c:1240
+#: src/strip.c:1241
#, c-format
msgid "illformed file '%s'"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»"
-#: src/strip.c:1250
+#: src/strip.c:1251
#, c-format
msgid "Cannot remove allocated section '%s'"
msgstr "Ðеможливо вилучити розміщений у пам'ÑÑ‚Ñ– розділ «%s»"
-#: src/strip.c:1259
+#: src/strip.c:1260
#, c-format
msgid "Cannot both keep and remove section '%s'"
msgstr "Ðеможливо одночаÑно зберегти та вилучити розділ «%s»"
@@ -6944,7 +6942,7 @@ msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° E
msgid "%s: error while getting shdrstrndx: %s"
msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ shdrstrndx: %s"
-#: src/strip.c:1705 src/strip.c:2550
+#: src/strip.c:1705 src/strip.c:2546
#, c-format
msgid "%s: error updating shdrstrndx: %s"
msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ shdrstrndx: %s"
@@ -6954,68 +6952,67 @@ msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ shdrstrndx: %s"
msgid "while preparing output for '%s'"
msgstr "під Ñ‡Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… даних Ð´Ð»Ñ Â«%s»"
-#: src/strip.c:1784 src/strip.c:1847
+#: src/strip.c:1783 src/strip.c:1845
#, c-format
msgid "while create section header section: %s"
msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ заголовка розділу: %s"
-#: src/strip.c:1793
+#: src/strip.c:1792
#, c-format
msgid "cannot allocate section data: %s"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити дані розділу: %s"
-#: src/strip.c:1859
+#: src/strip.c:1856
#, c-format
msgid "while create section header string table: %s"
msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу: %s"
-#: src/strip.c:1866
-#, c-format
+#: src/strip.c:1862
msgid "no memory to create section header string table"
msgstr "недоÑтатньо пам'ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу"
-#: src/strip.c:2079
+#: src/strip.c:2075
#, c-format
msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]"
msgstr ""
"Ðеможливо вилучити Ñимвол [%zd] з розміщеної у пам'ÑÑ‚Ñ– таблиці Ñимволів [%zd]"
-#: src/strip.c:2466 src/strip.c:2574
+#: src/strip.c:2462 src/strip.c:2570
#, c-format
msgid "while writing '%s': %s"
msgstr "під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу «%s»: %s"
-#: src/strip.c:2477
+#: src/strip.c:2473
#, c-format
msgid "while creating '%s'"
msgstr "під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Â«%s»"
-#: src/strip.c:2500
+#: src/strip.c:2496
#, c-format
msgid "while computing checksum for debug information"
msgstr "під Ñ‡Ð°Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ñ— Ñуми Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних даних"
-#: src/strip.c:2541
+#: src/strip.c:2537
#, c-format
msgid "%s: error while creating ELF header: %s"
msgstr "%s: помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s"
-#: src/strip.c:2559
+#: src/strip.c:2555
#, c-format
msgid "%s: error while reading the file: %s"
msgstr "%s: помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s"
-#: src/strip.c:2599 src/strip.c:2619
+#: src/strip.c:2595 src/strip.c:2615
#, c-format
msgid "while writing '%s'"
msgstr "під Ñ‡Ð°Ñ Ñпроби запиÑу «%s»"
-#: src/strip.c:2656 src/strip.c:2663
+#: src/strip.c:2652 src/strip.c:2659
#, c-format
msgid "error while finishing '%s': %s"
msgstr "помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Â«%s»: %s"
-#: src/strip.c:2680 src/strip.c:2756
+#: src/strip.c:2676 src/strip.c:2752
#, c-format
msgid "cannot set access and modification date of '%s'"
msgstr "не вдалоÑÑ Ð²Ñтановити права доÑтупу та дату зміни «%s»"
@@ -7163,13 +7160,13 @@ msgstr "не вдалоÑÑ Ñкопіювати дані розділу: %s"
msgid "cannot create directory '%s'"
msgstr "не вдалоÑÑ Ñтворити каталог «%s»"
-#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859
+#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860
#: src/unstrip.c:1750
#, c-format
msgid "cannot get symbol table entry: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñимволів: %s"
-#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694
+#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695
#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990
#, c-format
msgid "cannot update symbol table: %s"
@@ -7180,120 +7177,128 @@ msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ таблицю Ñимволів: %s"
msgid "cannot update section header: %s"
msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ заголовок розділу: %s"
-#: src/unstrip.c:467 src/unstrip.c:481
+#: src/unstrip.c:465
+#, c-format
+msgid "gelf_getrel failed: %s"
+msgstr ""
+
+#: src/unstrip.c:468 src/unstrip.c:483
#, c-format
msgid "cannot update relocation: %s"
msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ переÑуваннÑ: %s"
-#: src/unstrip.c:580
+#: src/unstrip.c:480
+#, c-format
+msgid "gelf_getrela failed: %s"
+msgstr ""
+
+#: src/unstrip.c:581
#, c-format
msgid "cannot get symbol version: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ верÑÑ–ÑŽ Ñимволу: %s"
-#: src/unstrip.c:593
+#: src/unstrip.c:594
#, c-format
msgid "unexpected section type in [%zu] with sh_link to symtab"
msgstr "неочікуваний тип розділу у [%zu] з поÑиланнÑм sh_link на symtab"
-#: src/unstrip.c:848
+#: src/unstrip.c:849
#, c-format
msgid "cannot get symbol section data: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñимволів: %s"
-#: src/unstrip.c:850
+#: src/unstrip.c:851
#, c-format
msgid "cannot get string section data: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñ€Ñдків: %s"
-#: src/unstrip.c:867
+#: src/unstrip.c:868
#, c-format
msgid "invalid string offset in symbol [%zu]"
msgstr "некоректне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ñдка у Ñимволі [%zu]"
-#: src/unstrip.c:1025 src/unstrip.c:1433
+#: src/unstrip.c:1026 src/unstrip.c:1434
#, c-format
msgid "cannot read section [%zu] name: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ назву розділу [%zu]: %s"
-#: src/unstrip.c:1040
+#: src/unstrip.c:1041
#, c-format
msgid "bad sh_link for group section: %s"
msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
-#: src/unstrip.c:1046
+#: src/unstrip.c:1047
#, c-format
msgid "couldn't get shdr for group section: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ shdr Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
-#: src/unstrip.c:1051
+#: src/unstrip.c:1052
#, c-format
msgid "bad data for group symbol section: %s"
msgstr "помилкові дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñимволів груп: %s"
-#: src/unstrip.c:1057
+#: src/unstrip.c:1058
#, c-format
msgid "couldn't get symbol for group section: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
-#: src/unstrip.c:1062
+#: src/unstrip.c:1063
#, c-format
msgid "bad symbol name for group section: %s"
msgstr "помилкова назва Ñимволу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
-#: src/unstrip.c:1073 src/unstrip.c:1554
+#: src/unstrip.c:1074 src/unstrip.c:1554
#, c-format
msgid "cannot find matching section for [%zu] '%s'"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідний розділ Ð´Ð»Ñ [%zu] «%s»"
-#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175
+#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176
#, c-format
msgid "cannot read '.gnu.prelink_undo' section: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ «.gnu.prelink_undo»: %s"
-#: src/unstrip.c:1155
+#: src/unstrip.c:1156
#, c-format
msgid "overflow with shnum = %zu in '%s' section"
msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· shnum = %zu у розділі «%s»"
-#: src/unstrip.c:1166
+#: src/unstrip.c:1167
#, c-format
msgid "invalid contents in '%s' section"
msgstr "некоректний вміÑÑ‚ розділу «%s»"
-#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925
+#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925
#, c-format
msgid "cannot add section name to string table: %s"
msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ назву розділу до таблиці Ñ€Ñдків: %s"
-#: src/unstrip.c:1362
+#: src/unstrip.c:1363
#, c-format
msgid "cannot update section header string table data: %s"
msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дані заголовка розділу у таблиці Ñ€Ñдків: %s"
-#: src/unstrip.c:1391 src/unstrip.c:1395
+#: src/unstrip.c:1392 src/unstrip.c:1396
#, c-format
msgid "cannot get section header string table section index: %s"
msgstr ""
"не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ заголовка розділу у таблиці Ñ€Ñдків: %s"
-#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649
+#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649
#, c-format
msgid "cannot get section count: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s"
-#: src/unstrip.c:1406
-#, c-format
+#: src/unstrip.c:1407
msgid "more sections in stripped file than debug file -- arguments reversed?"
msgstr ""
"у очищеному файлі більше розділів ніж у файлі з даними Ð´Ð»Ñ Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ â€” "
"помилковий порÑдок параметрів?"
-#: src/unstrip.c:1410
-#, c-format
+#: src/unstrip.c:1411
msgid "no sections in stripped file"
msgstr "у очищеному файлі немає розділів"
-#: src/unstrip.c:1458 src/unstrip.c:1569
+#: src/unstrip.c:1459 src/unstrip.c:1569
#, c-format
msgid "cannot read section header string table: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ таблицю Ñ€Ñдків заголовка розділу: %s"
@@ -7407,17 +7412,15 @@ msgstr "у модулі «%s» файл «%s» не очищено strip"
msgid "cannot cache section addresses for module '%s': %s"
msgstr "не вдалоÑÑ ÐºÐµÑˆÑƒÐ²Ð°Ñ‚Ð¸ адреÑи розділів Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s"
-#: src/unstrip.c:2505
-#, c-format
+#: src/unstrip.c:2503
msgid "no matching modules found"
msgstr "відповідних модулів не виÑвлено"
-#: src/unstrip.c:2515
-#, c-format
+#: src/unstrip.c:2513
msgid "matched more than one module"
msgstr "вÑтановлено відповідніÑÑ‚ÑŒ декількох модулів"
-#: src/unstrip.c:2560
+#: src/unstrip.c:2558
msgid ""
"STRIPPED-FILE DEBUG-FILE\n"
"[MODULE...]"
@@ -7425,7 +7428,7 @@ msgstr ""
"ОЧИЩЕÐИЙ-ФÐЙЛ ФÐЙЛ-DEBUG\n"
"[МОДУЛЬ...]"
-#: src/unstrip.c:2561
+#: src/unstrip.c:2559
msgid ""
"Combine stripped files with separate symbols and debug information.\n"
"\n"
@@ -7500,7 +7503,7 @@ msgid ""
"source PATH /FILENAME\n"
msgstr ""
-#: tests/backtrace.c:436
+#: tests/backtrace.c:483
msgid "Run executable"
msgstr "ЗапуÑтити виконуваний файл"
@@ -7512,6 +7515,10 @@ msgstr "Додатково вивеÑти назви функцій"
msgid "Show instances of inlined functions"
msgstr "ВивеÑти екземплÑри вбудованих функцій"
+#, c-format
+#~ msgid "cannot allocate memory"
+#~ msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ пам’ÑÑ‚ÑŒ"
+
#~ msgid ""
#~ " [%6tx] base address\n"
#~ " "
diff --git a/src/ChangeLog b/src/ChangeLog
index 2c7be185..fd87ce2f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,114 @@
+2022-04-24 Mark Wielaard <mark@klomp.org>
+
+ * elfclassify.c (main): Use classify_flag_no_stdin for no-std in options.
+
+2022-04-19 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (get_dyn_ents): Define dyn_mem outside the while loop.
+
+2022-03-01 Di Chen <dichen@redhat.com>
+
+ * readelf.c (get_dyn_ents): New function.
+ (handle_dynamic): Use get_dyn_ents to get the actual number of
+ Dynamic entries in the section.
+
+2022-03-27 Mark Wielaard <mark@klomp.org>
+
+ * addr2line.c: Replace error (EXIT_FAILURE, ...) with error_exit(...).
+ * ar.c: Likewise.
+ * arlib.c: Likewise.
+ * elfcompress.c: Likewise.
+ * nm.c: Likewise.
+ * objdump.c: Likewise.
+ * readelf.c: Likewise.
+ * size.c: Likewise.
+ * strings.c: Likewise.
+ * strip.c: Likewise.
+ * unstrip.c: Likewise.
+
+2022-03-24 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (check_note_data): Recognize NT_FDO_PACKAGING_METADATA.
+
+2022-03-11 Mark Wielaard <mark@klomp.org>
+
+ * addr2line.c (OPT_RELATIVE): New constant.
+ (options): Add --relative.
+ (use_comp_dir): Initialize to true.
+ (parse_opt): Handle OPT_RELATIVE.
+
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (print_ehdr): Pass sizeof (buf) - 1 to strncpy.
+
+2021-10-20 John M Mellor-Crummey <johnmc@rice.edu>
+
+ * readelf.c (print_debug_line_section): Try to read
+ debug_str_offset if available. Handle DW_LNE_NVIDIA_inlined_call
+ and DW_LNE_NVIDIA_set_function_name.
+
+2021-10-06 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (check_sections): Don't dereference databits if bad.
+
+2021-09-09 Dmitry V. Levin <ldv@altlinux.org>
+
+ * findtextrel.c: Include "libeu.h".
+ (open_rootdir_file): New function.
+ (process_file): Use it to open file inside rootdir.
+ * Makefile.am (findtextrel_no_Wstack_usage): Remove.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * objdump.c (show_disasm): Replace asprintf followed by
+ error(EXIT_FAILURE) with xasprintf.
+ * readelf.c (handle_gnu_hash): Likewise.
+ * unstrip.c (handle_output_dir_module, main): Likewise.
+
+ * elflint.c (check_sections): Remove cast of xcalloc return value.
+ * findtextrel.c (process_file): Remove casts of malloc and realloc
+ return values.
+ * nm.c (get_local_names, show_symbols_sysv, show_symbols): Remove
+ casts of xmalloc return values.
+ * readelf.c (print_hash_info, handle_sysv_hash, handle_sysv_hash64,
+ handle_gnu_hash): Remove cast of xcalloc return value.
+ (print_debug_units): Remove casts of xmalloc return values.
+ * strip.c (handle_elf): Remove casts of xcalloc and xmalloc return
+ values.
+
+2021-09-05 Dmitry V. Levin <ldv@altlinux.org>
+
+ * Makefile.am (AM_LDFLAGS): Add $(STACK_USAGE_NO_ERROR).
+
+2021-08-20 Saleem Abdulrasool <abdulras@google.com>
+
+ * elfclassify.c: Remove error.h include.
+
+2021-03-18 Timm Bäder <tbaeder@redhat.com>
+
+ * readelf.c (run_advance_pc): New static inline function
+ lifted from...
+ (print_debug_line_section): ... here. Define advance_pc
+ using run_advance_pc.
+
+2021-07-03 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (compare_listptr): Fix dwarf_attr_name argument.
+
+2021-06-18 Mark Wielaard <mark@klomp.org>
+
+ * unstrip.c (adjust_relocs): Check gelf_getrel and geld_getrela.
+
+2021-06-18 Mark Wielaard <mark@klomp.org>
+
+ * strip.c (remove_debug_relocations): Check gelf_update results.
+ (update_section_size): Likewise.
+
+2021-06-06 Sergei Trofimovich <slyfox@gentoo.org>
+
+ * elflint.c (buffer_left): Mark as 'static' to avoid external linkage
+ failure.
+
2021-05-12 Dmitry V. Levin <ldv@altlinux.org>
* elfcompress.c (process_file): Return 1 instead of -1 in case of an
diff --git a/src/Makefile.am b/src/Makefile.am
index 88d0ac8f..6cc019da 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -23,7 +23,7 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
-I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \
-I$(srcdir)/../libdwfl -I$(srcdir)/../libasm
-AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw
+AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw $(STACK_USAGE_NO_ERROR)
bin_PROGRAMS = readelf nm size strip elflint findtextrel addr2line \
elfcmp objdump ranlib strings ar unstrip stack elfcompress \
@@ -61,7 +61,6 @@ nm_no_Wstack_usage = yes
size_no_Wstack_usage = yes
strip_no_Wstack_usage = yes
elflint_no_Wstack_usage = yes
-findtextrel_no_Wstack_usage = yes
elfcmp_no_Wstack_usage = yes
objdump_no_Wstack_usage = yes
ranlib_no_Wstack_usage = yes
diff --git a/src/addr2line.c b/src/addr2line.c
index 34945046..25db2926 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -1,5 +1,6 @@
/* Locate source files and line information for given addresses
Copyright (C) 2005-2010, 2012, 2013, 2015 Red Hat, Inc.
+ Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2005.
@@ -49,7 +50,8 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
#define OPT_DEMANGLER 0x100
-#define OPT_PRETTY 0x101 /* 'p' is already used to select the process. */
+#define OPT_PRETTY 0x101 /* 'p' is already used to select the process. */
+#define OPT_RELATIVE 0x102 /* 'r' is something else in binutils addr2line. */
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
@@ -62,7 +64,7 @@ static const struct argp_option options[] =
{ "addresses", 'a', NULL, 0, N_("Print address before each entry"), 0 },
{ "basenames", 's', NULL, 0, N_("Show only base names of source files"), 0 },
{ "absolute", 'A', NULL, 0,
- N_("Show absolute file names using compilation directory"), 0 },
+ N_("Show absolute file names using compilation directory (default)"), 0 },
{ "functions", 'f', NULL, 0, N_("Also show function names"), 0 },
{ "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 },
{ "symbols-sections", 'x', NULL, 0, N_("Also show symbol and the section names"), 0 },
@@ -74,6 +76,8 @@ static const struct argp_option options[] =
N_("Show demangled symbols (ARG is always ignored)"), 0 },
{ "pretty-print", OPT_PRETTY, NULL, 0,
N_("Print all information on one line, and indent inlines"), 0 },
+ { "relative", OPT_RELATIVE, NULL, 0,
+ N_("Show relative file names without compilation directory"), 0 },
{ NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
/* Unsupported options. */
@@ -111,7 +115,7 @@ static bool print_addresses;
static bool only_basenames;
/* True if absolute file names based on DW_AT_comp_dir should be shown. */
-static bool use_comp_dir;
+static bool use_comp_dir = true;
/* True if line flags should be shown. */
static bool show_flags;
@@ -236,6 +240,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
use_comp_dir = true;
break;
+ case OPT_RELATIVE:
+ use_comp_dir = false;
+ break;
+
case 'f':
show_functions = true;
break;
@@ -516,8 +524,7 @@ adjust_to_section (const char *name, uintmax_t *addr, Dwfl *dwfl)
Dwfl_Module *mod = NULL;
if (dwfl_getmodules (dwfl, &see_one_module, &mod, 0) != 0
|| mod == NULL)
- error (EXIT_FAILURE, 0, _("Section syntax requires"
- " exactly one module"));
+ error_exit (0, _("Section syntax requires exactly one module"));
int nscn = dwfl_module_relocations (mod);
for (int i = 0; i < nscn; ++i)
diff --git a/src/ar.c b/src/ar.c
index ab6098f0..9e8df120 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -386,8 +386,8 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf,
if (miss_allowed)
return -1;
- error (EXIT_FAILURE, errno, _("cannot open archive '%s'"),
- arfname);
+ error_exit (errno, _("cannot open archive '%s'"),
+ arfname);
}
if (elf != NULL)
@@ -396,16 +396,16 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf,
*elf = elf_begin (fd, cmd, NULL);
if (*elf == NULL)
- error (EXIT_FAILURE, 0, _("cannot open archive '%s': %s"),
- arfname, elf_errmsg (-1));
+ error_exit (0, _("cannot open archive '%s': %s"),
+ arfname, elf_errmsg (-1));
if (flags == O_RDONLY && elf_kind (*elf) != ELF_K_AR)
- error (EXIT_FAILURE, 0, _("%s: not an archive file"), arfname);
+ error_exit (0, _("%s: not an archive file"), arfname);
}
if (st != NULL && fstat (fd, st) != 0)
- error (EXIT_FAILURE, errno, _("cannot stat archive '%s'"),
- arfname);
+ error_exit (errno, _("cannot stat archive '%s'"),
+ arfname);
return fd;
}
@@ -469,14 +469,13 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc,
int fd = open_archive (arfname, O_RDONLY, 0, &elf, NULL, false);
if (hcreate (2 * argc) == 0)
- error (EXIT_FAILURE, errno, _("cannot create hash table"));
+ error_exit (errno, _("cannot create hash table"));
for (int cnt = 0; cnt < argc; ++cnt)
{
ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] };
if (hsearch (entry, ENTER) == NULL)
- error (EXIT_FAILURE, errno,
- _("cannot insert into hash table"));
+ error_exit (errno, _("cannot insert into hash table"));
}
struct stat st;
@@ -924,14 +923,13 @@ do_oper_delete (const char *arfname, char **argv, int argc,
int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, false);
if (hcreate (2 * argc) == 0)
- error (EXIT_FAILURE, errno, _("cannot create hash table"));
+ error_exit (errno, _("cannot create hash table"));
for (int cnt = 0; cnt < argc; ++cnt)
{
ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] };
if (hsearch (entry, ENTER) == NULL)
- error (EXIT_FAILURE, errno,
- _("cannot insert into hash table"));
+ error_exit (errno, _("cannot insert into hash table"));
}
arlib_init ();
@@ -1131,7 +1129,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
if (oper != oper_qappend)
{
if (hcreate (2 * argc) == 0)
- error (EXIT_FAILURE, errno, _("cannot create hash table"));
+ error_exit (errno, _("cannot create hash table"));
for (int cnt = 0; cnt < argc; ++cnt)
{
@@ -1139,8 +1137,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
entry.key = full_path ? argv[cnt] : basename (argv[cnt]);
entry.data = &argv[cnt];
if (hsearch (entry, ENTER) == NULL)
- error (EXIT_FAILURE, errno,
- _("cannot insert into hash table"));
+ error_exit (errno, _("cannot insert into hash table"));
}
}
@@ -1214,7 +1211,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
next:
cmd = elf_next (subelf);
if (elf_end (subelf) != 0)
- error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1));
+ error_exit (0, "%s: %s", arfname, elf_errmsg (-1));
}
if (oper != oper_qappend)
@@ -1222,8 +1219,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
no_old:
if (member != NULL)
- error (EXIT_FAILURE, 0, _("position member %s not found"),
- member);
+ error_exit (0, _("position member %s not found"),
+ member);
if (oper == oper_move)
{
@@ -1305,8 +1302,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
found[cnt]->mem = elf_rawfile (newelf, &found[cnt]->size);
if (found[cnt]->mem == NULL
|| elf_cntl (newelf, ELF_C_FDDONE) != 0)
- error (EXIT_FAILURE, 0, _("cannot read %s: %s"),
- argv[cnt], elf_errmsg (-1));
+ error_exit (0, _("cannot read %s: %s"),
+ argv[cnt], elf_errmsg (-1));
close (newfd);
@@ -1374,7 +1371,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
|| (arhdr = elf_getarhdr (subelf)) == NULL)
/* This should never happen since we already looked at the
archive content. But who knows... */
- error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1));
+ error_exit (0, "%s: %s", arfname, elf_errmsg (-1));
arlib_add_symbols (subelf, arfname, arhdr->ar_name, cur_off);
diff --git a/src/arlib.c b/src/arlib.c
index a14c44d3..c09fc3c6 100644
--- a/src/arlib.c
+++ b/src/arlib.c
@@ -210,8 +210,8 @@ arlib_add_symbols (Elf *elf, const char *arfname, const char *membername,
{
if (sizeof (off) > sizeof (uint32_t) && off > ~((uint32_t) 0))
/* The archive is too big. */
- error (EXIT_FAILURE, 0, _("the archive '%s' is too large"),
- arfname);
+ error_exit (0, _("the archive '%s' is too large"),
+ arfname);
/* We only add symbol tables for ELF files. It makes not much sense
to add symbols from executables but we do so for compatibility.
@@ -223,8 +223,8 @@ arlib_add_symbols (Elf *elf, const char *arfname, const char *membername,
GElf_Ehdr ehdr_mem;
GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
if (ehdr == NULL)
- error (EXIT_FAILURE, 0, _("cannot read ELF header of %s(%s): %s"),
- arfname, membername, elf_errmsg (-1));
+ error_exit (0, _("cannot read ELF header of %s(%s): %s"),
+ arfname, membername, elf_errmsg (-1));
GElf_Word symtype;
if (ehdr->e_type == ET_REL)
diff --git a/src/elfclassify.c b/src/elfclassify.c
index fe7eeeed..25fe9a65 100644
--- a/src/elfclassify.c
+++ b/src/elfclassify.c
@@ -19,7 +19,6 @@
#include <system.h>
#include <argp.h>
-#include <error.h>
#include <fcntl.h>
#include <gelf.h>
#include <stdbool.h>
@@ -947,7 +946,7 @@ separated by newlines"), 2 },
{ "stdin0", classify_flag_stdin0, NULL, 0,
N_("Also read file names to process from standard input, \
separated by ASCII NUL bytes"), 2 },
- { "no-stdin", classify_flag_stdin, NULL, 0,
+ { "no-stdin", classify_flag_no_stdin, NULL, 0,
N_("Do not read files from standard input (default)"), 2 },
{ "compressed", 'z', NULL, 0,
N_("Try to open compressed files or embedded (kernel) ELF images"),
diff --git a/src/elfcompress.c b/src/elfcompress.c
index 2c6d91ba..92f2fac8 100644
--- a/src/elfcompress.c
+++ b/src/elfcompress.c
@@ -1342,12 +1342,11 @@ main (int argc, char **argv)
/* Should already be handled by ARGP_KEY_NO_ARGS case above,
just sanity check. */
if (remaining >= argc)
- error (EXIT_FAILURE, 0, N_("No input file given"));
+ error_exit (0, N_("No input file given"));
/* Likewise for the ARGP_KEY_ARGS case above, an extra sanity check. */
if (foutput != NULL && remaining + 1 < argc)
- error (EXIT_FAILURE, 0,
- N_("Only one input file allowed together with '-o'"));
+ error_exit (0, N_("Only one input file allowed together with '-o'"));
elf_version (EV_CURRENT);
diff --git a/src/elflint.c b/src/elflint.c
index 85cc7833..d919936f 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -3434,7 +3434,7 @@ buffer_pos (Elf_Data *data, const unsigned char *p)
return p - (const unsigned char *) data->d_buf;
}
-inline size_t
+static inline size_t
buffer_left (Elf_Data *data, const unsigned char *p)
{
return (const unsigned char *) data->d_buf + data->d_size - p;
@@ -3705,7 +3705,7 @@ check_sections (Ebl *ebl, GElf_Ehdr *ehdr)
return;
/* Allocate array to count references in section groups. */
- scnref = (int *) xcalloc (shnum, sizeof (int));
+ scnref = xcalloc (shnum, sizeof (int));
/* Check the zeroth section first. It must not have any contents
and the section header must contain nonzero value at most in the
@@ -4102,7 +4102,7 @@ section [%2zu] '%s' has type NOBITS but is read from the file in segment of prog
bad = (databits == NULL
|| databits->d_size != shdr->sh_size);
for (size_t idx = 0;
- idx < databits->d_size && ! bad;
+ ! bad && idx < databits->d_size;
idx++)
bad = ((char *) databits->d_buf)[idx] != 0;
@@ -4384,6 +4384,13 @@ section [%2d] '%s': unknown core file note type %" PRIu32
else
goto unknown_note;
+ case NT_FDO_PACKAGING_METADATA:
+ if (nhdr.n_namesz == sizeof ELF_NOTE_FDO
+ && strcmp (data->d_buf + name_offset, ELF_NOTE_FDO) == 0)
+ break;
+ else
+ goto unknown_note;
+
case 0:
/* Linux vDSOs use a type 0 note for the kernel version word. */
if (nhdr.n_namesz == sizeof "Linux"
diff --git a/src/findtextrel.c b/src/findtextrel.c
index 220ee909..ecb1d118 100644
--- a/src/findtextrel.c
+++ b/src/findtextrel.c
@@ -36,6 +36,7 @@
#include <unistd.h>
#include <printversion.h>
+#include "libeu.h"
#include "system.h"
struct segments
@@ -181,30 +182,31 @@ noop (void *arg __attribute__ ((unused)))
static int
-process_file (const char *fname, bool more_than_one)
+open_rootdir_file (const char *fname)
{
- int result = 0;
- void *knownsrcs = NULL;
-
- size_t fname_len = strlen (fname);
- size_t rootdir_len = strlen (rootdir);
+ char *new_fname = NULL;
const char *real_fname = fname;
+
if (fname[0] == '/' && (rootdir[0] != '/' || rootdir[1] != '\0'))
- {
- /* Prepend the user-provided root directory. */
- char *new_fname = alloca (rootdir_len + fname_len + 2);
- *((char *) mempcpy (stpcpy (mempcpy (new_fname, rootdir, rootdir_len),
- "/"),
- fname, fname_len)) = '\0';
- real_fname = new_fname;
- }
+ real_fname = new_fname = xasprintf ("%s/%s", rootdir, fname);
int fd = open (real_fname, O_RDONLY);
if (fd == -1)
- {
- error (0, errno, _("cannot open '%s'"), fname);
- return 1;
- }
+ error (0, errno, _("cannot open '%s'"), fname);
+
+ free (new_fname);
+ return fd;
+}
+
+
+static int
+process_file (const char *fname, bool more_than_one)
+{
+ int result = 0;
+ void *knownsrcs = NULL;
+ int fd = open_rootdir_file (fname);
+ if (fd == -1)
+ return 1;
Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
if (elf == NULL)
@@ -304,8 +306,7 @@ process_file (const char *fname, bool more_than_one)
/* Get the address ranges for the loaded segments. */
size_t nsegments_max = 10;
size_t nsegments = 0;
- struct segments *segments
- = (struct segments *) malloc (nsegments_max * sizeof (segments[0]));
+ struct segments *segments = malloc (nsegments_max * sizeof (segments[0]));
if (segments == NULL)
error (1, errno, _("while reading ELF file"));
@@ -334,9 +335,7 @@ process_file (const char *fname, bool more_than_one)
{
nsegments_max *= 2;
segments
- = (struct segments *) realloc (segments,
- nsegments_max
- * sizeof (segments[0]));
+ = realloc (segments, nsegments_max * sizeof (segments[0]));
if (segments == NULL)
{
error (0, 0, _("\
@@ -362,18 +361,10 @@ cannot get program header index at offset %zd: %s"),
is specified with an absolute path. */
if (dw == NULL && fname[0] == '/')
{
- size_t debuginfo_rootlen = strlen (debuginfo_root);
- char *difname = (char *) alloca (rootdir_len + debuginfo_rootlen
- + fname_len + 8);
- strcpy (mempcpy (stpcpy (mempcpy (mempcpy (difname, rootdir,
- rootdir_len),
- debuginfo_root,
- debuginfo_rootlen),
- "/"),
- fname, fname_len),
- ".debug");
-
+ char *difname =
+ xasprintf("%s%s/%s.debug", rootdir, debuginfo_root, fname);
fd2 = open (difname, O_RDONLY);
+ free (difname);
if (fd2 != -1
&& (elf2 = elf_begin (fd2, ELF_C_READ_MMAP, NULL)) != NULL)
dw = dwarf_begin_elf (elf2, DWARF_C_READ, NULL);
diff --git a/src/nm.c b/src/nm.c
index b99805e8..16647589 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -137,8 +137,8 @@ static int handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1))
+ error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \
+ fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1))
/* Internal representation of symbols. */
@@ -378,7 +378,7 @@ process_file (const char *fname, bool more_than_one)
INTERNAL_ERROR (fname);
if (close (fd) != 0)
- error (EXIT_FAILURE, errno, _("while closing '%s'"), fname);
+ error_exit (errno, _("while closing '%s'"), fname);
return result;
}
@@ -390,7 +390,7 @@ process_file (const char *fname, bool more_than_one)
INTERNAL_ERROR (fname);
if (close (fd) != 0)
- error (EXIT_FAILURE, errno, _("while closing '%s'"), fname);
+ error_exit (errno, _("while closing '%s'"), fname);
return result;
}
@@ -687,8 +687,7 @@ get_local_names (Dwarf *dbg)
}
/* We have all the information. Create a record. */
- struct local_name *newp
- = (struct local_name *) xmalloc (sizeof (*newp));
+ struct local_name *newp = xmalloc (sizeof (*newp));
newp->name = name;
newp->file = dwarf_filesrc (files, fileidx, NULL, NULL);
newp->lineno = lineno;
@@ -701,8 +700,7 @@ get_local_names (Dwarf *dbg)
struct local_name **tres = tsearch (newp, &local_root,
local_compare);
if (tres == NULL)
- error (EXIT_FAILURE, errno,
- _("cannot create search tree"));
+ error_exit (errno, _("cannot create search tree"));
else if (*tres != newp)
free (newp);
}
@@ -736,14 +734,13 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
bool scnnames_malloced = shnum * sizeof (const char *) > 128 * 1024;
const char **scnnames;
if (scnnames_malloced)
- scnnames = (const char **) xmalloc (sizeof (const char *) * shnum);
+ scnnames = xmalloc (sizeof (const char *) * shnum);
else
scnnames = (const char **) alloca (sizeof (const char *) * shnum);
/* Get the section header string table index. */
size_t shstrndx;
if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
/* Cache the section names. */
Elf_Scn *scn = NULL;
@@ -1235,8 +1232,7 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr,
/* Get the section header string table index. */
size_t shstrndx;
if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
/* The section is that large. */
size_t size = shdr->sh_size;
@@ -1332,15 +1328,14 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr,
can use the data memory instead of copying again if what we read
is a 64 bit file. */
if (nentries > SIZE_MAX / sizeof (GElf_SymX))
- error (EXIT_FAILURE, 0,
- _("%s: entries (%zd) in section %zd `%s' is too large"),
- fullname, nentries, elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
+ error_exit (0, _("%s: entries (%zd) in section %zd `%s' is too large"),
+ fullname, nentries, elf_ndxscn (scn),
+ elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
GElf_SymX *sym_mem;
if (nentries * sizeof (GElf_SymX) < MAX_STACK_ALLOC)
sym_mem = (GElf_SymX *) alloca (nentries * sizeof (GElf_SymX));
else
- sym_mem = (GElf_SymX *) xmalloc (nentries * sizeof (GElf_SymX));
+ sym_mem = xmalloc (nentries * sizeof (GElf_SymX));
/* Iterate over all symbols. */
#ifdef USE_DEMANGLE
diff --git a/src/objdump.c b/src/objdump.c
index 3a93248c..b32de17d 100644
--- a/src/objdump.c
+++ b/src/objdump.c
@@ -100,8 +100,8 @@ static int handle_elf (Elf *elf, const char *prefix, const char *fname,
#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1))
+ error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \
+ fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1))
/* List of sections which should be used. */
@@ -255,7 +255,7 @@ process_file (const char *fname, bool more_than_one)
INTERNAL_ERROR (fname);
if (close (fd) != 0)
- error (EXIT_FAILURE, errno, _("while close `%s'"), fname);
+ error_exit (errno, _("while close `%s'"), fname);
return result;
}
@@ -267,7 +267,7 @@ process_file (const char *fname, bool more_than_one)
INTERNAL_ERROR (fname);
if (close (fd) != 0)
- error (EXIT_FAILURE, errno, _("while close `%s'"), fname);
+ error_exit (errno, _("while close `%s'"), fname);
return result;
}
@@ -684,7 +684,7 @@ show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx)
{
DisasmCtx_t *ctx = disasm_begin (ebl, ebl->elf, NULL /* XXX TODO */);
if (ctx == NULL)
- error (EXIT_FAILURE, 0, _("cannot disassemble"));
+ error_exit (0, _("cannot disassemble"));
Elf_Scn *scn = NULL;
while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
@@ -717,15 +717,14 @@ show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx)
info.address_color = color_address;
info.bytes_color = color_bytes;
- if (asprintf (&fmt, "%s%%7m %s%%.1o,%s%%.2o,%s%%.3o,,%s%%.4o%s%%.5o%%34a %s%%l",
- color_mnemonic ?: "",
- color_operand1 ?: "",
- color_operand2 ?: "",
- color_operand3 ?: "",
- color_operand4 ?: "",
- color_operand5 ?: "",
- color_label ?: "") < 0)
- error (EXIT_FAILURE, errno, _("cannot allocate memory"));
+ fmt = xasprintf ("%s%%7m %s%%.1o,%s%%.2o,%s%%.3o,,%s%%.4o%s%%.5o%%34a %s%%l",
+ color_mnemonic ?: "",
+ color_operand1 ?: "",
+ color_operand2 ?: "",
+ color_operand3 ?: "",
+ color_operand4 ?: "",
+ color_operand5 ?: "",
+ color_label ?: "");
}
else
{
@@ -756,8 +755,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname,
/* Get the backend for this object file type. */
Ebl *ebl = ebl_openbackend (elf);
if (ebl == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot create backend for elf file"));
+ error_exit (0, _("cannot create backend for elf file"));
printf ("%s: elf%d-%s\n\n",
fname, gelf_getclass (elf) == ELFCLASS32 ? 32 : 64,
@@ -778,8 +776,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname,
/* Get the section header string table index. */
size_t shstrndx;
if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
int result = 0;
if (print_disasm)
diff --git a/src/readelf.c b/src/readelf.c
index 9b472622..4b6aab2b 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -828,7 +828,7 @@ create_dwfl (int fd, const char *fname)
/* Duplicate an fd for dwfl_report_offline to swallow. */
int dwfl_fd = dup (fd);
if (unlikely (dwfl_fd < 0))
- error (EXIT_FAILURE, errno, "dup");
+ error_exit (errno, "dup");
/* Use libdwfl in a trivial way to open the libdw handle for us.
This takes care of applying relocations to DWARF data in ET_REL files. */
@@ -951,15 +951,13 @@ process_elf_file (Dwfl_Module *dwflmod, int fd)
/* Determine the number of sections. */
if (unlikely (elf_getshdrnum (ebl->elf, &shnum) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot determine number of sections: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot determine number of sections: %s"),
+ elf_errmsg (-1));
/* Determine the number of phdrs. */
if (unlikely (elf_getphdrnum (ebl->elf, &phnum) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot determine number of program headers: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot determine number of program headers: %s"),
+ elf_errmsg (-1));
/* For an ET_REL file, libdwfl has adjusted the in-core shdrs and
may have applied relocation to some sections. If there are any
@@ -1172,7 +1170,7 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr)
(uint32_t) shdr->sh_link);
else
{
- strncpy (buf, _(" ([0] not available)"), sizeof (buf));
+ strncpy (buf, _(" ([0] not available)"), sizeof (buf) - 1);
buf[sizeof (buf) - 1] = '\0';
}
@@ -1226,9 +1224,8 @@ print_shdr (Ebl *ebl, GElf_Ehdr *ehdr)
{
size_t sections;
if (unlikely (elf_getshdrnum (ebl->elf, &sections) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get number of sections: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get number of sections: %s"),
+ elf_errmsg (-1));
printf (_("\
There are %zd section headers, starting at offset %#" PRIx64 ":\n\
@@ -1238,9 +1235,8 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\
/* Get the section header string table index. */
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section header string table index: %s"),
+ elf_errmsg (-1));
puts (_("Section Headers:"));
@@ -1262,15 +1258,15 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\
Elf_Scn *scn = elf_getscn (ebl->elf, cnt);
if (unlikely (scn == NULL))
- error (EXIT_FAILURE, 0, _("cannot get section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section: %s"),
+ elf_errmsg (-1));
/* Get the section header. */
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0, _("cannot get section header: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section header: %s"),
+ elf_errmsg (-1));
char flagbuf[20];
char *cp = flagbuf;
@@ -1436,9 +1432,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
size_t sections;
if (unlikely (elf_getshdrnum (ebl->elf, &sections) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get number of sections: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get number of sections: %s"),
+ elf_errmsg (-1));
if (sections == 0)
/* No sections in the file. Punt. */
@@ -1447,8 +1442,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
puts (_("\n Section to Segment mapping:\n Segment Sections..."));
@@ -1461,8 +1455,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &phdr_mem);
/* This must not happen. */
if (unlikely (phdr == NULL))
- error (EXIT_FAILURE, 0, _("cannot get program header: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get program header: %s"),
+ elf_errmsg (-1));
/* Iterate over the sections. */
bool in_relro = false;
@@ -1472,16 +1466,15 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
Elf_Scn *scn = elf_getscn (ebl->elf, inner);
/* This should not happen. */
if (unlikely (scn == NULL))
- error (EXIT_FAILURE, 0, _("cannot get section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section: %s"),
+ elf_errmsg (-1));
/* Get the section header. */
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0,
- _("cannot get section header: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section header: %s"),
+ elf_errmsg (-1));
if (shdr->sh_size > 0
/* Compare allocated sections by VMA, unallocated
@@ -1598,8 +1591,7 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
Elf32_Word *grpref = (Elf32_Word *) data->d_buf;
@@ -1661,10 +1653,9 @@ print_scngrp (Ebl *ebl)
elf_ndxscn (scn));
shdr = gelf_getshdr (scn, &shdr_mem);
if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0,
- _("cannot get section [%zd] header: %s"),
- elf_ndxscn (scn),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section [%zd] header: %s"),
+ elf_ndxscn (scn),
+ elf_errmsg (-1));
}
handle_scngrp (ebl, scn, shdr);
}
@@ -1781,6 +1772,24 @@ print_dt_posflag_1 (int class, GElf_Xword d_val)
}
+static size_t
+get_dyn_ents (Elf_Data * dyn_data)
+{
+ GElf_Dyn *dyn;
+ GElf_Dyn dyn_mem;
+ size_t dyn_idx = 0;
+ do
+ {
+ dyn = gelf_getdyn(dyn_data, dyn_idx, &dyn_mem);
+ if (dyn != NULL)
+ ++dyn_idx;
+ }
+ while (dyn != NULL && dyn->d_tag != DT_NULL);
+
+ return dyn_idx;
+}
+
+
static void
handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
{
@@ -1790,38 +1799,38 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
Elf_Data *data;
size_t cnt;
size_t shstrndx;
- size_t sh_entsize;
+ size_t dyn_ents;
/* Get the data of the section. */
data = elf_getdata (scn, NULL);
if (data == NULL)
return;
+ /* Get the dynamic section entry number */
+ dyn_ents = get_dyn_ents (data);
+
/* Get the section header string table index. */
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
-
- sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT);
+ error_exit (0, _("cannot get section header string table index"));
glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem);
if (glink == NULL)
- error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"),
- elf_ndxscn (scn));
+ error_exit (0, _("invalid sh_link value in section %zu"),
+ elf_ndxscn (scn));
printf (ngettext ("\
\nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
"\
\nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- shdr->sh_size / sh_entsize),
- (unsigned long int) (shdr->sh_size / sh_entsize),
+ dyn_ents),
+ (unsigned long int) dyn_ents,
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
shdr->sh_offset,
(int) shdr->sh_link,
elf_strptr (ebl->elf, shstrndx, glink->sh_name));
fputs_unlocked (_(" Type Value\n"), stdout);
- for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt)
+ for (cnt = 0; cnt < dyn_ents; ++cnt)
{
GElf_Dyn dynmem;
GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem);
@@ -2005,8 +2014,7 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
if (shdr->sh_info != 0)
printf (ngettext ("\
@@ -2195,8 +2203,7 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
if (shdr->sh_info != 0)
printf (ngettext ("\
@@ -2373,8 +2380,8 @@ print_symtab (Ebl *ebl, int type)
size_t shstrndx;
const char *sname;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0,
+ _("cannot get section header string table index"));
sname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name);
if (sname == NULL || strcmp (sname, symbol_table_section) != 0)
continue;
@@ -2388,9 +2395,9 @@ print_symtab (Ebl *ebl, int type)
elf_ndxscn (scn));
shdr = gelf_getshdr (scn, &shdr_mem);
if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0,
- _("cannot get section [%zd] header: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
+ error_exit (0,
+ _("cannot get section [%zd] header: %s"),
+ elf_ndxscn (scn), elf_errmsg (-1));
}
handle_symtab (ebl, scn, shdr);
}
@@ -2449,15 +2456,14 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
GElf_Shdr glink_mem;
GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
&glink_mem);
if (glink == NULL)
- error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"),
- elf_ndxscn (scn));
+ error_exit (0, _("invalid sh_link value in section %zu"),
+ elf_ndxscn (scn));
/* Now we can compute the number of entries in the section. */
unsigned int nsyms = data->d_size / (class == ELFCLASS32
@@ -2715,15 +2721,14 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
GElf_Shdr glink_mem;
GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
&glink_mem);
if (glink == NULL)
- error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"),
- elf_ndxscn (scn));
+ error_exit (0, _("invalid sh_link value in section %zu"),
+ elf_ndxscn (scn));
printf (ngettext ("\
\nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
@@ -2791,15 +2796,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
GElf_Shdr glink_mem;
GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
&glink_mem);
if (glink == NULL)
- error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"),
- elf_ndxscn (scn));
+ error_exit (0, _("invalid sh_link value in section %zu"),
+ elf_ndxscn (scn));
int class = gelf_getclass (ebl->elf);
printf (ngettext ("\
@@ -2878,8 +2882,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
/* We have to find the version definition section and extract the
version names. */
@@ -3102,8 +3105,8 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
&glink_mem);
size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT);
if (glink == NULL)
- error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"),
- elf_ndxscn (scn));
+ error_exit (0, _("invalid sh_link value in section %zu"),
+ elf_ndxscn (scn));
/* Print the header. */
printf (ngettext ("\
@@ -3165,7 +3168,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx,
uint_fast32_t maxlength, Elf32_Word nbucket,
uint_fast32_t nsyms, uint32_t *lengths, const char *extrastr)
{
- uint32_t *counts = (uint32_t *) xcalloc (maxlength + 1, sizeof (uint32_t));
+ uint32_t *counts = xcalloc (maxlength + 1, sizeof (uint32_t));
for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
++counts[lengths[cnt]];
@@ -3266,7 +3269,7 @@ handle_sysv_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[2];
Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + nbucket];
- uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t));
+ uint32_t *lengths = xcalloc (nbucket, sizeof (uint32_t));
uint_fast32_t maxlength = 0;
uint_fast32_t nsyms = 0;
@@ -3332,7 +3335,7 @@ handle_sysv_hash64 (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
Elf64_Xword *bucket = &((Elf64_Xword *) data->d_buf)[2];
Elf64_Xword *chain = &((Elf64_Xword *) data->d_buf)[2 + nbucket];
- uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t));
+ uint32_t *lengths = xcalloc (nbucket, sizeof (uint32_t));
uint_fast32_t maxlength = 0;
uint_fast32_t nsyms = 0;
@@ -3410,7 +3413,7 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
if (used_buf > data->d_size)
goto invalid_data;
- lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t));
+ lengths = xcalloc (nbucket, sizeof (uint32_t));
Elf32_Word *bitmask = &((Elf32_Word *) data->d_buf)[4];
Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[4 + bitmask_words];
@@ -3448,17 +3451,15 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
nbits += (word & 0x0000ffff) + ((word >> 16) & 0x0000ffff);
}
- char *str;
- if (unlikely (asprintf (&str, _("\
+ char *str = xasprintf (_("\
Symbol Bias: %u\n\
Bitmask Size: %zu bytes %" PRIuFAST32 "%% bits set 2nd hash shift: %u\n"),
- (unsigned int) symbias,
- bitmask_words * sizeof (Elf32_Word),
- ((nbits * 100 + 50)
- / (uint_fast32_t) (bitmask_words
+ (unsigned int) symbias,
+ bitmask_words * sizeof (Elf32_Word),
+ ((nbits * 100 + 50)
+ / (uint_fast32_t) (bitmask_words
* sizeof (Elf32_Word) * 8)),
- (unsigned int) shift) == -1))
- error (EXIT_FAILURE, 0, _("memory exhausted"));
+ (unsigned int) shift);
print_hash_info (ebl, scn, shdr, shstrndx, maxlength, nbucket, nsyms,
lengths, str);
@@ -3476,8 +3477,7 @@ handle_hash (Ebl *ebl)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
Elf_Scn *scn = NULL;
while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
@@ -3497,9 +3497,8 @@ handle_hash (Ebl *ebl)
elf_ndxscn (scn));
shdr = gelf_getshdr (scn, &shdr_mem);
if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0,
- _("cannot get section [%zd] header: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
+ error_exit (0, _("cannot get section [%zd] header: %s"),
+ elf_ndxscn (scn), elf_errmsg (-1));
}
if (shdr->sh_type == SHT_HASH)
@@ -3526,8 +3525,7 @@ print_liblist (Ebl *ebl)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
{
@@ -3596,8 +3594,7 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
{
@@ -3834,7 +3831,7 @@ print_dwarf_addr (Dwfl_Module *dwflmod,
: (address_size == 0
? printf ("%#" PRIx64, address)
: printf ("%#0*" PRIx64, 2 + address_size * 2, address)))) < 0)
- error (EXIT_FAILURE, 0, _("sprintf failure"));
+ error_exit (0, _("sprintf failure"));
}
@@ -4887,7 +4884,7 @@ compare_listptr (const void *a, const void *b)
error (0, 0,
_("%s %#" PRIx64
" used with different attribute %s and %s"),
- name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
+ name, (uint64_t) p1->offset, dwarf_attr_name (p1->attr),
dwarf_attr_name (p2->attr));
}
}
@@ -7744,7 +7741,7 @@ print_debug_units (Dwfl_Module *dwflmod,
return;
int maxdies = 20;
- Dwarf_Die *dies = (Dwarf_Die *) xmalloc (maxdies * sizeof (Dwarf_Die));
+ Dwarf_Die *dies = xmalloc (maxdies * sizeof (Dwarf_Die));
/* New compilation unit. */
Dwarf_Half version;
@@ -7916,9 +7913,7 @@ print_debug_units (Dwfl_Module *dwflmod,
/* Make room for the next level's DIE. */
if (level + 1 == maxdies)
- dies = (Dwarf_Die *) xrealloc (dies,
- (maxdies += 10)
- * sizeof (Dwarf_Die));
+ dies = xrealloc (dies, (maxdies += 10) * sizeof (Dwarf_Die));
int res = dwarf_child (&dies[level], &dies[level + 1]);
if (res > 0)
@@ -8373,6 +8368,23 @@ print_form_data (Dwarf *dbg, int form, const unsigned char *readp,
return readp;
}
+/* Only used via run_advance_pc() macro */
+static inline void
+run_advance_pc (unsigned int op_advance,
+ unsigned int minimum_instr_len,
+ unsigned int max_ops_per_instr,
+ unsigned int *op_addr_advance,
+ Dwarf_Word *address,
+ unsigned int *op_index)
+{
+ const unsigned int advanced_op_index = (*op_index) + op_advance;
+
+ *op_addr_advance = minimum_instr_len * (advanced_op_index
+ / max_ops_per_instr);
+ *address = *address + *op_addr_advance;
+ *op_index = advanced_op_index % max_ops_per_instr;
+}
+
static void
print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
@@ -8465,6 +8477,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
header_length = read_8ubyte_unaligned_inc (dbg, linep);
}
+ const unsigned char *header_start = linep;
+
/* Next the minimum instruction length. */
if ((size_t) (lineendp - linep) < 1)
goto invalid_data;
@@ -8748,10 +8762,17 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
++linep;
}
+ unsigned int debug_str_offset = 0;
+ if (unlikely (linep == header_start + header_length - 4))
+ {
+ /* CUBINs contain an unsigned 4-byte offset */
+ debug_str_offset = read_4ubyte_unaligned_inc (dbg, linep);
+ }
+
if (linep == lineendp)
{
puts (_("\nNo line number statements."));
- return;
+ continue;
}
puts (_("\nLine number statements:"));
@@ -8763,13 +8784,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
/* Apply the "operation advance" from a special opcode
or DW_LNS_advance_pc (as per DWARF4 6.2.5.1). */
unsigned int op_addr_advance;
- inline void advance_pc (unsigned int op_advance)
- {
- op_addr_advance = minimum_instr_len * ((op_index + op_advance)
- / max_ops_per_instr);
- address += op_addr_advance;
- op_index = (op_index + op_advance) % max_ops_per_instr;
- }
+#define advance_pc(op_advance) run_advance_pc(op_advance, minimum_instr_len, \
+ max_ops_per_instr, &op_addr_advance, &address, &op_index)
if (max_ops_per_instr == 0)
{
@@ -8901,6 +8917,59 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
printf (_(" set discriminator to %u\n"), u128);
break;
+ case DW_LNE_NVIDIA_inlined_call:
+ {
+ if (unlikely (linep >= lineendp))
+ goto invalid_data;
+
+ unsigned int context;
+ get_uleb128 (context, linep, lineendp);
+
+ if (unlikely (linep >= lineendp))
+ goto invalid_data;
+
+ unsigned int function_name;
+ get_uleb128 (function_name, linep, lineendp);
+ function_name += debug_str_offset;
+
+ Elf_Data *str_data = dbg->sectiondata[IDX_debug_str];
+ char *function_str;
+ if (str_data == NULL || function_name >= str_data->d_size
+ || memchr (str_data->d_buf + function_name, '\0',
+ str_data->d_size - function_name) == NULL)
+ function_str = "???";
+ else
+ function_str = (char *) str_data->d_buf + function_name;
+
+ printf (_(" set inlined context %u,"
+ " function name %s (0x%x)\n"),
+ context, function_str, function_name);
+ break;
+ }
+
+ case DW_LNE_NVIDIA_set_function_name:
+ {
+ if (unlikely (linep >= lineendp))
+ goto invalid_data;
+
+ unsigned int function_name;
+ get_uleb128 (function_name, linep, lineendp);
+ function_name += debug_str_offset;
+
+ Elf_Data *str_data = dbg->sectiondata[IDX_debug_str];
+ char *function_str;
+ if (str_data == NULL || function_name >= str_data->d_size
+ || memchr (str_data->d_buf + function_name, '\0',
+ str_data->d_size - function_name) == NULL)
+ function_str = "???";
+ else
+ function_str = (char *) str_data->d_buf + function_name;
+
+ printf (_(" set function name %s (0x%x)\n"),
+ function_str, function_name);
+ }
+ break;
+
default:
/* Unknown, ignore it. */
puts (_(" unknown opcode"));
@@ -11335,8 +11404,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
/* If the .debug_info section is listed as implicitly required then
we must make sure to handle it before handling any other debug
@@ -11509,7 +11577,7 @@ print_core_item (unsigned int colno, char sep, unsigned int wrap,
int out_len = vasprintf (&out, format, ap);
va_end (ap);
if (out_len == -1)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
+ error_exit (0, _("memory exhausted"));
size_t n = name_width + sizeof ": " - 1 + out_len;
@@ -11559,8 +11627,8 @@ convert (Elf *core, Elf_Type type, uint_fast16_t count,
? elf32_xlatetom : elf64_xlatetom)
(&valuedata, &indata, elf_getident (core, NULL)[EI_DATA]);
if (d == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot convert core note data: %s"), elf_errmsg (-1));
+ error_exit (0, _("cannot convert core note data: %s"),
+ elf_errmsg (-1));
return data + indata.d_size;
}
@@ -12186,8 +12254,7 @@ handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos)
Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_AUXV);
if (data == NULL)
elf_error:
- error (EXIT_FAILURE, 0,
- _("cannot convert core note data: %s"), elf_errmsg (-1));
+ error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1));
const size_t nauxv = descsz / gelf_fsize (core, ELF_T_AUXV, 1, EV_CURRENT);
for (size_t i = 0; i < nauxv; ++i)
@@ -12297,8 +12364,7 @@ handle_siginfo_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos)
{
Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE);
if (data == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot convert core note data: %s"), elf_errmsg (-1));
+ error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1));
unsigned char const *ptr = data->d_buf;
unsigned char const *const end = data->d_buf + data->d_size;
@@ -12355,8 +12421,7 @@ handle_file_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos)
{
Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE);
if (data == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot convert core note data: %s"), elf_errmsg (-1));
+ error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1));
unsigned char const *ptr = data->d_buf;
unsigned char const *const end = data->d_buf + data->d_size;
@@ -12529,8 +12594,7 @@ handle_notes (Ebl *ebl, GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
Elf_Scn *scn = NULL;
while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
@@ -12740,8 +12804,7 @@ for_each_section_argument (Elf *elf, const struct section_argument *list,
/* Get the section header string table index. */
size_t shstrndx;
if (elf_getshdrstrndx (elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
for (const struct section_argument *a = list; a != NULL; a = a->next)
{
@@ -12761,8 +12824,8 @@ for_each_section_argument (Elf *elf, const struct section_argument *list,
}
if (gelf_getshdr (scn, &shdr_mem) == NULL)
- error (EXIT_FAILURE, 0, _("cannot get section header: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot get section header: %s"),
+ elf_errmsg (-1));
name = elf_strptr (elf, shstrndx, shdr_mem.sh_name);
(*dump) (scn, &shdr_mem, name);
}
@@ -12809,8 +12872,7 @@ print_strings (Ebl *ebl)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
Elf_Scn *scn;
GElf_Shdr shdr_mem;
@@ -12842,9 +12904,8 @@ dump_archive_index (Elf *elf, const char *fname)
{
int result = elf_errno ();
if (unlikely (result != ELF_E_NO_INDEX))
- error (EXIT_FAILURE, 0,
- _("cannot get symbol index of archive '%s': %s"),
- fname, elf_errmsg (result));
+ error_exit (0, _("cannot get symbol index of archive '%s': %s"),
+ fname, elf_errmsg (result));
else
printf (_("\nArchive '%s' has no symbol index\n"), fname);
return;
@@ -12867,9 +12928,9 @@ dump_archive_index (Elf *elf, const char *fname)
#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 7)
while (1)
#endif
- error (EXIT_FAILURE, 0,
- _("cannot extract member at offset %zu in '%s': %s"),
- as_off, fname, elf_errmsg (-1));
+ error_exit (0,
+ _("cannot extract member at offset %zu in '%s': %s"),
+ as_off, fname, elf_errmsg (-1));
const Elf_Arhdr *h = elf_getarhdr (subelf);
diff --git a/src/size.c b/src/size.c
index 322ff53e..8f203167 100644
--- a/src/size.c
+++ b/src/size.c
@@ -102,8 +102,8 @@ static void handle_elf (Elf *elf, const char *fullname, const char *fname);
static void show_bsd_totals (void);
#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1))
+ error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \
+ fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1))
/* User-selectable options. */
@@ -237,7 +237,7 @@ parse_opt (int key, char *arg,
else if (likely (strcmp (arg, "sysv") == 0))
format = format_sysv;
else
- error (EXIT_FAILURE, 0, _("Invalid format: %s"), arg);
+ error_exit (0, _("Invalid format: %s"), arg);
break;
case OPT_RADIX:
@@ -248,7 +248,7 @@ parse_opt (int key, char *arg,
else if (strcmp (arg, "o") == 0 || strcmp (arg, "8") == 0)
radix = radix_octal;
else
- error (EXIT_FAILURE, 0, _("Invalid radix: %s"), arg);
+ error_exit (0, _("Invalid radix: %s"), arg);
break;
case 't':
@@ -285,7 +285,7 @@ process_file (const char *fname)
INTERNAL_ERROR (fname);
if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, _("while closing '%s'"), fname);
+ error_exit (errno, _("while closing '%s'"), fname);
return 0;
}
@@ -294,7 +294,7 @@ process_file (const char *fname)
int result = handle_ar (fd, elf, NULL, fname);
if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, _("while closing '%s'"), fname);
+ error_exit (errno, _("while closing '%s'"), fname);
return result;
}
@@ -305,7 +305,7 @@ process_file (const char *fname)
}
if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, _("while closing '%s'"), fname);
+ error_exit (errno, _("while closing '%s'"), fname);
error (0, 0, _("%s: file format not recognized"), fname);
@@ -394,8 +394,7 @@ show_sysv (Elf *elf, const char *prefix, const char *fname,
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
/* First round over the sections: determine the longest section name. */
Elf_Scn *scn = NULL;
@@ -466,8 +465,7 @@ show_sysv_one_line (Elf *elf)
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
/* Iterate over all sections. */
GElf_Off total = 0;
@@ -479,7 +477,7 @@ show_sysv_one_line (Elf *elf)
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0, _("cannot get section header"));
+ error_exit (0, _("cannot get section header"));
/* Ignore all sections which are not used at runtime. */
if ((shdr->sh_flags & SHF_ALLOC) == 0)
diff --git a/src/strings.c b/src/strings.c
index eb278f8e..04aac3b6 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -298,8 +298,7 @@ parse_opt (int key, char *arg,
case ARGP_KEY_FINI:
/* Compute the length in bytes of any match. */
if (min_len <= 0 || min_len > INT_MAX / bytes_per_char)
- error (EXIT_FAILURE, 0,
- _("invalid minimum length of matched string size"));
+ error_exit (0, _("invalid minimum length of matched string size"));
min_len_bytes = min_len * bytes_per_char;
break;
@@ -582,7 +581,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to)
// XXX Eventually add flag which avoids this if the position
// XXX is known to match.
if (from != 0 && lseek (fd, from, SEEK_SET) != from)
- error (EXIT_FAILURE, errno, _("lseek failed"));
+ error_exit (errno, _("lseek failed"));
return read_block_no_mmap (fd, fname, from, to - from);
}
@@ -599,7 +598,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to)
if (mmap (elfmap, elfmap_size, PROT_READ,
MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, from)
== MAP_FAILED)
- error (EXIT_FAILURE, errno, _("re-mmap failed"));
+ error_exit (errno, _("re-mmap failed"));
elfmap_base = elfmap;
}
@@ -636,7 +635,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to)
and for this we have to make the data writable. */
if (unlikely (mprotect (elfmap, keep_area, PROT_READ | PROT_WRITE)
!= 0))
- error (EXIT_FAILURE, errno, _("mprotect failed"));
+ error_exit (errno, _("mprotect failed"));
elfmap_base = elfmap + keep_area;
}
@@ -663,7 +662,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to)
if (mmap (remap_base, read_now, PROT_READ,
MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, handled_to)
== MAP_FAILED)
- error (EXIT_FAILURE, errno, _("re-mmap failed"));
+ error_exit (errno, _("re-mmap failed"));
elfmap_off = handled_to;
process_chunk (fname, remap_base - to_keep,
diff --git a/src/strip.c b/src/strip.c
index 70fc8c03..30a1f9da 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -130,8 +130,8 @@ static void cleanup_debug (void);
#define INTERNAL_ERROR(fname) \
do { \
cleanup_debug (); \
- error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)); \
+ error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \
+ fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)); \
} while (0)
@@ -243,14 +243,13 @@ main (int argc, char *argv[])
return EXIT_FAILURE;
if (reloc_debug && debug_fname == NULL)
- error (EXIT_FAILURE, 0,
- _("--reloc-debug-sections used without -f"));
+ error_exit (0, _("--reloc-debug-sections used without -f"));
if (reloc_debug_only &&
(debug_fname != NULL || remove_secs != NULL
|| remove_comment == true || remove_debug == true))
- error (EXIT_FAILURE, 0,
- _("--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --remove-section"));
+ error_exit (0,
+ _("--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --remove-section"));
/* Tell the library which version we are expecting. */
elf_version (EV_CURRENT);
@@ -264,8 +263,7 @@ main (int argc, char *argv[])
input file. */
if ((output_fname != NULL || debug_fname != NULL)
&& remaining + 1 < argc)
- error (EXIT_FAILURE, 0, _("\
-Only one input file allowed together with '-o' and '-f'"));
+ error_exit (0, _("Only one input file allowed together with '-o' and '-f'"));
/* Process all the remaining files. */
do
@@ -478,7 +476,7 @@ relocate (Elf *elf, GElf_Addr offset, const GElf_Sxword addend,
|| tdata->d_size - offset < size)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0, _("bad relocation"));
+ error_exit (0, _("bad relocation"));
}
/* When the symbol value is zero then for SHT_REL
@@ -705,17 +703,21 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr,
relocate_failed:
if (relidx != next)
{
+ int updated;
if (is_rela)
- gelf_update_rela (reldata, next, rel_p);
+ updated = gelf_update_rela (reldata, next, rel_p);
else
- gelf_update_rel (reldata, next, rel_p);
+ updated = gelf_update_rel (reldata, next, rel_p);
+ if (updated == 0)
+ INTERNAL_ERROR (fname);
}
++next;
}
nrels = next;
shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize;
- gelf_update_shdr (scn, shdr);
+ if (gelf_update_shdr (scn, shdr) == 0)
+ INTERNAL_ERROR (fname);
if (is_gnu_compressed)
{
@@ -952,7 +954,8 @@ update_section_size (Elf_Scn *scn,
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
shdr->sh_size = newdata->d_size;
- (void) gelf_update_shdr (scn, shdr);
+ if (gelf_update_shdr (scn, shdr) == 0)
+ INTERNAL_ERROR (fname);
if (debugelf != NULL)
{
/* libelf will use d_size to set sh_size. */
@@ -1057,7 +1060,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
the debug file if the file would not contain any
information. */
size_t debug_fname_len = strlen (debug_fname);
- tmp_debug_fname = (char *) xmalloc (debug_fname_len + sizeof (".XXXXXX"));
+ tmp_debug_fname = xmalloc (debug_fname_len + sizeof (".XXXXXX"));
strcpy (mempcpy (tmp_debug_fname, debug_fname, debug_fname_len),
".XXXXXX");
@@ -1080,8 +1083,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0))
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("cannot get section header string table index"));
+ error_exit (0, _("cannot get section header string table index"));
}
/* Get the number of phdrs in the old file. */
@@ -1089,7 +1091,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (elf_getphdrnum (elf, &phnum) != 0)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0, _("cannot get number of phdrs"));
+ error_exit (0, _("cannot get number of phdrs"));
}
/* We now create a new ELF descriptor for the same file. We
@@ -1191,8 +1193,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
table. Maybe some weird tool created an ELF file without one.
The other one is used for the debug link section. */
if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC)
- shdr_info = (struct shdr_info *) xcalloc (shnum + 2,
- sizeof (struct shdr_info));
+ shdr_info = xcalloc (shnum + 2, sizeof (struct shdr_info));
else
{
shdr_info = (struct shdr_info *) alloca ((shnum + 2)
@@ -1620,9 +1621,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (scn == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("while generating output file: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("while generating output file: %s"),
+ elf_errmsg (-1));
}
bool discard_section = (shdr_info[cnt].idx > 0
@@ -1719,8 +1719,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (shst == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, errno, _("while preparing output for '%s'"),
- output_fname ?: fname);
+ error_exit (errno, _("while preparing output for '%s'"),
+ output_fname ?: fname);
}
/* Assign new section numbers. */
@@ -1735,8 +1735,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (shdr_info[cnt].newscn == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("while generating output file: %s"),
+ error_exit (0,
+ _("while generating output file: %s"),
elf_errmsg (-1));
}
@@ -1780,9 +1780,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (shdr_info[cnt].newscn == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("while create section header section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("while create section header section: %s"),
+ elf_errmsg (-1));
}
elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx);
@@ -1790,8 +1789,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (shdr_info[cnt].data == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0, _("cannot allocate section data: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("cannot allocate section data: %s"),
+ elf_errmsg (-1));
}
char *debug_basename = basename (debug_fname_embed ?: debug_fname);
@@ -1843,9 +1842,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (shdr_info[cnt].newscn == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("while create section header section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("while create section header section: %s"),
+ elf_errmsg (-1));
}
elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == idx);
@@ -1855,15 +1853,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
if (shstrtab_data == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("while create section header string table: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("while create section header string table: %s"),
+ elf_errmsg (-1));
}
if (dwelf_strtab_finalize (shst, shstrtab_data) == NULL)
{
cleanup_debug ();
- error (EXIT_FAILURE, 0,
- _("no memory to create section header string table"));
+ error_exit (0, _("no memory to create section header string table"));
}
/* We have to set the section size. */
@@ -1975,8 +1971,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
}
shdr_info[cnt].newsymidx
- = (Elf32_Word *) xcalloc (shdr_info[cnt].data->d_size
- / elsize, sizeof (Elf32_Word));
+ = xcalloc (shdr_info[cnt].data->d_size / elsize,
+ sizeof (Elf32_Word));
bool last_was_local = true;
size_t destidx;
@@ -2760,7 +2756,7 @@ cannot set access and modification date of '%s'"), fname);
}
if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, _("while closing '%s'"), fname);
+ error_exit (errno, _("while closing '%s'"), fname);
return result;
}
diff --git a/src/unstrip.c b/src/unstrip.c
index e488e810..3472637a 100644
--- a/src/unstrip.c
+++ b/src/unstrip.c
@@ -225,7 +225,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
do \
{ \
if (unlikely (!(call))) \
- error (EXIT_FAILURE, 0, msg, elf_errmsg (-1)); \
+ error_exit (0, msg, elf_errmsg (-1)); \
} while (0)
/* Copy INELF to newly-created OUTELF, exit via error for any problems. */
@@ -316,7 +316,7 @@ make_directories (const char *path)
if (errno == ENOENT)
make_directories (dir);
else
- error (EXIT_FAILURE, errno, _("cannot create directory '%s'"), dir);
+ error_exit (errno, _("cannot create directory '%s'"), dir);
}
free (dir);
}
@@ -440,7 +440,7 @@ adjust_reloc (GElf_Xword *info,
if (ndx != STN_UNDEF)
{
if (ndx > map_size)
- error (EXIT_FAILURE, 0, "bad symbol ndx section");
+ error_exit (0, "bad symbol ndx section");
*info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info));
}
}
@@ -456,12 +456,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
{
case SHT_REL:
if (shdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0, "REL section cannot have zero sh_entsize");
+ error_exit (0, "REL section cannot have zero sh_entsize");
for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i)
{
GElf_Rel rel_mem;
GElf_Rel *rel = gelf_getrel (data, i, &rel_mem);
+ ELF_CHECK (rel != NULL, _("gelf_getrel failed: %s"));
adjust_reloc (&rel->r_info, map, map_size);
ELF_CHECK (gelf_update_rel (data, i, rel),
_("cannot update relocation: %s"));
@@ -470,12 +471,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
case SHT_RELA:
if (shdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0, "RELA section cannot have zero sh_entsize");
+ error_exit (0, "RELA section cannot have zero sh_entsize");
for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i)
{
GElf_Rela rela_mem;
GElf_Rela *rela = gelf_getrela (data, i, &rela_mem);
+ ELF_CHECK (rela != NULL, _("gelf_getrela failed: %s"));
adjust_reloc (&rela->r_info, map, map_size);
ELF_CHECK (gelf_update_rela (data, i, rela),
_("cannot update relocation: %s"));
@@ -499,13 +501,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
/* We must expand the table and rejigger its contents. */
{
if (shdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0, "HASH section cannot have zero sh_entsize");
+ error_exit (0, "HASH section cannot have zero sh_entsize");
if (symshdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0, "Symbol table cannot have zero sh_entsize");
+ error_exit (0, "Symbol table cannot have zero sh_entsize");
const size_t nsym = symshdr->sh_size / symshdr->sh_entsize;
const size_t onent = shdr->sh_size / shdr->sh_entsize;
if (data->d_size != shdr->sh_size)
- error (EXIT_FAILURE, 0, "HASH section has inconsistent size");
+ error_exit (0, "HASH section has inconsistent size");
#define CONVERT_HASH(Hash_Word) \
{ \
@@ -515,7 +517,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
const Hash_Word *const old_bucket = &old_hash[2]; \
const Hash_Word *const old_chain = &old_bucket[nbucket]; \
if (onent != 2 + nbucket + nchain) \
- error (EXIT_FAILURE, 0, "HASH section has inconsistent entsize"); \
+ error_exit (0, "HASH section has inconsistent entsize"); \
\
const size_t nent = 2 + nbucket + nsym; \
Hash_Word *const new_hash = xcalloc (nent, sizeof new_hash[0]); \
@@ -560,10 +562,9 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
/* We must expand the table and move its elements around. */
{
if (shdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0,
- "GNU_versym section cannot have zero sh_entsize");
+ error_exit (0, "GNU_versym section cannot have zero sh_entsize");
if (symshdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0, "Symbol table cannot have zero sh_entsize");
+ error_exit (0, "Symbol table cannot have zero sh_entsize");
const size_t nent = symshdr->sh_size / symshdr->sh_entsize;
const size_t onent = shdr->sh_size / shdr->sh_entsize;
assert (nent >= onent);
@@ -589,9 +590,9 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
break;
default:
- error (EXIT_FAILURE, 0,
- _("unexpected section type in [%zu] with sh_link to symtab"),
- elf_ndxscn (inscn));
+ error_exit (0,
+ _("unexpected section type in [%zu] with sh_link to symtab"),
+ elf_ndxscn (inscn));
}
}
@@ -630,7 +631,7 @@ add_new_section_symbols (Elf_Scn *old_symscn, size_t old_shnum,
GElf_Shdr *shdr = gelf_getshdr (symscn, &shdr_mem);
ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
if (shdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0, "Symbol table section cannot have zero sh_entsize");
+ error_exit (0, "Symbol table section cannot have zero sh_entsize");
const size_t nsym = shdr->sh_size / shdr->sh_entsize;
size_t symndx_map[nsym - 1];
@@ -863,8 +864,8 @@ collect_symbols (Elf *outelf, bool rel, Elf_Scn *symscn, Elf_Scn *strscn,
if (sym->st_name >= strdata->d_size
|| memrchr (strdata->d_buf + sym->st_name, '\0',
strdata->d_size - sym->st_name) == NULL)
- error (EXIT_FAILURE, 0,
- _("invalid string offset in symbol [%zu]"), i);
+ error_exit (0,
+ _("invalid string offset in symbol [%zu]"), i);
struct symbol *s = &table[i - 1];
s->map = &map[i - 1];
@@ -946,13 +947,13 @@ compare_symbols_output (const void *a, const void *b)
/* binutils always puts section symbols in section index order. */
CMP (shndx);
else if (s1 != s2)
- error (EXIT_FAILURE, 0, "section symbols in unexpected order");
+ error_exit (0, "section symbols in unexpected order");
}
/* Nothing really matters, so preserve the original order. */
CMP (map);
else if (s1 != s2)
- error (EXIT_FAILURE, 0, "found two identical symbols");
+ error_exit (0, "found two identical symbols");
}
return cmp;
@@ -1022,8 +1023,8 @@ static inline const char *
get_section_name (size_t ndx, const GElf_Shdr *shdr, const Elf_Data *shstrtab)
{
if (shdr->sh_name >= shstrtab->d_size)
- error (EXIT_FAILURE, 0, _("cannot read section [%zu] name: %s"),
- ndx, elf_errmsg (-1));
+ error_exit (0, _("cannot read section [%zu] name: %s"),
+ ndx, elf_errmsg (-1));
return shstrtab->d_buf + shdr->sh_name;
}
@@ -1037,30 +1038,30 @@ get_group_sig (Elf *elf, GElf_Shdr *shdr)
Elf_Scn *symscn = elf_getscn (elf, shdr->sh_link);
if (symscn == NULL)
- error (EXIT_FAILURE, 0, _("bad sh_link for group section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("bad sh_link for group section: %s"),
+ elf_errmsg (-1));
GElf_Shdr symshdr_mem;
GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
if (symshdr == NULL)
- error (EXIT_FAILURE, 0, _("couldn't get shdr for group section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("couldn't get shdr for group section: %s"),
+ elf_errmsg (-1));
Elf_Data *symdata = elf_getdata (symscn, NULL);
if (symdata == NULL)
- error (EXIT_FAILURE, 0, _("bad data for group symbol section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("bad data for group symbol section: %s"),
+ elf_errmsg (-1));
GElf_Sym sym_mem;
GElf_Sym *sym = gelf_getsym (symdata, shdr->sh_info, &sym_mem);
if (sym == NULL)
- error (EXIT_FAILURE, 0, _("couldn't get symbol for group section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("couldn't get symbol for group section: %s"),
+ elf_errmsg (-1));
const char *sig = elf_strptr (elf, symshdr->sh_link, sym->st_name);
if (sig == NULL)
- error (EXIT_FAILURE, 0, _("bad symbol name for group section: %s"),
- elf_errmsg (-1));
+ error_exit (0, _("bad symbol name for group section: %s"),
+ elf_errmsg (-1));
return sig;
}
@@ -1152,8 +1153,8 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab,
bool class32 = ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32;
size_t shsize = class32 ? sizeof (Elf32_Shdr) : sizeof (Elf64_Shdr);
if (unlikely (shnum == 0 || shnum > SIZE_MAX / shsize + 1))
- error (EXIT_FAILURE, 0, _("overflow with shnum = %zu in '%s' section"),
- (size_t) shnum, ".gnu.prelink_undo");
+ error_exit (0, _("overflow with shnum = %zu in '%s' section"),
+ (size_t) shnum, ".gnu.prelink_undo");
--shnum;
@@ -1163,8 +1164,8 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab,
src.d_type = ELF_T_SHDR;
if ((size_t) (src.d_buf - undodata->d_buf) > undodata->d_size
|| undodata->d_size - (src.d_buf - undodata->d_buf) != src.d_size)
- error (EXIT_FAILURE, 0, _("invalid contents in '%s' section"),
- ".gnu.prelink_undo");
+ error_exit (0, _("invalid contents in '%s' section"),
+ ".gnu.prelink_undo");
const size_t shdr_bytes = shnum * shsize;
void *shdr = xmalloc (shdr_bytes);
@@ -1361,7 +1362,7 @@ new_shstrtab (Elf *unstripped, size_t unstripped_shnum,
ELF_CHECK (elf_flagdata (strtab_data, ELF_C_SET, ELF_F_DIRTY),
_("cannot update section header string table data: %s"));
if (dwelf_strtab_finalize (strtab, strtab_data) == NULL)
- error (EXIT_FAILURE, 0, "Not enough memory to create string table");
+ error_exit (0, "Not enough memory to create string table");
/* Update the sh_name fields of sections we aren't modifying later. */
for (size_t i = 0; i < unstripped_shnum - 1; ++i)
@@ -1403,11 +1404,11 @@ copy_elided_sections (Elf *unstripped, Elf *stripped,
_("cannot get section count: %s"));
if (unlikely (stripped_shnum > unstripped_shnum))
- error (EXIT_FAILURE, 0, _("\
+ error_exit (0, _("\
more sections in stripped file than debug file -- arguments reversed?"));
if (unlikely (stripped_shnum == 0))
- error (EXIT_FAILURE, 0, _("no sections in stripped file"));
+ error_exit (0, _("no sections in stripped file"));
/* Used as sanity check for allocated section offset, if the section
offset needs to be preserved. We want to know the max size of the
@@ -1430,8 +1431,8 @@ more sections in stripped file than debug file -- arguments reversed?"));
sections[i].name = elf_strptr (stripped, stripped_shstrndx,
shdr->sh_name);
if (sections[i].name == NULL)
- error (EXIT_FAILURE, 0, _("cannot read section [%zu] name: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
+ error_exit (0, _("cannot read section [%zu] name: %s"),
+ elf_ndxscn (scn), elf_errmsg (-1));
sections[i].scn = scn;
sections[i].outscn = NULL;
sections[i].strent = NULL;
@@ -1550,9 +1551,8 @@ more sections in stripped file than debug file -- arguments reversed?"));
}
if (sec == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot find matching section for [%zu] '%s'"),
- elf_ndxscn (scn), name);
+ error_exit (0, _("cannot find matching section for [%zu] '%s'"),
+ elf_ndxscn (scn), name);
sec->outscn = scn;
}
@@ -1687,17 +1687,17 @@ more sections in stripped file than debug file -- arguments reversed?"));
if (sec->shdr.sh_link != SHN_UNDEF)
{
if (sec->shdr.sh_link > ndx_sec_num)
- error (EXIT_FAILURE, 0,
- "section [%zd] has invalid sh_link %" PRId32,
- elf_ndxscn (sec->scn), sec->shdr.sh_link);
+ error_exit (0,
+ "section [%zd] has invalid sh_link %" PRId32,
+ elf_ndxscn (sec->scn), sec->shdr.sh_link);
shdr_mem.sh_link = ndx_section[sec->shdr.sh_link - 1];
}
if (SH_INFO_LINK_P (&sec->shdr) && sec->shdr.sh_info != 0)
{
if (sec->shdr.sh_info > ndx_sec_num)
- error (EXIT_FAILURE, 0,
- "section [%zd] has invalid sh_info %" PRId32,
- elf_ndxscn (sec->scn), sec->shdr.sh_info);
+ error_exit (0,
+ "section [%zd] has invalid sh_info %" PRId32,
+ elf_ndxscn (sec->scn), sec->shdr.sh_info);
shdr_mem.sh_info = ndx_section[sec->shdr.sh_info - 1];
}
@@ -1715,9 +1715,9 @@ more sections in stripped file than debug file -- arguments reversed?"));
if (stripped_ehdr->e_type != ET_REL && (shdr_mem.sh_flags & SHF_ALLOC))
{
if (max_off > 0 && sec->shdr.sh_offset > (Elf64_Off) max_off)
- error (EXIT_FAILURE, 0,
- "allocated section offset too large [%zd] %" PRIx64,
- elf_ndxscn (sec->scn), sec->shdr.sh_offset);
+ error_exit (0,
+ "allocated section offset too large [%zd] %" PRIx64,
+ elf_ndxscn (sec->scn), sec->shdr.sh_offset);
shdr_mem.sh_offset = sec->shdr.sh_offset;
placed[elf_ndxscn (sec->outscn) - 1] = true;
@@ -1738,8 +1738,8 @@ more sections in stripped file than debug file -- arguments reversed?"));
Elf_Data *shndxdata = NULL; /* XXX */
if (shdr_mem.sh_entsize == 0)
- error (EXIT_FAILURE, 0,
- "SYMTAB section cannot have zero sh_entsize");
+ error_exit (0,
+ "SYMTAB section cannot have zero sh_entsize");
for (size_t i = 1; i < shdr_mem.sh_size / shdr_mem.sh_entsize; ++i)
{
GElf_Sym sym_mem;
@@ -1754,8 +1754,8 @@ more sections in stripped file than debug file -- arguments reversed?"));
if (shndx != SHN_UNDEF && shndx < SHN_LORESERVE)
{
if (shndx >= stripped_shnum)
- error (EXIT_FAILURE, 0,
- _("symbol [%zu] has invalid section index"), i);
+ error_exit (0,
+ _("symbol [%zu] has invalid section index"), i);
shndx = ndx_section[shndx - 1];
if (shndx < SHN_LORESERVE)
@@ -1786,8 +1786,8 @@ more sections in stripped file than debug file -- arguments reversed?"));
Elf32_Word *shndx = (Elf32_Word *) outdata->d_buf;
for (size_t i = 1; i < shdr_mem.sh_size / sizeof (Elf32_Word); ++i)
if (shndx[i] == SHN_UNDEF || shndx[i] >= stripped_shnum)
- error (EXIT_FAILURE, 0,
- _("group has invalid section index [%zd]"), i);
+ error_exit (0,
+ _("group has invalid section index [%zd]"), i);
else
shndx[i] = ndx_section[shndx[i] - 1];
}
@@ -1813,8 +1813,8 @@ more sections in stripped file than debug file -- arguments reversed?"));
GElf_Shdr *shdr = gelf_getshdr (unstripped_symtab, &shdr_mem);
ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
if (shdr->sh_entsize == 0)
- error (EXIT_FAILURE, 0,
- "unstripped SYMTAB section cannot have zero sh_entsize");
+ error_exit (0,
+ "unstripped SYMTAB section cannot have zero sh_entsize");
const size_t unstripped_nsym = shdr->sh_size / shdr->sh_entsize;
/* First collect all the symbols from both tables. */
@@ -1934,7 +1934,7 @@ more sections in stripped file than debug file -- arguments reversed?"));
}
if (dwelf_strtab_finalize (symstrtab, symstrdata) == NULL)
- error (EXIT_FAILURE, 0, "Not enough memory to create symbol table");
+ error_exit (0, "Not enough memory to create symbol table");
elf_flagdata (symstrdata, ELF_C_SET, ELF_F_DIRTY);
@@ -2192,7 +2192,7 @@ DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"),
(stripped_ehdr->e_type == ET_REL
? DEFFILEMODE : ACCESSPERMS));
if (outfd < 0)
- error (EXIT_FAILURE, errno, _("cannot open '%s'"), output_file);
+ error_exit (errno, _("cannot open '%s'"), output_file);
Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL);
ELF_CHECK (outelf != NULL, _("cannot create ELF descriptor: %s"));
@@ -2221,7 +2221,7 @@ open_file (const char *file, bool writable)
{
int fd = open (file, writable ? O_RDWR : O_RDONLY);
if (fd < 0)
- error (EXIT_FAILURE, errno, _("cannot open '%s'"), file);
+ error_exit (errno, _("cannot open '%s'"), file);
return fd;
}
@@ -2304,13 +2304,13 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force,
const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
NULL, NULL, &file, NULL);
if (file == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot find stripped file for module '%s': %s"),
- modname, dwfl_errmsg (-1));
+ error_exit (0,
+ _("cannot find stripped file for module '%s': %s"),
+ modname, dwfl_errmsg (-1));
else
- error (EXIT_FAILURE, 0,
- _("cannot open stripped file '%s' for module '%s': %s"),
- modname, file, dwfl_errmsg (-1));
+ error_exit (0,
+ _("cannot open stripped file '%s' for module '%s': %s"),
+ modname, file, dwfl_errmsg (-1));
}
Elf *debug = dwarf_getelf (dwfl_module_getdwarf (mod, &bias));
@@ -2323,13 +2323,13 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force,
const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
NULL, NULL, NULL, &file);
if (file == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot find debug file for module '%s': %s"),
- modname, dwfl_errmsg (-1));
+ error_exit (0,
+ _("cannot find debug file for module '%s': %s"),
+ modname, dwfl_errmsg (-1));
else
- error (EXIT_FAILURE, 0,
- _("cannot open debug file '%s' for module '%s': %s"),
- modname, file, dwfl_errmsg (-1));
+ error_exit (0,
+ _("cannot open debug file '%s' for module '%s': %s"),
+ modname, file, dwfl_errmsg (-1));
}
if (debug == stripped)
@@ -2341,8 +2341,8 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force,
const char *file;
const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
NULL, NULL, &file, NULL);
- error (EXIT_FAILURE, 0, _("module '%s' file '%s' is not stripped"),
- modname, file);
+ error_exit (0, _("module '%s' file '%s' is not stripped"),
+ modname, file);
}
}
@@ -2371,10 +2371,10 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force,
get sh_addr values assigned have them, even ones not used in DWARF.
They might still be used in the symbol table. */
if (dwfl_module_relocations (mod) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot cache section addresses for module '%s': %s"),
- dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- dwfl_errmsg (-1));
+ error_exit (0,
+ _("cannot cache section addresses for module '%s': %s"),
+ dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+ dwfl_errmsg (-1));
}
handle_file (output_file, create_dirs, stripped, &stripped_ehdr, debug);
@@ -2399,9 +2399,7 @@ handle_output_dir_module (const char *output_dir, Dwfl_Module *mod, bool force,
if (file == NULL && ignore)
return;
- char *output_file;
- if (asprintf (&output_file, "%s/%s", output_dir, modnames ? name : file) < 0)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
+ char *output_file = xasprintf ("%s/%s", output_dir, modnames ? name : file);
handle_dwfl_module (output_file, true, force, mod, all, ignore, relocate);
@@ -2502,7 +2500,7 @@ handle_implicit_modules (const struct arg_info *info)
struct match_module_info mmi = { info->args, NULL, info->match_files };
ptrdiff_t offset = dwfl_getmodules (info->dwfl, &match_module, &mmi, 0);
if (offset == 0)
- error (EXIT_FAILURE, 0, _("no matching modules found"));
+ error_exit (0, _("no matching modules found"));
if (info->list)
do
@@ -2512,7 +2510,7 @@ handle_implicit_modules (const struct arg_info *info)
else if (info->output_dir == NULL)
{
if (dwfl_getmodules (info->dwfl, &match_module, &mmi, offset) != 0)
- error (EXIT_FAILURE, 0, _("matched more than one module"));
+ error_exit (0, _("matched more than one module"));
handle_dwfl_module (info->output_file, false, info->force, mmi.found,
info->all, info->ignore, info->relocate);
}
@@ -2604,9 +2602,7 @@ or - if no debuginfo was found, or . if FILE contains the debug information.\
if (info.output_dir != NULL)
{
- char *file;
- if (asprintf (&file, "%s/%s", info.output_dir, info.args[0]) < 0)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
+ char *file = xasprintf ("%s/%s", info.output_dir, info.args[0]);
handle_explicit_files (file, true, info.force,
info.args[0], info.args[1]);
free (file);
diff --git a/tests/.gitignore b/tests/.gitignore
index d0e83da2..99d04819 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -85,6 +85,7 @@
/next-files
/next-lines
/next_cfi
+/nvidia_extended_linemap_libdw
/peel_type
/rdwrmmap
/read_unaligned
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 38e92659..44b8df88 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,379 @@
+2022-04-24 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-webapi-concurrency.sh: Fix PR number in xfail.
+
+2022-04-23 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-webapi-concurrency.sh: Lower parallel lookups.
+
+2022-03-01 Di Chen <dichen@redhat.com>
+
+ * alldts.c (dtflags): Put DT_NULL last.
+ * run-alldts.sh: NULL comes last.
+ * run-readelf-d.sh: Adjust Dynamic entries, remove DT_NULL
+ padding.
+
+2022-04-14 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-federation-sqlite.sh: Don't try to corrupt
+ sqlite database.
+
+2022-04-13 Aaron Merey <amerey@redhat.com>
+
+ * Makefile.am (TESTS): Remove run-debuginfod-000-permission.sh
+ and add run-debuginfod-negative-cache.sh.
+ (EXTRA_DIST): Likewise.
+ * run-debuginfod-federation-link.sh: Update comments about
+ negative-hit file.
+ * run-debuginfod-federation-metrics.sh: Likewise.
+ * run-debuginfod-federation-sqlite.sh: Likewise.
+ * run-debuginfod-tmp-home.sh: Likewise.
+
+2022-03-20 Mark Wielaard <mark@klomp.org>
+
+ * run-large-elf-file.sh: Check elf class of addsections binary.
+
+2021-12-17 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-query-retry.sh: Use /bin/sh instead of /bin/ls.
+
+2021-12-09 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-subr.sh (xfail): New proc.
+ * run-debuginfod-webapi-concurrency.sh: New test for -C.
+ * Makefile.am: List it.
+
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (EXTRA_NLIST_CFLAGS): New variable depends on
+ USE_ADDRESS_SANITIZER.
+ (test_nlist_CFLAGS): Add EXTRA_NLIST_CFLAGS.
+
+2021-12-04 Mark Wielaard <mark@klomp.org>
+
+ * varlocs.c (dwarf_encoding_string): Return "<unknown encoding>" instead
+ of NULL.
+ (dwarf_tag_string): Return "<unknown tag>" instead of NULL.
+ (dwarf_attr_string): Return "<unknown attr>" instead of NULL.
+ (dwarf_form_string): Return "<unknown form>" instead of NULL.
+ (dwarf_opcode_string): Return "<unknown opcode>" instead of NULL.
+ (print_expr): Remove assert.
+
+2021-11-18 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (dwfl_proc_attach_LDFLAGS): Add -rdynamic.
+
+2021-11-11 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-000-permission.sh: Don't set DEBUGINFOD_TIMEOUT.
+ * run-debuginfod-archive-groom.sh: Likewise.
+ * run-debuginfod-archive-rename.sh: Likewise.
+ * run-debuginfod-archive-test.sh: Likewise.
+ * run-debuginfod-artifact-running.sh: Likewise.
+ * run-debuginfod-dlopen.sh: Likewise.
+ * run-debuginfod-extraction.sh: Likewise.
+ * run-debuginfod-federation-link.sh: Likewise.
+ * run-debuginfod-federation-metrics.sh: Likewise.
+ * run-debuginfod-federation-sqlite.sh: Likewise.
+ * run-debuginfod-malformed.sh: Likewise.
+ * run-debuginfod-tmp-home.sh: Likewise.
+ * run-debuginfod-writable.sh: Likewise.
+
+2021-11-05 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28430
+ * run-debuginfod-extraction-passive.sh: New test.
+ * Makefile.am (TESTS, EXTRA_DIST): Add it.
+
+2021-10-20 John M Mellor-Crummey <johnmc@rice.edu>
+
+ * nvidia_extended_linemap_libdw.c: New file.
+ * run-nvidia-extended-linemap-libdw.sh: New test.
+ * run-nvidia-extended-linemap-readelf.sh: Likewise.
+ * testfile_nvidia_linemap.bz2: New test file.
+ * .gitignore: Add nvidia_extended_linemap_libdw.
+ * Makefile.am (check_PROGRAMS): Add nvidia_extended_linemap_libdw.
+ (TESTS): Add run-nvidia-extended-linemap-libdw.sh and
+ run-nvidia-extended-linemap-readelf.sh
+ (EXTRA_DIST): Likewise and testfile_nvidia_linemap.bz2.
+ (nvidia_extended_linemap_libdw_LDADD): New variable.
+
+2021-11-08 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (TESTS): Add run-readelf-fat-lto.sh.
+ (EXTRA_DIST): Add run-readelf-fat-lto.sh and
+ testfile-dwarf5-fat-lto.o.bz2.
+ * run-readelf-fat-lto.sh: New test.
+ * testfile-dwarf5-fat-lto.o.bz2: New test file.
+
+2021-11-04 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28514
+ * run-debuginfod-archive-groom.sh: Look for new groom metric.
+
+2021-10-23 Frank Ch. Eigler <fche@redhat.com>
+
+ PR28240
+ * run-debuginfod-000-permission.sh, -writable.sh:
+ Correct negative-cache file permission checking.
+
+2021-10-06 Mark Wielaard <mark@klomp.org>
+
+ * show-die-info.c (handle): Handle dwarf_attr_string returning NULL.
+
+2021-10-06 Di Chen <dichen@redhat.com>
+
+ PR28242
+ * run-debuginfod-000-permission.sh: Expect artifacttype metrics.
+
+2021-09-17 Noah Sanci <nsanci@redhat.com>
+
+ * run-debuginfod-response-header.sh: removed checking for Connection
+ and Cache-Control in response headers.
+
+2021-09-08 Mark Wielaard <mark@klomp.org>
+
+ * run-varlocs-vars.sh: New test.
+ * testfile-vars-clang-dwarf4-32.o.bz2: New test file.
+ * testfile-vars-clang-dwarf4-64.o.bz2: Likewise.
+ * testfile-vars-clang-dwarf5-32.o.bz2: Likewise.
+ * testfile-vars-clang-dwarf5-64.o.bz2: Likewise.
+ * testfile-vars-gcc-dwarf4-32.o.bz2: Likewise.
+ * testfile-vars-gcc-dwarf4-64.o.bz2: Likewise.
+ * testfile-vars-gcc-dwarf5-32.o.bz2: Likewise.
+ * testfile-vars-gcc-dwarf5-64.o.bz2: Likewise.
+ * Makefile.am (EXTRA_DIST): Add new test and test files.
+ (TESTS): Add run-varlocs-vars.sh.
+
+2021-09-09 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-subr.sh: set -o functrace.
+ (cleanup): Disable trap 0.
+ (err): Disable trap ERR.
+ * run-debuginfod-fd-prefetch-caches.sh: Use || true when grep -c fails.
+
+2021-09-09 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-subr.sh: set -o errtrace.
+ (cleanup): Don't fail kill or wait. Only trap on normal exit.
+ (err): Don't fail curl metrics. Call cleanup.
+ * run-debuginfod-federation-link.sh: Use separate client caches
+ for both servers and debuginfod client. Remove duplicate valgrind
+ disabling.
+ * run-debuginfod-federation-metrics.sh: Likewise.
+ * run-debuginfod-federation-sqlite.sh: Likewise.
+
+2021-09-13 Noah Sanci <nsanci@redhat.com>
+
+ * Makefile.am: added run-debuginfod-percent-escape.sh to TESTS and
+ EXTRA_DIST.
+
+2021-09-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ * elfcopy.c (copy_elf): Remove cast of malloc return value.
+
+2021-09-07 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-archive-groom.sh: Wait for initial scan and groom
+ cycle before making any changes to the scan dirs.
+ * run-debuginfod-archive-rename.sh: Likewise.
+ * run-debuginfod-artifact-running.sh: Wait for initial scan cycle
+ before making any changes to the scan dirs.
+ * run-debuginfod-dlopen.sh: Likewise.
+ * run-debuginfod-extraction.sh: Likewise.
+ * run-debuginfod-federation-link.sh: Don't wait twice for the initial
+ scan.
+
+2021-09-06 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-archive-groom.sh: Wait for initial scan and groom
+ cycle.
+ * run-debuginfod-archive-rename.sh: Likewise.
+ * run-debuginfod-federation-sqlite.sh: Likewise.
+ * run-debuginfod-archive-test.sh: Wait for initial scan cycle.
+ * run-debuginfod-artifact-running.sh: Likewise.
+ * run-debuginfod-dlopen.sh: Likewise.
+ * run-debuginfod-extraction.sh: Likewise.
+ * run-debuginfod-federation-link.sh: Likewise.
+ * run-debuginfod-federation-metrics.sh: Likewise.
+ * run-debuginfod-malformed.sh: Likewise.
+ * run-debuginfod-regex.sh: Likewise.
+ * run-debuginfod-tmp-home.sh: Likewise.
+ * run-debuginfod-writable.sh: Likewise.
+
+2021-09-06 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-archive-groom.sh: Set DEBUGINFOD_URLS after starting
+ debuginfod server.
+ * run-debuginfod-archive-rename.sh: Likewise.
+ * run-debuginfod-federation-link.sh: Don't set DEBUGINFOD_URLS.
+ * run-debuginfod-federation-sqlite.sh: Likewise.
+ * run-debuginfod-federation-metrics.sh: Add comment why invalid
+ DEBUGINFOD_URLS is set.
+
+2021-09-06 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-subr.sh (err): Change ports to port in for loop so both
+ PORT1 and PORT2 are used.
+ (get_ports): Simplify port selection by using for 50 for PORT1 and
+ second 50 for PORT2.
+
+2021-09-06 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-file.sh: Set DEBUGINFOD_CACHE_PATH. Export
+ correct DEBUGINFOD_URLS.
+ * run-debuginfod-query-retry.sh: Add DEBUGINFOD_CACHE_PATH
+ to env.
+
+2021-09-03 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-000-permission.sh: Set DEBUGINFOD_CACHE_PATH
+ and use an unique sqlite db.
+ * run-debuginfod-archive-groom.sh: Likewise.
+ * run-debuginfod-archive-test.sh: Likewise.
+ * run-debuginfod-dlopen.sh: Likewise.
+ * run-debuginfod-duplicate-urls.sh: Likewise.
+ * run-debuginfod-extraction.sh: Likewise.
+ * run-debuginfod-fd-prefetch-caches.sh: Likewise.
+ * run-debuginfod-malformed.sh: Likewise.
+ * run-debuginfod-sizetime.sh: Likewise.
+ * run-debuginfod-tmp-home.sh: Likewise.
+ * run-debuginfod-writable.sh: Likewise.
+
+2021-09-03 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-subr.sh (EXTRA_DIST): Add debuginfod-subr.sh.
+
+2021-08-20 Noah Sanci <nsanci@redhat.com>
+
+ * run-debuginfod-response-headers.sh: Ensures custom http response
+ headers are used and functional
+ * Makefile.am: Added the above new file to TESTS and EXTRA_DIST
+
+2021-08-28 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-find.sh: Use ":memory:" for the
+ forwarded-ttl-limit tests.
+
+2021-08-28 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-find.sh: Use clean, separate databases for
+ forwarded-ttl-limit tests.
+
+2021-08-20 Di Chen <dichen@redhat.com>
+
+ * run-debuginfod-find.sh: Add test for X-Forwarded-For hops limit.
+
+2021-08-20 Noah Sanci <nsanci@redhat.com>
+
+ * debuginfod-find.sh: Separated file into
+ run-debuginfod-000-permission.sh,
+ run-debuginfod-archive-groom.sh,
+ run-debuginfod-archive-rename.sh,
+ run-debuginfod-archive-test.sh,
+ run-debuginfod-artifact-running.sh,
+ run-debuginfod-dlopen.sh,
+ run-debuginfod-duplicate-urls.sh,
+ run-debuginfod-extraction.sh,
+ run-debuginfod-fd-prefetch-caches.sh,
+ run-debuginfod-federation-link.sh,
+ run-debuginfod-federation-metrics.sh,
+ run-debuginfod-federation-sqlite.sh,
+ run-debuginfod-file.sh,
+ run-debuginfod-malformed.sh,
+ run-debuginfod-no-urls.sh,
+ run-debuginfod-query-retry.sh,
+ run-debuginfod-regex.sh,
+ run-debuginfod-sizetime.sh,
+ run-debuginfod-tmp-home.sh,
+ run-debuginfod-x-forwarded.sh
+ and run-debuginfod-writable.sh.
+ All files source debuginfod-subr.sh and use the $base variable to find ports.
+ * tests/Makefile.am: Added the above new files to the test suite
+ * tests/debuginfod-subr.sh: Added some general functions for above tests
+
+2021-08-04 Mark Wielaard <mark@klomp.org>
+
+ PR28190
+ * backtrace.c (callback_verify): Check for pthread_kill as first
+ frame. Change asserts to fprintf plus abort.
+
+2021-07-26 Noah Sanci <nsanci@redhat.com>
+
+ PR27982
+ * run-debuginfod-find.sh: Added a test to ensure that
+ DEBUGINFOD_MAXSIZE and DEBUGINFOD_MAXTIME work properly
+ by searching server and client logs for prompts.
+
+2021-07-16 Noah Sanci <nsanci@redhat.com>
+
+ PR28034
+ * run-debuginfod-percent-escape.sh: Added a test ensuring files with %
+ escapable characters in their paths are accessible.
+
+2021-07-21 Noah Sanci <nsanci@redhat.com>
+
+ * run-debuginfod-find.sh: Properly kill $PID4 by waiting for it to
+ finish. Report $PORT3's metrics in err().
+
+2021-06-28 Noah Sanci <nsanci@redhat.com>
+
+ PR25978
+ * run-debuginfod-find.sh: Test to ensure options
+ fdcache-prefetch-fds/mbs are set. Check that inc_metric works for lru
+ and prefetch cache metrics.
+
+2021-07-06 Alice Zhang <alizhang@redhat.com>
+
+ PR27531
+ * run-debuginfod-find.sh: Add test case for retry mechanism.
+
+2021-07-01 Noah Sanci <nsanci@redhat.com>
+
+ PR2711
+ * run-debuginfod-find.sh: Added test case for grooming the database
+ using regexes.
+
+2021-07-09 Noah Sanci <nsanci@redhat.com>
+
+ PR27983
+ * run-debuginfod-find.sh: Wrote test to ensure duplicate urls are in
+ fact not checked.
+
+2021-07-08 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (EXTRA_DIST): Fix typo testfile-largealign.bz2 was
+ was missing .o.
+
+2021-06-09 Andrei Homescu <ah@immunant.com>
+
+ * testfile-largealign.o.bz2: New test file.
+ * run-strip-largealign.sh: New test.
+ * Makefile.am (TESTS): Add run-strip-largealign.sh.
+ (EXTRA_DIST): Add run-strip-largealign.sh and
+ testfile-largealign.o.bz2
+
+2021-07-02 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfo-find.sh: unset VALGRIND_CMD before testing debuginfod
+ client cache.
+
+2021-06-16 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Fix intermittent groom/stale failure,
+ due to SIGUSR1/SIGUSR2 races. Trace more.
+
+2021-06-15 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh (err): Elaborate. Use as the reliable
+ error-report triggering function, rather than "exit 1".
+
+2021-06-03 Frank Ch. Eigler <fche@redhat.com>
+
+ PR27863
+ * run-debuginfod-find.sh: Test "after-you" queueing via flooding
+ with concurent curls.
+
2021-05-14 Frank Ch. Eigler <fche@redhat.com>
PR27859
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6f19007a..75fbe799 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -61,6 +61,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
dwelf_elf_e_machine_string \
getphdrnum leb128 read_unaligned \
msg_tst system-elf-libelf-test \
+ nvidia_extended_linemap_libdw \
$(asm_TESTS)
asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
@@ -86,7 +87,13 @@ endif
# test_nlist checks its own symbol table, and expects various symbols
# to be in the order as specified in the source file. Explicitly set
-# minimal CFLAGS
+# minimal CFLAGS. But add address sanitizer if in use.
+if USE_ADDRESS_SANITIZER
+EXTRA_NLIST_CFLAGS=-fsanitize=address
+else
+EXTRA_NLIST_CFLAGS=
+endif
+
test-nlist$(EXEEXT): test-nlist.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) \
@@ -138,11 +145,11 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
run-low_high_pc.sh run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \
run-test-archive64.sh run-readelf-vmcoreinfo.sh \
run-readelf-mixed-corenote.sh run-dwfllines.sh \
- run-readelf-variant.sh \
+ run-readelf-variant.sh run-readelf-fat-lto.sh \
run-dwfl-report-elf-align.sh run-addr2line-test.sh \
run-addr2line-i-test.sh run-addr2line-i-lex-test.sh \
run-addr2line-i-demangle-test.sh run-addr2line-alt-debugpath.sh \
- run-varlocs.sh run-exprlocs.sh run-funcretval.sh \
+ run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh run-funcretval.sh \
run-backtrace-native.sh run-backtrace-data.sh run-backtrace-dwarf.sh \
run-backtrace-native-biarch.sh run-backtrace-native-core.sh \
run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \
@@ -157,6 +164,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
run-backtrace-demangle.sh run-stack-d-test.sh run-stack-i-test.sh \
run-stack-demangled-test.sh run-readelf-zx.sh run-readelf-zp.sh \
run-readelf-addr.sh run-readelf-str.sh \
+ run-readelf-multi-noline.sh \
run-readelf-types.sh \
run-readelf-dwz-multi.sh run-allfcts-multi.sh run-deleted.sh \
run-linkmap-cut.sh run-aggregate-size.sh run-peel-type.sh \
@@ -186,7 +194,8 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
leb128 read_unaligned \
msg_tst system-elf-libelf-test \
$(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \
- run-readelf-dw-form-indirect.sh
+ run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
+ run-readelf-dw-form-indirect.sh run-strip-largealign.sh
if !BIARCH
export ELFUTILS_DISABLE_BIARCH = 1
@@ -208,7 +217,31 @@ if DEBUGINFOD
check_PROGRAMS += debuginfod_build_id_find
# With the dummy delegation doesn't work
if !DUMMY_LIBDEBUGINFOD
-TESTS += run-debuginfod-find.sh
+TESTS += run-debuginfod-dlopen.sh \
+ run-debuginfod-artifact-running.sh \
+ run-debuginfod-fd-prefetch-caches.sh \
+ run-debuginfod-regex.sh \
+ run-debuginfod-duplicate-urls.sh \
+ run-debuginfod-file.sh \
+ run-debuginfod-sizetime.sh \
+ run-debuginfod-malformed.sh \
+ run-debuginfod-negative-cache.sh \
+ run-debuginfod-tmp-home.sh \
+ run-debuginfod-writable.sh \
+ run-debuginfod-no-urls.sh \
+ run-debuginfod-query-retry.sh \
+ run-debuginfod-extraction.sh \
+ run-debuginfod-archive-groom.sh \
+ run-debuginfod-archive-rename.sh \
+ run-debuginfod-archive-test.sh \
+ run-debuginfod-federation-sqlite.sh \
+ run-debuginfod-federation-link.sh \
+ run-debuginfod-federation-metrics.sh \
+ run-debuginfod-percent-escape.sh \
+ run-debuginfod-x-forwarded-for.sh \
+ run-debuginfod-response-headers.sh \
+ run-debuginfod-extraction-passive.sh \
+ run-debuginfod-webapi-concurrency.sh
endif
endif
@@ -277,7 +310,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfile21.bz2 testfile21.index.bz2 \
testfile22.bz2 testfile23.bz2 testfile24.bz2 testfile25.bz2 \
testfile26.bz2 testfile27.bz2 \
- coverage.sh test-subr.sh test-wrapper.sh \
+ coverage.sh test-subr.sh test-wrapper.sh debuginfod-subr.sh \
run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \
run-readelf-test4.sh run-readelf-twofiles.sh \
run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \
@@ -309,6 +342,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfile_multi.dwz.bz2 testfile_multi_main.bz2 \
testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \
run-readelf-addr.sh run-readelf-str.sh \
+ run-readelf-multi-noline.sh testfile_multi_noline.bz2 \
run-readelf-types.sh \
run-readelf-frames.sh \
run-readelf-n.sh \
@@ -353,6 +387,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfilebazminppc64.bz2 testfilebazminppc64_pl.bz2 \
testfilebazminppc64_plr.bz2 testfilebaztabppc64.bz2 \
run-readelf-variant.sh testfile-ada-variant.bz2 \
+ run-readelf-fat-lto.sh testfile-dwarf5-fat-lto.o.bz2 \
run-dwflsyms.sh \
run-unstrip-n.sh testcore-rtlib.bz2 testcore-rtlib-ppc.bz2 \
run-low_high_pc.sh testfile_low_high_pc.bz2 \
@@ -375,7 +410,16 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfileppc32.bz2 testfileppc64.bz2 \
testfiles390.bz2 testfiles390x.bz2 \
testfilearm.bz2 testfileaarch64.bz2 \
- run-varlocs.sh run-exprlocs.sh testfile-stridex.bz2 \
+ run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh \
+ testfile-vars-clang-dwarf4-32.o.bz2 \
+ testfile-vars-clang-dwarf4-64.o.bz2 \
+ testfile-vars-clang-dwarf5-32.o.bz2 \
+ testfile-vars-clang-dwarf5-64.o.bz2 \
+ testfile-vars-gcc-dwarf4-32.o.bz2 \
+ testfile-vars-gcc-dwarf4-64.o.bz2 \
+ testfile-vars-gcc-dwarf5-32.o.bz2 \
+ testfile-vars-gcc-dwarf5-64.o.bz2 \
+ testfile-stridex.bz2 \
testfile_const_type.c testfile_const_type.bz2 \
testfile_implicit_pointer.c testfile_implicit_pointer.bz2 \
testfile_parameter_ref.c testfile_parameter_ref.bz2 \
@@ -470,7 +514,31 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
run-elfclassify.sh run-elfclassify-self.sh \
run-disasm-riscv64.sh \
testfile-riscv64-dis1.o.bz2 testfile-riscv64-dis1.expect.bz2 \
- run-debuginfod-find.sh \
+ run-debuginfod-extraction.sh \
+ run-debuginfod-federation-link.sh \
+ run-debuginfod-federation-metrics.sh \
+ run-debuginfod-artifact-running.sh \
+ run-debuginfod-federation-sqlite.sh \
+ run-debuginfod-x-forwarded-for.sh \
+ run-debuginfod-fd-prefetch-caches.sh \
+ run-debuginfod-regex.sh \
+ run-debuginfod-duplicate-urls.sh \
+ run-debuginfod-file.sh \
+ run-debuginfod-sizetime.sh \
+ run-debuginfod-dlopen.sh \
+ run-debuginfod-malformed.sh \
+ run-debuginfod-negative-cache.sh \
+ run-debuginfod-tmp-home.sh \
+ run-debuginfod-writable.sh \
+ run-debuginfod-no-urls.sh \
+ run-debuginfod-query-retry.sh \
+ run-debuginfod-archive-groom.sh \
+ run-debuginfod-archive-rename.sh \
+ run-debuginfod-archive-test.sh \
+ run-debuginfod-percent-escape.sh \
+ run-debuginfod-response-headers.sh \
+ run-debuginfod-extraction-passive.sh \
+ run-debuginfod-webapi-concurrency.sh \
debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \
debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \
debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \
@@ -507,7 +575,10 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \
run-getphdrnum.sh testfile-phdrs.elf.bz2 \
run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \
- run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2
+ run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \
+ run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
+ testfile_nvidia_linemap.bz2 \
+ testfile-largealign.o.bz2 run-strip-largealign.sh
if USE_VALGRIND
@@ -570,7 +641,7 @@ scnnames_LDADD = $(libelf)
sectiondump_LDADD = $(libelf)
showptable_LDADD = $(libelf)
hash_LDADD = $(libelf)
-test_nlist_CFLAGS =-g -O0
+test_nlist_CFLAGS =-g -O0 $(EXTRA_NLIST_CFLAGS)
test_nlist_LDADD = $(libelf)
msg_tst_LDADD = $(libelf)
newscn_LDADD = $(libelf)
@@ -653,7 +724,7 @@ strptr_LDADD = $(libelf)
newdata_LDADD = $(libelf)
elfstrtab_LDADD = $(libelf)
dwfl_proc_attach_LDADD = $(libdw)
-dwfl_proc_attach_LDFLAGS = -pthread $(AM_LDFLAGS)
+dwfl_proc_attach_LDFLAGS = -pthread -rdynamic $(AM_LDFLAGS)
elfshphehdr_LDADD =$(libelf)
elfstrmerge_LDADD = $(libdw) $(libelf)
dwelfgnucompressed_LDADD = $(libelf) $(libdw)
@@ -681,6 +752,7 @@ dwelf_elf_e_machine_string_LDADD = $(libelf) $(libdw)
getphdrnum_LDADD = $(libelf) $(libdw)
leb128_LDADD = $(libelf) $(libdw)
read_unaligned_LDADD = $(libelf) $(libdw)
+nvidia_extended_linemap_libdw_LDADD = $(libelf) $(libdw)
# We want to test the libelf header against the system elf.h header.
# Don't include any -I CPPFLAGS. Except when we install our own elf.h.
diff --git a/tests/alldts.c b/tests/alldts.c
index 3e9f9fe6..d0fe4f24 100644
--- a/tests/alldts.c
+++ b/tests/alldts.c
@@ -44,7 +44,7 @@ main (void)
Dwelf_Strent *shstrtabse;
const Elf32_Sword dtflags[] =
{
- DT_NULL, DT_NEEDED, DT_PLTRELSZ, DT_PLTGOT,
+ DT_NEEDED, DT_PLTRELSZ, DT_PLTGOT,
DT_HASH, DT_STRTAB, DT_SYMTAB, DT_RELA,
DT_RELASZ, DT_RELAENT, DT_STRSZ, DT_SYMENT,
DT_INIT, DT_FINI, DT_SONAME, DT_RPATH,
@@ -61,7 +61,8 @@ main (void)
DT_GNU_LIBLIST, DT_CONFIG, DT_DEPAUDIT, DT_AUDIT,
DT_PLTPAD, DT_MOVETAB, DT_SYMINFO, DT_RELACOUNT,
DT_RELCOUNT, DT_FLAGS_1, DT_VERDEF, DT_VERDEFNUM,
- DT_VERNEED, DT_VERNEEDNUM, DT_AUXILIARY, DT_FILTER
+ DT_VERNEED, DT_VERNEEDNUM, DT_AUXILIARY, DT_FILTER,
+ DT_NULL
};
const int ndtflags = sizeof (dtflags) / sizeof (dtflags[0]);
diff --git a/tests/backtrace.c b/tests/backtrace.c
index 36c8b8c4..afc12fb9 100644
--- a/tests/backtrace.c
+++ b/tests/backtrace.c
@@ -97,6 +97,9 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc,
static bool reduce_frameno = false;
if (reduce_frameno)
frameno--;
+ static bool pthread_kill_seen = false;
+ if (pthread_kill_seen)
+ frameno--;
if (! use_raise_jmp_patching && frameno >= 2)
frameno += 2;
const char *symname2 = NULL;
@@ -107,11 +110,26 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc,
&& (strcmp (symname, "__kernel_vsyscall") == 0
|| strcmp (symname, "__libc_do_syscall") == 0))
reduce_frameno = true;
+ else if (! pthread_kill_seen && symname
+ && strstr (symname, "pthread_kill") != NULL)
+ pthread_kill_seen = true;
else
- assert (symname && strcmp (symname, "raise") == 0);
+ {
+ if (!symname || strcmp (symname, "raise") != 0)
+ {
+ fprintf (stderr,
+ "case 0: expected symname 'raise' got '%s'\n", symname);
+ abort ();
+ }
+ }
break;
case 1:
- assert (symname != NULL && strcmp (symname, "sigusr2") == 0);
+ if (symname == NULL || strcmp (symname, "sigusr2") != 0)
+ {
+ fprintf (stderr,
+ "case 1: expected symname 'sigusr2' got '%s'\n", symname);
+ abort ();
+ }
break;
case 2: // x86_64 only
/* __restore_rt - glibc maybe does not have to have this symbol. */
@@ -120,11 +138,21 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc,
if (use_raise_jmp_patching)
{
/* Verify we trapped on the very first instruction of jmp. */
- assert (symname != NULL && strcmp (symname, "jmp") == 0);
+ if (symname == NULL || strcmp (symname, "jmp") != 0)
+ {
+ fprintf (stderr,
+ "case 3: expected symname 'raise' got '%s'\n", symname);
+ abort ();
+ }
mod = dwfl_addrmodule (dwfl, pc - 1);
if (mod)
symname2 = dwfl_module_addrname (mod, pc - 1);
- assert (symname2 == NULL || strcmp (symname2, "jmp") != 0);
+ if (symname2 == NULL || strcmp (symname2, "jmp") != 0)
+ {
+ fprintf (stderr,
+ "case 3: expected symname2 'jmp' got '%s'\n", symname2);
+ abort ();
+ }
break;
}
FALLTHROUGH;
@@ -137,11 +165,22 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc,
duplicate_sigusr2 = true;
break;
}
- assert (symname != NULL && strcmp (symname, "stdarg") == 0);
+ if (symname == NULL || strcmp (symname, "stdarg") != 0)
+ {
+ fprintf (stderr,
+ "case 4: expected symname 'stdarg' got '%s'\n", symname);
+ abort ();
+ }
break;
case 5:
/* Verify we trapped on the very last instruction of child. */
- assert (symname != NULL && strcmp (symname, "backtracegen") == 0);
+ if (symname == NULL || strcmp (symname, "backtracegen") != 0)
+ {
+ fprintf (stderr,
+ "case 5: expected symname 'backtracegen' got '%s'\n",
+ symname);
+ abort ();
+ }
mod = dwfl_addrmodule (dwfl, pc);
if (mod)
symname2 = dwfl_module_addrname (mod, pc);
@@ -151,7 +190,15 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc,
// instructions or even inserts some padding instructions at the end
// (which apparently happens on ppc64).
if (use_raise_jmp_patching)
- assert (symname2 == NULL || strcmp (symname2, "backtracegen") != 0);
+ {
+ if (symname2 != NULL && strcmp (symname2, "backtracegen") == 0)
+ {
+ fprintf (stderr,
+ "use_raise_jmp_patching didn't expect symname2 "
+ "'backtracegen'\n");
+ abort ();
+ }
+ }
break;
}
}
diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh
new file mode 100755
index 00000000..0b59b5b8
--- /dev/null
+++ b/tests/debuginfod-subr.sh
@@ -0,0 +1,170 @@
+# Copyright (C) 2021 Red Hat, Inc.
+# 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/>.
+
+# sourced from run-debuginfod-*.sh tests (must be bash scripts)
+
+# We trap ERR and like commands that fail in function to also trap
+set -o functrace
+set -o errtrace
+
+. $srcdir/test-subr.sh # includes set -e
+
+type curl 2>/dev/null || (echo "need curl"; exit 77)
+type rpm2cpio 2>/dev/null || (echo "need rpm2cpio"; exit 77)
+type cpio 2>/dev/null || (echo "need cpio"; exit 77)
+type bzcat 2>/dev/null || (echo "need bzcat"; exit 77)
+bsdtar --version | grep -q zstd && zstd=true || zstd=false
+echo "zstd=$zstd bsdtar=`bsdtar --version`"
+
+cleanup()
+{
+ # No more cleanups after this cleanup
+ trap - 0
+
+ if [ $PID1 -ne 0 ]; then kill $PID1 || : ; wait $PID1 || :; fi
+ if [ $PID2 -ne 0 ]; then kill $PID2 || : ; wait $PID2 || :; fi
+ rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp*
+ exit_cleanup
+}
+
+# clean up trash if we exit
+trap cleanup 0
+
+errfiles_list=
+err() {
+ # Don't trap any new errors from now on
+ trap - ERR
+
+ echo ERROR REPORTS
+ for port in $PORT1 $PORT2
+ do
+ echo ERROR REPORT $port metrics
+ curl -s http://127.0.0.1:$port/metrics || :
+ echo
+ done
+ for x in $errfiles_list
+ do
+ echo ERROR REPORT "$x"
+ cat $x
+ echo
+ done
+ cleanup
+ false # trigger set -e
+}
+trap err ERR
+
+errfiles() {
+ errfiles_list="$errfiles_list $*"
+}
+
+# We want to run debuginfod in the background. We also want to start
+# it with the same check/installcheck-sensitive LD_LIBRARY_PATH stuff
+# that the testrun alias sets. But: we if we just use
+# testrun .../debuginfod
+# it runs in a subshell, with different pid, so not helpful.
+#
+# So we gather the LD_LIBRARY_PATH with this cunning trick:
+ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'`
+
+wait_ready()
+{
+ port=$1;
+ what=$2;
+ value=$3;
+ timeout=20;
+
+ echo "Wait $timeout seconds on $port for metric $what to change to $value"
+ while [ $timeout -gt 0 ]; do
+ mvalue="$(curl -s http://127.0.0.1:$port/metrics \
+ | grep "$what" | awk '{print $NF}')"
+ if [ -z "$mvalue" ]; then mvalue=0; fi
+ echo "metric $what: $mvalue"
+ if [ "$mvalue" -eq "$value" ]; then
+ break;
+ fi
+ sleep 0.5;
+ ((timeout--));
+ done;
+
+ if [ $timeout -eq 0 ]; then
+ echo "metric $what never changed to $value on port $port"
+ err
+ fi
+}
+
+archive_test() {
+ __BUILDID=$1
+ __SOURCEPATH=$2
+ __SOURCESHA1=$3
+
+ filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID`
+ buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a $filename | grep 'Build ID' | cut -d ' ' -f 7`
+ test $__BUILDID = $buildid
+ # check that timestamps are plausible - older than the near-present (tmpdir mtime)
+ test $filename -ot `pwd`
+
+ # run again to assure that fdcache is being enjoyed
+ filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID`
+ buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a $filename | grep 'Build ID' | cut -d ' ' -f 7`
+ test $__BUILDID = $buildid
+ test $filename -ot `pwd`
+
+ filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $__BUILDID`
+ buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a $filename | grep 'Build ID' | cut -d ' ' -f 7`
+ test $__BUILDID = $buildid
+ test $filename -ot `pwd`
+
+ if test "x$__SOURCEPATH" != "x"; then
+ filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH`
+ hash=`cat $filename | sha1sum | awk '{print $1}'`
+ test $__SOURCESHA1 = $hash
+ test $filename -ot `pwd`
+ fi
+}
+
+get_ports() {
+ while true; do
+ PORT1=`expr '(' $RANDOM % 50 ')' + $base`
+ ss -atn | fgrep ":$PORT1" || break
+ done
+# Some tests will use two servers, so assign the second var
+ while true; do
+ PORT2=`expr '(' $RANDOM % 50 ')' + $base + 50`
+ ss -atn | fgrep ":$PORT2" || break
+ done
+
+}
+
+VERBOSE=-vvv
+# We gather the LD_LIBRARY_PATH with this cunning trick:
+ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'`
+PORT1=0
+PORT2=0
+PID1=0
+PID2=0
+
+
+# run $1 as a sh -c command, invert result code
+xfail() {
+ if sh -c "$1"; then
+ false
+ else
+ true
+ fi
+}
diff --git a/tests/elfcopy.c b/tests/elfcopy.c
index 4542222e..10b2d362 100644
--- a/tests/elfcopy.c
+++ b/tests/elfcopy.c
@@ -194,7 +194,7 @@ copy_elf (const char *in, const char *out, bool use_mmap, bool reverse_offs)
exit (1);
}
- offs = (GElf_Off *) malloc (shnum * sizeof (GElf_Off));
+ offs = malloc (shnum * sizeof (GElf_Off));
if (offs == NULL)
{
printf ("couldn't allocate memory for offs\n");
diff --git a/tests/nvidia_extended_linemap_libdw.c b/tests/nvidia_extended_linemap_libdw.c
new file mode 100644
index 00000000..20d8d404
--- /dev/null
+++ b/tests/nvidia_extended_linemap_libdw.c
@@ -0,0 +1,166 @@
+/* Inspect nvidia extended linemap with dwarf_next_lines.
+ Copyright (C) 2002, 2004, 2018 Red Hat, Inc.
+ 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 <fcntl.h>
+#include <inttypes.h>
+#include <libelf.h>
+#include ELFUTILS_HEADER(dw)
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+
+int
+main (int argc, char *argv[])
+{
+ int result = 0;
+ int cnt;
+
+ for (cnt = 1; cnt < argc; ++cnt)
+ {
+ int fd = open (argv[cnt], O_RDONLY);
+
+ Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
+ if (dbg == NULL)
+ {
+ printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1));
+ close (fd);
+ continue;
+ }
+
+ Dwarf_Off off;
+ Dwarf_Off next_off = 0;
+ Dwarf_CU *cu = NULL;
+ Dwarf_Lines *lb;
+ size_t nlb;
+ int res;
+ while ((res = dwarf_next_lines (dbg, off = next_off, &next_off, &cu,
+ NULL, NULL, &lb, &nlb)) == 0)
+ {
+ printf ("off = %" PRIu64 "\n", off);
+ printf (" %zu lines\n", nlb);
+
+ for (size_t i = 0; i < nlb; ++i)
+ {
+ Dwarf_Line *l = dwarf_onesrcline (lb, i);
+ if (l == NULL)
+ {
+ printf ("%s: cannot get individual line\n", argv[cnt]);
+ result = 1;
+ break;
+ }
+
+ Dwarf_Addr addr;
+ if (dwarf_lineaddr (l, &addr) != 0)
+ addr = 0;
+ const char *file = dwarf_linesrc (l, NULL, NULL);
+ int line;
+ if (dwarf_lineno (l, &line) != 0)
+ line = 0;
+
+ printf ("%" PRIx64 ": %s:%d:", (uint64_t) addr,
+ file ?: "???", line);
+
+ /* Getting the file path through the Dwarf_Files should
+ result in the same path. */
+ Dwarf_Files *files;
+ size_t idx;
+ if (dwarf_line_file (l, &files, &idx) != 0)
+ {
+ printf ("%s: cannot get file from line (%zd): %s\n",
+ argv[cnt], i, dwarf_errmsg (-1));
+ result = 1;
+ break;
+ }
+ const char *path = dwarf_filesrc (files, idx, NULL, NULL);
+ if ((path == NULL && file != NULL)
+ || (path != NULL && file == NULL)
+ || (strcmp (file, path) != 0))
+ {
+ printf ("%s: line %zd srcline (%s) != file srcline (%s)\n",
+ argv[cnt], i, file ?: "???", path ?: "???");
+ result = 1;
+ break;
+ }
+
+ int column;
+ if (dwarf_linecol (l, &column) != 0)
+ column = 0;
+ if (column >= 0)
+ printf ("%d:", column);
+
+ bool is_stmt;
+ if (dwarf_linebeginstatement (l, &is_stmt) != 0)
+ is_stmt = false;
+ bool end_sequence;
+ if (dwarf_lineendsequence (l, &end_sequence) != 0)
+ end_sequence = false;
+ bool basic_block;
+ if (dwarf_lineblock (l, &basic_block) != 0)
+ basic_block = false;
+ bool prologue_end;
+ if (dwarf_lineprologueend (l, &prologue_end) != 0)
+ prologue_end = false;
+ bool epilogue_begin;
+ if (dwarf_lineepiloguebegin (l, &epilogue_begin) != 0)
+ epilogue_begin = false;
+ printf (" is_stmt:%s, end_seq:%s, bb:%s, prologue:%s, epilogue:%s\n",
+ is_stmt ? "yes" : "no", end_sequence ? "yes" : "no",
+ basic_block ? "yes" : "no", prologue_end ? "yes" : "no",
+ epilogue_begin ? "yes" : "no");
+
+ Dwarf_Line* callee_context = l;
+ Dwarf_Line* caller_context = dwarf_linecontext (lb, l);
+ unsigned int depth = 0;
+ while (caller_context != NULL)
+ {
+ depth++;
+ for (unsigned int x = 0; x < depth; x++)
+ printf (" ");
+
+ const char *inlined_file = dwarf_linesrc (caller_context,
+ NULL, NULL);
+ int inlined_line;
+ if (dwarf_lineno (caller_context, &inlined_line) != 0)
+ inlined_line = 0;
+
+ printf ("%s inlined at %s:%d\n",
+ dwarf_linefunctionname(dbg, callee_context),
+ inlined_file ?: "???", inlined_line);
+
+ callee_context = caller_context;
+ caller_context = dwarf_linecontext (lb, callee_context);
+ }
+ }
+ }
+
+ if (res < 0)
+ {
+ printf ("dwarf_next_lines failed: %s\n", dwarf_errmsg (-1));
+ result = 1;
+ }
+
+ dwarf_end (dbg);
+ close (fd);
+ }
+
+ return result;
+}
diff --git a/tests/run-alldts.sh b/tests/run-alldts.sh
index 6a9a9ece..ce3630b0 100755
--- a/tests/run-alldts.sh
+++ b/tests/run-alldts.sh
@@ -27,7 +27,6 @@ testrun_compare ${abs_top_builddir}/src/readelf -d testfile-alldts <<\EOF
Dynamic segment contains 66 entries:
Addr: 0x000001a0 Offset: 0x000078 Link to section: [ 0] ''
Type Value
- NULL
NEEDED Shared library: [(null)]
PLTRELSZ 3735928559 (bytes)
PLTGOT 0xdeadbeef
@@ -93,6 +92,7 @@ Dynamic segment contains 66 entries:
VERNEEDNUM 3735928559
AUXILIARY 0xdeadbeef
FILTER 0xdeadbeef
+ NULL
EOF
exit 0
diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh
new file mode 100755
index 00000000..e2c394ef
--- /dev/null
+++ b/tests/run-debuginfod-archive-groom.sh
@@ -0,0 +1,166 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8100
+get_ports
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+# Clean old dirictories
+mkdir R ${PWD}/F
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \
+ -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# Be patient when run on a busy machine things might take a bit.
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# wait till the initial scan is done before triggering a new one
+# and before dropping new file into the scan dirs
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+# Same for the initial groom cycle, we don't want it to be done
+# half way initializing the file setup
+wait_ready $PORT1 'thread_work_total{role="groom"}' 1
+
+# Build a non-stripped binary
+echo "int main() { return 0; }" > ${PWD}/F/prog.c
+gcc -Wl,--build-id -g -o ${PWD}/F/prog ${PWD}/F/prog.c
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a ${PWD}/F/prog | grep 'Build ID' | cut -d ' ' -f 7`
+tempfiles ${PWD}/F/prog ${PWD}/F/prog.c
+
+cp -rvp ${abs_srcdir}/debuginfod-rpms R
+if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
+ rm -vrf R/debuginfod-rpms/fedora31
+fi
+
+kill -USR1 $PID1
+# Now there should be 1 files in the index
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+cp -rvp ${abs_srcdir}/debuginfod-rpms R
+if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
+ rm -vrf R/debuginfod-rpms/fedora31
+fi
+
+tempfiles vlog3
+cp -rvp ${abs_srcdir}/debuginfod-tars Z
+kill -USR1 $PID1
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 3
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+########################################################################
+# All rpms need to be in the index, except the dummy permission-000 one
+rpms=$(find R -name \*rpm | grep -v nothing | wc -l)
+wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms
+txz=$(find Z -name \*tar.xz | wc -l)
+
+kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 4
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+# Expect all source files found in the rpms (they are all called hello.c :)
+# We will need to extract all rpms (in their own directory) and could all
+# sources referenced in the .debug files.
+mkdir extracted
+cd extracted
+subdir=0;
+newrpms=$(find ../R -name \*\.rpm | grep -v nothing)
+for i in $newrpms; do
+ subdir=$[$subdir+1];
+ mkdir $subdir;
+ cd $subdir;
+ ls -lah ../$i
+ rpm2cpio ../$i | cpio -ivd;
+ cd ..;
+done
+sourcefiles=$(find -name \*\\.debug \
+ | env LD_LIBRARY_PATH=$ldpath xargs \
+ ${abs_top_builddir}/src/readelf --debug-dump=decodedline \
+ | grep mtime: | wc --lines)
+cd ..
+rm -rf extracted
+
+wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles
+
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
+
+# common source file sha1
+SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1
+# fedora31
+if [ $zstd = true ]; then
+ # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it
+ # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite
+ archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA
+ archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA
+fi
+# fedora30
+archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
+archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
+# rhel7
+archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
+# rhel6
+archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA
+RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir
+
+# Drop some of the artifacts, run a groom cycle; confirm that
+# debuginfod has forgotten them, but remembers others
+rm -r R/debuginfod-rpms/rhel6/*
+
+kill -USR2 $PID1 # groom cycle
+## 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2
+wait_ready $PORT1 'thread_work_total{role="groom"}' 2
+# Expect 4 rpms containing 2 buildids to be deleted by the groom
+wait_ready $PORT1 'groomed_total{decision="stale"}' 4
+# Expect no more groom actions pending
+wait_ready $PORT1 'thread_work_pending{role="groom"}' 0
+
+rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
+
+# this is one of the buildids from the groom-deleted rpms
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true
+
+# but this one was not deleted so should be still around
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID || true
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh
new file mode 100755
index 00000000..a1a6cc1e
--- /dev/null
+++ b/tests/run-debuginfod-archive-rename.sh
@@ -0,0 +1,103 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8200
+get_ports
+DB=${PWD}/.debuginfod_tmp.sqlite
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+tempfiles $DEBUGINFOD_CACHE_PATH $DB
+# Clean old dirictories
+mkdir R ${PWD}/F
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \
+ -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 &
+
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# wait till the initial scan is done before triggering a new one
+# and before dropping new file into the scan dirs
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+# Same for the initial groom cycle, we don't want it to be done
+# half way initializing the file setup
+wait_ready $PORT1 'thread_work_total{role="groom"}' 1
+
+cp -rvp ${abs_srcdir}/debuginfod-rpms R
+if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
+ rm -vrf R/debuginfod-rpms/fedora31
+fi
+
+kill -USR1 $PID1
+# Now there should be 1 files in the index
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+# common source file sha1
+SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1
+
+########################################################################
+## PR26810: Now rename some files in the R directory, then rescan, so
+# there are two copies of the same buildid in the index, one for the
+# no-longer-existing file name, and one under the new name.
+
+# run a groom cycle to force server to drop its fdcache
+kill -USR2 $PID1 # groom cycle
+wait_ready $PORT1 'thread_work_total{role="groom"}' 2
+# move it around a couple of times to make it likely to hit a nonexistent entry during iteration
+mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed
+kill -USR1 $PID1 # scan cycle
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 3
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2
+kill -USR1 $PID1 # scan cycle
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 4
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3
+kill -USR1 $PID1 # scan cycle
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 5
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
+
+# retest rhel7
+archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
+
+egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0;
diff --git a/tests/run-debuginfod-archive-test.sh b/tests/run-debuginfod-archive-test.sh
new file mode 100755
index 00000000..5f24ea71
--- /dev/null
+++ b/tests/run-debuginfod-archive-test.sh
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+# find an unused port number
+mkdir R
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8300
+get_ports
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -R -p $PORT1 -d $DB -t0 -g0 -v R > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# And make sure first scan is done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+# Be patient when run on a busy machine things might take a bit.
+export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+cp -rvp ${abs_srcdir}/debuginfod-rpms R
+if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
+ rm -vrf R/debuginfod-rpms/fedora31
+fi
+
+kill -USR1 $PID1
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+# common source file sha1
+SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1
+# fedora31
+if [ $zstd = true ]; then
+ # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it
+ # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite
+ archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA
+ archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA
+fi
+# fedora30
+archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
+archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
+# rhel7
+archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
+# rhel6
+archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA
+# arch
+#archive_test cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c 7a1334e086b97e5f124003a6cfb3ed792d10cdf4
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh
new file mode 100755
index 00000000..8b9aed37
--- /dev/null
+++ b/tests/run-debuginfod-artifact-running.sh
@@ -0,0 +1,119 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8400
+get_ports
+mkdir F
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+echo 'int main(int argc, char * argv){ return 0; }' > ${PWD}/prog.c
+gcc -Wl,--build-id -g -o prog ${PWD}/prog.c
+testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+tempfiles prog prog.debug prog.c
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -F -p $PORT1 -t0 -g0 -v F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# And the initial scan should have been done before moving
+# files under the scan dirs.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+mv prog F
+mv prog.debug F
+tempfiles prog/F
+
+kill -USR1 $PID1
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# Add artifacts to the search paths and test whether debuginfod finds them while already running.
+# Build another, non-stripped binary
+echo "int main() { return 0; }" > ${PWD}/prog2.c
+tempfiles prog2.c
+gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c
+#testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog2 | grep 'Build ID' | cut -d ' ' -f 7`
+mv prog2 F
+#mv prog2.debug F
+tempfiles F/prog2 F/prog2.debug
+
+kill -USR1 $PID1
+# Now there should be 3 files in the index
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 3
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+########################################################################
+
+# Test whether debuginfod-find is able to fetch those files.
+rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID`
+cmp $filename F/prog.debug
+
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog`
+cmp $filename F/prog
+
+# raw source filename
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../prog.c`
+cmp $filename ${PWD}/prog.c
+
+# and also the canonicalized one
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/prog.c`
+cmp $filename ${PWD}/prog.c
+
+# Rerun same tests for the prog2 binary
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog`
+cmp $filename F/prog2
+grep -q Progress vlog
+grep -q Downloaded.from vlog
+tempfiles vlog
+filename=`testrun env DEBUGINFOD_PROGRESS=1 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 2>vlog2`
+cmp $filename F/prog2
+grep -q 'Downloading.*http' vlog2
+tempfiles vlog2
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c`
+cmp $filename ${PWD}/prog2.c
+
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh
new file mode 100755
index 00000000..7279b02e
--- /dev/null
+++ b/tests/run-debuginfod-dlopen.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+mkdir F
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8500
+get_ports
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R $VERBOSE -p $PORT1 -d $DB \
+ -t0 -g0 -v F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a'
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# Make sure the initial scan has finished.
+# Before moving files under the scan dirs.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+# We use -t0 and -g0 here to turn off time-based scanning & grooming.
+# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process.
+
+########################################################################
+
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c
+tempfiles p+r%o\$g.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c
+testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv p+r%o\$g F
+mv p+r%o\$g.debug F
+
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+########################################################################
+
+# Test whether elfutils, via the debuginfod client library dlopen hooks,
+# is able to fetch debuginfo from the local debuginfod.
+testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1
+
+kill $PID1
+wait $PID1
+PID1=0
+
+exit 0
diff --git a/tests/run-debuginfod-duplicate-urls.sh b/tests/run-debuginfod-duplicate-urls.sh
new file mode 100755
index 00000000..50e39cb2
--- /dev/null
+++ b/tests/run-debuginfod-duplicate-urls.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8600
+get_ports
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \
+ $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+wait_ready $PORT1 'ready' 1
+
+########################################################################
+## PR27983
+# Ensure no duplicate urls are used in when querying servers for files
+rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
+env DEBUGINFOD_URLS="http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:7999" \
+ LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -vvv executable 0 > vlog1 2>&1 || true
+tempfiles vlog1
+cat vlog1
+if [ $( grep -c 'duplicate url: http://127.0.0.1:'$PORT1'.*' vlog1 ) -ne 2 ]; then
+ echo "Duplicate servers remain";
+ err
+fi
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-extraction-passive.sh b/tests/run-debuginfod-extraction-passive.sh
new file mode 100755
index 00000000..c2724b58
--- /dev/null
+++ b/tests/run-debuginfod-extraction-passive.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+
+mkdir Z
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=11000
+get_ports
+
+DB=${PWD}/.debuginfod.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+cp -rvp ${abs_srcdir}/debuginfod-tars Z
+tempfiles Z
+
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v Z > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+wait_ready $PORT1 'ready' 1
+
+# Start second passive server with same database
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --passive -d $DB -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT2 -v > vlog$PORT2 2>&1 &
+PID2=$!
+
+tempfiles vlog$PORT2
+errfiles vlog$PORT2
+
+wait_ready $PORT2 'ready' 1
+
+# Wait for first server to finish indexing
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+# No similar metrics for the passive server
+! (curl http://localhost:$PORT2/metrics | egrep 'role="scan"|role="groom"|role="traverse"')
+
+# Confirm no active threads
+! (ps -q $PID2 -e -L -o '%p %c %a' | egrep 'scan|groom|traverse')
+
+# Do a random lookup via passive server
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://localhost:$PORT2 ${abs_builddir}/../debuginfod/debuginfod-find debuginfo cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb
+
+tempfiles $DB*
+
+kill $PID1
+wait $PID1
+PID1=0
+
+kill $PID2
+wait $PID2
+PID2=0
+
+exit 0
diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh
new file mode 100755
index 00000000..a3722c90
--- /dev/null
+++ b/tests/run-debuginfod-extraction.sh
@@ -0,0 +1,106 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+mkdir R Z
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8700
+get_ports
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -F -R -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v R Z > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# Make sure the initial scan has finished before copying the new files in
+# We might remove some, which we don't want to be accidentially scanned.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+cp -rvp ${abs_srcdir}/debuginfod-rpms R
+if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
+ rm -vrf R/debuginfod-rpms/fedora31
+fi
+
+cp -rvp ${abs_srcdir}/debuginfod-tars Z
+
+kill -USR1 $PID1
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+########################################################################
+# All rpms need to be in the index, except the dummy permission-000 one
+rpms=$(find R -name \*rpm | grep -v nothing | wc -l)
+wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms
+txz=$(find Z -name \*tar.xz | wc -l)
+wait_ready $PORT1 'scanned_files_total{source=".tar.xz archive"}' $txz
+tb2=$(find Z -name \*tar.bz2 | wc -l)
+wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2
+
+kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 3
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+# Expect all source files found in the rpms (they are all called hello.c :)
+# We will need to extract all rpms (in their own directory) and could all
+# sources referenced in the .debug files.
+mkdir extracted
+cd extracted
+subdir=0;
+newrpms=$(find ../R -name \*\.rpm | grep -v nothing)
+for i in $newrpms; do
+ subdir=$[$subdir+1];
+ mkdir $subdir;
+ cd $subdir;
+ ls -lah ../$i
+ rpm2cpio ../$i | cpio -ivd;
+ cd ..;
+done
+sourcefiles=$(find -name \*\\.debug \
+ | env LD_LIBRARY_PATH=$ldpath xargs \
+ ${abs_top_builddir}/src/readelf --debug-dump=decodedline \
+ | grep mtime: | wc --lines)
+cd ..
+rm -rf extracted
+
+wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-fd-prefetch-caches.sh b/tests/run-debuginfod-fd-prefetch-caches.sh
new file mode 100755
index 00000000..7fbf7b20
--- /dev/null
+++ b/tests/run-debuginfod-fd-prefetch-caches.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+FDCACHE_FDS=100
+FDCACHE_MBS=100
+PREFETCH_FDS=100
+PREFETCH_MBS=100
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8800
+get_ports
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+echo $PORT1
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 -d $DB \
+ --fdcache-mbs=$FDCACHE_MDS --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-mbs=$PREFETCH_MBS \
+ --fdcache-prefetch-fds=$PREFETCH_FDS --fdcache-mintmp 0 -v -F F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+
+grep 'fdcache fds ' vlog$PORT1 #$FDCACHE_FDS
+grep 'fdcache mbs ' vlog$PORT1 #$FDCACHE_MBS
+grep 'prefetch fds ' vlog$PORT1 #$PREFETCH_FDS
+grep 'prefetch mbs ' vlog$PORT1 #$PREFETCH_MBS
+# search the vlog to find what metric counts should be and check the correct metrics
+# were incrimented
+enqueue_nr=$(grep -c 'interned.*front=1' vlog$PORT1 || true)
+wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $enqueue_nr
+evict_nr=$(grep -c 'evicted a=.*' vlog$PORT1 || true)
+wait_ready $PORT1 'fdcache_op_count{op="evict"}' $evict_nr
+prefetch_enqueue_nr=$(grep -c 'interned.*front=0' vlog$PORT1 || true)
+wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $prefetch_enqueue_nr
+prefetch_evict_nr=$(grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true)
+wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $prefetch_evict_nr
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh
new file mode 100755
index 00000000..d7827436
--- /dev/null
+++ b/tests/run-debuginfod-federation-link.sh
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+tempfiles $DB
+
+# Clean old dirictories
+mkdir D L F
+mkdir -p $DEBUGINFOD_CACHE_PATH
+# not tempfiles F R L D Z - they are directories which we clean up manually
+ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8900
+get_ports
+# Launch server which will be unable to follow symlinks
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+wait_ready $PORT1 'ready' 1
+# Make sure initial scan was done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+########################################################################
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/prog.c
+tempfiles prog.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
+testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv prog F
+mv prog.debug F
+
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+wait_ready $PORT1 'thread_busy{role="http-buildid"}' 0
+wait_ready $PORT1 'thread_busy{role="http-metrics"}' 1
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2
+mkdir -p $DEBUGINFOD_CACHE_PATH
+
+# NB: run in -L symlink-following mode for the L subdir
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D > vlog$PORT2 2>&1 &
+PID2=$!
+tempfiles vlog$PORT2
+errfiles vlog$PORT2
+tempfiles ${DB}_2
+
+wait_ready $PORT2 'ready' 1
+
+# Make sure initial scan was done
+wait_ready $PORT2 'thread_work_total{role="traverse"}' 1
+kill -USR1 $PID2
+# Wait till both files are in the index.
+wait_ready $PORT2 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT2 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT2 'thread_busy{role="scan"}' 0
+
+wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0
+wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1
+
+# have clients contact the new server
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
+# Use fresh cache for debuginfod-find client requests
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3
+mkdir -p $DEBUGINFOD_CACHE_PATH
+
+if type bsdtar 2>/dev/null; then
+ # copy in the deb files
+ cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D
+ kill -USR1 $PID2
+ wait_ready $PORT2 'thread_work_total{role="traverse"}' 3
+ wait_ready $PORT2 'thread_work_pending{role="scan"}' 0
+ wait_ready $PORT2 'thread_busy{role="scan"}' 0
+
+ # All debs need to be in the index
+ debs=$(find D -name \*.deb | wc -l)
+ wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs`
+ ddebs=$(find D -name \*.ddeb | wc -l)
+ wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs`
+
+ # ubuntu
+ archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" ""
+fi
+
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# send a request to stress XFF and User-Agent federation relay;
+# we'll grep for the two patterns in vlog$PORT1
+curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true
+
+grep UA:TESTCURL vlog$PORT1
+grep XFF:TESTXFF vlog$PORT1
+
+# confirm that first server can't resolve symlinked info in L/ but second can
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a L/foo | grep 'Build ID' | cut -d ' ' -f 7`
+file L/foo
+file -L L/foo
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# test again with scheme free url
+export DEBUGINFOD_URLS=127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file
+export DEBUGINFOD_URLS=127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# test parallel queries in client
+rm -rf $DEBUGINFOD_CACHE_PATH
+export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE"
+
+testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1
+
+kill $PID1
+kill $PID2
+wait $PID1
+wait $PID2
+PID1=0
+PID2=0
+
+exit 0
diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh
new file mode 100755
index 00000000..3d716246
--- /dev/null
+++ b/tests/run-debuginfod-federation-metrics.sh
@@ -0,0 +1,210 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid, will trigger error_count metric
+tempfiles $DB
+# Clean old dirictories
+mkdir D L F
+
+# not tempfiles F R L D Z - they are directories which we clean up manually
+ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9000
+get_ports
+
+# Launch server which will be unable to follow symlinks
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+wait_ready $PORT1 'ready' 1
+
+# Wait till initial scan is done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+########################################################################
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/prog.c
+tempfiles prog.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
+testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv prog F
+mv prog.debug F
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+wait_ready $PORT1 'thread_busy{role="http-buildid"}' 0
+wait_ready $PORT1 'thread_busy{role="http-metrics"}' 1
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2
+mkdir -p $DEBUGINFOD_CACHE_PATH
+# NB: run in -L symlink-following mode for the L subdir
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D > vlog$PORT2 2>&1 &
+PID2=$!
+tempfiles vlog$PORT2
+errfiles vlog$PORT2
+tempfiles ${DB}_2
+
+wait_ready $PORT2 'ready' 1
+wait_ready $PORT2 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT2 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT2 'thread_busy{role="scan"}' 0
+
+wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0
+wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1
+
+# have clients contact the new server
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
+# Use fresh cache for debuginfod-find client requests
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3
+mkdir -p $DEBUGINFOD_CACHE_PATH
+
+if type bsdtar 2>/dev/null; then
+ # copy in the deb files
+ cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D
+ kill -USR1 $PID2
+ wait_ready $PORT2 'thread_work_total{role="traverse"}' 2
+ wait_ready $PORT2 'thread_work_pending{role="scan"}' 0
+ wait_ready $PORT2 'thread_busy{role="scan"}' 0
+
+ # All debs need to be in the index
+ debs=$(find D -name \*.deb | wc -l)
+ wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs`
+ ddebs=$(find D -name \*.ddeb | wc -l)
+ wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs`
+
+ # ubuntu
+ archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" ""
+fi
+
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# send a request to stress XFF and User-Agent federation relay;
+# we'll grep for the two patterns in vlog$PORT1
+curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true
+
+grep UA:TESTCURL vlog$PORT1
+grep XFF:TESTXFF vlog$PORT1
+
+# confirm that first server can't resolve symlinked info in L/ but second can
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a L/foo | grep 'Build ID' | cut -d ' ' -f 7`
+file L/foo
+file -L L/foo
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# test again with scheme free url
+export DEBUGINFOD_URLS=127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file
+export DEBUGINFOD_URLS=127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+# test parallel queries in client
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3
+mkdir -p $DEBUGINFOD_CACHE_PATH
+export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE"
+
+testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1
+
+########################################################################
+# Fetch some metrics
+curl -s http://127.0.0.1:$PORT1/badapi
+curl -s http://127.0.0.1:$PORT1/metrics
+curl -s http://127.0.0.1:$PORT2/metrics
+curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error'
+curl -s http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_count'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_sum'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_sum'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'fdcache_'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'traversed_total'
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'scanned_bytes_total'
+
+# And generate a few errors into the second debuginfod's logs, for analysis just below
+curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true
+curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true
+# NB: this error is used to seed the 404 failure for the survive-404 tests
+
+# Confirm bad artifact types are rejected without leaving trace
+curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true
+(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false
+
+# Confirm that reused curl connections survive 404 errors.
+# The rm's force an uncached fetch (in both servers and client cache)
+rm -f .client_cache*/$BUILDID/debuginfo
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+rm -f .client_cache*/$BUILDID/debuginfo
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+rm -f .client_cache*/$BUILDID/debuginfo
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# Confirm that some debuginfod client pools are being used
+curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse'
+
+# Trigger a flood of requests against the same archive content file.
+# Use a file that hasn't been previously extracted in to make it
+# likely that even this test debuginfod will experience concurrency
+# and impose some "after-you" delays.
+(for i in `seq 100`; do
+ curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null &
+ done;
+ wait)
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*'
+# If we could guarantee some minimum number of seconds of CPU time, we
+# could assert that the after_you metrics show some nonzero amount of
+# waiting. A few hundred ms is typical on this developer's workstation.
+
+kill $PID1
+kill $PID2
+wait $PID1
+wait $PID2
+PID1=0
+PID2=0
+exit 0
+
diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh
new file mode 100755
index 00000000..d9321526
--- /dev/null
+++ b/tests/run-debuginfod-federation-sqlite.sh
@@ -0,0 +1,202 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+tempfiles $DB
+
+# Clean old dirictories
+mkdir D L F
+# not tempfiles F R L D Z - they are directories which we clean up manually
+ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test
+
+########################################################################
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/prog.c
+tempfiles prog.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
+testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv prog F
+mv prog.debug F
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9100
+get_ports
+# Launch server which will be unable to follow symlinks
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+wait_ready $PORT1 'ready' 1
+
+# Wait till initial scan is done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2
+mkdir -p $DEBUGINFOD_CACHE_PATH
+# NB: run in -L symlink-following mode for the L subdir
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D F > vlog$PORT2 2>&1 &
+PID2=$!
+tempfiles vlog$PORT2
+errfiles vlog$PORT2
+tempfiles ${DB}_2
+wait_ready $PORT2 'ready' 1
+# Wait till initial scan is done
+wait_ready $PORT2 'thread_work_total{role="traverse"}' 1
+# And initial groom cycle
+wait_ready $PORT1 'thread_work_total{role="groom"}' 1
+
+export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT2
+# Use fresh cache for debuginfod-find client requests
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3
+mkdir -p $DEBUGINFOD_CACHE_PATH
+
+if type bsdtar 2>/dev/null; then
+ # copy in the deb files
+ cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D
+ kill -USR1 $PID2
+ wait_ready $PORT2 'thread_work_total{role="traverse"}' 2
+ wait_ready $PORT2 'thread_work_pending{role="scan"}' 0
+ wait_ready $PORT2 'thread_busy{role="scan"}' 0
+
+ # All debs need to be in the index
+ debs=$(find D -name \*.deb | wc -l)
+ wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs`
+ ddebs=$(find D -name \*.ddeb | wc -l)
+ wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs`
+
+ # ubuntu
+ archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" ""
+fi
+
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# send a request to stress XFF and User-Agent federation relay;
+# we'll grep for the two patterns in vlog$PORT1
+curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true
+
+grep UA:TESTCURL vlog$PORT1
+grep XFF:TESTXFF vlog$PORT1
+
+# confirm that first server can't resolve symlinked info in L/ but second can
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a L/foo | grep 'Build ID' | cut -d ' ' -f 7`
+file L/foo
+file -L L/foo
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+
+# test again with scheme free url
+export DEBUGINFOD_URLS=127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file
+export DEBUGINFOD_URLS=127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+# test parallel queries in client
+rm -rf $DEBUGINFOD_CACHE_PATH
+export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE"
+
+testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1
+
+# And generate a few errors into the second debuginfod's logs, for analysis just below
+curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true
+curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true
+# NB: this error is used to seed the 404 failure for the survive-404 tests
+
+# Confirm bad artifact types are rejected without leaving trace
+curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true
+(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false
+
+# Confirm that reused curl connections survive 404 errors.
+# The rm's force an uncached fetch (in both servers and client cache)
+rm -f .client_cache*/$BUILDID/debuginfo
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+rm -f .client_cache*/$BUILDID/debuginfo
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+rm -f .client_cache*/$BUILDID/debuginfo
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+# Trigger a flood of requests against the same archive content file.
+# Use a file that hasn't been previously extracted in to make it
+# likely that even this test debuginfod will experience concurrency
+# and impose some "after-you" delays.
+(for i in `seq 100`; do
+ curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null &
+ done;
+ wait)
+curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*'
+# If we could guarantee some minimum number of seconds of CPU time, we
+# could assert that the after_you metrics show some nonzero amount of
+# waiting. A few hundred ms is typical on this developer's workstation.
+
+########################################################################
+# Trigger some some random activity, then trigger a clean shutdown.
+# We used to try to corrupt the database while the debuginfod server
+# was running and check it detected errors, but that was unreliably
+# and slightly dangerous since part of the database was already mapped
+# into memory.
+kill -USR1 $PID1
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+kill -USR2 $PID1
+wait_ready $PORT1 'thread_work_total{role="groom"}' 2
+curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true
+
+kill -INT $PID1 $PID2
+wait $PID1 $PID2
+PID1=0
+PID2=0
+
+# Run the tests again without the servers running. The target file should
+# be found in the cache.
+
+tempfiles .debuginfod_*
+
+testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1
+
+# check out the debuginfod logs for the new style status lines
+cat vlog$PORT2
+grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog$PORT2
+grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog$PORT2
+grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog$PORT2
+grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog$PORT2
+
+exit 0
diff --git a/tests/run-debuginfod-file.sh b/tests/run-debuginfod-file.sh
new file mode 100755
index 00000000..341bbc68
--- /dev/null
+++ b/tests/run-debuginfod-file.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+# Test fetching a file using file:// . No debuginfod server needs to be run for
+# this test.
+local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/source/my/path
+mkdir -p ${local_dir}
+echo "int main() { return 0; }" > ${local_dir}/main.c
+# first test that is doesn't work, when no DEBUGINFOD_URLS is set
+export DEBUGINFOD_URLS=""
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true
+
+# Now test is with proper DEBUGINFOD_URLS
+export DEBUGINFOD_URLS="file://${PWD}/mocktree/"
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c`
+cmp $filename ${local_dir}/main.c
+
+exit 0
diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
deleted file mode 100755
index 9183cccb..00000000
--- a/tests/run-debuginfod-find.sh
+++ /dev/null
@@ -1,677 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright (C) 2019-2021 Red Hat, Inc.
-# 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 # includes set -e
-
-type curl 2>/dev/null || (echo "need curl"; exit 77)
-type rpm2cpio 2>/dev/null || (echo "need rpm2cpio"; exit 77)
-type cpio 2>/dev/null || (echo "need cpio"; exit 77)
-type bzcat 2>/dev/null || (echo "need bzcat"; exit 77)
-bsdtar --version | grep -q zstd && zstd=true || zstd=false
-echo "zstd=$zstd bsdtar=`bsdtar --version`"
-
-# for test case debugging, uncomment:
-#set -x
-VERBOSE=-vvv
-
-DB=${PWD}/.debuginfod_tmp.sqlite
-tempfiles $DB
-export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
-
-PID1=0
-PID2=0
-PID3=0
-
-cleanup()
-{
- if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi
- if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi
- if [ $PID3 -ne 0 ]; then kill $PID3; wait $PID3; fi
-
- rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp*
- exit_cleanup
-}
-
-# clean up trash if we were aborted early
-trap cleanup 0 1 2 3 5 9 15
-
-errfiles_list=
-err() {
- for ports in $PORT1 $PORT2
- do
- echo $port metrics
- curl -s http://127.0.0.1:$port/metrics
- echo
- done
- for x in $errfiles_list
- do
- echo "$x"
- cat $x
- echo
- done
-}
-trap err ERR
-
-errfiles() {
- errfiles_list="$errfiles_list $*"
-}
-
-
-
-# find an unused port number
-while true; do
- PORT1=`expr '(' $RANDOM % 1000 ')' + 9000`
- ss -atn | fgrep ":$PORT1" || break
-done
-
-# We want to run debuginfod in the background. We also want to start
-# it with the same check/installcheck-sensitive LD_LIBRARY_PATH stuff
-# that the testrun alias sets. But: we if we just use
-# testrun .../debuginfod
-# it runs in a subshell, with different pid, so not helpful.
-#
-# So we gather the LD_LIBRARY_PATH with this cunning trick:
-ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'`
-
-mkdir F R L D Z
-# not tempfiles F R L D Z - they are directories which we clean up manually
-ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test
-
-wait_ready()
-{
- port=$1;
- what=$2;
- value=$3;
- timeout=20;
-
- echo "Wait $timeout seconds on $port for metric $what to change to $value"
- while [ $timeout -gt 0 ]; do
- mvalue="$(curl -s http://127.0.0.1:$port/metrics \
- | grep "$what" | awk '{print $NF}')"
- if [ -z "$mvalue" ]; then mvalue=0; fi
- echo "metric $what: $mvalue"
- if [ "$mvalue" -eq "$value" ]; then
- break;
- fi
- sleep 0.5;
- ((timeout--));
- done;
-
- if [ $timeout -eq 0 ]; then
- echo "metric $what never changed to $value on port $port"
- exit 1;
- fi
-}
-
-# create a bogus .rpm file to evoke a metric-visible error
-# Use a cyclic symlink instead of chmod 000 to make sure even root
-# would see an error (running the testsuite under root is NOT encouraged).
-ln -s R/nothing.rpm R/nothing.rpm
-
-env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 --fdcache-fds 1 --fdcache-mbs 2 --fdcache-mintmp 0 -Z .tar.xz -Z .tar.bz2=bzcat -v R F Z L > vlog$PORT1 2>&1 &
-PID1=$!
-tempfiles vlog$PORT1
-errfiles vlog$PORT1
-# Server must become ready
-wait_ready $PORT1 'ready' 1
-export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
-
-# Be patient when run on a busy machine things might take a bit.
-export DEBUGINFOD_TIMEOUT=10
-
-# Check thread comm names
-ps -q $PID1 -e -L -o '%p %c %a' | grep groom
-ps -q $PID1 -e -L -o '%p %c %a' | grep scan
-ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
-
-# We use -t0 and -g0 here to turn off time-based scanning & grooming.
-# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process.
-
-########################################################################
-
-# Compile a simple program, strip its debuginfo and save the build-id.
-# Also move the debuginfo into another directory so that elfutils
-# cannot find it without debuginfod.
-echo "int main() { return 0; }" > ${PWD}/prog.c
-tempfiles prog.c
-# Create a subdirectory to confound source path names
-mkdir foobar
-gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
-testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
-BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
- -a prog | grep 'Build ID' | cut -d ' ' -f 7`
-
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
-mv prog F
-mv prog.debug F
-kill -USR1 $PID1
-# Wait till both files are in the index.
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-
-########################################################################
-
-# Test whether elfutils, via the debuginfod client library dlopen hooks,
-# is able to fetch debuginfo from the local debuginfod.
-testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1
-
-########################################################################
-
-# PR25628
-rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
-
-# The query is designed to fail, while the 000-permission file should be created.
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
-if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then
- echo "could not find cache in $DEBUGINFOD_CACHE_PATH"
- exit 1
-fi
-
-if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then
- echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable"
- exit 1
-fi
-
-bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'`
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
-bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'`
-if [ "$bytecount_before" != "$bytecount_after" ]; then
- echo "http_responses_transfer_bytes_count{code="404"} has changed."
- exit 1
-fi
-
-# set cache_miss_s to 0 and sleep 1 to make the mtime expire.
-echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s
-sleep 1
-bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'`
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
-bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'`
-if [ "$bytecount_before" == "$bytecount_after" ]; then
- echo "http_responses_transfer_bytes_count{code="404"} should be incremented."
- exit 1
-fi
-########################################################################
-
-# Test whether debuginfod-find is able to fetch those files.
-rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID`
-cmp $filename F/prog.debug
-if [ -w $filename ]; then
- echo "cache file writable, boo"
- exit 1
-fi
-
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog`
-cmp $filename F/prog
-
-# raw source filename
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../prog.c`
-cmp $filename ${PWD}/prog.c
-
-# and also the canonicalized one
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/prog.c`
-cmp $filename ${PWD}/prog.c
-
-
-########################################################################
-
-# Test whether the cache default locations are correct
-
-mkdir tmphome
-
-# $HOME/.cache should be created.
-testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then
- echo "could not find cache in $PWD/tmphome/.cache"
- exit 1
-fi
-
-# $HOME/.cache should be found.
-testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID
-if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then
- echo "could not find cache in $PWD/tmphome/.cache"
- exit 1
-fi
-
-# $XDG_CACHE_HOME should take priority over $HOME.cache.
-testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then
- echo "could not find cache in $PWD/tmpxdg/"
- exit 1
-fi
-
-# A cache at the old default location ($HOME/.debuginfod_client_cache) should take
-# priority over $HOME/.cache, $XDG_CACHE_HOME.
-cp -r $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache
-
-# Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME.
-mkdir tmphome/.debuginfod_client_cache/deadbeef
-echo ELF... > tmphome/.debuginfod_client_cache/deadbeef/debuginfo
-filename=`testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo deadbeef`
-cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo
-
-# $DEBUGINFO_CACHE_PATH should take priority over all else.
-testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then
- echo "could not find cache in $PWD/tmpcache/"
- exit 1
-fi
-
-########################################################################
-
-# Add artifacts to the search paths and test whether debuginfod finds them while already running.
-
-# Build another, non-stripped binary
-echo "int main() { return 0; }" > ${PWD}/prog2.c
-tempfiles prog2.c
-gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c
-BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
- -a prog2 | grep 'Build ID' | cut -d ' ' -f 7`
-
-mv prog2 F
-kill -USR1 $PID1
-# Now there should be 3 files in the index
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 3
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-
-# Rerun same tests for the prog2 binary
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog`
-cmp $filename F/prog2
-cat vlog
-grep -q Progress vlog
-grep -q Downloaded.from vlog
-tempfiles vlog
-filename=`testrun env DEBUGINFOD_PROGRESS=1 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 2>vlog2`
-cmp $filename F/prog2
-cat vlog2
-grep -q 'Downloading.*http' vlog2
-tempfiles vlog2
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c`
-cmp $filename ${PWD}/prog2.c
-
-cp -rvp ${abs_srcdir}/debuginfod-rpms R
-if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
- rm -vrf R/debuginfod-rpms/fedora31
-fi
-
-cp -rvp ${abs_srcdir}/debuginfod-tars Z
-kill -USR1 $PID1
-# All rpms need to be in the index, except the dummy permission-000 one
-rpms=$(find R -name \*rpm | grep -v nothing | wc -l)
-wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms
-txz=$(find Z -name \*tar.xz | wc -l)
-wait_ready $PORT1 'scanned_files_total{source=".tar.xz archive"}' $txz
-tb2=$(find Z -name \*tar.bz2 | wc -l)
-wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2
-
-kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs
-# Expect all source files found in the rpms (they are all called hello.c :)
-# We will need to extract all rpms (in their own directory) and could all
-# sources referenced in the .debug files.
-mkdir extracted
-cd extracted
-subdir=0;
-newrpms=$(find ../R -name \*\.rpm | grep -v nothing)
-for i in $newrpms; do
- subdir=$[$subdir+1];
- mkdir $subdir;
- cd $subdir;
- ls -lah ../$i
- rpm2cpio ../$i | cpio -ivd;
- cd ..;
-done
-sourcefiles=$(find -name \*\\.debug \
- | env LD_LIBRARY_PATH=$ldpath xargs \
- ${abs_top_builddir}/src/readelf --debug-dump=decodedline \
- | grep mtime: | wc --lines)
-cd ..
-rm -rf extracted
-
-wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles
-
-# Run a bank of queries against the debuginfod-rpms / debuginfod-debs test cases
-
-archive_test() {
- __BUILDID=$1
- __SOURCEPATH=$2
- __SOURCESHA1=$3
-
- filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID`
- buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
- -a $filename | grep 'Build ID' | cut -d ' ' -f 7`
- test $__BUILDID = $buildid
- # check that timestamps are plausible - older than the near-present (tmpdir mtime)
- test $filename -ot `pwd`
-
- # run again to assure that fdcache is being enjoyed
- filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID`
- buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
- -a $filename | grep 'Build ID' | cut -d ' ' -f 7`
- test $__BUILDID = $buildid
- test $filename -ot `pwd`
-
- filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $__BUILDID`
- buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
- -a $filename | grep 'Build ID' | cut -d ' ' -f 7`
- test $__BUILDID = $buildid
- test $filename -ot `pwd`
-
- if test "x$__SOURCEPATH" != "x"; then
- filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH`
- hash=`cat $filename | sha1sum | awk '{print $1}'`
- test $__SOURCESHA1 = $hash
- test $filename -ot `pwd`
- fi
-}
-
-
-# common source file sha1
-SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1
-# fedora31
-if [ $zstd = true ]; then
- # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it
- # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite
- archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA
- archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA
-fi
-# fedora30
-archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
-archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
-# rhel7
-archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
-archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
-# rhel6
-archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA
-archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA
-# arch
-archive_test cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c 7a1334e086b97e5f124003a6cfb3ed792d10cdf4
-
-RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir, for a later test
-
-
-########################################################################
-
-# Drop some of the artifacts, run a groom cycle; confirm that
-# debuginfod has forgotten them, but remembers others
-
-rm -r R/debuginfod-rpms/rhel6/*
-kill -USR2 $PID1 # groom cycle
-# 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2
-wait_ready $PORT1 'thread_work_total{role="groom"}' 2
-# Expect 4 rpms containing 2 buildids to be deleted by the groom
-wait_ready $PORT1 'groomed_total{decision="stale"}' 4
-
-rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
-
-# this is one of the buildids from the groom-deleted rpms
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true
-# but this one was not deleted so should be still around
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2
-
-########################################################################
-
-# PR26810: Now rename some files in the R directory, then rescan, so
-# there are two copies of the same buildid in the index, one for the
-# no-longer-existing file name, and one under the new name.
-
-# run a groom cycle to force server to drop its fdcache
-kill -USR2 $PID1 # groom cycle
-wait_ready $PORT1 'thread_work_total{role="groom"}' 3
-# move it around a couple of times to make it likely to hit a nonexistent entry during iteration
-mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed
-kill -USR1 $PID1 # scan cycle
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 6
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2
-kill -USR1 $PID1 # scan cycle
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 7
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3
-kill -USR1 $PID1 # scan cycle
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 8
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-
-# retest rhel7
-archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
-archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
-
-egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1
-
-########################################################################
-
-# Federation mode
-
-# find another unused port
-while true; do
- PORT2=`expr '(' $RANDOM % 1000 ')' + 9000`
- ss -atn | fgrep ":$PORT2" || break
-done
-
-export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2
-mkdir -p $DEBUGINFOD_CACHE_PATH
-# NB: inherits the DEBUGINFOD_URLS to the first server
-# NB: run in -L symlink-following mode for the L subdir
-env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d ${DB}_2 -p $PORT2 -L L D > vlog$PORT2 2>&1 &
-PID2=$!
-tempfiles vlog$PORT2
-errfiles vlog$PORT2
-tempfiles ${DB}_2
-wait_ready $PORT2 'ready' 1
-wait_ready $PORT2 'thread_work_total{role="traverse"}' 1
-wait_ready $PORT2 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT2 'thread_busy{role="scan"}' 0
-
-wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0
-wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1
-
-# have clients contact the new server
-export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
-
-if type bsdtar 2>/dev/null; then
- # copy in the deb files
- cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D
- kill -USR1 $PID2
- # All debs need to be in the index
- debs=$(find D -name \*.deb | wc -l)
- wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs`
- ddebs=$(find D -name \*.ddeb | wc -l)
- wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs`
-
- # ubuntu
- archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" ""
-fi
-
-rm -rf $DEBUGINFOD_CACHE_PATH
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-
-# send a request to stress XFF and User-Agent federation relay;
-# we'll grep for the two patterns in vlog$PORT1
-curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true
-
-grep UA:TESTCURL vlog$PORT1
-grep XFF:TESTXFF vlog$PORT1
-
-
-# confirm that first server can't resolve symlinked info in L/ but second can
-BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
- -a L/foo | grep 'Build ID' | cut -d ' ' -f 7`
-file L/foo
-file -L L/foo
-export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1
-rm -rf $DEBUGINFOD_CACHE_PATH
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
-rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file
-export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-
-# test again with scheme free url
-export DEBUGINFOD_URLS=127.0.0.1:$PORT1
-rm -rf $DEBUGINFOD_CACHE_PATH
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
-rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file
-export DEBUGINFOD_URLS=127.0.0.1:$PORT2
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-
-# test parallel queries in client
-export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3
-mkdir -p $DEBUGINFOD_CACHE_PATH
-export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE"
-
-testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1
-
-########################################################################
-
-# Fetch some metrics
-curl -s http://127.0.0.1:$PORT1/badapi
-curl -s http://127.0.0.1:$PORT1/metrics
-curl -s http://127.0.0.1:$PORT2/metrics
-curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error'
-curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*fdcache'
-curl -s http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_count'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_sum'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_sum'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'fdcache_'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'traversed_total'
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'scanned_bytes_total'
-
-# And generate a few errors into the second debuginfod's logs, for analysis just below
-curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true
-curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true
-# NB: this error is used to seed the 404 failure for the survive-404 tests
-
-# Confirm bad artifact types are rejected without leaving trace
-curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true
-(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false
-
-# Confirm that reused curl connections survive 404 errors.
-# The rm's force an uncached fetch
-rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
-
-# Confirm that some debuginfod client pools are being used
-curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse'
-
-########################################################################
-# Corrupt the sqlite database and get debuginfod to trip across its errors
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset'
-ls -al $DB
-dd if=/dev/zero of=$DB bs=1 count=1
-ls -al $DB
-# trigger some random activity that's Sure to get sqlite3 upset
-kill -USR1 $PID1
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 9
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-kill -USR2 $PID1
-wait_ready $PORT1 'thread_work_total{role="groom"}' 4
-curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true
-curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count.*sqlite'
-
-########################################################################
-
-# Run the tests again without the servers running. The target file should
-# be found in the cache.
-
-kill -INT $PID1 $PID2
-wait $PID1 $PID2
-PID1=0
-PID2=0
-tempfiles .debuginfod_*
-
-testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1
-
-# check out the debuginfod logs for the new style status lines
-# cat vlog$PORT2
-grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog$PORT2
-grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog$PORT2
-grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog$PORT2
-grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog$PORT2
-
-########################################################################
-
-# Add some files to the cache that do not fit its naming format.
-# They should survive cache cleaning.
-mkdir $DEBUGINFOD_CACHE_PATH/malformed
-touch $DEBUGINFOD_CACHE_PATH/malformed0
-touch $DEBUGINFOD_CACHE_PATH/malformed/malformed1
-
-# A valid format for an empty buildid subdirectory
-mkdir $DEBUGINFOD_CACHE_PATH/00000000
-touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee nukage
-
-# Trigger a cache clean and run the tests again. The clients should be unable to
-# find the target.
-echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s
-echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s
-
-testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1
-
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID2 && false || true
-
-if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \
- || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then
- echo "unrelated files did not survive cache cleaning"
- exit 1
-fi
-
-if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then
- echo "failed to rmdir old cache dir"
- exit 1
-fi
-
-# Test debuginfod without a path list; reuse $PORT1
-env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d :memory: -p $PORT1 -L -F &
-PID3=$!
-wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
-wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
-wait_ready $PORT1 'thread_busy{role="scan"}' 0
-kill -int $PID3
-wait $PID3
-PID3=0
-
-########################################################################
-# Test fetching a file using file:// . No debuginfod server needs to be run for
-# this test.
-local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/source/my/path
-mkdir -p ${local_dir}
-echo "int main() { return 0; }" > ${local_dir}/main.c
-
-# first test that is doesn't work, when no DEBUGINFOD_URLS is set
-DEBUGINFOD_URLS=""
-testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true
-
-# Now test is with proper DEBUGINFOD_URLS
-DEBUGINFOD_URLS="file://${PWD}/mocktree/"
-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c`
-cmp $filename ${local_dir}/main.c
-
-exit 0
diff --git a/tests/run-debuginfod-malformed.sh b/tests/run-debuginfod-malformed.sh
new file mode 100755
index 00000000..83e6a3a9
--- /dev/null
+++ b/tests/run-debuginfod-malformed.sh
@@ -0,0 +1,111 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9200
+# find an unused port number
+get_ports
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+mkdir F
+mkdir -p $DEBUGINFOD_CACHE_PATH
+
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \
+ -t0 -g0 -v F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# And an initial scan should be done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# We use -t0 and -g0 here to turn off time-based scanning & grooming.
+# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process.
+########################################################################
+
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c
+tempfiles p+r%o\$g.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c
+testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv p+r%o\$g F
+mv p+r%o\$g.debug F
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+########################################################################
+# Add some files to the cache that do not fit its naming format.
+# They should survive cache cleaning.
+mkdir $DEBUGINFOD_CACHE_PATH/malformed
+touch $DEBUGINFOD_CACHE_PATH/malformed0
+touch $DEBUGINFOD_CACHE_PATH/malformed/malformed1
+
+# A valid format for an empty buildid subdirectory
+mkdir $DEBUGINFOD_CACHE_PATH/00000000
+touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee nukage
+
+# Trigger a cache clean and run the tests again. The clients should be unable to
+# find the target.
+echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s
+echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s
+
+testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1
+
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+
+if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \
+ || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then
+ echo "unrelated files did not survive cache cleaning"
+ err
+fi
+
+if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then
+ echo "failed to rmdir old cache dir"
+ err
+fi
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-negative-cache.sh b/tests/run-debuginfod-negative-cache.sh
new file mode 100755
index 00000000..f40e99c5
--- /dev/null
+++ b/tests/run-debuginfod-negative-cache.sh
@@ -0,0 +1,83 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=8000
+get_ports
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \
+ -t0 -g0 -v ${PWD} > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+########################################################################
+# PR25628
+rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
+
+# The query is designed to fail, while the empty file should be created.
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
+if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then
+ echo "could not find cache in $DEBUGINFOD_CACHE_PATH"
+ err
+fi
+
+if [ `stat -c "%s" $DEBUGINFOD_CACHE_PATH/01234567/debuginfo` != 0 ]; then
+ echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is not empty"
+ err
+fi
+
+bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'`
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
+bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'`
+if [ "$bytecount_before" != "$bytecount_after" ]; then
+ echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} has changed."
+ err
+fi
+
+# set cache_miss_s to 0 and sleep 1 to make the mtime expire.
+echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s
+sleep 1
+bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'`
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
+bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'`
+if [ "$bytecount_before" == "$bytecount_after" ]; then
+ echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} should be incremented."
+ err
+fi
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-no-urls.sh b/tests/run-debuginfod-no-urls.sh
new file mode 100755
index 00000000..7e3ffef6
--- /dev/null
+++ b/tests/run-debuginfod-no-urls.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+########################################################################
+# Test debuginfod without a path list
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9300
+get_ports
+
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d :memory: -p $PORT1 -L -F &
+PID1=$!
+
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+kill -int $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-percent-escape.sh b/tests/run-debuginfod-percent-escape.sh
new file mode 100755
index 00000000..f7d8dc66
--- /dev/null
+++ b/tests/run-debuginfod-percent-escape.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh # includes set -e
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=10000
+get_ports
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+mkdir F
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \
+ -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# Be patient when run on a busy machine things might take a bit.
+
+# Build a non-stripped binary
+echo "int main() { return 0; }" > ${PWD}/F/p++r\$\#o^^g.c
+gcc -Wl,--build-id -g -o ${PWD}/F/p++r\$\#o^^g ${PWD}/F/p++r\$\#o^^g.c
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a ${PWD}/F/p++r\\$\#o^^g | grep 'Build ID' | cut -d ' ' -f 7`
+tempfiles ${PWD}/F/p++r\$\#o^^g.c ${PWD}/F/p++r\$\#o^^g
+kill -USR1 $PID1
+# Now there should be 1 files in the index
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
+ls F
+env DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache DEBUGINFOD_URLS="http://127.0.0.1:$PORT1" \
+ LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -vvv source F/p++r\$\#o^^g ${abs_builddir}/F/p++r\$\#o^^g.c > vlog1 2>&1 || true
+tempfiles vlog1
+grep 'F/p%2B%2Br%24%23o%5E%5Eg.c' vlog1
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-query-retry.sh b/tests/run-debuginfod-query-retry.sh
new file mode 100755
index 00000000..0cfdba92
--- /dev/null
+++ b/tests/run-debuginfod-query-retry.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+########################################################################
+# set up tests for retrying failed queries.
+retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache \
+ ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/sh || true) 2>&1 >/dev/null \
+ | grep -c 'Retry failed query'`
+if [ $retry_attempts -ne 10 ]; then
+ echo "retry mechanism failed."
+ exit 1;
+fi
+
+exit 0;
diff --git a/tests/run-debuginfod-regex.sh b/tests/run-debuginfod-regex.sh
new file mode 100755
index 00000000..6837ea86
--- /dev/null
+++ b/tests/run-debuginfod-regex.sh
@@ -0,0 +1,101 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+mkdir F
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9400
+get_ports
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \
+ $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+
+# Wait till the server is ready and an initial scan has been done
+wait_ready $PORT1 'ready' 1
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/prog.c
+tempfiles prog.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
+testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+
+mv prog F
+mv prog.debug F
+tempfiles F/prog.debug F/prog
+
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+cp ${DB} ${DB}.backup
+tempfiles ${DB}.backup
+
+kill $PID1
+wait $PID1
+PID1=0
+
+#######################################################################
+## PR27711
+# Test to ensure that the --include="^$" --exclude=".*" options remove all files from a database backup
+#
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \
+ $VERBOSE -p $PORT2 -t0 -g0 --regex-groom --include="^$" --exclude=".*" -d ${DB}.backup > vlog$PORT2 2>&1 &
+
+#reuse PID1
+PID1=$!
+tempfiles vlog$PORT2
+errfiles vlog$PORT2
+# Server must become ready
+wait_ready $PORT2 'ready' 1
+
+# Wait till the initial groom cycle has been done
+wait_ready $PORT2 'thread_work_total{role="groom"}' 1
+wait_ready $PORT2 'groom{statistic="archive d/e"}' 0
+wait_ready $PORT2 'groom{statistic="archive sdef"}' 0
+wait_ready $PORT2 'groom{statistic="archive sref"}' 0
+wait_ready $PORT2 'groom{statistic="buildids"}' 0
+wait_ready $PORT2 'groom{statistic="file d/e"}' 0
+wait_ready $PORT2 'groom{statistic="file s"}' 0
+wait_ready $PORT2 'groom{statistic="files scanned (#)"}' 0
+wait_ready $PORT2 'groom{statistic="files scanned (mb)"}' 0
+
+kill $PID1
+wait $PID1
+PID1=0
+
+exit 0;
+
diff --git a/tests/run-debuginfod-response-headers.sh b/tests/run-debuginfod-response-headers.sh
new file mode 100755
index 00000000..62c43887
--- /dev/null
+++ b/tests/run-debuginfod-response-headers.sh
@@ -0,0 +1,100 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh # includes set -e
+
+# for test case debugging, uncomment:
+set -x
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9500
+get_ports
+mkdir F R
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 -v R F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
+########################################################################
+
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/prog.c
+tempfiles prog.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
+
+mv prog F
+
+cp -rvp ${abs_srcdir}/debuginfod-rpms R
+if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones
+ rm -vrf R/debuginfod-rpms/fedora31
+fi
+
+kill -USR1 $PID1
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+# All rpms need to be in the index, except the dummy permission-000 one
+rpms=$(find R -name \*rpm | grep -v nothing | wc -l)
+wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms
+kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs
+# Wait till both files are in the index and scan/index fully finished
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+
+########################################################################
+## PR27277
+# Make a simple request to the debuginfod server and check debuginfod-find's vlog to see if
+# the custom HTTP headers are received.
+rm -rf $DEBUGINFOD_CACHE_PATH
+env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\
+ -vvv executable F/prog > vlog-find$PORT1.1 2>&1
+tempfiles vlog-find$PORT1.1
+grep 'Content-Length: ' vlog-find$PORT1.1
+grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.1
+grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.1
+
+# Check to see if an executable file located in an archive prints the file's description and archive
+env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\
+ -vvv executable c36708a78618d597dee15d0dc989f093ca5f9120 > vlog-find$PORT1.2 2>&1
+tempfiles vlog-find$PORT1.2
+grep 'Content-Length: ' vlog-find$PORT1.2
+grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.2
+grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.2
+grep 'X-DEBUGINFOD-ARCHIVE: ' vlog-find$PORT1.2
+
+# Check that X-DEBUGINFOD-SIZE matches the size of each file
+for file in vlog-find$PORT1.1 vlog-find$PORT1.2
+do
+ st_size=$(stat -c%s $(tail -n 1 $file))
+ x_debuginfod_size=$(grep 'X-DEBUGINFOD-SIZE' $file | egrep -o '[0-9]+')
+ test $st_size -eq $x_debuginfod_size
+done
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-sizetime.sh b/tests/run-debuginfod-sizetime.sh
new file mode 100755
index 00000000..2cf6f252
--- /dev/null
+++ b/tests/run-debuginfod-sizetime.sh
@@ -0,0 +1,82 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+set -x
+unset VALGRIND_CMD
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9600
+get_ports
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+echo "int main() { return 0; }" > ${PWD}/prog.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c
+testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+tempfiles prog prog.debug prog.c
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+
+env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB -t0 -g0 ${PWD} > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+wait_ready $PORT1 'ready' 1
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+## PR27892
+# Ensure DEBUGINFOD_MAXSIZE is functional and sends back the correct http
+# code
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_RETRY_LIMIT=1 DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXSIZE=1 \
+ ${abs_top_builddir}/debuginfod/debuginfod-find -v executable ${PWD}/prog 2> find-vlog$PORT1 || true
+tempfiles find-vlog$PORT1
+errfiles find-vlog$PORT1
+echo "Checking maxsize"
+grep "using max size 1B" find-vlog$PORT1
+echo "Checking maxsize"
+grep 'serving file '$(realpath ${PWD})'/prog' vlog$PORT1
+echo "Checking maxsize"
+grep 'File too large' vlog$PORT1
+if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then
+ echo "File cached after maxsize check"
+ err
+fi
+# Ensure no file is downloaded for longer than DEBUGINFOD_MAXTIME
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXTIME=1 \
+ ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo ${PWD}/prog.debug 2> find-vlog$PORT1 || true
+tempfiles find-vlog$PORT1
+grep 'using max time' find-vlog$PORT1
+# Ensure p+r%o\$g.debug is NOT cached
+if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then
+ echo "File cached after maxtime check"
+ err
+fi
+
+kill $PID1
+wait $PID1
+PID1=0
+
+exit 0;
diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh
new file mode 100755
index 00000000..5946777a
--- /dev/null
+++ b/tests/run-debuginfod-tmp-home.sh
@@ -0,0 +1,126 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+mkdir F
+mkdir -p $DEBUGINFOD_CACHE_PATH
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9700
+get_ports
+
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \
+ -t0 -g0 -v F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# And initial scan should be done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+# We use -t0 and -g0 here to turn off time-based scanning & grooming.
+# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process.
+
+########################################################################
+
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c
+tempfiles p+r%o\$g.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c
+testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv p+r%o\$g F
+mv p+r%o\$g.debug F
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+########################################################################
+
+# Test whether the cache default locations are correct
+mkdir tmphome
+
+# $HOME/.cache should be created.
+testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then
+ echo "could not find cache in $PWD/tmphome/.cache"
+ err
+fi
+
+# $HOME/.cache should be found.
+testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID
+if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then
+ echo "could not find cache in $PWD/tmphome/.cache"
+ err
+fi
+# $XDG_CACHE_HOME should take priority over $HOME.cache.
+testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then
+ echo "could not find cache in $PWD/tmpxdg/"
+ err
+fi
+
+# A cache at the old default location ($HOME/.debuginfod_client_cache) should take
+# priority over $HOME/.cache, $XDG_CACHE_HOME.
+cp -vr $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache || true
+# ||true is for tolerating errors, such a valgrind or something else
+# leaving negative-hit files in there
+
+# Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME.
+mkdir tmphome/.debuginfod_client_cache/deadbeef
+echo ELF... > tmphome/.debuginfod_client_cache/deadbeef/debuginfo
+filename=`testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo deadbeef`
+cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo
+
+# $DEBUGINFO_CACHE_PATH should take priority over all else.
+testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
+if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then
+ echo "could not find cache in $PWD/tmpcache/"
+ err
+fi
+rm -rf ${PWD}/tmphome/ ${PWD}/tmpxdg ${PWD}/tmpcache
+
+kill $PID1
+wait $PID1
+PID1=0
+exit 0
diff --git a/tests/run-debuginfod-webapi-concurrency.sh b/tests/run-debuginfod-webapi-concurrency.sh
new file mode 100755
index 00000000..47dcadcc
--- /dev/null
+++ b/tests/run-debuginfod-webapi-concurrency.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+
+mkdir Z
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=12000
+get_ports
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+cp -rvp ${abs_srcdir}/debuginfod-tars Z
+tempfiles Z
+
+
+for Cnum in "" "-C" "-C10" "-C100"
+do
+ env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE $Cnum -d :memory: -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v --fdcache-fds=0 --fdcache-prefetch-fds=0 Z >> vlog$PORT1 2>&1 &
+ PID1=$!
+ tempfiles vlog$PORT1
+ errfiles vlog$PORT1
+
+ wait_ready $PORT1 'ready' 1
+ # Wait for server to finish indexing
+ wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+ wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+ wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+ # Do a bunch of lookups in parallel
+ lookup_nr=64
+ for jobs in `seq $lookup_nr`; do
+ curl -s http://localhost:$PORT1/buildid/cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb/debuginfo > /dev/null &
+ done
+
+ # all curls should succeed
+ wait_ready $PORT1 'http_responses_transfer_bytes_count{code="200",type="debuginfo"}' $lookup_nr
+
+ (sleep 5;
+ curl -s http://localhost:$PORT1/metrics | egrep 'error|responses';
+ kill $PID1) &
+ wait # for all curls, the ()& from just above, and for debuginfod
+ PID1=0
+done
+
+# Note this xfail comes too late, the above wait_ready for
+# http_responses_transfer_bytes_count will have failed.
+xfail "grep Server.reached.connection vlog$PORT1" # PR28661
+
+exit 0
diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh
new file mode 100755
index 00000000..c521a572
--- /dev/null
+++ b/tests/run-debuginfod-writable.sh
@@ -0,0 +1,88 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2019-2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+mkdir F
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9800
+get_ports
+
+DB=${PWD}/.debuginfod_tmp.sqlite
+tempfiles $DB
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \
+ -t0 -g0 -v F > vlog$PORT1 2>&1 &
+PID1=$!
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+# Server must become ready
+wait_ready $PORT1 'ready' 1
+# And initial scan should be done
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 1
+
+export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
+
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
+########################################################################
+
+# Compile a simple program, strip its debuginfo and save the build-id.
+# Also move the debuginfo into another directory so that elfutils
+# cannot find it without debuginfod.
+echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c
+tempfiles p+r%o\$g.c
+# Create a subdirectory to confound source path names
+mkdir foobar
+gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c
+testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g
+BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7`
+
+mv p+r%o\$g F
+mv p+r%o\$g.debug F
+kill -USR1 $PID1
+# Wait till both files are in the index.
+wait_ready $PORT1 'thread_work_total{role="traverse"}' 2
+wait_ready $PORT1 'thread_work_pending{role="scan"}' 0
+wait_ready $PORT1 'thread_busy{role="scan"}' 0
+
+#######################################################################
+# Test whether debuginfod-find is able to fetch those files.
+rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests
+filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID`
+cmp $filename F/p+r%o\$g.debug
+if [ `stat -c "%A" $filename` != "-r--------" ]; then
+ echo "cache file writable, boo"
+ err
+fi
+
+kill $PID1
+wait $PID1
+PID1=0
+
+exit 0
diff --git a/tests/run-debuginfod-x-forwarded-for.sh b/tests/run-debuginfod-x-forwarded-for.sh
new file mode 100755
index 00000000..5b756b22
--- /dev/null
+++ b/tests/run-debuginfod-x-forwarded-for.sh
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2021 Red Hat, Inc.
+# 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/debuginfod-subr.sh
+
+# for test case debugging, uncomment:
+set -x
+unset VALGRIND_CMD
+
+export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache
+# This variable is essential and ensures no time-race for claiming ports occurs
+# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test
+base=9900
+get_ports
+
+# Test when debuginfod hitting X-Forwarded-For hops limit.
+# This test will start two servers (as a loop) with two different hop limits.
+
+tempfiles vlog$PORT1
+errfiles vlog$PORT1
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 0 -p $PORT1 > vlog$PORT1 2>&1 &
+PID1=$!
+
+tempfiles vlog$PORT2
+errfiles vlog$PORT2
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 1 -p $PORT2 > vlog$PORT2 2>&1 &
+PID2=$!
+
+wait_ready $PORT1 'ready' 1
+wait_ready $PORT2 'ready' 1
+
+export DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/"
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true
+
+# Use a different buildid to avoid using same cache.
+export DEBUGINFOD_URLS="http://127.0.0.1:$PORT2/"
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 11234567 || true
+
+grep "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT1
+grep -v "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT2 | grep "not found" vlog$PORT2
+
+kill $PID1 $PID2
+wait $PID1 $PID2
+
+PID1=0
+PID2=0
+
+exit 0
diff --git a/tests/run-large-elf-file.sh b/tests/run-large-elf-file.sh
index 667d24d8..7116de53 100755
--- a/tests/run-large-elf-file.sh
+++ b/tests/run-large-elf-file.sh
@@ -1,5 +1,6 @@
#! /usr/bin/env bash
# Copyright (C) 2019 Red Hat, Inc.
+# Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
# This file is part of elfutils.
#
# This file is free software; you can redistribute it and/or modify
@@ -26,6 +27,16 @@ if test $long_bit -ne 64; then
exit 77
fi
+# The test binary also needs to be 64bits itself
+elfclass=64
+testrun ${abs_top_builddir}/src/readelf -h ${abs_builddir}/addsections | grep ELF32 \
+ && elfclass=32
+echo elfclass: $elfclass
+if test $elfclass -ne 64; then
+ echo "Only 64bit binaries can create > 4GB ELF files"
+ exit 77
+fi
+
# These tests need lots of disk space since they test files > 4GB.
# Skip if there just isn't enough (2.5 * 4 = 10GB).
space_available=$[$(stat -f --format="%a*%S" .)/(1024 * 1024 * 1024)]
diff --git a/tests/run-nvidia-extended-linemap-libdw.sh b/tests/run-nvidia-extended-linemap-libdw.sh
new file mode 100755
index 00000000..d1df2cf3
--- /dev/null
+++ b/tests/run-nvidia-extended-linemap-libdw.sh
@@ -0,0 +1,60 @@
+# Copyright (C) 2011 Red Hat, Inc.
+# 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
+
+# NOTE:
+# the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2
+# nvcc -o main main.cu -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80 -lcudart -lcuda -lstdc++ -lm
+# cuobjdump -xelf all main
+# mv main.sm_80.cubin testfile_nvidia_linemap
+
+testfiles testfile_nvidia_linemap
+testrun_compare ${abs_top_builddir}/tests/nvidia_extended_linemap_libdw testfile_nvidia_linemap << EOF
+off = 0
+ 18 lines
+0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:25:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+10: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:26:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+40: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:27:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+90: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:25:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+a0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+100: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+100: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28
+150: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:9:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28
+1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+220: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:9:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+2b0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+2f0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+2f0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:18:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ _Z1aPiS_S_ inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+330: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:19:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+ _Z1aPiS_S_ inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8
+ bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31
+3c0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:33:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
+480: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:33:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
+EOF
diff --git a/tests/run-nvidia-extended-linemap-readelf.sh b/tests/run-nvidia-extended-linemap-readelf.sh
new file mode 100755
index 00000000..1fa9b7b4
--- /dev/null
+++ b/tests/run-nvidia-extended-linemap-readelf.sh
@@ -0,0 +1,120 @@
+# Copyright (C) 2011 Red Hat, Inc.
+# 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
+
+# NOTE:
+# the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2
+# nvcc -o main main.cu -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80 -lcudart -lcuda -lstdc++ -lm
+# cuobjdump -xelf all main
+# mv main.sm_80.cubin testfile_nvidia_linemap
+
+testfiles testfile_nvidia_linemap
+testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_nvidia_linemap << EOF
+
+DWARF section [ 5] '.debug_line' at offset 0x3e0:
+
+Table at offset 0:
+
+ Length: 253
+ DWARF version: 2
+ Prologue length: 111
+ Address size: 8
+ Segment selector size: 0
+ Min instruction length: 1
+ Max operations per instruction: 1
+ Initial value if 'is_stmt': 1
+ Line base: -5
+ Line range: 14
+ Opcode base: 10
+
+Opcodes:
+ [1] 0 arguments
+ [2] 1 argument
+ [3] 1 argument
+ [4] 1 argument
+ [5] 1 argument
+ [6] 0 arguments
+ [7] 0 arguments
+ [8] 0 arguments
+ [9] 1 argument
+
+Directory table:
+ /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4
+
+File name table:
+ Entry Dir Time Size Name
+ 1 1 1626104146 1819 main.cu
+ 2 1 1626104111 211 bar.h
+
+Line number statements:
+ [ 79] extended opcode 2: set address to 0 <kernel>
+ [ 84] set file to 1
+ [ 86] advance line by constant 24 to 25
+ [ 88] copy
+ [ 89] special opcode 240: address+16 = 0x10 <kernel+0x10>, line+1 = 26
+ [ 8a] advance line by constant 1 to 27
+ [ 8c] advance address by 48 to 0x40 <kernel+0x40>
+ [ 8e] copy
+ [ 8f] advance line by constant -2 to 25
+ [ 91] advance address by 80 to 0x90 <kernel+0x90>
+ [ 94] copy
+ [ 95] special opcode 242: address+16 = 0xa0 <kernel+0xa0>, line+3 = 28
+ [ 96] advance address by 96 to 0x100 <kernel+0x100>
+ [ 99] copy
+ [ 9a] extended opcode 144: set inlined context 6, function name foo (0x0)
+ [ 9f] advance line by constant -20 to 8
+ [ a1] copy
+ [ a2] advance line by constant 1 to 9
+ [ a4] advance address by 80 to 0x150 <kernel+0x150>
+ [ a7] copy
+ [ a8] extended opcode 144: set inlined context 0, function name foo (0x0)
+ [ ad] advance line by constant 22 to 31
+ [ af] advance address by 144 to 0x1e0 <kernel+0x1e0>
+ [ b2] copy
+ [ b3] set file to 2
+ [ b5] extended opcode 144: set inlined context 9, function name bar (0x4)
+ [ ba] advance line by constant -25 to 6
+ [ bc] copy
+ [ bd] set file to 1
+ [ bf] extended opcode 144: set inlined context 10, function name foo (0x0)
+ [ c4] advance line by constant 2 to 8
+ [ c6] copy
+ [ c7] advance line by constant 1 to 9
+ [ c9] advance address by 64 to 0x220 <kernel+0x220>
+ [ cc] copy
+ [ cd] set file to 2
+ [ cf] extended opcode 144: set inlined context 9, function name bar (0x4)
+ [ d4] advance line by constant -2 to 7
+ [ d6] advance address by 144 to 0x2b0 <kernel+0x2b0>
+ [ d9] copy
+ [ da] advance line by constant 1 to 8
+ [ dc] advance address by 64 to 0x2f0 <kernel+0x2f0>
+ [ df] copy
+ [ e0] set file to 1
+ [ e2] extended opcode 144: set inlined context 14, function name _Z1aPiS_S_ (0x8)
+ [ e7] advance line by constant 10 to 18
+ [ e9] copy
+ [ ea] advance line by constant 1 to 19
+ [ ec] advance address by 64 to 0x330 <kernel+0x330>
+ [ ef] copy
+ [ f0] extended opcode 144: set inlined context 0, function name foo (0x0)
+ [ f5] advance line by constant 14 to 33
+ [ f7] advance address by 144 to 0x3c0 <kernel+0x3c0>
+ [ fa] copy
+ [ fb] advance address by 192 to 0x480
+ [ fe] extended opcode 1: end of sequence
+EOF
diff --git a/tests/run-readelf-d.sh b/tests/run-readelf-d.sh
index d0b6ed24..69b01c49 100755
--- a/tests/run-readelf-d.sh
+++ b/tests/run-readelf-d.sh
@@ -34,7 +34,7 @@ testfiles testlib_dynseg.so
testrun_compare ${abs_top_builddir}/src/readelf -d testlib_dynseg.so <<\EOF
-Dynamic segment contains 28 entries:
+Dynamic segment contains 23 entries:
Addr: 0x00000000000017e0 Offset: 0x0007e0 Link to section: [ 3] '.dynstr'
Type Value
PLTGOT 0x00000000000019c8
@@ -60,11 +60,6 @@ Dynamic segment contains 28 entries:
VERNEED 0x0000000000000498
VERNEEDNUM 2
NULL
- NULL
- NULL
- NULL
- NULL
- NULL
EOF
exit 0
diff --git a/tests/run-readelf-fat-lto.sh b/tests/run-readelf-fat-lto.sh
new file mode 100755
index 00000000..e03cec3a
--- /dev/null
+++ b/tests/run-readelf-fat-lto.sh
@@ -0,0 +1,53 @@
+. $srcdir/test-subr.sh
+
+# - s.c
+# int main_argc_remaining;
+#
+# int main_argc() {
+# int result = 0;
+# if (main_argc_remaining)
+# result = 0;
+#
+# return 0;
+# }
+#
+# gcc -gdwarf-5 -c -o testfile-dwarf5-fat-lto.o -flto -O s.c -g -ffat-lto-objects
+
+testfiles testfile-dwarf5-fat-lto.o
+testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ranges -N -U testfile-dwarf5-fat-lto.o << EOF
+
+DWARF section [26] '.debug_loclists' at offset 0x7db:
+Table at Offset 0x0:
+
+ Length: 24
+ DWARF version: 5
+ Address size: 8
+ Segment size: 0
+ Offset entries: 0
+ CU [ c] base: 000000000000000000
+
+ Offset: c, Index: 0
+ view pair 2, 3
+
+ Offset: e, Index: 2
+ start_length 0x0, 0
+ [ 0] lit0
+ [ 1] stack_value
+ end_of_list
+
+
+DWARF section [30] '.debug_rnglists' at offset 0x827:
+Table at Offset 0x0:
+
+ Length: 19
+ DWARF version: 5
+ Address size: 8
+ Segment size: 0
+ Offset entries: 0
+ CU [ c] base: 000000000000000000
+
+ Offset: c, Index: 0
+ start_length 0x0, 8
+ end_of_list
+
+EOF
diff --git a/tests/run-readelf-multi-noline.sh b/tests/run-readelf-multi-noline.sh
new file mode 100755
index 00000000..d72a9fd4
--- /dev/null
+++ b/tests/run-readelf-multi-noline.sh
@@ -0,0 +1,170 @@
+#! /bin/sh
+# Copyright (C) 2021 Red Hat, Inc.
+# 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
+
+# = a.c =
+# int a;
+
+# = b.c =
+# int b;
+
+# = m.c =
+# int main () { }
+
+# gcc -g -o testfile_multi_noline a.c b.c m.c
+
+testfiles testfile_multi_noline
+
+testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_multi_noline <<\EOF
+
+DWARF section [29] '.debug_line' at offset 0x1221:
+
+Table at offset 0:
+
+ Length: 32
+ DWARF version: 3
+ Prologue length: 26
+ Address size: 8
+ Segment selector size: 0
+ Min instruction length: 4
+ Max operations per instruction: 1
+ Initial value if 'is_stmt': 1
+ Line base: -5
+ Line range: 14
+ Opcode base: 13
+
+Opcodes:
+ [ 1] 0 arguments
+ [ 2] 1 argument
+ [ 3] 1 argument
+ [ 4] 1 argument
+ [ 5] 1 argument
+ [ 6] 0 arguments
+ [ 7] 0 arguments
+ [ 8] 0 arguments
+ [ 9] 1 argument
+ [10] 0 arguments
+ [11] 0 arguments
+ [12] 1 argument
+
+Directory table:
+
+File name table:
+ Entry Dir Time Size Name
+ 1 0 0 0 a.c
+
+No line number statements.
+
+Table at offset 36:
+
+ Length: 32
+ DWARF version: 3
+ Prologue length: 26
+ Address size: 8
+ Segment selector size: 0
+ Min instruction length: 4
+ Max operations per instruction: 1
+ Initial value if 'is_stmt': 1
+ Line base: -5
+ Line range: 14
+ Opcode base: 13
+
+Opcodes:
+ [ 1] 0 arguments
+ [ 2] 1 argument
+ [ 3] 1 argument
+ [ 4] 1 argument
+ [ 5] 1 argument
+ [ 6] 0 arguments
+ [ 7] 0 arguments
+ [ 8] 0 arguments
+ [ 9] 1 argument
+ [10] 0 arguments
+ [11] 0 arguments
+ [12] 1 argument
+
+Directory table:
+
+File name table:
+ Entry Dir Time Size Name
+ 1 0 0 0 b.c
+
+No line number statements.
+
+Table at offset 72:
+
+ Length: 54
+ DWARF version: 3
+ Prologue length: 26
+ Address size: 8
+ Segment selector size: 0
+ Min instruction length: 4
+ Max operations per instruction: 1
+ Initial value if 'is_stmt': 1
+ Line base: -5
+ Line range: 14
+ Opcode base: 13
+
+Opcodes:
+ [ 1] 0 arguments
+ [ 2] 1 argument
+ [ 3] 1 argument
+ [ 4] 1 argument
+ [ 5] 1 argument
+ [ 6] 0 arguments
+ [ 7] 0 arguments
+ [ 8] 0 arguments
+ [ 9] 1 argument
+ [10] 0 arguments
+ [11] 0 arguments
+ [12] 1 argument
+
+Directory table:
+
+File name table:
+ Entry Dir Time Size Name
+ 1 0 0 0 m.c
+
+Line number statements:
+ [ 6c] set column to 13
+ [ 6e] extended opcode 2: set address to +0x724 <main>
+ [ 79] copy
+ [ 7a] set column to 15
+ [ 7c] special opcode 32: address+4 = +0x728 <main+0x4>, line+0 = 1
+ [ 7d] advance address by 4 to +0x72c
+ [ 7f] extended opcode 1: end of sequence
+EOF
+
+testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile_multi_noline <<\EOF
+
+DWARF section [29] '.debug_line' at offset 0x1221:
+
+ CU [b] a.c
+ line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
+ CU [44] b.c
+ line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
+ CU [7d] m.c
+ line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
+ /tmp/m.c (mtime: 0, length: 0)
+ 1:13 S 0 0 0 +0x0000000000000724 <main>
+ 1:15 S 0 0 0 +0x0000000000000728 <main+0x4>
+ 1:15 S * 0 0 0 +0x000000000000072b <main+0x7>
+
+EOF
+
+exit 0
diff --git a/tests/run-strip-largealign.sh b/tests/run-strip-largealign.sh
new file mode 100755
index 00000000..4f81d3c1
--- /dev/null
+++ b/tests/run-strip-largealign.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2021 Runsafe Security, Inc.
+# 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
+
+# = testfile-largealign.S =
+# section .data
+# align 4096
+# dd 0x12345678
+#
+# nasm -f elf64 -o testfile-largealign.o testfile-largealign.S
+
+infile=testfile-largealign.o
+outfile=$infile.stripped
+
+testfiles $infile
+tempfiles $outfile
+
+testrun ${abs_top_builddir}/src/strip -o $outfile $infile
+testrun ${abs_top_builddir}/src/elflint --gnu $outfile
diff --git a/tests/run-varlocs-vars.sh b/tests/run-varlocs-vars.sh
new file mode 100755
index 00000000..e7598bf0
--- /dev/null
+++ b/tests/run-varlocs-vars.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2013, 2021 Red Hat, Inc.
+# 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 generated with:
+#
+# $ cat foo.c
+# int x = 1;
+# int y = 2;
+#
+# for cc in gcc clang; do
+# for v in 4 5; do
+# for w in 32 64; do
+# out="testfile-vars-$cc-dwarf$v-$w.o"
+# "$cc" -m"$w" -Wall -Wextra -gdwarf-"$v" -c foo.c -o "$out"
+# done
+# done
+# done
+
+testfiles testfile-vars-clang-dwarf4-32.o
+testfiles testfile-vars-clang-dwarf4-64.o
+testfiles testfile-vars-clang-dwarf5-32.o
+testfiles testfile-vars-clang-dwarf5-64.o
+testfiles testfile-vars-gcc-dwarf4-32.o
+testfiles testfile-vars-gcc-dwarf4-64.o
+testfiles testfile-vars-gcc-dwarf5-32.o
+testfiles testfile-vars-gcc-dwarf5-64.o
+
+tempfiles varlocs.out
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf4-32.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr(0x0)}
+ location (exprloc) {addr(0x4)}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf4-64.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr(0x0)}
+ location (exprloc) {addr(0x4)}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf5-32.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr: 0x0}
+ location (exprloc) {addr: 0x4}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf5-32.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr: 0x0}
+ location (exprloc) {addr: 0x4}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf4-32.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr(0x0)}
+ location (exprloc) {addr(0x4)}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf4-64.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr(0x0)}
+ location (exprloc) {addr(0x4)}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf5-32.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr(0x0)}
+ location (exprloc) {addr(0x4)}
+EOF
+
+testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf5-64.o | grep exprloc > varlocs.out
+diff -u varlocs.out - <<EOF
+ location (exprloc) {addr(0x0)}
+ location (exprloc) {addr(0x4)}
+EOF
+
+exit 0
diff --git a/tests/show-die-info.c b/tests/show-die-info.c
index 34e27a3b..1a3191cd 100644
--- a/tests/show-die-info.c
+++ b/tests/show-die-info.c
@@ -97,7 +97,7 @@ handle (Dwarf *dbg, Dwarf_Die *die, int n)
printf ("%*s Attrs :", n * 5, "");
for (cnt = 0; cnt < 0xffff; ++cnt)
if (dwarf_hasattr (die, cnt))
- printf (" %s", dwarf_attr_string (cnt));
+ printf (" %s", dwarf_attr_string (cnt) ?: "<unknown>");
puts ("");
if (dwarf_hasattr (die, DW_AT_low_pc) && dwarf_lowpc (die, &addr) == 0)
diff --git a/tests/testfile-dwarf5-fat-lto.o.bz2 b/tests/testfile-dwarf5-fat-lto.o.bz2
new file mode 100644
index 00000000..ce3659f4
--- /dev/null
+++ b/tests/testfile-dwarf5-fat-lto.o.bz2
Binary files differ
diff --git a/tests/testfile-largealign.o.bz2 b/tests/testfile-largealign.o.bz2
new file mode 100644
index 00000000..324c1eae
--- /dev/null
+++ b/tests/testfile-largealign.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf4-32.o.bz2 b/tests/testfile-vars-clang-dwarf4-32.o.bz2
new file mode 100644
index 00000000..c1ddf81f
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf4-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf4-64.o.bz2 b/tests/testfile-vars-clang-dwarf4-64.o.bz2
new file mode 100644
index 00000000..df33299f
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf4-64.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf5-32.o.bz2 b/tests/testfile-vars-clang-dwarf5-32.o.bz2
new file mode 100644
index 00000000..b1d6b6c4
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf5-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf5-64.o.bz2 b/tests/testfile-vars-clang-dwarf5-64.o.bz2
new file mode 100644
index 00000000..adf6c6a5
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf5-64.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf4-32.o.bz2 b/tests/testfile-vars-gcc-dwarf4-32.o.bz2
new file mode 100644
index 00000000..da9aac73
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf4-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf4-64.o.bz2 b/tests/testfile-vars-gcc-dwarf4-64.o.bz2
new file mode 100644
index 00000000..26421644
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf4-64.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf5-32.o.bz2 b/tests/testfile-vars-gcc-dwarf5-32.o.bz2
new file mode 100644
index 00000000..cb1c7054
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf5-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf5-64.o.bz2 b/tests/testfile-vars-gcc-dwarf5-64.o.bz2
new file mode 100644
index 00000000..e286f8f7
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf5-64.o.bz2
Binary files differ
diff --git a/tests/testfile_multi_noline.bz2 b/tests/testfile_multi_noline.bz2
new file mode 100755
index 00000000..39320d1f
--- /dev/null
+++ b/tests/testfile_multi_noline.bz2
Binary files differ
diff --git a/tests/testfile_nvidia_linemap.bz2 b/tests/testfile_nvidia_linemap.bz2
new file mode 100644
index 00000000..8a6d09fb
--- /dev/null
+++ b/tests/testfile_nvidia_linemap.bz2
Binary files differ
diff --git a/tests/varlocs.c b/tests/varlocs.c
index 152c6555..d2c13767 100644
--- a/tests/varlocs.c
+++ b/tests/varlocs.c
@@ -76,7 +76,7 @@ dwarf_encoding_string (unsigned int code)
if (likely (code < sizeof (known) / sizeof (known[0])))
return known[code];
- return NULL;
+ return "<unknown encoding>";
}
static const char *
@@ -88,7 +88,7 @@ dwarf_tag_string (unsigned int tag)
DWARF_ALL_KNOWN_DW_TAG
#undef DWARF_ONE_KNOWN_DW_TAG
default:
- return NULL;
+ return "<unknown tag>";
}
}
@@ -101,7 +101,7 @@ dwarf_attr_string (unsigned int attrnum)
DWARF_ALL_KNOWN_DW_AT
#undef DWARF_ONE_KNOWN_DW_AT
default:
- return NULL;
+ return "<unknown attr>";
}
}
@@ -114,7 +114,7 @@ dwarf_form_string (unsigned int form)
DWARF_ALL_KNOWN_DW_FORM
#undef DWARF_ONE_KNOWN_DW_FORM
default:
- return NULL;
+ return "<unknown form>";
}
}
@@ -160,7 +160,7 @@ dwarf_opcode_string (unsigned int code)
if (likely (code < sizeof (known) / sizeof (known[0])))
return known[code];
- return NULL;
+ return "<unknown opcode>";
}
// Forward reference for print_expr_block.
@@ -198,7 +198,6 @@ print_expr (Dwarf_Attribute *attr, Dwarf_Op *expr, Dwarf_Addr addr, int depth)
uint8_t atom = expr->atom;
const char *opname = dwarf_opcode_string (atom);
- assert (opname != NULL);
switch (atom)
{