From c0f9be62e2beffa4db947f424e97e9f6effcc31e Mon Sep 17 00:00:00 2001 From: zhanghaibo Date: Tue, 25 Apr 2023 18:45:37 +0800 Subject: [PATCH 1/2] upgrade to v0.188 Signed-off-by: zhanghaibo Change-Id: I83c8756f5ce0a464b037bc963cfdce43df82921b --- AUTHORS | 106 +- AUTHORS.sh | 12 + ChangeLog | 107 + Makefile.am | 3 +- NEWS | 58 + backends/ChangeLog | 33 + backends/Makefile.am | 3 +- backends/arm_init.c | 1 + backends/arm_machineflagname.c | 156 + backends/ppc_initreg.c | 66 +- backends/riscv_init.c | 25 +- backends/riscv_retval.c | 86 +- backends/riscv_symbol.c | 45 + config/ChangeLog | 74 + config/Makefile.am | 9 +- config/debuginfod.service | 2 +- config/debuginfod.sysconfig | 22 +- config/elfutils.spec.in | 65 +- config/eu.am | 4 +- config/profile.csh.in | 25 +- config/profile.sh.in | 14 +- configure.ac | 122 +- debuginfod/ChangeLog | 430 +++ debuginfod/Makefile.am | 4 +- debuginfod/debuginfod-client.c | 1101 ++++-- debuginfod/debuginfod-find.c | 23 +- debuginfod/debuginfod.cxx | 1334 +++++-- debuginfod/debuginfod.h.in | 14 + debuginfod/libdebuginfod.map | 4 + doc/ChangeLog | 85 + doc/Makefile.am | 8 +- doc/debuginfod-client-config.7 | 136 + doc/debuginfod-find.1 | 34 +- doc/debuginfod.8 | 191 +- doc/debuginfod.service.8 | 30 + doc/debuginfod_find_debuginfo.3 | 118 +- doc/debuginfod_find_section.3 | 1 + doc/debuginfod_get_headers.3 | 2 + doc/man3 | 1 + doc/man7 | 1 + doc/readelf.1 | 5 +- lib/ChangeLog | 92 + lib/Makefile.am | 4 +- lib/color.c | 8 +- lib/dynamicsizehash.c | 2 +- lib/dynamicsizehash_concurrent.c | 28 +- lib/error.c | 75 + lib/eu-config.h | 66 +- lib/fixedsizehash.h | 6 - lib/libeu.h | 2 + lib/printversion.c | 3 +- lib/system.h | 50 +- lib/xasprintf.c | 51 + lib/xmalloc.c | 1 - libasm/ChangeLog | 22 + libasm/asm_abort.c | 1 - libasm/asm_addint8.c | 2 - libasm/asm_align.c | 5 +- libasm/asm_begin.c | 5 +- libasm/asm_end.c | 3 - libasm/asm_error.c | 1 - libasm/asm_fill.c | 3 +- libasm/asm_newabssym.c | 2 +- libasm/asm_newcomsym.c | 2 +- libasm/asm_newscn.c | 3 +- libasm/asm_newscngrp.c | 2 +- libasm/asm_newsubscn.c | 2 +- libasm/asm_newsym.c | 2 +- libasm/disasm_begin.c | 2 +- libasm/libasmP.h | 3 + libcpu/.gitignore | 2 + libcpu/ChangeLog | 16 + libcpu/Makefile.am | 10 +- libcpu/i386_disasm.c | 3 +- libcpu/i386_lex.l | 1 - libcpu/i386_parse.y | 1 - libcpu/memory-access.h | 29 +- libcpu/riscv_disasm.c | 2 +- libdw/ChangeLog | 115 + libdw/Makefile.am | 1 + libdw/dwarf.h | 23 +- libdw/dwarf_aggregate_size.c | 50 +- libdw/dwarf_arrayorder.c | 2 +- libdw/dwarf_begin_elf.c | 125 +- libdw/dwarf_bitoffset.c | 2 +- libdw/dwarf_bitsize.c | 2 +- libdw/dwarf_bytesize.c | 2 +- libdw/dwarf_decl_column.c | 2 +- libdw/dwarf_decl_file.c | 2 +- libdw/dwarf_decl_line.c | 2 +- libdw/dwarf_end.c | 1 - libdw/dwarf_getlocation.c | 5 +- libdw/dwarf_getpubnames.c | 5 +- libdw/dwarf_getsrclines.c | 38 +- libdw/dwarf_linecontext.c | 45 + libdw/dwarf_linefunctionname.c | 52 + libdw/dwarf_next_cfi.c | 61 +- libdw/dwarf_setalt.c | 2 - libdw/dwarf_srclang.c | 4 +- libdw/libdw.h | 9 + libdw/libdw.map | 13 + libdw/libdwP.h | 17 +- libdw/libdw_find_split_unit.c | 1 - libdw/memory-access.h | 11 +- libdwelf/ChangeLog | 26 + libdwelf/dwelf_elf_begin.c | 4 +- libdwelf/dwelf_elf_e_machine_string.c | 4 + libdwelf/dwelf_strtab.c | 6 +- libdwfl/ChangeLog | 263 ++ libdwfl/Makefile.am | 5 +- libdwfl/argp-std.c | 2 - libdwfl/core-file.c | 43 +- libdwfl/debuginfod-client.c | 36 +- libdwfl/dwfl_build_id_find_debuginfo.c | 2 - libdwfl/dwfl_build_id_find_elf.c | 1 - libdwfl/dwfl_end.c | 1 - libdwfl/dwfl_error.c | 1 - libdwfl/dwfl_frame.c | 1 - libdwfl/dwfl_frame_regs.c | 12 + libdwfl/dwfl_module.c | 1 - libdwfl/dwfl_module_build_id.c | 4 +- libdwfl/dwfl_module_getdwarf.c | 1 - libdwfl/dwfl_report_elf.c | 6 +- libdwfl/dwfl_segment_report_module.c | 186 +- libdwfl/find-debuginfo.c | 1 - libdwfl/frame_unwind.c | 40 +- libdwfl/gzip.c | 2 - libdwfl/image-header.c | 28 +- libdwfl/libdwfl.h | 52 +- libdwfl/libdwflP.h | 18 +- libdwfl/libdwfl_crc32.c | 1 - libdwfl/link_map.c | 96 +- libdwfl/linux-core-attach.c | 2 +- libdwfl/linux-pid-attach.c | 3 +- libdwfl/offline.c | 35 +- libdwfl/open.c | 32 +- libebl/ChangeLog | 29 + libebl/ebl-hooks.h | 2 +- libebl/eblclosebackend.c | 1 - libebl/ebldynamictagname.c | 2 +- libebl/eblmachineflagname.c | 11 +- libebl/eblobjnote.c | 4 + libebl/eblobjnotetypename.c | 3 + libebl/eblopenbackend.c | 8 +- libebl/libeblP.h | 1 - libelf/ChangeLog | 134 + libelf/common.h | 7 +- libelf/elf.h | 224 +- libelf/elf32_checksum.c | 5 +- libelf/elf32_getphdr.c | 2 - libelf/elf32_getshdr.c | 2 - libelf/elf32_updatefile.c | 7 +- libelf/elf32_updatenull.c | 2 - libelf/elf32_xlatetof.c | 5 +- libelf/elf32_xlatetom.c | 1 - libelf/elf_begin.c | 72 +- libelf/elf_cntl.c | 2 - libelf/elf_compress.c | 2 - libelf/elf_end.c | 1 - libelf/elf_error.c | 1 - libelf/elf_getarsym.c | 15 +- libelf/elf_getdata.c | 40 +- libelf/elf_getdata_rawchunk.c | 18 +- libelf/elf_getscn.c | 4 +- libelf/elf_getshdrstrndx.c | 2 - libelf/elf_newdata.c | 2 +- libelf/elf_newscn.c | 10 +- libelf/elf_readall.c | 4 +- libelf/elf_strptr.c | 4 +- libelf/elf_update.c | 4 +- libelf/gelf_xlate.c | 11 +- libelf/libelfP.h | 6 +- libelf/libelf_crc32.c | 1 - libelf/nlist.c | 1 - libelf/version_xlate.h | 73 +- m4/ChangeLog | 9 + m4/biarch.m4 | 4 +- m4/zip.m4 | 2 +- po/ChangeLog | 23 + po/de.po | 2494 ++++++------ po/es.po | 2524 ++++++------ po/ja.po | 3608 +++++++++--------- po/pl.po | 2524 ++++++------ po/uk.po | 2520 ++++++------ src/ChangeLog | 168 + src/Makefile.am | 3 +- src/addr2line.c | 18 +- src/ar.c | 46 +- src/arlib-argp.c | 1 - src/arlib.c | 9 +- src/arlib.h | 2 +- src/arlib2.c | 1 - src/elfclassify.c | 3 +- src/elfcmp.c | 1 - src/elfcompress.c | 29 +- src/elflint.c | 19 +- src/findtextrel.c | 60 +- src/nm.c | 32 +- src/objdump.c | 34 +- src/ranlib.c | 1 - src/readelf.c | 541 ++- src/size.c | 23 +- src/strings.c | 12 +- src/strip.c | 93 +- src/unstrip.c | 177 +- tests/.gitignore | 1 + tests/ChangeLog | 481 +++ tests/Makefile.am | 173 +- tests/alldts.c | 5 +- tests/backtrace-subr.sh | 4 +- tests/backtrace.c | 61 +- tests/debuginfod-rpms/hello2.specfile | 57 + tests/debuginfod-rpms/hello3.specfile | 60 + tests/debuginfod-subr.sh | 170 + tests/dwfl-report-offline-memory.c | 102 + tests/elfcopy.c | 2 +- tests/low_high_pc.c | 2 +- tests/nvidia_extended_linemap_libdw.c | 166 + tests/run-alldts.sh | 2 +- tests/run-ar-N.sh | 65 + tests/run-debuginfod-archive-groom.sh | 166 + tests/run-debuginfod-archive-rename.sh | 103 + tests/run-debuginfod-archive-test.sh | 87 + tests/run-debuginfod-artifact-running.sh | 119 + tests/run-debuginfod-dlopen.sh | 91 + tests/run-debuginfod-duplicate-urls.sh | 56 + tests/run-debuginfod-extraction-passive.sh | 77 + tests/run-debuginfod-extraction.sh | 106 + tests/run-debuginfod-fd-prefetch-caches.sh | 150 + tests/run-debuginfod-federation-link.sh | 164 + tests/run-debuginfod-federation-metrics.sh | 210 + tests/run-debuginfod-federation-sqlite.sh | 202 + tests/run-debuginfod-file.sh | 41 + tests/run-debuginfod-malformed.sh | 111 + tests/run-debuginfod-negative-cache.sh | 83 + tests/run-debuginfod-no-urls.sh | 41 + tests/run-debuginfod-percent-escape.sh | 61 + tests/run-debuginfod-query-retry.sh | 35 + tests/run-debuginfod-regex.sh | 101 + tests/run-debuginfod-response-headers.sh | 137 + tests/run-debuginfod-section.sh | 135 + tests/run-debuginfod-sizetime.sh | 82 + tests/run-debuginfod-tmp-home.sh | 126 + tests/run-debuginfod-webapi-concurrency.sh | 69 + tests/run-debuginfod-writable.sh | 88 + tests/run-debuginfod-x-forwarded-for.sh | 63 + tests/run-dwfl-report-offline-memory.sh | 26 + tests/run-large-elf-file.sh | 11 + tests/run-nvidia-extended-linemap-libdw.sh | 60 + tests/run-nvidia-extended-linemap-readelf.sh | 120 + tests/run-readelf-Dd.sh | 66 + tests/run-readelf-arm-flags.sh | 30 + tests/run-readelf-d.sh | 7 +- tests/run-readelf-fat-lto.sh | 53 + tests/run-readelf-multi-noline.sh | 170 + tests/run-readelf-s.sh | 6 + tests/run-strip-largealign.sh | 35 + tests/run-strip-test.sh | 2 +- tests/run-varlocs-vars.sh | 93 + tests/show-die-info.c | 2 +- tests/testfile-arm-flags.bz2 | Bin 0 -> 2593 bytes tests/testfile-dwarf5-fat-lto.o.bz2 | Bin 0 -> 3101 bytes tests/testfile-largealign.o.bz2 | Bin 0 -> 183 bytes tests/testfile-vars-clang-dwarf4-32.o.bz2 | Bin 0 -> 568 bytes tests/testfile-vars-clang-dwarf4-64.o.bz2 | Bin 0 -> 605 bytes tests/testfile-vars-clang-dwarf5-32.o.bz2 | Bin 0 -> 741 bytes tests/testfile-vars-clang-dwarf5-64.o.bz2 | Bin 0 -> 761 bytes tests/testfile-vars-gcc-dwarf4-32.o.bz2 | Bin 0 -> 660 bytes tests/testfile-vars-gcc-dwarf4-64.o.bz2 | Bin 0 -> 691 bytes tests/testfile-vars-gcc-dwarf5-32.o.bz2 | Bin 0 -> 728 bytes tests/testfile-vars-gcc-dwarf5-64.o.bz2 | Bin 0 -> 768 bytes tests/testfile_multi_noline.bz2 | Bin 0 -> 3155 bytes tests/testfile_nvidia_linemap.bz2 | Bin 0 -> 2365 bytes tests/varlocs.c | 11 +- 274 files changed, 18512 insertions(+), 8518 deletions(-) create mode 100644 AUTHORS.sh create mode 100644 backends/arm_machineflagname.c create mode 100644 doc/debuginfod-client-config.7 create mode 100644 doc/debuginfod.service.8 create mode 100644 doc/debuginfod_find_section.3 create mode 100644 doc/debuginfod_get_headers.3 create mode 120000 doc/man3 create mode 120000 doc/man7 create mode 100644 lib/error.c create mode 100644 lib/xasprintf.c create mode 100644 libdw/dwarf_linecontext.c create mode 100644 libdw/dwarf_linefunctionname.c create mode 100644 tests/debuginfod-rpms/hello2.specfile create mode 100644 tests/debuginfod-rpms/hello3.specfile create mode 100755 tests/debuginfod-subr.sh create mode 100644 tests/dwfl-report-offline-memory.c create mode 100644 tests/nvidia_extended_linemap_libdw.c create mode 100755 tests/run-ar-N.sh create mode 100755 tests/run-debuginfod-archive-groom.sh create mode 100755 tests/run-debuginfod-archive-rename.sh create mode 100755 tests/run-debuginfod-archive-test.sh create mode 100755 tests/run-debuginfod-artifact-running.sh create mode 100755 tests/run-debuginfod-dlopen.sh create mode 100755 tests/run-debuginfod-duplicate-urls.sh create mode 100755 tests/run-debuginfod-extraction-passive.sh create mode 100755 tests/run-debuginfod-extraction.sh create mode 100755 tests/run-debuginfod-fd-prefetch-caches.sh create mode 100755 tests/run-debuginfod-federation-link.sh create mode 100755 tests/run-debuginfod-federation-metrics.sh create mode 100755 tests/run-debuginfod-federation-sqlite.sh create mode 100755 tests/run-debuginfod-file.sh create mode 100755 tests/run-debuginfod-malformed.sh create mode 100755 tests/run-debuginfod-negative-cache.sh create mode 100755 tests/run-debuginfod-no-urls.sh create mode 100755 tests/run-debuginfod-percent-escape.sh create mode 100755 tests/run-debuginfod-query-retry.sh create mode 100755 tests/run-debuginfod-regex.sh create mode 100755 tests/run-debuginfod-response-headers.sh create mode 100755 tests/run-debuginfod-section.sh create mode 100755 tests/run-debuginfod-sizetime.sh create mode 100755 tests/run-debuginfod-tmp-home.sh create mode 100755 tests/run-debuginfod-webapi-concurrency.sh create mode 100755 tests/run-debuginfod-writable.sh create mode 100755 tests/run-debuginfod-x-forwarded-for.sh create mode 100755 tests/run-dwfl-report-offline-memory.sh create mode 100755 tests/run-nvidia-extended-linemap-libdw.sh create mode 100755 tests/run-nvidia-extended-linemap-readelf.sh create mode 100755 tests/run-readelf-Dd.sh create mode 100755 tests/run-readelf-arm-flags.sh create mode 100755 tests/run-readelf-fat-lto.sh create mode 100755 tests/run-readelf-multi-noline.sh create mode 100755 tests/run-strip-largealign.sh create mode 100755 tests/run-varlocs-vars.sh create mode 100755 tests/testfile-arm-flags.bz2 create mode 100644 tests/testfile-dwarf5-fat-lto.o.bz2 create mode 100644 tests/testfile-largealign.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf4-32.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf4-64.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf5-32.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf5-64.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf4-32.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf4-64.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf5-32.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf5-64.o.bz2 create mode 100755 tests/testfile_multi_noline.bz2 create mode 100644 tests/testfile_nvidia_linemap.bz2 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..52efca04 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,110 @@ +2022-11-02 Mark Wielaard + + * configure.ac (AC_INIT): Set version to 0.188. + * NEWS: Likewise. + +2022-10-31 Aaron Merey + + * NEWS: Add debuginfod_find_section. + +2022-10-20 Mark Wielaard + + * Makefile.am (rpm): Remove --sign. + +2022-10-22 Mark Wielaard + + * configure.ac: Use AC_PROG_CC with autoconf 2.70, or AC_PROG_CC_C99 + for earlier versions. Use AC_PROG_LEX([noyywrap]). + +2022-09-13 Aleksei Vetrov + + * NEWS (libdwfl): Add dwfl_report_offline_memory. + +2022-09-27 Taketo Kabe + + * debuginfod/debuginfod-client.c: Correctly get timestamp when + compiling with -D_TIME_BITS=64 on 32bit environment. + +2022-04-28 Di Chen + + * NEWS: Add readefl -D, --use-dynamic. + +2022-07-28 Di Chen + + * NEWS: Add dwfl_frame_reg. + +2022-07-13 Mark Wielaard + + * NEWS: Add dwfl_get_debuginfod_client. + +2022-06-02 Mark Wielaard + + * configure.ac (OLD_LIBMICROHTTPD): New AM_CONDITIONAL based on + libmicrohttpd < 0.9.51. + +2022-05-02 Mark Wielaard + + * Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Remove + --enable-valgrind --enable-sanitize-undefined. + +2022-04-25 Mark Wielaard + + * configure.ac (AC_INIT): Set version to 0.187. + * NEWS: Add some more 0.187 items. + +2022-04-24 Frank Ch. Eigler + + * AUTHORS.sh, .mailmap: New files. + * AUTHORS: Regenerated to cover entire history of elfutils. + +2022-04-24 Mark Wielaard + + * configure.ac (AC_CHECK_FUNCS): Add mremap. + +2021-03-20 Mark Wielaard + + * configure.ac: Remove -m64 on 32bit target comments for + utrace_BIARCH check. + +2021-03-14 Mark Wielaard + + * configure.ac: Use AS_HELP_STRING instead of AC_HELP_STRING. + +2021-03-11 Mark Wielaard + + * NEWS: Document new --relative option for addr2line. + +2022-03-10 Mark Wielaard + + * 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 + + * configure.ac: Add --enable-sanitize-address. + +2021-11-10 Mark Wielaard + + * configure.ac (AC_INIT): Set version to 0.186. + * NEWS: Add translation item. + +2021-09-03 John Mellor-Crummey + + * NEWS: Read inlining info in NVIDIA extended line map + +2021-08-10 Adrian Ratiu + + * configure.ac (AC_CACHE_CHECK): Rework std=gnu99 check to allow clang. + +2021-08-20 Saleem Abdulrasool + + * Add AC_CHECK_HEADERS for error.h and err.h. + +2021-07-28 Mark Wielaard + + * configure.ac (AC_CHECK_DECLS): Add reallocarray check. + 2021-05-22 Mark Wielaard * configure.ac (AC_INIT): Set version to 0.185. diff --git a/Makefile.am b/Makefile.am index 9c47afa9..e92e05c2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -38,14 +38,13 @@ EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ # Run all tests under valgrind. AM_DISTCHECK_CONFIGURE_FLAGS = \ --libdir=`echo $(libdir) | sed "s,^$(exec_prefix),$$dc_install_base,"`\ - --enable-valgrind --enable-sanitize-undefined \ CC="$(CC)" distcheck-hook: chmod -R u+w $(distdir) rpm: dist - rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.bz2 + rpmbuild -ts elfutils-@PACKAGE_VERSION@.tar.bz2 if GCOV diff --git a/NEWS b/NEWS index a73d39ec..71534b8c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,61 @@ +Version 0.188 + +readelf: Add -D, --use-dynamic option. + +debuginfod-client: Add $DEBUGINFOD_HEADERS_FILE setting to supply outgoing + HTTP headers. Add new function debuginfod_find_section. + +debuginfod: Add --disable-source-scan option. + +libdwfl: Add new function dwfl_get_debuginfod_client. + Add new function dwfl_frame_reg. + Add new function dwfl_report_offline_memory. + +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..5b0daffe 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,36 @@ +2022-08-09 Andreas Schwab + + * riscv_init.c (riscv_init): HOOK segment_type_name, + section_type_name, dynamic_tag_name and dynamic_tag_check. + * riscv_symbol.c (riscv_segment_type_name): New function. + (riscv_section_type_name): Likewise. + (riscv_dynamic_tag_name): Likewise. + (riscv_dynamic_tag_check): Likewise. + +2022-06-01 Ulrich Drepper + + * Makefile.am (arm_SRCS): Add arm_machineflagname.c. + * arm_init.c (arm_init): Hook in arm_machine_flag_name. + * arm_machineflagname.c: New file. + +2022-02-16 Mark Wielaard + + * ppc_initreg.c (ppc_set_initial_registers_tid): Define struct + pt_regs32. Use PTRACE_GETREGSET. + +2021-09-29 William Cohen + + * 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 * aarch64_symbol.c (aarch64_data_marker_symbol): Use startswith. diff --git a/backends/Makefile.am b/backends/Makefile.am index 62916c9c..9566377f 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -56,7 +56,8 @@ alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.c \ alpha_corenote.c alpha_auxv.c arm_SRCS = arm_init.c arm_symbol.c arm_regs.c arm_corenote.c \ - arm_auxv.c arm_attrs.c arm_retval.c arm_cfi.c arm_initreg.c + arm_auxv.c arm_attrs.c arm_retval.c arm_cfi.c arm_initreg.c \ + arm_machineflagname.c aarch64_SRCS = aarch64_init.c aarch64_regs.c aarch64_symbol.c \ aarch64_corenote.c aarch64_retval.c aarch64_cfi.c \ diff --git a/backends/arm_init.c b/backends/arm_init.c index edd53b75..70b75942 100644 --- a/backends/arm_init.c +++ b/backends/arm_init.c @@ -59,6 +59,7 @@ arm_init (Elf *elf __attribute__ ((unused)), HOOK (eh, check_reloc_target_type); HOOK (eh, symbol_type_name); HOOK (eh, data_marker_symbol); + HOOK (eh, machine_flag_name); /* We only unwind the core integer registers. */ eh->frame_nregs = 16; diff --git a/backends/arm_machineflagname.c b/backends/arm_machineflagname.c new file mode 100644 index 00000000..e93092ae --- /dev/null +++ b/backends/arm_machineflagname.c @@ -0,0 +1,156 @@ +/* Arm-specific ELF flag names. + Copyright (C) 2022 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 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define BACKEND arm_ +#include "libebl_CPU.h" + +const char * +arm_machine_flag_name (Elf64_Word orig, Elf64_Word *flagref) +{ + unsigned version = EF_ARM_EABI_VERSION (*flagref) >> 24; + if (version != 0) + { + static const char vername[5][14] = + { + "Version1 EABI", + "Version2 EABI", + "Version3 EABI", + "Version4 EABI", + "Version5 EABI", + }; + *flagref &= ~((Elf64_Word) EF_ARM_EABIMASK); + return vername[version - 1]; + } + switch (EF_ARM_EABI_VERSION (orig)) + { + case EF_ARM_EABI_VER2: + if ((*flagref & EF_ARM_DYNSYMSUSESEGIDX) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_DYNSYMSUSESEGIDX); + return "dynamic symbols use segment index"; + } + if ((*flagref & EF_ARM_MAPSYMSFIRST) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_MAPSYMSFIRST); + return "mapping symbols precede others"; + } + FALLTHROUGH; + case EF_ARM_EABI_VER1: + if ((*flagref & EF_ARM_SYMSARESORTED) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_SYMSARESORTED); + return "sorted symbol tables"; + } + break; + case EF_ARM_EABI_VER3: + break; + case EF_ARM_EABI_VER5: + if ((*flagref & EF_ARM_SOFT_FLOAT) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_SOFT_FLOAT); + return "soft-float ABI"; + } + if ((*flagref & EF_ARM_VFP_FLOAT) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_VFP_FLOAT); + return "hard-float ABI"; + } + FALLTHROUGH; + case EF_ARM_EABI_VER4: + if ((*flagref & EF_ARM_BE8) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_BE8); + return "BE8"; + } + if ((*flagref & EF_ARM_LE8) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_LE8); + return "LE8"; + } + break; + case EF_ARM_EABI_UNKNOWN: + if ((*flagref & EF_ARM_INTERWORK) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_INTERWORK); + return "interworking enabled"; + } + if ((*flagref & EF_ARM_APCS_26) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_APCS_26); + return "uses APCS/26"; + } + if ((*flagref & EF_ARM_APCS_FLOAT) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_APCS_FLOAT); + return "uses APCS/float"; + } + if ((*flagref & EF_ARM_PIC) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_PIC); + return "position independent"; + } + if ((*flagref & EF_ARM_ALIGN8) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_ALIGN8); + return "8 bit structure alignment"; + } + if ((*flagref & EF_ARM_NEW_ABI) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_NEW_ABI); + return "uses new ABI"; + } + if ((*flagref & EF_ARM_OLD_ABI) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_OLD_ABI); + return "uses old ABI"; + } + if ((*flagref & EF_ARM_SOFT_FLOAT) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_SOFT_FLOAT); + return "software FP"; + } + if ((*flagref & EF_ARM_VFP_FLOAT) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_VFP_FLOAT); + return "VFP"; + } + if ((*flagref & EF_ARM_MAVERICK_FLOAT) != 0) + { + *flagref &= ~((Elf64_Word) EF_ARM_MAVERICK_FLOAT); + return "Maverick FP"; + } + break; + default: + break; + } + return NULL; +} 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 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 # include +# ifndef PTRACE_GETREGSET +# include +# endif # include +# include #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 *) ®s; + struct iovec iovec; + iovec.iov_base = ®s; + 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..f2d46082 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 * @@ -59,14 +65,25 @@ riscv_init (Elf *elf, HOOK (eh, check_special_symbol); HOOK (eh, machine_flag_check); HOOK (eh, set_initial_registers_tid); + HOOK (eh, segment_type_name); + HOOK (eh, section_type_name); + HOOK (eh, dynamic_tag_name); + HOOK (eh, dynamic_tag_check); if (eh->class == ELFCLASS64) 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/backends/riscv_symbol.c b/backends/riscv_symbol.c index c34b7702..c149b8ba 100644 --- a/backends/riscv_symbol.c +++ b/backends/riscv_symbol.c @@ -119,3 +119,48 @@ riscv_check_special_symbol (Elf *elf, const GElf_Sym *sym, return false; } + +const char * +riscv_segment_type_name (int segment, char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (segment) + { + case PT_RISCV_ATTRIBUTES: + return "RISCV_ATTRIBUTES"; + } + return NULL; +} + +/* Return symbolic representation of section type. */ +const char * +riscv_section_type_name (int type, + char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (type) + { + case SHT_RISCV_ATTRIBUTES: + return "RISCV_ATTRIBUTES"; + } + + return NULL; +} + +const char * +riscv_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (tag) + { + case DT_RISCV_VARIANT_CC: + return "RISCV_VARIANT_CC"; + } + return NULL; +} + +bool +riscv_dynamic_tag_check (int64_t tag) +{ + return tag == DT_RISCV_VARIANT_CC; +} diff --git a/config/ChangeLog b/config/ChangeLog index 2cdcfa72..c63caa0c 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,77 @@ +2022-10-02 Mark Wielaard + + * elfutils.spec.in: Update for 0.188. + Include %{_mandir}/man8/debuginfod*.8* for new + debuginfod-service.8 man page. + Remove duplicate %{_sysconfdir}/sysconfig/debuginfod. + +2022-10-20 Mark Wielaard + + * elfutils.spec.in: Escape % in comments. + +2022-10-27 Mark Wielaard + + * eu.am: Use grep -F instead of fgrep. + +2022-10-27 Mark Wielaard + + * elfutils.spec.in: Add BuildRequires socat. + +2022-08-17 Martin Liska + + * debuginfod.service: Add new debuginfod.sysconfig + value DEBUGINFOD_EXTRA_ARGS. + * debuginfod.sysconfig: Likewise. + +2022-08-16 Martin Liska + + * profile.csh.in: Support nullglob in profile.*.in files. + * profile.sh.in: Likewise. + +2022-08-17 Frank Ch. Eigler + + * debuginfod.sysconfig: Clarify cmdline vs client-env variables. + +2022-05-03 Mark Wielaard + + * profile.csh.in: Move the 2>/dev/null inside the sh -c '' quotes. + +2022-04-25 Mark Wielaard + + * elfutils.spec.in: Update for 0.187. + +2022-01-19 Ahelenia Ziemiańska + + * 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 + + * elfutils.spec.in (debuginfod-client): Add an explicit requires + on elfutils-libs and elfutils-libelf. + +2021-11-10 Mark Wielaard + + * elfutils.spec.in: Update for 0.186. + +2021-10-03 Frank Ch. Eigler + + 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 + + * eu.am (STACK_USAGE_NO_ERROR): New variable. + +2021-07-06 Alice Zhang + + * debuginfod.sysconfig: Introduce default retry limit. + 2021-05-10 Mark Wielaard * 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.service b/config/debuginfod.service index b64d8cb9..4c7785a9 100644 --- a/config/debuginfod.service +++ b/config/debuginfod.service @@ -8,7 +8,7 @@ EnvironmentFile=/etc/sysconfig/debuginfod User=debuginfod Group=debuginfod #CacheDirectory=debuginfod -ExecStart=/usr/bin/debuginfod -d /var/cache/debuginfod/debuginfod.sqlite -p $DEBUGINFOD_PORT $DEBUGINFOD_VERBOSE $DEBUGINFOD_PRAGMAS $DEBUGINFOD_PATHS +ExecStart=/usr/bin/debuginfod -d /var/cache/debuginfod/debuginfod.sqlite -p $DEBUGINFOD_PORT $DEBUGINFOD_VERBOSE $DEBUGINFOD_PRAGMAS $DEBUGINFOD_PATHS $DEBUGINFOD_EXTRA_ARGS # Stopping can take a long time if scanning of large archives is in progress TimeoutStopSec=60 PrivateTmp=yes diff --git a/config/debuginfod.sysconfig b/config/debuginfod.sysconfig index 44603874..4ffb7e02 100644 --- a/config/debuginfod.sysconfig +++ b/config/debuginfod.sysconfig @@ -1,14 +1,26 @@ -# +################# +# debuginfod command line options +# see [man debuginfod] + +# required DEBUGINFOD_PORT="8002" -#DEBUGINFOD_VERBOSE="-v" + +# add more -v for more verbosity +DEBUGINFOD_EXTRA_ARGS="-t43200 -F -R" # some common places to find trustworthy ELF/DWARF files and RPMs -DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin /usr/lib /usr/lib64 /var/cache/yum /var/cache/dnf /var/lib/pulp" +DEBUGINFOD_PATHS="/usr/lib/debug /usr/bin /usr/libexec /usr/sbin /usr/lib /usr/lib64 /var/cache/yum /var/cache/dnf /var/lib/pulp" -# prefer reliability/durability over performance +# prefer sqlite database durability over performance #DEBUGINFOD_PRAGMAS="-D 'pragma synchronous=full;'" -# upstream debuginfods +################# +# these environment variables affect federated queries to upstream servers +# see [man debuginfod-client-config] + #DEBUGINFOD_URLS="http://secondhost:8002 http://thirdhost:8002" #DEBUGINFOD_TIMEOUT="5" +#DEBUGINFOD_RETRY_LIMIT="2" #DEBUGINFOD_CACHE_DIR="" +#DEBUGINFOD_VERBOSE="1" +#DEBUGINFOD_PROGRESS="1" diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 5552352b..c444d1f5 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -40,6 +40,8 @@ BuildRequires: iproute BuildRequires: procps BuildRequires: bsdtar BuildRequires: curl +# For run-debuginfod-response-headers.sh test case +BuildRequires: socat %define _gnu %{nil} %define _programprefix eu- @@ -141,6 +143,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 @@ -260,18 +265,18 @@ fi %dir %{_includedir}/elfutils %{_includedir}/elfutils/elf-knowledge.h %{_includedir}/elfutils/known-dwarf.h -#%{_includedir}/elfutils/libasm.h +#%%{_includedir}/elfutils/libasm.h %{_includedir}/elfutils/libdw.h %{_includedir}/elfutils/libdwfl.h %{_includedir}/elfutils/libdwelf.h %{_includedir}/elfutils/version.h -#%{_libdir}/libasm.so +#%%{_libdir}/libasm.so %{_libdir}/libdw.so %{_libdir}/pkgconfig/libdw.pc %files devel-static %{_libdir}/libdw.a -#%{_libdir}/libasm.a +#%%{_libdir}/libasm.a %files libelf %license COPYING-GPLV2 COPYING-LGPLV3 @@ -299,12 +304,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 @@ -313,8 +321,8 @@ fi %{_bindir}/debuginfod %config(noreplace) %{_sysconfdir}/sysconfig/debuginfod %{_unitdir}/debuginfod.service -%{_sysconfdir}/sysconfig/debuginfod -%{_mandir}/man8/debuginfod.8* +%{_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 +341,53 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Wed Nov 2 2022 Mark Wielaard 0.188-1 +- readelf: Add -D, --use-dynamic option. +- debuginfod-client: Add $DEBUGINFOD_HEADERS_FILE setting to supply + outgoing HTTP headers. + Add new function debuginfod_find_section. +- debuginfod: Add --disable-source-scan option. +- libdwfl: Add new function dwfl_get_debuginfod_client. + Add new function dwfl_frame_reg. + Add new function dwfl_report_offline_memory. + +* Mon Apr 25 2022 Mark Wielaard 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 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 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..c3cefe7e 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 @@ -133,7 +135,7 @@ textrel_found = $(textrel_msg); exit 1 else textrel_found = $(textrel_msg) endif -textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then $(textrel_found); fi +textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found); fi print-%: @echo $*=$($*) diff --git a/config/profile.csh.in b/config/profile.csh.in index 0a2d6d16..d962d969 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 /dev/null "$0"/*.urls 2>/dev/null; :' "@sysconfdir@/debuginfod" | 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..3f4397dc 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 /dev/null "@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..59be27ac 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 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 . -AC_INIT([elfutils],[0.185],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) +AC_INIT([elfutils],[0.188],[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,48 +88,16 @@ AS_IF([test "$use_locks" = yes], AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) -AC_PROG_CC +m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99]) +AC_PROG_CXX AC_PROG_RANLIB AC_PROG_YACC -AM_PROG_LEX +AC_PROG_LEX([noyywrap]) # Only available since automake 1.12 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 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 + 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 ]) AC_CHECK_DECLS([mempcpy],[],[], [#define _GNU_SOURCE #include ]) +AC_CHECK_DECLS([reallocarray],[],[], + [#define _GNU_SOURCE + #include ]) + +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) @@ -771,6 +783,7 @@ AS_IF([test "x$enable_debuginfod" != "xno"], [ enable_debuginfod=yes # presume success PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 0.9.33],[],[enable_debuginfod=no]) + PKG_CHECK_MODULES([oldlibmicrohttpd],[libmicrohttpd < 0.9.51],[old_libmicrohttpd=yes],[old_libmicrohttpd=no]) PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no]) PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no]) if test "x$enable_debuginfod" = "xno"; then @@ -780,6 +793,7 @@ AS_IF([test "x$enable_debuginfod" != "xno"], [ AS_IF([test "x$enable_debuginfod" != "xno"],AC_DEFINE([ENABLE_DEBUGINFOD],[1],[Build debuginfod])) AM_CONDITIONAL([DEBUGINFOD],[test "x$enable_debuginfod" = "xyes"]) +AM_CONDITIONAL([OLD_LIBMICROHTTPD],[test "x$old_libmicrohttpd" = "xyes"]) dnl for /etc/profile.d/elfutils.{csh,sh} default_debuginfod_urls="" @@ -807,6 +821,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 +853,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..50668e61 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,433 @@ +2022-11-01 Aaron Merey + + * debuginfod-client.c (path_escape): Add early return. + +2022-10-31 Aaron Merey + + * Makefile.am (libdebuginfod_so_LDLIBS): Add libelf. + * debuginfod-client.c (debuginfod_find_section): New function. + (path_escape): New function. + (extract_section): New function. + (cache_find_section): New function. + (debuginfod_query_server): Add support for section queries. + * debuginfod-find.c (main): Add support for section queries. + * debuginfod.cxx (extract_section): New function. + (handle_buildid_f_match): Add section parameter. When non-empty, + try to create response from section contents. + (handle_buildid_r_match): Add section parameter. When non-empty, + try to create response from section contents. + (handle_buildid_match): Add section parameter. Pass to + handle_buildid_{f,r}_match. + (handle_buildid): Handle section name when artifacttype is set to + "section". Query upstream servers via debuginfod_find_section + when necessary. + (debuginfod.h.in): Add declaration for debuginfod_find_section. + (libdebuginfod.map): Add debuginfod_find_section. + +2022-10-18 Daniel Thornburgh + + * debuginfod-client.c (debuginfod_query_server): Add DEBUGINFOD_HEADERS_FILE + setting to supply outgoing HTTP headers. + +2022-10-17 Frank Ch. Eigler + + * debuginfod.cxx (main): Report libmicrohttpd version. + +2022-09-28 Aaron Merey + + * debuginfod-client.c (debuginfod_query_server): Switch sign of some + error codes from positive to negative. + +2022-09-08 Frank Ch. Eigler + + * debuginfod-client.c (debuginfod_query_server): Clear + ->winning_headers along with ->url at the start of any new query. + +2022-09-08 Martin Liska + + * debuginfod-client.c (debuginfod_get_headers): Add to DUMMY_LIBDEBUGINFOD. + +2022-09-06 Frank Ch. Eigler + + * debuginfod-client.c (header_callback): Don't copy \r in x-d headers. + Print all headers in verbose_fd mode. + * debuginfod-find.c (parse_opt): Set verbose_fd only at verbosity >= 2. + * debuginfod.cxx (handle_buildid): Clean up header forwarding + string processing. + * debuginfod.h.in: (debuginfod_get_headers): Tweak wording. + * libdebuginfod.map: Use ELFUTILS_0.188 for new function. + +2022-07-15 Noah Sanci + + * debuginfod-client.c (header_callback): Ignore headers without + X-DEBUGINFOD prefix. + (debuginfod_query_server): Removed verbose printing headers when + undesired. + (debuginfod_get_headers): Created. + * debuginfod-find.c (main): Verbose printing headers. + * debuginfod.cxx (handle_buildid): Add headers prefixed with + X-DEBUGINFOD from federated servers to this server's response + headers. + * debuginfod.h.in (debuginfod_get_headers): Created. + * libdebuginfod.map: New elfutils version added. + +2022-09-02 Aaron Merey + + * debuginfod.cxx (parse_opt): If '-C' is given with no arg, do not + update connection_pool since it will be done at a later point. + (main): Use auto-sized connection_pool if '-C' isn't given with an + arg. Do not use MHD_USE_THREAD_PER_CONNECTION. + +2022-08-17 Martin Liska + + * debuginfod.cxx (handle_buildid): Update HTTP statistics only if + it comes from HTTP request. + +2022-08-17 Martin Liska + + * debuginfod.cxx: Print filename for "cannot open archive". + +2022-08-15 Frank Ch. Eigler + + PR29474 + * debuginfod.cxx (handle_buildid_r_match): Don't trigger false-404's + for concurrently prefetched target files. + +2022-08-02 Josef Cejka + + * debuginfod.cxx (groom): Don't evaluate regex unless needed. + +2022-07-29 Josef Cejka + + * debuginfod.cxx: Create db indexes for fast delete while grooming. + +2022-06-03 Michael Trapp + + * debuginfod.cxx (scan_source_info): New global. + (parse_opt, elf_classify): Use it. + +2022-05-09 Mark Wielaard + + * debuginfod-client.c (debuginfod_clean_cache): Move utime call to + before fts traversal. + +2022-05-09 Mark Wielaard + + * debuginfod-client.c (debuginfod_init_cache): Remove. + (debuginfod_query_server): Don't call debuginfod_init_cache, call + mkdir then debuginfod_clean_cache. + +2022-05-09 Mark Wielaard + + * debuginfod-client.c (debuginfod_config_cache): Always open with + O_CREATE first, then use fstat, only write the cache_config_default_s + value if st_size == 0, otherwise read value from file. + +2022-05-09 Mark Wielaard + + * debuginfod.cxx (conninfo): Always provide servname to getnameinfo. + +2022-05-09 Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Add + curl_easy_setopt_ck macro, use it for all curl_easy_setopt calls. + +2022-05-09 Mark Wielaard + + * debuginfod-client.c (debuginfod_write_callback): Check result + of curl_easy_getinfo. + +2022-05-05 Mark Wielaard + + * debuginfod.cxx (main): Define use_epoll. Set to MHD_USE_EPOLL + based on MHD_VERSION. Don't use MHD_USE_THREAD_PER_CONNECTION + when use_poll is set. + +2022-05-05 Mark Wielaard + + * debuginfod.cxx (main): Define mhd_flags. Use mhd_flags for + MHD_start_daemon. Try again with MHD_USE_DUAL_STACK removed if + that fails. Update clog to say either IPV4 or IPV4 and IPV6. + stop either ithe d46 or d4 daemonr. + +2022-05-09 Noah Sanci + + * debuginfod.cxx (main): Set nonzero defaults for fdcache. + +2022-05-04 Frank Ch. Eigler + Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Correct fd leak + for cache negative-hit unlink case. + (debuginfod_config_cache, debuginfod_init_cache): Correct + minor fd leaks. + * debuginfod-find.c (main): Ditto. + +2022-04-22 Mark Wielaard + + * 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 + + * debuginfod.cxx (main): Add MHD_USE_ITC to MHD_start_daemon flags. + +2022-04-13 Aaron Merey + + * 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 + + * 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 + + * debuginfod.cxx (main): Use MHD_USE_EPOLL for libmicrohttpd, to + encourage more round-robin dispatch of incoming connections. + +2021-12-09 Alexander Kanavin + + * 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 + + * debuginfod.cxx (database_stats_report): Don't format clog + using 'right' and 'setw(20)'. + +2021-12-08 Frank Ch. Eigler + + * 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 + + * debuginfod.cxx (main): Call debuginfod_pool_groom before exit. + +2021-12-08 Mark Wielaard + + * 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 + + * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex. + +2021-12-04 Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Free winning_headers. + Reset response_data_size when clearing response_data. + +2021-12-01 Mark Wielaard + + * 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 + + * debuginfod-client.c (timestamp): Use gmtime_r instead of gmtime. + (add_mhd_last_modified): Likewise. + +2021-11-10 Érico N. Rolim + + * debuginfod.cxx: include "system.h" under 'extern "C"' block. + +2021-11-05 Frank Ch. Eigler + + 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 + + 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 + + PR28240 + * debuginfod-client.c (debuginfod_query_server): Correct + negative-hit cache check sequence for root user. + +2021-10-15 Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Set + CURLOPT_PROTOCOLS. + +2021-10-06 Di Chen + + 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 + + * debuginfod-client.c (debuginfod_query_server): curl_multi_perform + now occurs before checking if response headers have arrived. + +2021-09-14 Frank Ch. Eigler + + 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 + + * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after + obatched(clog) line. +2021-09-13 Noah Sanci + + * debuginfod-client.c (debuginfod_query_server): Removed constant + operations from a loop. curl_free memory. + +2021-09-06 Dmitry V. Levin + + * debuginfod-client.c (debuginfod_begin): Remove cast of calloc return + value. + +2021-08-28 Mark Wielaard + + * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into + "file::memory:?cache=shared" for the db_path. + +2021-08-20 Di Chen + + * 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 + + * debuginfod.cxx: Remove error.h include. + +2021-08-19 Frank Ch. Eigler + + PR28249 + * debuginfod.cxx (handler_cb): Fix after_you unique_set key + to the entire incoming URL. + +2021-08-02 Noah Sanci + + 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 + + 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 + + PR28034 + * debuginfod-client.c (debuginfod_query_server): % escape filename + so the completed url is processed properly. + +2021-06-28 Noah Sanci + + 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 + + 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 + + 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 + + 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 + + * debuginfod-client.c (debuginfod_begin): Don't use client if + calloc call failed. + +2021-06-03 Frank Ch. Eigler + + 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 PR27859 diff --git a/debuginfod/Makefile.am b/debuginfod/Makefile.am index 3adb2755..f27d6e2e 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 @@ -97,7 +97,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) $(libelf) 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..0c4a00cf 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -41,8 +42,10 @@ #include "config.h" #include "debuginfod.h" #include "system.h" +#include #include #include +#include /* We might be building a bootstrap dummy library, which is really simple. */ #ifdef DUMMY_LIBDEBUGINFOD @@ -54,6 +57,9 @@ int debuginfod_find_executable (debuginfod_client *c, const unsigned char *b, int s, char **p) { return -ENOSYS; } int debuginfod_find_source (debuginfod_client *c, const unsigned char *b, int s, const char *f, char **p) { return -ENOSYS; } +int debuginfod_find_section (debuginfod_client *c, const unsigned char *b, + int s, const char *scn, char **p) + { return -ENOSYS; } void debuginfod_set_progressfn(debuginfod_client *c, debuginfod_progressfn_t fn) { } void debuginfod_set_verbose_fd(debuginfod_client *c, int fd) { } @@ -62,6 +68,8 @@ void* debuginfod_get_user_data (debuginfod_client *c) { return NULL; } const char* debuginfod_get_url (debuginfod_client *c) { return NULL; } int debuginfod_add_http_header (debuginfod_client *c, const char *h) { return -ENOSYS; } +const char* debuginfod_get_headers (debuginfod_client *c) { return NULL; } + void debuginfod_end (debuginfod_client *c) { } #else /* DUMMY_LIBDEBUGINFOD */ @@ -97,6 +105,16 @@ void debuginfod_end (debuginfod_client *c) { } #include #endif +#include + +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. */ @@ -116,6 +134,9 @@ struct debuginfod_client debuginfod_end needs to terminate. */ int default_progressfn_printed_p; + /* Indicates whether the last query was cancelled by progressfn. */ + bool progressfn_cancel; + /* File descriptor to output any verbose messages if > 0. */ int verbose_fd; @@ -127,23 +148,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 +174,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 +205,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 @@ -197,8 +223,9 @@ debuginfod_write_callback (char *ptr, size_t size, size_t nmemb, void *data) *d->target_handle = d->handle; /* update the client object */ const char *url = NULL; - (void) curl_easy_getinfo (d->handle, CURLINFO_EFFECTIVE_URL, &url); - if (url) + CURLcode curl_res = curl_easy_getinfo (d->handle, + CURLINFO_EFFECTIVE_URL, &url); + if (curl_res == CURLE_OK && url) { free (d->client->url); d->client->url = strdup(url); /* ok if fails */ @@ -218,20 +245,32 @@ debuginfod_config_cache(char *config_path, long cache_config_default_s, struct stat *st) { - int fd; - /* if the config file doesn't exist, create one with DEFFILEMODE*/ - if(stat(config_path, st) == -1) + int fd = open(config_path, O_CREAT | O_RDWR, DEFFILEMODE); + if (fd < 0) + return -errno; + + if (fstat (fd, st) < 0) { - fd = open(config_path, O_CREAT | O_RDWR, DEFFILEMODE); - if (fd < 0) - return -errno; + int ret = -errno; + close (fd); + return ret; + } + if (st->st_size == 0) + { if (dprintf(fd, "%ld", cache_config_default_s) < 0) - return -errno; + { + int ret = -errno; + close (fd); + return ret; + } + + close (fd); + return cache_config_default_s; } long cache_config; - FILE *config_file = fopen(config_path, "r"); + FILE *config_file = fdopen(fd, "r"); if (config_file) { if (fscanf(config_file, "%ld", &cache_config) != 1) @@ -241,47 +280,10 @@ debuginfod_config_cache(char *config_path, else cache_config = cache_config_default_s; + close (fd); return cache_config; } -/* Create the cache and interval file if they do not already exist. - Return 0 if cache and config file are initialized, otherwise return - the appropriate error code. */ -static int -debuginfod_init_cache (char *cache_path, char *interval_path, char *maxage_path) -{ - struct stat st; - - /* If the cache and config file already exist then we are done. */ - if (stat(cache_path, &st) == 0 && stat(interval_path, &st) == 0) - return 0; - - /* Create the cache and config files as necessary. */ - if (stat(cache_path, &st) != 0 && mkdir(cache_path, ACCESSPERMS) < 0) - return -errno; - - int fd = -1; - - /* init cleaning interval config file. */ - fd = open(interval_path, O_CREAT | O_RDWR, DEFFILEMODE); - if (fd < 0) - return -errno; - - if (dprintf(fd, "%ld", cache_clean_default_interval_s) < 0) - return -errno; - - /* init max age config file. */ - if (stat(maxage_path, &st) != 0 - && (fd = open(maxage_path, O_CREAT | O_RDWR, DEFFILEMODE)) < 0) - return -errno; - - if (dprintf(fd, "%ld", cache_default_max_unused_age_s) < 0) - return -errno; - - return 0; -} - - /* Delete any files that have been unmodied for a period longer than $DEBUGINFOD_CACHE_CLEAN_INTERVAL_S. */ static int @@ -305,6 +307,11 @@ debuginfod_clean_cache(debuginfod_client *c, /* Interval has not passed, skip cleaning. */ return 0; + /* Update timestamp representing when the cache was last cleaned. + Do it at the start to reduce the number of threads trying to do a + cleanup simultaniously. */ + utime (interval_path, NULL); + /* Read max unused age value from config file. */ rc = debuginfod_config_cache(max_unused_path, cache_default_max_unused_age_s, &st); @@ -359,8 +366,6 @@ debuginfod_clean_cache(debuginfod_client *c, fts_close (fts); regfree (&re); - /* Update timestamp representing when the cache was last cleaned. */ - utime (interval_path, NULL); return 0; } @@ -450,6 +455,45 @@ add_default_headers(debuginfod_client *client) free (utspart); } +/* Add HTTP headers found in the given file, one per line. Blank lines or invalid + * headers are ignored. + */ +static void +add_headers_from_file(debuginfod_client *client, const char* filename) +{ + int vds = client->verbose_fd; + FILE *f = fopen (filename, "r"); + if (f == NULL) + { + if (vds >= 0) + dprintf(vds, "header file %s: %s\n", filename, strerror(errno)); + return; + } + + while (1) + { + char buf[8192]; + char *s = &buf[0]; + if (feof(f)) + break; + if (fgets (s, sizeof(buf), f) == NULL) + break; + for (char *c = s; *c != '\0'; ++c) + if (!isspace(*c)) + goto nonempty; + continue; + nonempty: + ; + size_t last = strlen(s)-1; + if (s[last] == '\n') + s[last] = '\0'; + int rc = debuginfod_add_http_header(client, s); + if (rc < 0 && vds >= 0) + dprintf(vds, "skipping bad header: %s\n", strerror(-rc)); + } + fclose (f); +} + #define xalloc_str(p, fmt, args...) \ do \ @@ -497,22 +541,298 @@ 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) +{ + struct handle_data *data = (struct handle_data *) userdata; + if (size != 1) + return 0; + if (data->client && data->client->verbose_fd >= 0) + dprintf (data->client->verbose_fd, "header %.*s", (int)numitems, buffer); + // Some basic checks to ensure the headers received are of the expected format + if (strncasecmp(buffer, "X-DEBUGINFOD", 11) + || buffer[numitems-2] != '\r' + || buffer[numitems-1] != '\n' + || (buffer == strstr(buffer, ":")) ){ + return numitems; + } + /* Temporary buffer for realloc */ + char *temp = NULL; + if (data->response_data == NULL) + { + temp = malloc(numitems); + if (temp == NULL) + return 0; + } + else + { + temp = realloc(data->response_data, data->response_data_size + numitems); + if (temp == NULL) + return 0; + } + + memcpy(temp + data->response_data_size, buffer, numitems-1); + data->response_data = temp; + data->response_data_size += numitems-1; + data->response_data[data->response_data_size-1] = '\n'; + data->response_data[data->response_data_size] = '\0'; + return numitems; +} + +/* Copy SRC to DEST, s,/,#,g */ + +static void +path_escape (const char *src, char *dest) +{ + unsigned q = 0; + + for (unsigned fi=0; q < PATH_MAX-2; fi++) /* -2, escape is 2 chars. */ + switch (src[fi]) + { + case '\0': + dest[q] = '\0'; + return; + case '/': /* escape / to prevent dir escape */ + dest[q++]='#'; + dest[q++]='#'; + break; + case '#': /* escape # to prevent /# vs #/ collisions */ + dest[q++]='#'; + dest[q++]='_'; + break; + default: + dest[q++]=src[fi]; + } + + dest[q] = '\0'; +} + +/* Attempt to read an ELF/DWARF section with name SECTION from FD and write + it to a separate file in the debuginfod cache. If successful the absolute + path of the separate file containing SECTION will be stored in USR_PATH. + FD_PATH is the absolute path for FD. + + If the section cannot be extracted, then return a negative error code. + -ENOENT indicates that the parent file was able to be read but the + section name was not found. -EEXIST indicates that the section was + found but had type SHT_NOBITS. */ + +int +extract_section (int fd, const char *section, char *fd_path, char **usr_path) +{ + elf_version (EV_CURRENT); + + Elf *elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL); + if (elf == NULL) + return -EIO; + + size_t shstrndx; + int rc = elf_getshdrstrndx (elf, &shstrndx); + if (rc < 0) + { + rc = -EIO; + goto out; + } + + int sec_fd = -1; + char *escaped_name = NULL; + char *sec_path_tmp = NULL; + Elf_Scn *scn = NULL; + + /* Try to find the target section and copy the contents into a + separate file. */ + while (true) + { + scn = elf_nextscn (elf, scn); + if (scn == NULL) + { + rc = -ENOENT; + goto out; + } + GElf_Shdr shdr_storage; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_storage); + if (shdr == NULL) + { + rc = -EIO; + goto out; + } + + const char *scn_name = elf_strptr (elf, shstrndx, shdr->sh_name); + if (scn_name == NULL) + { + rc = -EIO; + goto out; + } + if (strcmp (scn_name, section) == 0) + { + /* We found the desired section. */ + if (shdr->sh_type == SHT_NOBITS) + { + rc = -EEXIST; + goto out; + } + + Elf_Data *data = NULL; + data = elf_rawdata (scn, NULL); + if (data == NULL) + { + rc = -EIO; + goto out; + } + + if (data->d_buf == NULL) + { + rc = -EIO; + goto out; + } + + /* Compute the absolute filename we'll write the section to. + Replace the last component of FD_PATH with the path-escaped + section filename. */ + int i = strlen (fd_path); + while (i >= 0) + { + if (fd_path[i] == '/') + { + fd_path[i] = '\0'; + break; + } + --i; + } + + escaped_name = malloc (strlen (section) * 2 + 1); + if (escaped_name == NULL) + { + rc = -ENOMEM; + goto out; + } + path_escape (section, escaped_name); + + rc = asprintf (&sec_path_tmp, "%s/section-%s.XXXXXX", + fd_path, escaped_name); + if (rc == -1) + { + rc = -ENOMEM; + goto out1; + } + + sec_fd = mkstemp (sec_path_tmp); + if (sec_fd < 0) + { + rc = -EIO; + goto out2; + } + + ssize_t res = write_retry (sec_fd, data->d_buf, data->d_size); + if (res < 0 || (size_t) res != data->d_size) + { + rc = -EIO; + goto out3; + } + + /* Success. Rename tmp file and update USR_PATH. */ + char *sec_path; + if (asprintf (&sec_path, "%s/section-%s", fd_path, section) == -1) + { + rc = -ENOMEM; + goto out3; + } + + rc = rename (sec_path_tmp, sec_path); + if (rc < 0) + { + free (sec_path); + rc = -EIO; + goto out3; + } + + if (usr_path != NULL) + *usr_path = sec_path; + else + free (sec_path); + rc = sec_fd; + goto out2; + } + } + +out3: + close (sec_fd); + unlink (sec_path_tmp); + +out2: + free (sec_path_tmp); + +out1: + free (escaped_name); + +out: + elf_end (elf); + return rc; +} + +/* Search TARGET_CACHE_DIR for a debuginfo or executable file containing + an ELF/DWARF section with name SCN_NAME. If found, extract the section + to a separate file in TARGET_CACHE_DIR and return a file descriptor + for the section file. The path for this file will be stored in USR_PATH. + Return a negative errno if unsuccessful. */ + +static int +cache_find_section (const char *scn_name, const char *target_cache_dir, + char **usr_path) +{ + int fd; + int rc = -EEXIST; + char parent_path[PATH_MAX]; + + /* Check the debuginfo first. */ + snprintf (parent_path, PATH_MAX, "%s/debuginfo", target_cache_dir); + fd = open (parent_path, O_RDONLY); + if (fd >= 0) + { + rc = extract_section (fd, scn_name, parent_path, usr_path); + close (fd); + } + + /* If the debuginfo file couldn't be found or the section type was + SHT_NOBITS, check the executable. */ + if (rc == -EEXIST) + { + snprintf (parent_path, PATH_MAX, "%s/executable", target_cache_dir); + fd = open (parent_path, O_RDONLY); + + if (fd >= 0) + { + rc = extract_section (fd, scn_name, parent_path, usr_path); + close (fd); + } + } + + return rc; +} /* Query each of the server URLs found in $DEBUGINFOD_URLS for the file - with the specified build-id, type (debuginfo, executable or source) - and filename. filename may be NULL. If found, return a file - descriptor for the target, otherwise return an error code. + with the specified build-id and type (debuginfo, executable, source or + section). If type is source, then type_arg should be a filename. If + type is section, then type_arg should be the name of an ELF/DWARF + section. Otherwise type_arg may be NULL. Return a file descriptor + for the target if successful, otherwise return an error code. */ static int debuginfod_query_server (debuginfod_client *c, const unsigned char *build_id, int build_id_len, const char *type, - const char *filename, + const char *type_arg, char **path) { char *server_urls; char *urls_envvar; + const char *section = NULL; + const char *filename = NULL; char *cache_path = NULL; char *maxage_path = NULL; char *interval_path = NULL; @@ -525,6 +845,17 @@ debuginfod_query_server (debuginfod_client *c, int vfd = c->verbose_fd; int rc; + c->progressfn_cancel = false; + + if (strcmp (type, "source") == 0) + filename = type_arg; + else if (strcmp (type, "section") == 0) + { + section = type_arg; + if (section == NULL) + return -EINVAL; + } + if (vfd >= 0) { dprintf (vfd, "debuginfod_find_%s ", type); @@ -550,10 +881,50 @@ debuginfod_query_server (debuginfod_client *c, goto out; } - /* Clear the obsolete URL from a previous _find operation. */ + /* Clear the obsolete data from a previous _find operation. */ free (c->url); c->url = NULL; - + free (c->winning_headers); + c->winning_headers = 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); + + const char *headers_file_envvar; + headers_file_envvar = getenv(DEBUGINFOD_HEADERS_FILE_ENV_VAR); + if (headers_file_envvar != NULL) + add_headers_from_file(c, headers_file_envvar); + + /* 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. */ @@ -583,31 +954,13 @@ debuginfod_query_server (debuginfod_client *c, goto out; } - /* copy the filename to suffix, s,/,#,g */ - unsigned q = 0; - for (unsigned fi=0; q < PATH_MAX-2; fi++) /* -2, escape is 2 chars. */ - switch (filename[fi]) - { - case '\0': - suffix[q] = '\0'; - q = PATH_MAX-1; /* escape for loop too */ - break; - case '/': /* escape / to prevent dir escape */ - suffix[q++]='#'; - suffix[q++]='#'; - break; - case '#': /* escape # to prevent /# vs #/ collisions */ - suffix[q++]='#'; - suffix[q++]='_'; - break; - default: - suffix[q++]=filename[fi]; - } - suffix[q] = '\0'; + path_escape (filename, suffix); /* If the DWARF filenames are super long, this could exceed PATH_MAX and truncate/collide. Oh well, that'll teach them! */ } + else if (section != NULL) + path_escape (section, suffix); else suffix[0] = '\0'; @@ -679,7 +1032,10 @@ debuginfod_query_server (debuginfod_client *c, } xalloc_str (target_cache_dir, "%s/%s", cache_path, build_id_bytes); - xalloc_str (target_cache_path, "%s/%s%s", target_cache_dir, type, suffix); + if (section != NULL) + xalloc_str (target_cache_path, "%s/%s-%s", target_cache_dir, type, suffix); + else + xalloc_str (target_cache_path, "%s/%s%s", target_cache_dir, type, suffix); xalloc_str (target_cache_tmppath, "%s.XXXXXX", target_cache_path); /* XXX combine these */ @@ -690,43 +1046,89 @@ debuginfod_query_server (debuginfod_client *c, if (vfd >= 0) dprintf (vfd, "checking cache dir %s\n", cache_path); - rc = debuginfod_init_cache(cache_path, interval_path, maxage_path); - if (rc != 0) - goto out; + /* Make sure cache dir exists. debuginfo_clean_cache will then make + sure the interval, cache_miss and maxage files exist. */ + if (mkdir (cache_path, ACCESSPERMS) != 0 + && errno != EEXIST) + { + rc = -errno; + goto out; + } + rc = debuginfod_clean_cache(c, cache_path, interval_path, maxage_path); 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; + + close(fd); /* no need to hold onto the negative-hit file descriptor */ + + rc = debuginfod_config_cache(cache_miss_path, + cache_miss_default_s, &st); + if (rc < 0) + goto out; + + cache_miss = (time_t)rc; + if (time(NULL) - target_mtime <= cache_miss) + { + 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); + + if (section != NULL) + { + /* Try to extract the section from a cached file before querying + any servers. */ + rc = cache_find_section (section, target_cache_dir, path); + + /* If the section was found or confirmed to not exist, then we + are done. */ + if (rc >= 0 || rc == -ENOENT) + goto out; } long timeout = default_timeout; @@ -763,16 +1165,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 +1235,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 +1252,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,63 +1291,85 @@ 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 if (section) + snprintf(data[i].url, PATH_MAX, "%s/%s/%s/%s", server_url, + build_id_bytes, type, section); 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); - curl_easy_setopt(data[i].handle, CURLOPT_URL, data[i].url); + /* Some boilerplate for checking curl_easy_setopt. */ +#define curl_easy_setopt_ck(H,O,P) do { \ + CURLcode curl_res = curl_easy_setopt (H,O,P); \ + if (curl_res != CURLE_OK) \ + { \ + if (vfd >= 0) \ + dprintf (vfd, \ + "Bad curl_easy_setopt: %s\n", \ + curl_easy_strerror(curl_res)); \ + rc = -EINVAL; \ + goto out2; \ + } \ + } while (0) + + /* Only allow http:// + https:// + file:// so we aren't being + redirected to some unsupported protocol. */ + curl_easy_setopt_ck(data[i].handle, CURLOPT_PROTOCOLS, + (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FILE)); + curl_easy_setopt_ck(data[i].handle, CURLOPT_URL, data[i].url); if (vfd >= 0) - curl_easy_setopt(data[i].handle, CURLOPT_ERRORBUFFER, data[i].errbuf); - curl_easy_setopt(data[i].handle, - CURLOPT_WRITEFUNCTION, - debuginfod_write_callback); - curl_easy_setopt(data[i].handle, CURLOPT_WRITEDATA, (void*)&data[i]); + curl_easy_setopt_ck(data[i].handle, CURLOPT_ERRORBUFFER, + data[i].errbuf); + curl_easy_setopt_ck(data[i].handle, + CURLOPT_WRITEFUNCTION, + debuginfod_write_callback); + curl_easy_setopt_ck(data[i].handle, CURLOPT_WRITEDATA, (void*)&data[i]); if (timeout > 0) { /* Make sure there is at least some progress, try to get at least 100K per timeout seconds. */ - curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_TIME, - timeout); - curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_LIMIT, - 100 * 1024L); + curl_easy_setopt_ck (data[i].handle, CURLOPT_LOW_SPEED_TIME, + timeout); + curl_easy_setopt_ck (data[i].handle, CURLOPT_LOW_SPEED_LIMIT, + 100 * 1024L); } - 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); + data[i].response_data = NULL; + data[i].response_data_size = 0; + curl_easy_setopt_ck(data[i].handle, CURLOPT_FILETIME, (long) 1); + curl_easy_setopt_ck(data[i].handle, CURLOPT_FOLLOWLOCATION, (long) 1); + curl_easy_setopt_ck(data[i].handle, CURLOPT_FAILONERROR, (long) 1); + curl_easy_setopt_ck(data[i].handle, CURLOPT_NOSIGNAL, (long) 1); + curl_easy_setopt_ck(data[i].handle, CURLOPT_HEADERFUNCTION, + header_callback); + curl_easy_setopt_ck(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); + curl_easy_setopt_ck(data[i].handle, CURLOPT_PATH_AS_IS, (long) 1); #else /* On old curl; no big deal, canonicalization here is almost the same, except perhaps for ? # type decorations at the tail. */ #endif - curl_easy_setopt(data[i].handle, CURLOPT_AUTOREFERER, (long) 1); - curl_easy_setopt(data[i].handle, CURLOPT_ACCEPT_ENCODING, ""); - curl_easy_setopt(data[i].handle, CURLOPT_HTTPHEADER, c->headers); + curl_easy_setopt_ck(data[i].handle, CURLOPT_AUTOREFERER, (long) 1); + curl_easy_setopt_ck(data[i].handle, CURLOPT_ACCEPT_ENCODING, ""); + curl_easy_setopt_ck(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 +1377,37 @@ debuginfod_query_server (debuginfod_client *c, long loops = 0; int committed_to = -1; bool verbose_reported = false; + struct timespec start_time, cur_time; + + 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 +1416,16 @@ 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; + data[committed_to].response_data = NULL; + data[committed_to].response_data_size = 0; + } + + } } if (vfd >= 0 && !verbose_reported && committed_to >= 0) @@ -896,7 +1438,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 +1446,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,27 +1507,22 @@ 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)) - break; + if ((*c->progressfn) (c, pa, dl_size)) + { + c->progressfn_cancel = true; + 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); @@ -987,6 +1557,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 +1573,18 @@ 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 if (section != NULL && resp_code == 503) + rc = -EINVAL; + else + rc = -ENOENT; + break; default: rc = -ENOENT; break; } } @@ -1065,17 +1649,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) { @@ -1087,7 +1695,11 @@ debuginfod_query_server (debuginfod_client *c, /* we've got one!!!! */ time_t mtime; +#if defined(_TIME_BITS) && _TIME_BITS == 64 + CURLcode curl_res = curl_easy_getinfo(verified_handle, CURLINFO_FILETIME_T, (void*) &mtime); +#else CURLcode curl_res = curl_easy_getinfo(verified_handle, CURLINFO_FILETIME, (void*) &mtime); +#endif if (curl_res != CURLE_OK) mtime = time(NULL); /* fall back to current time */ @@ -1104,7 +1716,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 +1725,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 +1743,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 +1760,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 +1806,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 +1821,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 @@ -1231,6 +1859,12 @@ debuginfod_get_url(debuginfod_client *client) return client->url; } +const char * +debuginfod_get_headers(debuginfod_client *client) +{ + return client->winning_headers; +} + void debuginfod_end (debuginfod_client *client) { @@ -1239,6 +1873,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); } @@ -1272,18 +1907,68 @@ int debuginfod_find_source(debuginfod_client *client, "source", filename, path); } +int +debuginfod_find_section (debuginfod_client *client, + const unsigned char *build_id, int build_id_len, + const char *section, char **path) +{ + int rc = debuginfod_query_server(client, build_id, build_id_len, + "section", section, path); + if (rc != -EINVAL) + return rc; + + /* The servers may have lacked support for section queries. Attempt to + download the debuginfo or executable containing the section in order + to extract it. */ + rc = -EEXIST; + int fd = -1; + char *tmp_path = NULL; + + fd = debuginfod_find_debuginfo (client, build_id, build_id_len, &tmp_path); + if (client->progressfn_cancel) + { + if (fd >= 0) + { + /* This shouldn't happen, but we'll check this condition + just in case. */ + close (fd); + free (tmp_path); + } + return -ENOENT; + } + if (fd > 0) + { + rc = extract_section (fd, section, tmp_path, path); + close (fd); + } + + if (rc == -EEXIST) + { + /* The section should be found in the executable. */ + fd = debuginfod_find_executable (client, build_id, + build_id_len, &tmp_path); + if (fd > 0) + { + rc = extract_section (fd, section, tmp_path, path); + close (fd); + } + } + + free (tmp_path); + return rc; +} /* Add an outgoing HTTP header. */ 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 +1998,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-find.c b/debuginfod/debuginfod-find.c index 3e8ab203..30731098 100644 --- a/debuginfod/debuginfod-find.c +++ b/debuginfod/debuginfod-find.c @@ -48,7 +48,9 @@ static const char args_doc[] = N_("debuginfo BUILDID\n" "executable BUILDID\n" "executable PATH\n" "source BUILDID /FILENAME\n" - "source PATH /FILENAME\n"); + "source PATH /FILENAME\n" + "section BUILDID SECTION-NAME\n" + "section PATH SECTION-NAME\n"); /* Definitions of arguments for argp functions. */ @@ -99,7 +101,8 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state) { case 'v': verbose++; debuginfod_set_progressfn (client, & progressfn); - debuginfod_set_verbose_fd (client, STDERR_FILENO); + if (verbose > 1) + debuginfod_set_verbose_fd (client, STDERR_FILENO); break; default: return ARGP_ERR_UNKNOWN; } @@ -207,6 +210,17 @@ main(int argc, char** argv) build_id, build_id_len, argv[remaining+2], &cache_name); } + else if (strcmp(argv[remaining], "section") == 0) + { + if (remaining+2 >= argc) + { + fprintf(stderr, + "If FILETYPE is \"section\" then a section name must be given\n"); + return 1; + } + rc = debuginfod_find_section(client, build_id, build_id_len, + argv[remaining+2], &cache_name); + } else { argp_help (&argp, stderr, ARGP_HELP_USAGE, argv[0]); @@ -215,6 +229,9 @@ main(int argc, char** argv) if (verbose) { + const char* headers = debuginfod_get_headers(client); + if (headers) + fprintf(stderr, "Headers:\n%s", headers); const char* url = debuginfod_get_url (client); if (url != NULL) fprintf(stderr, "Downloaded from %s\n", url); @@ -231,6 +248,8 @@ main(int argc, char** argv) fprintf(stderr, "Server query failed: %s\n", strerror(-rc)); return 1; } + else + close (rc); printf("%s\n", cache_name); free (cache_name); diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index e0948eab..f46da6ef 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, 2022 Mark J. Wielaard 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 -#include #include #ifdef __GNUC__ @@ -46,8 +47,6 @@ extern "C" { #include #include -#include -#include #include #include #include @@ -174,6 +173,8 @@ static const char DEBUGINFOD_SQLITE_DDL[] = " foreign key (buildid) references " BUILDIDS "_buildids(id) on update cascade on delete cascade,\n" " primary key (buildid, file, mtime)\n" " ) " WITHOUT_ROWID ";\n" + // Index for faster delete by file identifier + "create index if not exists " BUILDIDS "_f_de_idx on " BUILDIDS "_f_de (file, mtime);\n" "create table if not exists " BUILDIDS "_f_s (\n" " buildid integer not null,\n" " artifactsrc integer not null,\n" @@ -196,6 +197,8 @@ static const char DEBUGINFOD_SQLITE_DDL[] = " foreign key (buildid) references " BUILDIDS "_buildids(id) on update cascade on delete cascade,\n" " primary key (buildid, debuginfo_p, executable_p, file, content, mtime)\n" " ) " WITHOUT_ROWID ";\n" + // Index for faster delete by archive file identifier + "create index if not exists " BUILDIDS "_r_de_idx on " BUILDIDS "_r_de (file, mtime);\n" "create table if not exists " BUILDIDS "_r_sref (\n" // outgoing dwarf sourcefile references from rpm " buildid integer not null,\n" " artifactsrc integer not null,\n" @@ -353,13 +356,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 +374,19 @@ 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 }, +#define ARGP_KEY_DISABLE_SOURCE_SCAN 0x1009 + { "disable-source-scan", ARGP_KEY_DISABLE_SOURCE_SCAN, NULL, 0, "Do not scan dwarf source info.", 0 }, + { NULL, 0, NULL, 0, NULL, 0 }, }; /* Short description of program. */ @@ -401,18 +419,25 @@ 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 source_paths; static bool scan_files = false; static map scan_archives; static vector 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 bool scan_source_info = true; 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 +449,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 +503,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 +537,66 @@ 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"); + } + 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 +608,37 @@ 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 ARGP_KEY_DISABLE_SOURCE_SCAN: + scan_source_info = false; + break; // case 'h': argp_state_help (state, stderr, ARGP_HELP_LONG|ARGP_HELP_EXIT_OK); default: return ARGP_ERR_UNKNOWN; } @@ -553,6 +650,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 +670,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 +726,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 +754,11 @@ public: unique_lock 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 lock(mtx); @@ -668,19 +770,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 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 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 +817,54 @@ static workq 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 +class unique_set +{ +private: + set values; + mutex mtx; + condition_variable cv; +public: + unique_set() {} + ~unique_set() {} + + void acquire(const T& value) + { + unique_lock lock(mtx); + while (values.find(value) != values.end()) + cv.wait(lock); + values.insert(value); + } + + void release(const T& value) + { + unique_lock 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 +class unique_set_reserver +{ +private: + unique_set& please_hold; + T mine; +public: + unique_set_reserver(unique_set& t, const T& value): + please_hold(t), mine(value) { please_hold.acquire(mine); } + ~unique_set_reserver() { please_hold.release(mine); } +}; + //////////////////////////////////////////////////////////////////////// @@ -716,10 +876,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; } @@ -906,12 +1067,30 @@ conninfo (struct MHD_Connection * conn) struct sockaddr *so = u ? u->client_addr : 0; if (so && so->sa_family == AF_INET) { - sts = getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), servname, - sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV); + 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), + servname, sizeof (servname), + NI_NUMERICHOST | NI_NUMERICSERV); + } } + if (sts != 0) { hostname[0] = servname[0] = '\0'; } @@ -930,78 +1109,33 @@ 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"); } - - -static struct MHD_Response* -handle_buildid_f_match (bool internal_req_t, - int64_t b_mtime, - const string& b_source0, - int *result_fd) -{ - (void) internal_req_t; // ignored - int fd = open(b_source0.c_str(), O_RDONLY); - if (fd < 0) - throw libc_exception (errno, string("open ") + b_source0); - - // NB: use manual close(2) in error case instead of defer_dtor, because - // in the normal case, we want to hand the fd over to libmicrohttpd for - // file transfer. - - struct stat s; - int rc = fstat(fd, &s); - if (rc < 0) - { - close(fd); - throw libc_exception (errno, string("fstat ") + b_source0); - } - - if ((int64_t) s.st_mtime != b_mtime) - { - if (verbose) - obatched(clog) << "mtime mismatch for " << b_source0 << endl; - close(fd); - return 0; - } - - inc_metric ("http_responses_total","result","file"); - struct MHD_Response* r = MHD_create_response_from_fd ((uint64_t) s.st_size, fd); - if (r == 0) - { - if (verbose) - obatched(clog) << "cannot create fd-response for " << b_source0 << endl; - close(fd); - } - else - { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); - add_mhd_last_modified (r, s.st_mtime); - if (verbose > 1) - obatched(clog) << "serving file " << b_source0 << endl; - /* libmicrohttpd will close it. */ - if (result_fd) - *result_fd = fd; - } - - return r; -} - - // quote all questionable characters of str for safe passage through a sh -c expansion. static string shell_escape(const string& str) @@ -1151,23 +1285,32 @@ private: }; deque lru; // @head: most recently used long max_fds; + deque 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 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 +1320,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 +1374,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 +1397,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 +1417,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 +1435,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 +1444,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 +1466,8 @@ public: unique_lock 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 +1475,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 +1493,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,11 +1524,210 @@ 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; +/* Search ELF_FD for an ELF/DWARF section with name SECTION. + If found copy the section to a temporary file and return + its file descriptor, otherwise return -1. + + The temporary file's mtime will be set to PARENT_MTIME. + B_SOURCE should be a description of the parent file suitable + for printing to the log. */ + +static int +extract_section (int elf_fd, int64_t parent_mtime, + const string& b_source, const string& section) +{ + /* Search the fdcache. */ + struct stat fs; + int fd = fdcache.lookup (b_source, section); + if (fd >= 0) + { + if (fstat (fd, &fs) != 0) + { + if (verbose) + obatched (clog) << "cannot fstate fdcache " + << b_source << " " << section << endl; + close (fd); + return -1; + } + if ((int64_t) fs.st_mtime != parent_mtime) + { + if (verbose) + obatched(clog) << "mtime mismatch for " + << b_source << " " << section << endl; + close (fd); + return -1; + } + /* Success. */ + return fd; + } + + Elf *elf = elf_begin (elf_fd, ELF_C_READ_MMAP_PRIVATE, NULL); + if (elf == NULL) + return -1; + + /* Try to find the section and copy the contents into a separate file. */ + try + { + size_t shstrndx; + int rc = elf_getshdrstrndx (elf, &shstrndx); + if (rc < 0) + throw elfutils_exception (rc, "getshdrstrndx"); + + Elf_Scn *scn = NULL; + while (true) + { + scn = elf_nextscn (elf, scn); + if (scn == NULL) + break; + GElf_Shdr shdr_storage; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_storage); + if (shdr == NULL) + break; + + const char *scn_name = elf_strptr (elf, shstrndx, shdr->sh_name); + if (scn_name == NULL) + break; + if (scn_name == section) + { + Elf_Data *data = NULL; + + /* We found the desired section. */ + data = elf_rawdata (scn, NULL); + if (data == NULL) + throw elfutils_exception (elf_errno (), "elfraw_data"); + if (data->d_buf == NULL) + { + obatched(clog) << "section " << section + << " is empty" << endl; + break; + } + + /* Create temporary file containing the section. */ + char *tmppath = NULL; + rc = asprintf (&tmppath, "%s/debuginfod.XXXXXX", tmpdir.c_str()); + if (rc < 0) + throw libc_exception (ENOMEM, "cannot allocate tmppath"); + defer_dtor tmmpath_freer (tmppath, free); + fd = mkstemp (tmppath); + if (fd < 0) + throw libc_exception (errno, "cannot create temporary file"); + ssize_t res = write_retry (fd, data->d_buf, data->d_size); + if (res < 0 || (size_t) res != data->d_size) + throw libc_exception (errno, "cannot write to temporary file"); + + /* Set mtime to be the same as the parent file's mtime. */ + struct timeval tvs[2]; + if (fstat (elf_fd, &fs) != 0) + throw libc_exception (errno, "cannot fstat file"); + + tvs[0].tv_sec = tvs[1].tv_sec = fs.st_mtime; + tvs[0].tv_usec = tvs[1].tv_usec = 0; + (void) futimes (fd, tvs); + + /* Add to fdcache. */ + fdcache.intern (b_source, section, tmppath, data->d_size, true); + break; + } + } + } + catch (const reportable_exception &e) + { + e.report (clog); + close (fd); + fd = -1; + } + + elf_end (elf); + return fd; +} + +static struct MHD_Response* +handle_buildid_f_match (bool internal_req_t, + int64_t b_mtime, + const string& b_source0, + const string& section, + int *result_fd) +{ + (void) internal_req_t; // ignored + int fd = open(b_source0.c_str(), O_RDONLY); + if (fd < 0) + throw libc_exception (errno, string("open ") + b_source0); + + // NB: use manual close(2) in error case instead of defer_dtor, because + // in the normal case, we want to hand the fd over to libmicrohttpd for + // file transfer. + + struct stat s; + int rc = fstat(fd, &s); + if (rc < 0) + { + close(fd); + throw libc_exception (errno, string("fstat ") + b_source0); + } + + if ((int64_t) s.st_mtime != b_mtime) + { + if (verbose) + obatched(clog) << "mtime mismatch for " << b_source0 << endl; + close(fd); + return 0; + } + + if (!section.empty ()) + { + int scn_fd = extract_section (fd, s.st_mtime, b_source0, section); + close (fd); + + if (scn_fd >= 0) + fd = scn_fd; + else + { + if (verbose) + obatched (clog) << "cannot find section " << section + << " for " << b_source0 << endl; + return 0; + } + + rc = fstat(fd, &s); + if (rc < 0) + { + close (fd); + throw libc_exception (errno, string ("fstat ") + b_source0 + + string (" ") + section); + } + } + + struct MHD_Response* r = MHD_create_response_from_fd ((uint64_t) s.st_size, fd); + inc_metric ("http_responses_total","result","file"); + if (r == 0) + { + if (verbose) + obatched(clog) << "cannot create fd-response for " << b_source0 + << " section=" << section << endl; + close(fd); + } + else + { + 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 << " section=" << section << endl; + /* libmicrohttpd will close it. */ + if (result_fd) + *result_fd = fd; + } + + return r; +} // For security/portability reasons, many distro-package archives have // a "./" in front of path names; others have nothing, others have @@ -1342,6 +1753,7 @@ handle_buildid_r_match (bool internal_req_p, int64_t b_mtime, const string& b_source0, const string& b_source1, + const string& section, int *result_fd) { struct stat fs; @@ -1370,6 +1782,33 @@ handle_buildid_r_match (bool internal_req_p, break; // branch out of if "loop", to try new libarchive fetch attempt } + if (!section.empty ()) + { + int scn_fd = extract_section (fd, fs.st_mtime, + b_source0 + ":" + b_source1, + section); + close (fd); + if (scn_fd >= 0) + fd = scn_fd; + else + { + if (verbose) + obatched (clog) << "cannot find section " << section + << " for archive " << b_source0 + << " file " << b_source1 << endl; + return 0; + } + + rc = fstat(fd, &fs); + if (rc < 0) + { + close (fd); + throw libc_exception (errno, + string ("fstat archive ") + b_source0 + string (" file ") + b_source1 + + string (" section ") + section); + } + } + struct MHD_Response* r = MHD_create_response_from_fd (fs.st_size, fd); if (r == 0) { @@ -1381,10 +1820,16 @@ 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; + obatched(clog) << "serving fdcache archive " << b_source0 + << " file " << b_source1 + << " section=" << section << endl; /* libmicrohttpd will close it. */ if (result_fd) *result_fd = fd; @@ -1435,7 +1880,10 @@ handle_buildid_r_match (bool internal_req_p, rc = archive_read_open_FILE (a, fp); if (rc != ARCHIVE_OK) - throw archive_exception(a, "cannot open archive from pipe"); + { + obatched(clog) << "cannot open archive from pipe " << b_source0 << endl; + throw archive_exception(a, "cannot open archive from pipe"); + } // archive traversal is in three stages, no, four stages: // 1) skip entries whose names do not match the requested one @@ -1463,7 +1911,8 @@ handle_buildid_r_match (bool internal_req_p, if ((r == 0) && (fn != b_source1)) // stage 1 continue; - if (fdcache.probe (b_source0, fn)) // skip if already interned + if (fdcache.probe (b_source0, fn) && // skip if already interned + fn != b_source1) // but only if we'd just be prefetching, PR29474 continue; // extract this file to a temporary file @@ -1499,7 +1948,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; @@ -1511,8 +1960,36 @@ handle_buildid_r_match (bool internal_req_p, tmppath, archive_entry_size(e), true); // requested ones go to the front of lru + if (!section.empty ()) + { + int scn_fd = extract_section (fd, b_mtime, + b_source0 + ":" + b_source1, + section); + close (fd); + if (scn_fd >= 0) + fd = scn_fd; + else + { + if (verbose) + obatched (clog) << "cannot find section " << section + << " for archive " << b_source0 + << " file " << b_source1 << endl; + return 0; + } + + rc = fstat(fd, &fs); + if (rc < 0) + { + close (fd); + throw libc_exception (errno, + string ("fstat ") + b_source0 + string (" ") + section); + } + r = MHD_create_response_from_fd (fs.st_size, fd); + } + else + r = MHD_create_response_from_fd (archive_entry_size(e), fd); + inc_metric ("http_responses_total","result",archive_extension + " archive"); - r = MHD_create_response_from_fd (archive_entry_size(e), fd); if (r == 0) { if (verbose) @@ -1522,10 +1999,19 @@ 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; + obatched(clog) << "serving archive " << b_source0 + << " file " << b_source1 + << " section=" << section << endl; /* libmicrohttpd will close it. */ if (result_fd) *result_fd = fd; @@ -1544,14 +2030,17 @@ handle_buildid_match (bool internal_req_p, const string& b_stype, const string& b_source0, const string& b_source1, + const string& section, int *result_fd) { try { if (b_stype == "F") - return handle_buildid_f_match(internal_req_p, b_mtime, b_source0, result_fd); + return handle_buildid_f_match(internal_req_p, b_mtime, b_source0, + section, result_fd); else if (b_stype == "R") - return handle_buildid_r_match(internal_req_p, b_mtime, b_source0, b_source1, result_fd); + return handle_buildid_r_match(internal_req_p, b_mtime, b_source0, + b_source1, section, result_fd); } catch (const reportable_exception &e) { @@ -1617,7 +2106,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,10 +2115,25 @@ 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 if (artifacttype == "section") atype_code = "I"; + else { + artifacttype = "invalid"; // PR28242 ensure http_resposes metrics don't propagate unclean user data + throw reportable_exception("invalid artifacttype"); + } + + if (conn != 0) + inc_metric("http_requests_total", "type", artifacttype); + + string section; + if (atype_code == "I") + { + if (suffix.size () < 2) + throw reportable_exception ("invalid section suffix"); + + // Remove leading '/' + section = suffix.substr(1); + } - inc_metric("http_requests_total", "type", artifacttype); - if (atype_code == "S" && suffix == "") throw reportable_exception("invalid source suffix"); @@ -1681,8 +2185,21 @@ handle_buildid (MHD_Connection* conn, pp->bind(2, suffix); pp->bind(3, canon_pathname(suffix)); } + else if (atype_code == "I") + { + pp = new sqlite_ps (thisdb, "mhd-query-i", + "select mtime, sourcetype, source0, source1, 1 as debug_p from " BUILDIDS "_query_d where buildid = ? " + "union all " + "select mtime, sourcetype, source0, source1, 0 as debug_p from " BUILDIDS "_query_e where buildid = ? " + "order by debug_p desc, mtime desc"); + pp->reset(); + pp->bind(1, buildid); + pp->bind(2, buildid); + } unique_ptr ps_closer(pp); // release pp if exception or return + bool do_upstream_section_query = true; + // consume all the rows while (1) { @@ -1703,12 +2220,30 @@ handle_buildid (MHD_Connection* conn, // Try accessing the located match. // XXX: in case of multiple matches, attempt them in parallel? auto r = handle_buildid_match (conn ? false : true, - b_mtime, b_stype, b_source0, b_source1, result_fd); + b_mtime, b_stype, b_source0, b_source1, + section, result_fd); if (r) return r; + + // If a debuginfo file matching BUILDID was found but didn't contain + // the desired section, then the section should not exist. Don't + // bother querying upstream servers. + if (!section.empty () && (sqlite3_column_int (*pp, 4) == 1)) + { + struct stat st; + + // For "F" sourcetype, check if the debuginfo exists. For "R" + // sourcetype, check if the debuginfo was interned into the fdcache. + if ((b_stype == "F" && (stat (b_source0.c_str (), &st) == 0)) + || (b_stype == "R" && fdcache.probe (b_source0, b_source1))) + do_upstream_section_query = false; + } } pp->reset(); + if (!do_upstream_section_query) + throw reportable_exception(MHD_HTTP_NOT_FOUND, "not found"); + // We couldn't find it in the database. Last ditch effort // is to defer to other debuginfo servers. @@ -1731,18 +2266,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()); } @@ -1759,6 +2318,11 @@ handle_buildid (MHD_Connection* conn, fd = debuginfod_find_source (client, (const unsigned char*) buildid.c_str(), 0, suffix.c_str(), NULL); + else if (artifacttype == "section") + fd = debuginfod_find_section (client, + (const unsigned char*) buildid.c_str(), + 0, section.c_str(), NULL); + } else fd = -errno; /* Set by debuginfod_begin. */ @@ -1766,7 +2330,8 @@ handle_buildid (MHD_Connection* conn, if (fd >= 0) { - inc_metric ("http_responses_total","result","upstream"); + if (conn != 0) + inc_metric ("http_responses_total","result","upstream"); struct stat s; int rc = fstat (fd, &s); if (rc == 0) @@ -1774,7 +2339,30 @@ 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"); + // Copy the incoming headers + const char * hdrs = debuginfod_get_headers(client); + string header_dup; + if (hdrs) + header_dup = string(hdrs); + // Parse the "header: value\n" lines into (h,v) tuples and pass on + while(1) + { + size_t newline = header_dup.find('\n'); + if (newline == string::npos) break; + size_t colon = header_dup.find(':'); + if (colon == string::npos) break; + string header = header_dup.substr(0,colon); + string value = header_dup.substr(colon+1,newline-colon-1); + // strip leading spaces from value + size_t nonspace = value.find_first_not_of(" "); + if (nonspace != string::npos) + value = value.substr(nonspace); + add_mhd_response_header(r, header.c_str(), value.c_str()); + header_dup = header_dup.substr(newline+1); + } + add_mhd_last_modified (r, s.st_mtime); if (verbose > 1) obatched(clog) << "serving file from upstream debuginfod/cache" << endl; @@ -1884,6 +2472,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 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 lock(metrics_lock); + metrics[key] += value; +} static struct MHD_Response* handle_metrics (off_t* size) @@ -1902,8 +2513,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 +2529,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 +2569,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 +2585,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 +2599,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 busy_urls; + unique_set_reserver 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 +2625,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 +2651,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 +2667,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 +2688,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 +2760,8 @@ dwarf_extract_source_paths (Elf *elf, set& 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) { @@ -2328,7 +2989,8 @@ elf_classify (int fd, bool &executable_p, bool &debuginfo_p, string &buildid, se startswith (section_name, ".zdebug_line")) { debuginfo_p = true; - dwarf_extract_source_paths (elf, debug_sourcefiles); + if (scan_source_info) + dwarf_extract_source_paths (elf, debug_sourcefiles); break; // expecting only one .*debug_line, so no need to look for others } else if (startswith (section_name, ".debug_") || @@ -2584,7 +3246,10 @@ archive_classify (const string& rps, string& archive_extension, rc = archive_read_open_FILE (a, fp); if (rc != ARCHIVE_OK) - throw archive_exception(a, "cannot open archive from pipe"); + { + obatched(clog) << "cannot open archive from pipe " << rps << endl; + throw archive_exception(a, "cannot open archive from pipe"); + } if (verbose > 3) obatched(clog) << "libarchive scanning " << rps << endl; @@ -2934,6 +3599,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 +3802,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 +3823,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 > 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 +3857,80 @@ void groom() int64_t fileid = sqlite3_column_int64 (files, 1); const char* filename = ((const char*) sqlite3_column_text (files, 2) ?: ""); struct stat s; + bool regex_file_drop = 0; + + if (regex_groom) + { + bool reg_include = !regexec (&file_include_regex, filename, 0, 0, 0); + bool reg_exclude = !regexec (&file_exclude_regex, filename, 0, 0, 0); + regex_file_drop = reg_exclude && !reg_include; + } + rc = stat(filename, &s); - if (rc < 0 || (mtime != (int64_t) s.st_mtime)) + if ( regex_file_drop || 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 +3957,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 +4047,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 +4078,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); } @@ -3380,10 +4125,17 @@ main (int argc, char *argv[]) error (EXIT_FAILURE, 0, "unexpected argument: %s", argv[remaining]); + // Make the prefetch cache spaces a fraction of the main fdcache if + // unspecified. + if (fdcache_prefetch_fds == 0) + fdcache_prefetch_fds = fdcache_fds / 2; + if (fdcache_prefetch_mbs == 0) + fdcache_prefetch_mbs = fdcache_mbs / 2; + 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 +4145,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) + if (! passive_p) { - error (EXIT_FAILURE, 0, - "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + 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 +4181,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,54 +4193,86 @@ 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 -#if MHD_VERSION >= 0x00095300 - | MHD_USE_INTERNAL_POLLING_THREAD -#else - | MHD_USE_SELECT_INTERNALLY + obatched(clog) << "libmicrohttpd version " << MHD_get_version() << endl; + + /* If '-C' wasn't given or was given with no arg, pick a reasonable default + for the number of worker threads. */ + if (connection_pool == 0) + connection_pool = std::thread::hardware_concurrency() * 2 ?: 2; + + /* Note that MHD_USE_EPOLL and MHD_USE_THREAD_PER_CONNECTION don't + work together. */ + unsigned int use_epoll = 0; +#if MHD_VERSION >= 0x00095100 + use_epoll = MHD_USE_EPOLL; #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 + + unsigned int mhd_flags = ( #if MHD_VERSION >= 0x00095300 - | MHD_USE_INTERNAL_POLLING_THREAD + MHD_USE_INTERNAL_POLLING_THREAD #else - | MHD_USE_SELECT_INTERNALLY + MHD_USE_SELECT_INTERNALLY +#endif + | MHD_USE_DUAL_STACK + | use_epoll +#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_END); - - if (d4 == NULL && d6 == NULL) // neither ipv4 nor ipv6? boo - { - sqlite3 *database = db; - sqlite3 *databaseq = dbq; - db = dbq = 0; // for signal_handler not to freak - sqlite3_close (databaseq); - sqlite3_close (database); - 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 " : "") + | MHD_USE_DEBUG); /* report errors to stderr */ + + // Start httpd server threads. Use a single dual-homed pool. + MHD_Daemon *d46 = MHD_start_daemon (mhd_flags, http_port, + NULL, NULL, /* default accept policy */ + handler_cb, NULL, /* handler callback */ + MHD_OPTION_EXTERNAL_LOGGER, + error_cb, NULL, + MHD_OPTION_THREAD_POOL_SIZE, + (int)connection_pool, + MHD_OPTION_END); + + MHD_Daemon *d4 = NULL; + if (d46 == NULL) + { + // Cannot use dual_stack, use ipv4 only + mhd_flags &= ~(MHD_USE_DUAL_STACK); + d4 = MHD_start_daemon (mhd_flags, 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) + { + sqlite3 *database = db; + sqlite3 *databaseq = dbq; + db = dbq = 0; // for signal_handler not to freak + sqlite3_close (databaseq); + sqlite3_close (database); + error (EXIT_FAILURE, 0, "cannot start http server at port %d", + http_port); + } + + } + obatched(clog) << "started http server on" + << (d4 != NULL ? " IPv4 " : " IPv4 IPv6 ") << "port=" << http_port << endl; // add maxigroom sql if -G given @@ -3506,31 +4295,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 +4340,40 @@ main (int argc, char *argv[]) vector 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 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 + + * Makefile.am (notrans_dist_man3_MANS): Add debuginfod_find_section.3. + * debuginfod_find_section.3: New file. + * debuginfod_find_debuginfo.3: Document debuginfod_find_section. + * debuginfod.8: Document section webapi. + +2022-10-28 Arsen Arsenović + + * readelf.1: Document the --syms alias. + +2022-10-18 Daniel Thornburgh + + * debuginfod_find_debuginfo.3: Document DEBUGINFOD_HEADERS_FILE. + +2022-09-02 Frank Ch. Eigler + + * debuginfod_find_debuginfo.3: Tweaked debuginfod_get_headers docs. + +2022-07-15 Noah Sanci + + * debuginfod_find_debuginfo.3: Explained debuginfod_get_headers + usage. + * debuginfod_get_headers.3: Created. + +2022-09-02 Aaron Merey + + * debuginfod.8 (-C): Update description. + +2022-06-03 Michael Trapp + + * debuginfod.8 (--disable-source-scan): Document. + +2022-05-09 Frank Ch. Eigler + + * debuginfod.8: Tweak prefetch descriptions. + +2022-01-31 Frank Ch. Eigler + + * debuginfod-client-config.7: Elaborate DEBUGINFOD_URLS. + +2021-12-08 Frank Ch. Eigler + + PR28661 + * debuginfod.8 (-C): Document new flag. + +2021-11-05 Frank Ch. Eigler + + PR28430 + * debuginfod.8 (--passive): Document new flag & operation mode. + +2021-08-28 Di Chen + + * debuginfod.8 (-d): Document ":memory:" as in-memory database. + +2021-08-20 Di Chen + + * debuginfod.8: Add --forwarded-ttl-limit=NUM documentation. + +2021-07-28 Alice Zhang + + 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 + + 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 + + PR27982 + * debuginfod-find.1: Document DEBUGINFOD_MAXTIME + and DEBUGINFOD_MAXSIZE. + 2021-04-23 Frank Ch. Eigler PR27701 diff --git a/doc/Makefile.am b/doc/Makefile.am index ef66fb88..db5a842e 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -19,20 +19,26 @@ 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 -notrans_dist_man8_MANS += debuginfod.8 +if !LIBDEBUGINFOD +notrans_dist_man7_MANS += debuginfod-client-config.7 +endif +notrans_dist_man8_MANS += debuginfod.8 debuginfod.service.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 notrans_dist_man3_MANS += debuginfod_find_debuginfo.3 notrans_dist_man3_MANS += debuginfod_find_executable.3 notrans_dist_man3_MANS += debuginfod_find_source.3 +notrans_dist_man3_MANS += debuginfod_find_section.3 notrans_dist_man3_MANS += debuginfod_get_user_data.3 notrans_dist_man3_MANS += debuginfod_get_url.3 notrans_dist_man3_MANS += debuginfod_set_progressfn.3 diff --git a/doc/debuginfod-client-config.7 b/doc/debuginfod-client-config.7 new file mode 100644 index 00000000..53d82806 --- /dev/null +++ b/doc/debuginfod-client-config.7 @@ -0,0 +1,136 @@ +'\"! 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). + +.TP +.B $DEBUGINFOD_HEADERS_FILE +This environment variable points to a file that supplies headers to +outbound HTTP requests, one per line. The header lines shouldn't end with +CRLF, unless that's the system newline convention. Whitespace-only lines +are skipped. + +.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..93db47e1 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 @@ -190,6 +205,21 @@ This important for controlling CPU-intensive operations like parsing 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, \-C use a fixed thread pool sized automatically +\-C=NUM use a fixed thread pool sized NUM, minimum 2 +.TE + +The first mode is a simple and safe configuration based on the number +of processors. The second mode is suitable for tuned load-limiting +configurations facing unruly traffic. + .TP .B "\-L" Traverse symbolic links encountered during traversal of the PATHs, @@ -200,29 +230,53 @@ loops in the symbolic directory tree might lead to \fIinfinite traversal\fP. .TP -.B "\-\-fdcache\-fds=NUM" "\-\-fdcache\-mbs=MB" "\-\-fdcache\-prefetch=NUM2" +.B "\-\-fdcache\-fds=NUM" "\-\-fdcache\-mbs=MB" Configure limits on a cache that keeps recently extracted files from archives. Up to NUM requested files and up to a total of MB megabytes will be kept extracted, in order to avoid having to decompress their -archives over and over again. In addition, up to NUM2 other files -from an archive may be prefetched into the cache before they are even -requested. The default NUM, NUM2, and MB values depend on the -concurrency of the system, and on the available disk space on the +archives over and over again. The default NUM and MB values depend on +the concurrency of the system, and on the available disk space on the $TMPDIR or \fB/tmp\fP filesystem. This is because that is where the -most recently used extracted files are kept. Grooming cleans this +most recently used extracted files are kept. Grooming cleans out this cache. +.TP +.B "\-\-fdcache\-prefetch\-fds=NUM" "\-\-fdcache\-prefetch\-mbs=MB" +.B "\-\-fdcache\-prefetch=NUM2" + +In addition to the main fdcache, up to NUM2 other files from an +archive may be prefetched into another cache before they are even +requested. Configure how many file descriptors (fds) and megabytes +(mbs) are allocated to the prefetch fdcache. If unspecified, these +values 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. This cache is also cleaned out +during grooming. + .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 -available space falls below the given percentage, the cache is -flushed, and the fdcache will stay disabled until the next groom +Configure a disk space threshold for emergency flushing of the caches. +The filesystem holding the caches is checked periodically. If the +available space falls below the given percentage, the caches are +flushed, and the fdcaches will stay disabled until the next groom cycle. This mechanism, along a few associated /metrics on the webapi, are intended to give an operator notice about storage scarcity - which 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 "\-\-disable\-source\-scan" +Disable scan of the dwarf source info of debuginfo sections. +If a setup has no access to source code, the source info is not +required. + .TP .B "\-v" Increase verbosity of logging to the standard error file descriptor. @@ -238,6 +292,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 +359,21 @@ 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 /buildid/\fIBUILDID\fP/section\fI/SECTION\fP +If the given buildid is known to the server, the server will attempt to +extract the contents of an ELF/DWARF section named SECTION from the +debuginfo file matching BUILDID. If the debuginfo file can't be found +or the section has type SHT_NOBITS, then the server will attempt to extract +the section from the executable matching BUILDID. If the section is +succesfully extracted then this request results in a binary object +of the section's contents. Note that this result is the raw binary +contents of the section, not an ELF file. + .SS /metrics This endpoint returns a Prometheus formatted text/plain dump of a @@ -332,22 +410,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 +458,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 +484,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" - -.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. - +.SH ADDITIONAL FILES .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.service.8 b/doc/debuginfod.service.8 new file mode 100644 index 00000000..b22b7570 --- /dev/null +++ b/doc/debuginfod.service.8 @@ -0,0 +1,30 @@ +'\"! tbl | nroff \-man +'\" t macro stdmacro + +.TH DEBUGINFOD.SERVICE 8 +.SH NAME +debuginfod.service \- debuginfo related information server for systemd + +.SH SYNOPSIS +.B /usr/lib/systemd/system/debuginfod.service + +.SH DESCRIPTION +\fBdebuginfod.service\fP integrates the debuginfod daemon with +systemd, serving debuginfo-related artifacts over HTTP. +The data is stored in /var/cache/debuginfod/debuginfod.sqlite. +Configure /etc/sysconfig/debuginfod to set the below environment +variables as well as those listed in \fBdebuginfod\fP(8). +.SH Environment variables +\fB$DEBUGINFOD_PORT\fP - Changes port of \fBdebuginfod\fP service +daemon. +.br +\fB$DEBUGINFOD_VERBOSE\fP - Change verbosity of reporting in +\fBdebuginfod\fP service daemon log file. +.br +\fB$DEBUGINFOD_PATHS\fP - Changes paths to scan for \fBdebuginfod\fP service daemon. +.SH FILES +/usr/lib/systemd/system/debuginfod.service, /var/cache/debuginfod/debuginfod.sqlite +/etc/sysconfig/debuginfod + +.SH SEE ALSO +debuginfod(8), debuginfod-find(1), systemctl(1), systemd.service(5) diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 index 5ae44a98..6469a3df 100644 --- a/doc/debuginfod_find_debuginfo.3 +++ b/doc/debuginfod_find_debuginfo.3 @@ -43,6 +43,12 @@ LOOKUP FUNCTIONS .BI " int " build_id_len "," .BI " const char *" filename "," .BI " char ** " path ");" +.BI "int debuginfod_find_section(debuginfod_client *" client "," +.BI " const unsigned char *" build_id "," +.BI " int " build_id_len "," +.BI " const char * " section "," +.BI " char ** " path ");" + OPTIONAL FUNCTIONS @@ -58,6 +64,7 @@ OPTIONAL FUNCTIONS .BI "const char* debuginfod_get_url(debuginfod_client *" client ");" .BI "int debuginfod_add_http_header(debuginfod_client *" client "," .BI " const char* " header ");" +.BI "const char* debuginfod_get_headers(debuginfod_client *" client ");" .SH DESCRIPTION @@ -97,6 +104,16 @@ accepts both forms. Specifically, debuginfod canonicalizes path names according to RFC3986 section 5.2.4 (Remove Dot Segments), plus reducing any \fB//\fP to \fB/\fP in the path. +.BR debuginfod_find_section () +queries the debuginfod server URLs contained in +.BR $DEBUGINFOD_URLS +for the binary contents of an ELF/DWARF section contained in a debuginfo +or executable file with the given \fIbuild_id\fP. \fIsection\fP should +be the name of the desired ELF/DWARF section. If a server does not support +section queries, debuginfod_find_section may query the server for the +debuginfo and/or executable with \fIbuild_id\fP in order to retrieve +and extract the section. + If \fIpath\fP is not NULL and the query is successful, \fIpath\fP is set to the path of the file in the cache. The caller must \fBfree\fP() this value. @@ -187,29 +204,35 @@ indicates success, but out-of-memory conditions may result in a non-zero \fI-ENOMEM\fP. If the string is in the wrong form \fI-EINVAL\fP will be returned. +\fI$DEBUGINFOD_HEADERS_FILE\fP specifies a file to supply headers to +outgoing requests. Each non-whitespace line of this file is handled +as if +.BR \%debuginfod_add_http_header () +were called on the contents. + Note that the current debuginfod-client library implementation uses libcurl, but you shouldn't rely on that fact. Don't use this function for replacing any standard headers, except for the User-Agent mentioned -below. The only supported usage of this function is for adding an -optional header which might or might not be passed through to the -server for logging purposes only. +below. You can use this function to add authorization information for +access control, or to provide optional headers to the server for +logging purposes. 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". +During or after a lookup, a client application may call +.BR \%debuginfod_get_headers () +to gather the subset of HTTP response headers received from the +current or most recent debuginfod server. Only those headers prefixed +with +.BR X-DEBUGINFOD +(case-insensitive) are kept. They are returned as a single string, +with each "header: value" terminated with a \\n (not \\r\\n as in +HTTP). It may be NULL. The resulting string is owned by the library, +and must not be modified or freed. The caller should copy the +returned string if it is needed beyond the release of the client +object. .SH "MACROS" @@ -227,11 +250,8 @@ void *debuginfod_so = dlopen(DEBUGINFOD_SONAME, RTLD_LAZY); .in .SH "SECURITY" -.BR debuginfod_find_debuginfo (), -.BR debuginfod_find_executable (), -and -.BR debuginfod_find_source () -\fBdo not\fP include any particular security +.BR debuginfod_find_* () +functions \fBdo not\fP include any particular security features. They trust that the binaries returned by the debuginfod(s) are accurate. Therefore, the list of servers should include only trustworthy ones. If accessed across HTTP rather than HTTPS, the @@ -241,43 +261,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 +316,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/debuginfod_find_section.3 b/doc/debuginfod_find_section.3 new file mode 100644 index 00000000..16279936 --- /dev/null +++ b/doc/debuginfod_find_section.3 @@ -0,0 +1 @@ +.so man3/debuginfod_find_debuginfo.3 diff --git a/doc/debuginfod_get_headers.3 b/doc/debuginfod_get_headers.3 new file mode 100644 index 00000000..1db55982 --- /dev/null +++ b/doc/debuginfod_get_headers.3 @@ -0,0 +1,2 @@ +.so man3/debuginfod_find_debuginfo.3 + 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/doc/readelf.1 b/doc/readelf.1 index 6a843f66..1d182071 100644 --- a/doc/readelf.1 +++ b/doc/readelf.1 @@ -146,7 +146,7 @@ eu-readelf [\fB\-a\fR|\fB\-\-all\fR] [\fB\-S\fR|\fB\-\-section\-headers\fR|\fB\-\-sections\fR] [\fB\-g\fR|\fB\-\-section\-groups\fR] [\fB\-e\fR|\fB\-\-exception\fR] - [\fB\-s\fR|\fB\-\-symbols\fR] [section name] ] + [\fB\-\-syms\fR|\fB\-s\fR|\fB\-\-symbols\fR [section name] ] [\fB\-\-dyn-syms\fR] [\fB\-n\fR|\fB\-\-notes\fR [section name] ] [\fB\-r\fR|\fB\-\-relocs\fR] @@ -255,6 +255,9 @@ of the symbol tables. .IP "\fB\-s\fR" 4 .IX Item "-s" .PD 0 +.IP "\fB\--syms\fR" 4 +.IX Item "--syms" +.PD 0 .IP "\fB\-\-symbols\fR [section name]" 4 .IX Item "--symbols" .PD diff --git a/lib/ChangeLog b/lib/ChangeLog index dd3ebcab..6bb0d4d0 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,95 @@ +2022-09-21 Yonggang Luo + + * color.c: Don't include unistd.h. + +2022-09-20 Yonggang Luo + + * system.h: Use BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN. + +2022-10-16 Yonggang Luo + + * system.h: Add sys/mman.h as system dependend header. + * common.h: Remove ar.h, byteswap.h and endian.h. + * elf32_checksum.c: Remove endian.h. + * elf32_getphdr.c: Remove unistd.h and system.h. + * elf32_getshdr.c: Remove unistd.h.h and system.h. + * elf32_updatefile.c: Remove unistd.h, sys/mman.h and system.h. + * elf32_updatenull.c: Remove endian.h and system.h. + +2022-08-05 Mark Wielaard + + * dynamicsizehash_concurrent.c (resize_helper): Add documentation. + (resize_master): Renamed to... + (resize_coordinator): ...this. And add documentation. + (resize_worker): Add documentation. + (FIND): Add documentation. + +2022-04-25 Mark Wielaard + + * printversion.c (print_version): Update copyright year. + +2022-03-27 Mark Wielaard + + * system.h: define error_exit. + +2021-02-14 Alexander Miller + + * 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 + + * 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 + + * 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 + + * 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 + + * fixedsizehash.h: Remove unused STROF macro. + +2021-08-20 Saleem Abdulrasool + + * 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 + + * fixedsizehash.h: Remove sys/cdefs.h include. Unconditionally + define STROF and CONCAT macros. + +2021-07-28 Mark Wielaard + + * system.h (reallocarray): New static inline fallback function. + 2021-04-19 Martin Liska * 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..8063dc26 100644 --- a/lib/color.c +++ b/lib/color.c @@ -32,10 +32,8 @@ #endif #include -#include #include #include -#include #include "system.h" #include "libeu.h" #include "color.h" @@ -188,10 +186,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..7c4fedfc 100644 --- a/lib/dynamicsizehash_concurrent.c +++ b/lib/dynamicsizehash_concurrent.c @@ -179,7 +179,8 @@ insert_helper (NAME *htab, HASHTYPE hval, TYPE val) #define CEIL(A, B) (((A) + (B) - 1) / (B)) /* Initializes records and copies the data from the old table. - It can share work with other threads */ + It can share work with other threads. Only the coordinator + will pass blocking as 1, other worker threads pass 0. */ static void resize_helper(NAME *htab, int blocking) { size_t num_old_blocks = CEIL(htab->old_size, MOVE_BLOCK_SIZE); @@ -244,13 +245,18 @@ static void resize_helper(NAME *htab, int blocking) atomic_fetch_add_explicit(&htab->num_moved_blocks, num_finished_blocks, memory_order_release); + /* The coordinating thread will block here waiting for all blocks to + be moved. */ if (blocking) while (atomic_load_explicit(&htab->num_moved_blocks, memory_order_acquire) != num_old_blocks); } +/* Called by the main thread holding the htab->resize_rwl lock to + coordinate the moving of hash table data. Allocates the new hash + table and frees the old one when moving all data is done. */ static void -resize_master(NAME *htab) +resize_coordinator(NAME *htab) { htab->old_size = htab->size; htab->old_table = htab->table; @@ -290,6 +296,10 @@ resize_master(NAME *htab) } +/* Called by any thread that wants to do an insert or find operation + but notices it cannot get the htab->resize_rwl lock because another + thread is resizing the hash table. Try to help out by moving table + data if still necessary. */ static void resize_worker(NAME *htab) { @@ -355,7 +365,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; @@ -391,6 +401,8 @@ INSERT(NAME) (NAME *htab, HASHTYPE hval, TYPE data) for(;;) { + /* If we cannot get the resize_rwl lock someone is resizing + hash table, try to help out by moving table data. */ while (pthread_rwlock_tryrdlock(&htab->resize_rwl) != 0) resize_worker(htab); @@ -421,17 +433,17 @@ INSERT(NAME) (NAME *htab, HASHTYPE hval, TYPE data) memory_order_acquire, memory_order_acquire)) { - /* Master thread */ + /* Main resizing thread, will coordinate moving data. */ pthread_rwlock_unlock(&htab->resize_rwl); pthread_rwlock_wrlock(&htab->resize_rwl); - resize_master(htab); + resize_coordinator(htab); pthread_rwlock_unlock(&htab->resize_rwl); } else { - /* Worker thread */ + /* Worker thread, will help moving data. */ pthread_rwlock_unlock(&htab->resize_rwl); resize_worker(htab); } @@ -458,8 +470,10 @@ TYPE name##_find FIND(NAME) (NAME *htab, HASHTYPE hval) { + /* If we cannot get the resize_rwl lock someone is resizing + the hash table, try to help out by moving table data. */ while (pthread_rwlock_tryrdlock(&htab->resize_rwl) != 0) - resize_worker(htab); + resize_worker(htab); size_t idx; 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 . */ + +#include + +#if !defined(HAVE_ERROR_H) && defined(HAVE_ERR_H) +#include +#include +#include +#include +#include + +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..78a5c4fe 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -52,6 +52,7 @@ # define rwlock_unlock(lock) ((void) (lock)) #endif /* USE_LOCKS */ +#include /* gettext helper macros. */ #define N_(Str) Str #define _(Str) dgettext ("elfutils", Str) @@ -176,27 +177,68 @@ asm (".section predict_data, \"aw\"; .previous\n" /* This macro is used by the tests conditionalize for standalone building. */ #define ELFUTILS_HEADER(name) +/* 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 #include #include -#include #include -#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..7d31fa83 100644 --- a/lib/printversion.c +++ b/lib/printversion.c @@ -30,7 +30,6 @@ # include #endif -#include #include "printversion.h" void @@ -41,5 +40,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..bbbe06c4 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -29,22 +30,46 @@ #ifndef LIB_SYSTEM_H #define LIB_SYSTEM_H 1 +#include + #include -#include #include #include -#include -#include +#include +#include +#include + +/* System dependend headers */ #include +#include +#include +#include #include -#include -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if defined(HAVE_ERROR_H) +#include +#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) # define LE64(n) (n) # define BE32(n) bswap_32 (n) # define BE64(n) bswap_64 (n) -#elif __BYTE_ORDER == __BIG_ENDIAN +#elif BYTE_ORDER == BIG_ENDIAN # define BE32(n) (n) # define BE64(n) (n) # define LE32(n) bswap_32 (n) @@ -70,6 +95,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..d61fad90 --- /dev/null +++ b/lib/xasprintf.c @@ -0,0 +1,51 @@ +/* A wrapper around vasprintf that dies in case of an error. + Copyright (c) 2021 Dmitry V. Levin + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#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/lib/xmalloc.c b/lib/xmalloc.c index 7c094985..de7211f1 100644 --- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -30,7 +30,6 @@ # include #endif -#include #include #include #include diff --git a/libasm/ChangeLog b/libasm/ChangeLog index 85e723e6..ce0f24f4 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,3 +1,25 @@ +2022-10-21 Yonggang Luo + + * asm_abort.c: Don't include unistd.h. + * asm_addint8.c: Don't include byteswap.h and endian.h. + * asm_begin.c: Don't include unistd.h and system.h. + * asm_end.c: Likewise. + * libasmP.h: Include system.h. + +2021-09-06 Dmitry V. Levin + + * 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 * libasmP.h (asm_emit_symbol_p): Use startswith. diff --git a/libasm/asm_abort.c b/libasm/asm_abort.c index 12743dc6..696298c4 100644 --- a/libasm/asm_abort.c +++ b/libasm/asm_abort.c @@ -32,7 +32,6 @@ #endif #include -#include #include #include diff --git a/libasm/asm_addint8.c b/libasm/asm_addint8.c index bb7d40f2..7f823e09 100644 --- a/libasm/asm_addint8.c +++ b/libasm/asm_addint8.c @@ -31,8 +31,6 @@ # include #endif -#include -#include #include #include 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..9e4dfe43 100644 --- a/libasm/asm_begin.c +++ b/libasm/asm_begin.c @@ -37,11 +37,9 @@ #include #include #include -#include #include #include "libasmP.h" -#include static AsmCtx_t * @@ -138,8 +136,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_end.c b/libasm/asm_end.c index 077d2aa5..c06d2366 100644 --- a/libasm/asm_end.c +++ b/libasm/asm_end.c @@ -32,16 +32,13 @@ #endif #include -#include #include #include #include -#include #include #include #include -#include static int diff --git a/libasm/asm_error.c b/libasm/asm_error.c index cc3e660b..2b769395 100644 --- a/libasm/asm_error.c +++ b/libasm/asm_error.c @@ -31,7 +31,6 @@ # include #endif -#include #include #include 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..d258d969 100644 --- a/libasm/asm_newscn.c +++ b/libasm/asm_newscn.c @@ -32,7 +32,6 @@ #endif #include -#include #include #include @@ -181,7 +180,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/libasm/libasmP.h b/libasm/libasmP.h index 5b5fb776..11f42511 100644 --- a/libasm/libasmP.h +++ b/libasm/libasmP.h @@ -32,6 +32,9 @@ #include #include + +#include + #include "libebl.h" #include "libdwelf.h" diff --git a/libcpu/.gitignore b/libcpu/.gitignore index d1b5dfff..9390e5b9 100644 --- a/libcpu/.gitignore +++ b/libcpu/.gitignore @@ -1,3 +1,5 @@ +/*.mnemonics +/*_dis.h /*_gendis /*_lex.c /*_parse.[ch] diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 7cca9419..06ffe02f 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,19 @@ +2022-10-21 Yonggang Luo + + * i386_disasm.c: Don't include endian.h. + * memory-access.h: Don't include byteswap.h and endian.h. + Do include system.h. + +2022-09-20 Yonggang Luo + + * memory-access.h: Use BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN. + * riscv_disasm.c: Likewise. + +2021-12-04 Mark Wielaard + + * Makefile.am (GENDIS_ENV): New variable, depends on + USE_ADDRESS_SANITIZER. + 2020-12-20 Dmitry V. Levin * .gitignore: New file. diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am index 43844ecf..57d0a164 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/libcpu/i386_disasm.c b/libcpu/i386_disasm.c index fd7340cc..599d1654 100644 --- a/libcpu/i386_disasm.c +++ b/libcpu/i386_disasm.c @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -44,7 +43,7 @@ #include "../libebl/libeblP.h" -#define MACHINE_ENCODING __LITTLE_ENDIAN +#define MACHINE_ENCODING LITTLE_ENDIAN #include "memory-access.h" diff --git a/libcpu/i386_lex.l b/libcpu/i386_lex.l index b6ec0f87..9b33ed95 100644 --- a/libcpu/i386_lex.l +++ b/libcpu/i386_lex.l @@ -31,7 +31,6 @@ #endif #include -#include #include #include "system.h" diff --git a/libcpu/i386_parse.y b/libcpu/i386_parse.y index 9a92c2e0..d2236d59 100644 --- a/libcpu/i386_parse.y +++ b/libcpu/i386_parse.y @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include diff --git a/libcpu/memory-access.h b/libcpu/memory-access.h index 779825fa..6e92fc5b 100644 --- a/libcpu/memory-access.h +++ b/libcpu/memory-access.h @@ -29,11 +29,10 @@ #ifndef _MEMORY_ACCESS_H #define _MEMORY_ACCESS_H 1 -#include -#include #include #include +#include /* When loading this file we require the macro MACHINE_ENCODING to be defined to signal the endianness of the architecture which is @@ -41,7 +40,7 @@ #ifndef MACHINE_ENCODING # error "MACHINE_ENCODING needs to be defined" #endif -#if MACHINE_ENCODING != __BIG_ENDIAN && MACHINE_ENCODING != __LITTLE_ENDIAN +#if MACHINE_ENCODING != BIG_ENDIAN && MACHINE_ENCODING != LITTLE_ENDIAN # error "MACHINE_ENCODING must signal either big or little endian" #endif @@ -51,31 +50,31 @@ #if ALLOW_UNALIGNED # define read_2ubyte_unaligned(Addr) \ - (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \ + (unlikely (MACHINE_ENCODING != BYTE_ORDER) \ ? bswap_16 (*((const uint16_t *) (Addr))) \ : *((const uint16_t *) (Addr))) # define read_2sbyte_unaligned(Addr) \ - (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \ + (unlikely (MACHINE_ENCODING != BYTE_ORDER) \ ? (int16_t) bswap_16 (*((const int16_t *) (Addr))) \ : *((const int16_t *) (Addr))) # define read_4ubyte_unaligned_noncvt(Addr) \ *((const uint32_t *) (Addr)) # define read_4ubyte_unaligned(Addr) \ - (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \ + (unlikely (MACHINE_ENCODING != BYTE_ORDER) \ ? bswap_32 (*((const uint32_t *) (Addr))) \ : *((const uint32_t *) (Addr))) # define read_4sbyte_unaligned(Addr) \ - (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \ + (unlikely (MACHINE_ENCODING != BYTE_ORDER) \ ? (int32_t) bswap_32 (*((const int32_t *) (Addr))) \ : *((const int32_t *) (Addr))) # define read_8ubyte_unaligned(Addr) \ - (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \ + (unlikely (MACHINE_ENCODING != BYTE_ORDER) \ ? bswap_64 (*((const uint64_t *) (Addr))) \ : *((const uint64_t *) (Addr))) # define read_8sbyte_unaligned(Addr) \ - (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \ + (unlikely (MACHINE_ENCODING != BYTE_ORDER) \ ? (int64_t) bswap_64 (*((const int64_t *) (Addr))) \ : *((const int64_t *) (Addr))) @@ -96,7 +95,7 @@ static inline uint16_t read_2ubyte_unaligned (const void *p) { const union unaligned *up = p; - if (MACHINE_ENCODING != __BYTE_ORDER) + if (MACHINE_ENCODING != BYTE_ORDER) return bswap_16 (up->u2); return up->u2; } @@ -104,7 +103,7 @@ static inline int16_t read_2sbyte_unaligned (const void *p) { const union unaligned *up = p; - if (MACHINE_ENCODING != __BYTE_ORDER) + if (MACHINE_ENCODING != BYTE_ORDER) return (int16_t) bswap_16 (up->u2); return up->s2; } @@ -119,7 +118,7 @@ static inline uint32_t read_4ubyte_unaligned (const void *p) { const union unaligned *up = p; - if (MACHINE_ENCODING != __BYTE_ORDER) + if (MACHINE_ENCODING != BYTE_ORDER) return bswap_32 (up->u4); return up->u4; } @@ -127,7 +126,7 @@ static inline int32_t read_4sbyte_unaligned (const void *p) { const union unaligned *up = p; - if (MACHINE_ENCODING != __BYTE_ORDER) + if (MACHINE_ENCODING != BYTE_ORDER) return (int32_t) bswap_32 (up->u4); return up->s4; } @@ -136,7 +135,7 @@ static inline uint64_t read_8ubyte_unaligned (const void *p) { const union unaligned *up = p; - if (MACHINE_ENCODING != __BYTE_ORDER) + if (MACHINE_ENCODING != BYTE_ORDER) return bswap_64 (up->u8); return up->u8; } @@ -144,7 +143,7 @@ static inline int64_t read_8sbyte_unaligned (const void *p) { const union unaligned *up = p; - if (MACHINE_ENCODING != __BYTE_ORDER) + if (MACHINE_ENCODING != BYTE_ORDER) return (int64_t) bswap_64 (up->u8); return up->s8; } diff --git a/libcpu/riscv_disasm.c b/libcpu/riscv_disasm.c index bc0d8f37..7175c077 100644 --- a/libcpu/riscv_disasm.c +++ b/libcpu/riscv_disasm.c @@ -41,7 +41,7 @@ #include "../libebl/libeblP.h" -#define MACHINE_ENCODING __LITTLE_ENDIAN +#define MACHINE_ENCODING LITTLE_ENDIAN #include "memory-access.h" diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b5462ef4..3c595a3d 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,118 @@ +2022-10-21 Yonggang Luo + + * dwarf_begin_elf.h: Don't include unistd.h and endian.h. + * dwarf_end.c: Don't include unistd.h. + * dwarf_setalt.c: Likewise. + * libdw_find_split_unit.c: Likewise. + +2022-10-19 Mark Wielaard + + * dwarf.h (DW_LLE_GNU_view_pair): New constant. + +2022-10-21 Yonggang Luo + + * memory-access.h: Include system.h instead of byteswap.h and + endian.h. + +2022-09-20 Yonggang Luo + + * memory-access.h: Use BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN. + +2022-09-13 Aleksei Vetrov + + * libdw.map (ELFUTILS_0.188): Add dwfl_report_offline_memory. + +2022-08-09 Ulrich Drepper + + * dwarf_next_cfi.c (dwarf_next_cfi): Don't skip processing the + augmentation string. Be more stringent what to accept. + +2022-07-28 Di Chen + + * libdw.map (ELFUTILS_0.188): Add dwfl_frame_reg. + +2022-07-13 Mark Wielaard + + * libdw.map (ELFUTILS_0.187): Renamed to... + (ELFUTILS_0.188): ... this. + +2022-05-09 Mark Wielaard + + * dwarf_getlocation.c (store_implicit_value): Check block length. + +2022-04-16 Mark Wielaard + + * libdwP.h: Remove atomics.h include. + +2022-04-13 Mark Wielaard + + * dwarf.h: Add DWARF5 package file section identifiers, + DW_SECT_*. + +2021-10-20 John M Mellor-Crummey + + * 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 + + * 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 + + * 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 + + * dwarf_aggregate_size.c (get_type): Don't pass NULL to + dwarf_peel_type. + +2021-10-06 Mark Wielaard + + * 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 + + * 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 + + * 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 * dwarf_begin_elf.c (check_section): Use startswith. diff --git a/libdw/Makefile.am b/libdw/Makefile.am index 6b7834af..4fda33bd 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -63,6 +63,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..b2e49db2 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 }; @@ -927,7 +931,24 @@ enum DW_LLE_GNU_end_of_list_entry = 0x0, DW_LLE_GNU_base_address_selection_entry = 0x1, DW_LLE_GNU_start_end_entry = 0x2, - DW_LLE_GNU_start_length_entry = 0x3 + DW_LLE_GNU_start_length_entry = 0x3, + + // http://www.fsfla.org/~lxoliva/papers/sfn/dwarf6-sfn-lvu.txt + // https://dwarfstd.org/ShowIssue.php?issue=170427.1 + DW_LLE_GNU_view_pair = 0x9 + }; + +/* 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, }; 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..8fcef335 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -38,11 +38,9 @@ #include #include #include -#include #include #include #include -#include #include "libelfP.h" #include "libdwP.h" @@ -72,6 +70,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 +139,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 +154,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 +171,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 +273,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 +313,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 +341,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 +354,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 +374,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 +393,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 +447,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 +463,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 +506,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_end.c b/libdw/dwarf_end.c index 77f537a7..8dd075cf 100644 --- a/libdw/dwarf_end.c +++ b/libdw/dwarf_end.c @@ -35,7 +35,6 @@ #include #include #include -#include #include "libdwP.h" #include "cfi.h" diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c index 5db3cf97..d0d78163 100644 --- a/libdw/dwarf_getlocation.c +++ b/libdw/dwarf_getlocation.c @@ -147,7 +147,10 @@ store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op) sizeof (struct loc_block_s), 1); const unsigned char *data = (const unsigned char *) (uintptr_t) op->number2; /* Skip the block length. */ - __libdw_get_uleb128_unchecked (&data); + Dwarf_Word length; + get_uleb128_unchecked (length, data); + if (length != op->number) + return -1; block->addr = op; block->data = (unsigned char *) data; block->length = op->number; 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 , 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#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 , 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#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_next_cfi.c b/libdw/dwarf_next_cfi.c index fa28d99b..23b16885 100644 --- a/libdw/dwarf_next_cfi.c +++ b/libdw/dwarf_next_cfi.c @@ -193,50 +193,71 @@ dwarf_next_cfi (const unsigned char e_ident[], else /* DWARF 2 */ entry->cie.return_address_register = *bytes++; - /* If we have sized augmentation data, - we don't need to grok it all. */ entry->cie.fde_augmentation_data_size = 0; + entry->cie.augmentation_data = bytes; bool sized_augmentation = *ap == 'z'; if (sized_augmentation) { + ++ap; if (bytes >= limit) goto invalid; get_uleb128 (entry->cie.augmentation_data_size, bytes, limit); if ((Dwarf_Word) (limit - bytes) < entry->cie.augmentation_data_size) goto invalid; entry->cie.augmentation_data = bytes; - bytes += entry->cie.augmentation_data_size; } - else - { - entry->cie.augmentation_data = bytes; - for (; *ap != '\0'; ++ap) + for (; *ap != '\0'; ++ap) + { + uint8_t encoding; + switch (*ap) { - uint8_t encoding; - switch (*ap) + case 'L': + if (sized_augmentation) { - case 'L': /* Skip LSDA pointer encoding byte. */ - case 'R': /* Skip FDE address encoding byte. */ + /* Skip LSDA pointer encoding byte. */ encoding = *bytes++; entry->cie.fde_augmentation_data_size += encoded_value_size (data, e_ident, encoding, NULL); continue; - case 'P': /* Skip encoded personality routine pointer. */ + } + break; + case 'R': + if (sized_augmentation) + { + /* Skip FDE address encoding byte. */ encoding = *bytes++; - bytes += encoded_value_size (data, e_ident, encoding, bytes); continue; - case 'S': /* Skip signal-frame flag. */ + } + break; + case 'P': + if (sized_augmentation) + { + /* Skip encoded personality routine pointer. */ + encoding = *bytes++; + bytes += encoded_value_size (data, e_ident, encoding, bytes); continue; - default: - /* Unknown augmentation string. initial_instructions might - actually start with some augmentation data. */ - break; } break; + case 'S': + if (sized_augmentation) + /* Skip signal-frame flag. */ + continue; + break; + default: + /* Unknown augmentation string. initial_instructions might + actually start with some augmentation data. */ + break; } - entry->cie.augmentation_data_size - = bytes - entry->cie.augmentation_data; + break; + } + if (! sized_augmentation) + entry->cie.augmentation_data_size = bytes - entry->cie.augmentation_data; + else + { + if (bytes > entry->cie.augmentation_data + entry->cie.augmentation_data_size) + goto invalid; + bytes = entry->cie.augmentation_data + entry->cie.augmentation_data_size; } entry->cie.initial_instructions = bytes; diff --git a/libdw/dwarf_setalt.c b/libdw/dwarf_setalt.c index 9051b8e0..dc9b61cb 100644 --- a/libdw/dwarf_setalt.c +++ b/libdw/dwarf_setalt.c @@ -32,8 +32,6 @@ #include "libdwP.h" -#include - void dwarf_setalt (Dwarf *main, Dwarf *alt) { 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..5331ad45 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -360,3 +360,16 @@ 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; + +ELFUTILS_0.188 { + global: + dwfl_get_debuginfod_client; + dwfl_frame_reg; + dwfl_report_offline_memory; +} ELFUTILS_0.186; diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 7174ea93..961fa4e7 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -29,13 +29,11 @@ #ifndef _LIBDWP_H #define _LIBDWP_H 1 -#include #include #include #include #include -#include "atomics.h" /* Known location expressions already decoded. */ @@ -145,6 +143,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 +224,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 +301,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/libdw/libdw_find_split_unit.c b/libdw/libdw_find_split_unit.c index da039e50..a22e7bc9 100644 --- a/libdw/libdw_find_split_unit.c +++ b/libdw/libdw_find_split_unit.c @@ -40,7 +40,6 @@ #include #include #include -#include void try_split_file (Dwarf_CU *cu, const char *dwo_path) diff --git a/libdw/memory-access.h b/libdw/memory-access.h index 8b2386ee..16c8c851 100644 --- a/libdw/memory-access.h +++ b/libdw/memory-access.h @@ -29,11 +29,10 @@ #ifndef _MEMORY_ACCESS_H #define _MEMORY_ACCESS_H 1 -#include -#include #include #include +#include /* Number decoding macros. See 7.6 Variable Length Data. */ @@ -355,10 +354,10 @@ read_8sbyte_unaligned_1 (bool other_byte_order, const void *p) static inline int file_byte_order (bool other_byte_order) { -#if __BYTE_ORDER == __LITTLE_ENDIAN - return other_byte_order ? __BIG_ENDIAN : __LITTLE_ENDIAN; +#if BYTE_ORDER == LITTLE_ENDIAN + return other_byte_order ? BIG_ENDIAN : LITTLE_ENDIAN; #else - return other_byte_order ? __LITTLE_ENDIAN : __BIG_ENDIAN; + return other_byte_order ? LITTLE_ENDIAN : BIG_ENDIAN; #endif } @@ -372,7 +371,7 @@ read_3ubyte_unaligned (Dwarf *dbg, const unsigned char *p) } d; bool other_byte_order = dbg->other_byte_order; - if (file_byte_order (other_byte_order) == __BIG_ENDIAN) + if (file_byte_order (other_byte_order) == BIG_ENDIAN) { d.c[0] = 0x00; d.c[1] = p[0]; diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index a0ff9f4f..5d61aa85 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,29 @@ +2022-10-21 Yonggang Luo + + * dwelf_elf_begin.c: Don't include unistd.h. + * dwelf_strtab.c: Likewise. + +2022-08-08 Andreas Schwab + + * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add + EM_LOONGARCH LoongArch. + +2022-03-24 Mark Wielaard + + * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add + EM_INTELGT Intel Graphics Technology. + +2021-02-14 Alexander Miller + + * dwelf_elf_begin.c (dwelf_elf_begin): Move NEW_VERSION before + definition. + +2021-09-06 Dmitry V. Levin + + * 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 * libdwelf.h: Fix spelling typos in comments. diff --git a/libdwelf/dwelf_elf_begin.c b/libdwelf/dwelf_elf_begin.c index c7d63a1c..17a90fc9 100644 --- a/libdwelf/dwelf_elf_begin.c +++ b/libdwelf/dwelf_elf_begin.c @@ -34,8 +34,7 @@ #include "libdwflP.h" #include "libelfP.h" -#include - +NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) Elf * dwelf_elf_begin (int fd) { @@ -61,4 +60,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..6d588ea8 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: @@ -396,6 +398,8 @@ dwelf_elf_e_machine_string (int machine) return "BPF"; case EM_CSKY: return "C-SKY"; + case EM_LOONGARCH: + return "LoongArch"; case EM_ALPHA: return "Alpha"; diff --git a/libdwelf/dwelf_strtab.c b/libdwelf/dwelf_strtab.c index c6ae7cdf..c95f9467 100644 --- a/libdwelf/dwelf_strtab.c +++ b/libdwelf/dwelf_strtab.c @@ -37,7 +37,6 @@ #include #include #include -#include #include "libdwelfP.h" #include @@ -91,8 +90,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 +115,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..6dd84a6f 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,266 @@ +2022-10-21 Yonggang Luo + + * argp-std.c: Don't include unistd.h. + * core-file.c: Don't include unistd.h, endian.h, byteswap.h and + system.h. + * dwfl_build_id_find_debuginfo.c: Don't include unistd.h. + * dwfl_build_id_find_elf.c: Likewise. + * dwfl_end.c: Likewise. + * dwfl_frame.c: Likewise. + * dwfl_module.c: Likewise. + * dwfl_module_getdwarf.c: Likewise. + * dwfl_report_elf.c: Likewise. + * dwfl_segment_report_module.c: Don't include endian.h and unistd.h. + * find-debuginfo.c: Don't include unistd.h. + * gzip.c: Likewise. + * image-header.c: Don't include system.h, unistd.h and endian.h. + * link_map.c: Don't include byteswap.h and endian.h. + * linux-pid-attach.c: Don't include unistd.h. + * offline.c: Likewise. + * open.c: Likewise. + +2022-10-21 Yonggang Luo + + * libdwfl_crc32.c: Remove LIB_SYSTEM_H define. + +2022-09-20 Yonggang Luo + + * dwfl_segment_report_module.c: Use BYTE_ORDER, LITTLE_ENDIAN and + BIG_ENDIAN. + +2022-09-13 Aleksei Vetrov + + * libdwfl.h (dwfl_report_offline_memory): New function. + * libdwflP.h (__libdw_open_elf_memory): New internal function. + (dwfl_report_offline_memory): INTDECL. + * offline.c (dwfl_report_offline_memory): New function. + * open.c (decompress): Return DWFL_E_BADELF when fd is -1. + (libdw_open_elf): New argument use_elfp. Adding *elfp to elf if + true. + (__libdw_open_file): Pass false to libdw_open_elf. + (__libdw_open_elf_memory): New function. + (__libdw_open_elf): Pass false for libdw_open_elf. + +2022-07-28 Di Chen + + * libdwfl.h (dwfl_frame_reg): New function. + * libdwflP.h (DWFL_E_REGISTER_VAL_UNKNOWN): New error code. + (__libdwfl_frame_reg_get): Return an int. + (dwfl_frame_reg): INTDECL. + * dwfl_frame_regs.c (dwfl_frame_reg): New function. + * frame_unwind.c (__libdwfl_frame_reg_get): Return an int. + (state_get_reg): Removed. + (expr_eval): Use INTUSE (dwfl_frame_reg) instead of state_get_reg. + (handle_cfi): Likewise. + (getfunc): Likewise. + * linux-core-attach.c (core_set_initial_registers): Check + __libdwfl_frame_reg_get returns zero. + +2022-07-28 Mark Wielaard + + * core-file.c (elf_begin_rand): Replace struct ar_hdr h with + a char ar_size[AR_SIZE_CHARS + 1] array to read size. + +2022-07-18 Shahab Vahedi + + * debuginfod-client.c (dwfl_get_debuginfod_client stub): + Add a name to the sole parameter. + +2022-07-13 Mark Wielaard + + * debuginfod-client.c (dwfl_get_debuginfod_client): Add INTDEF. + (__libdwfl_debuginfod_find_executable): Use + INTUSE (dwfl_get_debuginfod_client). + (__libdwfl_debuginfod_find_debuginfo): Likewise. + +2022-06-22 Milian Wolff + + * libdwfl.h, debuginfod-client.c (dwfl_get_debuginfod_client): + Rename get_client to dwfl_get_debuginfod_client and make it public. + +2022-05-15 Mark Wielaard + + * libdwfl.h (dwfl_module_addrinfo): Update docs and nonnull + attribute to make clear offset and sym cannot be NULL. + +2022-04-22 Mark Wielaard + + * 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 + + * image-header.c (__libdw_image_header): Assign header values for + magic1, magic2, version, offset, length and sects using memcpy. + +2022-02-18 Mark Wielaard + + * offline.c (process_archive_member): Close member if process_file + failed. + +2022-01-03 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Only declare d32 and d64 before + actual use. + +2022-01-03 Mark Wielaard + + * 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 + + * link_map.c (read_addrs): Fix buffer_available nb overflow. + +2021-12-23 Mark Wielaard + + * link_map.c (read_addrs): Calculate addr to read by hand. + +2021-12-23 Mark Wielaard + + * 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 + + * core-file.c (dwfl_elf_phdr_memory_callback): Check start < + elf->maximum_size and end - start < minread. + +2021-12-20 Mark Wielaard + + * 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 + + * 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 + + * 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 + + * 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 + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + notes filesz. Rewrite reading of GElf_Nhdr. + +2021-12-08 Mark Wielaard + + * 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 + + * 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 + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make + sure the note len increases each iteration. + +2021-12-17 Mark Wielaard + + * 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 + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + note data is properly aligned. + +2021-12-16 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure phnum is non-zero. + +2021-12-16 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure dyn_filesz / entsize is + non-zero. + +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Add + len overflow check while iterating notes. + +2021-12-15 Mark Wielaard + + * 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 + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + allocate more than SIZE_MAX. + +2021-12-09 Mark Wielaard + + * 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 + + * 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 + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + trust e_shentsize. + +2021-12-08 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure phent != 0. + +2021-12-08 Mark Wielaard + + * 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 + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + read beyond of (actual) end of (memory) file. + +2021-11-18 Matthias Maennich + + * linux-kernel-modules.c (dwfl_linux_kernel_report_modules): + Add one to modname array size. + +2021-02-14 Alexander Miller + + * 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 + + * linux-pid-attach.c (read_cached_memory): Remove cast of malloc + return value. + +2021-06-09 Omar Sandoval + + * link_map.c (read_addrs): Fix potential NULL pointer dereference. + 2021-04-19 Martin Liska * dwfl_frame.c (dwfl_attach_state): Use startswith. diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am index a0013e41..3278358d 100644 --- a/libdwfl/Makefile.am +++ b/libdwfl/Makefile.am @@ -70,7 +70,7 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \ link_map.c core-file.c open.c image-header.c \ dwfl_frame.c frame_unwind.c dwfl_frame_pc.c \ linux-pid-attach.c linux-core-attach.c dwfl_frame_regs.c \ - gzip.c + gzip.c debuginfod-client.c if BZLIB libdwfl_a_SOURCES += bzip2.c @@ -81,9 +81,6 @@ endif if ZSTD libdwfl_a_SOURCES += zstd.c endif -if LIBDEBUGINFOD -libdwfl_a_SOURCES += debuginfod-client.c -endif libdwfl = $(libdw) libdw = ../libdw/libdw.so diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c index 01ec18e2..1605fbfe 100644 --- a/libdwfl/argp-std.c +++ b/libdwfl/argp-std.c @@ -34,9 +34,7 @@ #include #include #include -#include #include -#include #define OPT_DEBUGINFO 0x100 diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index a0ccc9b3..cd9b4f38 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -32,12 +33,6 @@ #include "libdwflP.h" #include -#include -#include -#include -#include "system.h" - - /* On failure return, we update *NEXT to point back at OFFSET. */ static inline Elf * do_fail (int error, off_t *next, off_t offset) @@ -74,26 +69,32 @@ elf_begin_rand (Elf *parent, off_t offset, off_t size, off_t *next) from the archive header to override SIZE. */ if (parent->kind == ELF_K_AR) { - struct ar_hdr h = { .ar_size = "" }; - - if (unlikely (parent->maximum_size - offset < sizeof h)) + /* File size, in ASCII decimal, right-padded with ASCII spaces. + Max 10 characters. Not zero terminated. So make this ar_size + array one larger and explicitly zero terminate it. As needed + for strtoll. */ + #define AR_SIZE_CHARS 10 + char ar_size[AR_SIZE_CHARS + 1]; + ar_size[AR_SIZE_CHARS] = '\0'; + + if (unlikely (parent->maximum_size - offset < sizeof (struct ar_hdr))) return fail (ELF_E_RANGE); if (parent->map_address != NULL) - memcpy (h.ar_size, parent->map_address + parent->start_offset + offset, - sizeof h.ar_size); + memcpy (ar_size, parent->map_address + parent->start_offset + offset, + AR_SIZE_CHARS); else if (unlikely (pread_retry (parent->fildes, - h.ar_size, sizeof (h.ar_size), + ar_size, AR_SIZE_CHARS, parent->start_offset + offset + offsetof (struct ar_hdr, ar_size)) - != sizeof (h.ar_size))) + != AR_SIZE_CHARS)) return fail (ELF_E_READ_ERROR); - offset += sizeof h; + offset += sizeof (struct ar_hdr); char *endp; - size = strtoll (h.ar_size, &endp, 10); - if (unlikely (endp == h.ar_size) + size = strtoll (ar_size, &endp, 10); + if (unlikely (endp == ar_size) || unlikely ((off_t) parent->maximum_size - offset < size)) return fail (ELF_E_INVALID_ARCHIVE); } @@ -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..d581daab 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -31,6 +32,10 @@ #endif #include "libdwflP.h" + +#ifdef ENABLE_LIBDEBUGINFOD + +#include #include static __typeof__ (debuginfod_begin) *fp_debuginfod_begin; @@ -38,14 +43,20 @@ 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 * -get_client (Dwfl *dwfl) +debuginfod_client * +dwfl_get_debuginfod_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) (); @@ -54,6 +65,7 @@ get_client (Dwfl *dwfl) return NULL; } +INTDEF(dwfl_get_debuginfod_client) int __libdwfl_debuginfod_find_executable (Dwfl *dwfl, @@ -63,7 +75,7 @@ __libdwfl_debuginfod_find_executable (Dwfl *dwfl, int fd = -1; if (build_id_len > 0) { - debuginfod_client *c = get_client (dwfl); + debuginfod_client *c = INTUSE (dwfl_get_debuginfod_client) (dwfl); if (c != NULL) fd = (*fp_debuginfod_find_executable) (c, build_id_bits, build_id_len, NULL); @@ -80,7 +92,7 @@ __libdwfl_debuginfod_find_debuginfo (Dwfl *dwfl, int fd = -1; if (build_id_len > 0) { - debuginfod_client *c = get_client (dwfl); + debuginfod_client *c = INTUSE (dwfl_get_debuginfod_client) (dwfl); if (c != NULL) fd = (*fp_debuginfod_find_debuginfo) (c, build_id_bits, build_id_len, NULL); @@ -96,9 +108,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 dwfl_get_debuginfod_client. */ +static void __libdwfl_debuginfod_init (void) { void *debuginfod_so = dlopen(DEBUGINFOD_SONAME, RTLD_LAZY); @@ -126,3 +138,13 @@ __libdwfl_debuginfod_init (void) } } } + +#else // ENABLE_LIBDEBUGINFOD + +debuginfod_client * +dwfl_get_debuginfod_client (Dwfl *dummy __attribute__ ((unused))) +{ + return NULL; +} + +#endif // ENABLE_LIBDEBUGINFOD diff --git a/libdwfl/dwfl_build_id_find_debuginfo.c b/libdwfl/dwfl_build_id_find_debuginfo.c index 273e5e5f..856f2312 100644 --- a/libdwfl/dwfl_build_id_find_debuginfo.c +++ b/libdwfl/dwfl_build_id_find_debuginfo.c @@ -31,8 +31,6 @@ #endif #include "libdwflP.h" -#include - int dwfl_build_id_find_debuginfo (Dwfl_Module *mod, diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c index 7b604d47..35bc8c9e 100644 --- a/libdwfl/dwfl_build_id_find_elf.c +++ b/libdwfl/dwfl_build_id_find_elf.c @@ -33,7 +33,6 @@ #include "libdwflP.h" #include #include -#include #include "system.h" diff --git a/libdwfl/dwfl_end.c b/libdwfl/dwfl_end.c index b1840191..a1812407 100644 --- a/libdwfl/dwfl_end.c +++ b/libdwfl/dwfl_end.c @@ -31,7 +31,6 @@ #endif #include "libdwflP.h" -#include void dwfl_end (Dwfl *dwfl) diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c index a5c683a9..43fa1dcc 100644 --- a/libdwfl/dwfl_error.c +++ b/libdwfl/dwfl_error.c @@ -31,7 +31,6 @@ #endif #include -#include #include #include #include diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c index 77e0c5cb..5ee71dd4 100644 --- a/libdwfl/dwfl_frame.c +++ b/libdwfl/dwfl_frame.c @@ -33,7 +33,6 @@ #include #include "libdwflP.h" -#include /* Set STATE->pc_set from STATE->regs according to the backend. Return true on success, false on error. */ diff --git a/libdwfl/dwfl_frame_regs.c b/libdwfl/dwfl_frame_regs.c index 83b1abef..a4bd3884 100644 --- a/libdwfl/dwfl_frame_regs.c +++ b/libdwfl/dwfl_frame_regs.c @@ -59,3 +59,15 @@ dwfl_thread_state_register_pc (Dwfl_Thread *thread, Dwarf_Word pc) state->pc_state = DWFL_FRAME_STATE_PC_SET; } INTDEF(dwfl_thread_state_register_pc) + +int +dwfl_frame_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Word *val) +{ + int res = __libdwfl_frame_reg_get (state, regno, val); + if (res == -1) + __libdwfl_seterrno (DWFL_E_INVALID_REGISTER); + else if (res == 1) + __libdwfl_seterrno (DWFL_E_REGISTER_VAL_UNKNOWN); + return res; +} +INTDEF(dwfl_frame_reg) diff --git a/libdwfl/dwfl_module.c b/libdwfl/dwfl_module.c index e7dfdace..4fbff33e 100644 --- a/libdwfl/dwfl_module.c +++ b/libdwfl/dwfl_module.c @@ -33,7 +33,6 @@ #include "libdwflP.h" #include "../libdw/cfi.h" #include -#include static void free_cu (struct dwfl_cu *cu) 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_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c index 6f076057..498c7cd2 100644 --- a/libdwfl/dwfl_module_getdwarf.c +++ b/libdwfl/dwfl_module_getdwarf.c @@ -34,7 +34,6 @@ #include #include #include -#include #include "../libdw/libdwP.h" /* DWARF_E_* values are here. */ #include "../libelf/libelfP.h" #include "system.h" diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 9da86698..581f4079 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -32,8 +32,6 @@ #include "libdwflP.h" #include -#include - /* We start every ET_REL module at a moderately aligned boundary. This keeps the low addresses easy to read compared to a layout @@ -287,6 +285,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 +321,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..287fc002 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -35,8 +36,6 @@ #include #include #include -#include -#include #include #include @@ -48,7 +47,7 @@ #define INITIAL_READ 1024 -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if BYTE_ORDER == LITTLE_ENDIAN # define MY_ELFDATA ELFDATA2LSB #else # define MY_ELFDATA ELFDATA2MSB @@ -294,6 +293,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 +331,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 +372,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 +403,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 +417,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 +445,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 +466,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 +497,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 +545,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 +572,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 +594,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 +700,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 +768,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 +827,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 +842,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 +945,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 +973,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 +996,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 +1035,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 +1048,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/find-debuginfo.c b/libdwfl/find-debuginfo.c index 449df5a1..7f7ab632 100644 --- a/libdwfl/find-debuginfo.c +++ b/libdwfl/find-debuginfo.c @@ -33,7 +33,6 @@ #include "libdwflP.h" #include #include -#include #include #include "system.h" diff --git a/libdwfl/frame_unwind.c b/libdwfl/frame_unwind.c index 9ac33833..8185d84b 100644 --- a/libdwfl/frame_unwind.c +++ b/libdwfl/frame_unwind.c @@ -43,21 +43,21 @@ error. */ #define DWARF_EXPR_STEPS_MAX 0x1000 -bool +int internal_function __libdwfl_frame_reg_get (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val) { Ebl *ebl = state->thread->process->ebl; if (! ebl_dwarf_to_regno (ebl, ®no)) - return false; + return -1; if (regno >= ebl_frame_nregs (ebl)) - return false; + return -1; if ((state->regs_set[regno / sizeof (*state->regs_set) / 8] & ((uint64_t) 1U << (regno % (sizeof (*state->regs_set) * 8)))) == 0) - return false; + return 1; if (val) *val = state->regs[regno]; - return true; + return 0; } bool @@ -78,17 +78,6 @@ __libdwfl_frame_reg_set (Dwfl_Frame *state, unsigned regno, Dwarf_Addr val) return true; } -static bool -state_get_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val) -{ - if (! __libdwfl_frame_reg_get (state, regno, val)) - { - __libdwfl_seterrno (DWFL_E_INVALID_REGISTER); - return false; - } - return true; -} - static int bra_compar (const void *key_voidp, const void *elem_voidp) { @@ -211,7 +200,7 @@ expr_eval (Dwfl_Frame *state, Dwarf_Frame *frame, const Dwarf_Op *ops, } break; case DW_OP_reg0 ... DW_OP_reg31: - if (! state_get_reg (state, op->atom - DW_OP_reg0, &val1) + if (INTUSE (dwfl_frame_reg) (state, op->atom - DW_OP_reg0, &val1) != 0 || ! push (val1)) { free (stack.addrs); @@ -219,14 +208,14 @@ expr_eval (Dwfl_Frame *state, Dwarf_Frame *frame, const Dwarf_Op *ops, } break; case DW_OP_regx: - if (! state_get_reg (state, op->number, &val1) || ! push (val1)) + if (INTUSE (dwfl_frame_reg) (state, op->number, &val1) != 0 || ! push (val1)) { free (stack.addrs); return false; } break; case DW_OP_breg0 ... DW_OP_breg31: - if (! state_get_reg (state, op->atom - DW_OP_breg0, &val1)) + if (INTUSE (dwfl_frame_reg) (state, op->atom - DW_OP_breg0, &val1) != 0) { free (stack.addrs); return false; @@ -239,7 +228,7 @@ expr_eval (Dwfl_Frame *state, Dwarf_Frame *frame, const Dwarf_Op *ops, } break; case DW_OP_bregx: - if (! state_get_reg (state, op->number, &val1)) + if (INTUSE (dwfl_frame_reg) (state, op->number, &val1) != 0) { free (stack.addrs); return false; @@ -591,7 +580,7 @@ handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias) else if (reg_ops == NULL) { /* REGNO is same-value. */ - if (! state_get_reg (state, regno, ®val)) + if (INTUSE (dwfl_frame_reg) (state, regno, ®val) != 0) continue; } else @@ -638,9 +627,10 @@ handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias) } if (unwound->pc_state == DWFL_FRAME_STATE_ERROR) { - if (__libdwfl_frame_reg_get (unwound, - frame->fde->cie->return_address_register, - &unwound->pc)) + int res = INTUSE (dwfl_frame_reg) (unwound, + frame->fde->cie->return_address_register, + &unwound->pc); + if (res == 0) { /* PPC32 __libc_start_main properly CFI-unwinds PC as zero. Currently none of the archs supported for unwinding have @@ -698,7 +688,7 @@ getfunc (int firstreg, unsigned nregs, Dwarf_Word *regs, void *arg) Dwfl_Frame *state = arg; assert (firstreg >= 0); while (nregs--) - if (! __libdwfl_frame_reg_get (state, firstreg++, regs++)) + if (INTUSE (dwfl_frame_reg) (state, firstreg++, regs++) != 0) return false; return true; } diff --git a/libdwfl/gzip.c b/libdwfl/gzip.c index ba8ecfba..53013be3 100644 --- a/libdwfl/gzip.c +++ b/libdwfl/gzip.c @@ -33,8 +33,6 @@ #include "libdwflP.h" #include "system.h" -#include - #ifdef LZMA # define USE_INFLATE 1 # include diff --git a/libdwfl/image-header.c b/libdwfl/image-header.c index 25fbfd99..c777cc84 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -31,10 +32,6 @@ #endif #include "libdwflP.h" -#include "system.h" - -#include -#include #if BYTE_ORDER == LITTLE_ENDIAN # define LE16(x) (x) @@ -80,17 +77,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 (§s, 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/libdwfl.h b/libdwfl/libdwfl.h index f98f1d52..9114f7f0 100644 --- a/libdwfl/libdwfl.h +++ b/libdwfl/libdwfl.h @@ -49,6 +49,9 @@ typedef struct Dwfl_Thread Dwfl_Thread; PC location described by an FDE belonging to Dwfl_Thread. */ typedef struct Dwfl_Frame Dwfl_Frame; +/* Handle for debuginfod-client connection. */ +typedef struct debuginfod_client debuginfod_client; + /* Callbacks. */ typedef struct { @@ -156,6 +159,10 @@ extern Dwfl_Module *dwfl_report_elf (Dwfl *dwfl, const char *name, extern Dwfl_Module *dwfl_report_offline (Dwfl *dwfl, const char *name, const char *file_name, int fd); +/* Similar, but report ELF from memory region. */ +extern Dwfl_Module *dwfl_report_offline_memory (Dwfl *dwfl, const char *name, + const char *file_name, + char *data, size_t size); /* Finish reporting the current set of modules to the library. If REMOVED is not null, it's called for each module that @@ -473,26 +480,26 @@ extern const char *dwfl_module_addrname (Dwfl_Module *mod, GElf_Addr address); when nothing was found. If the architecture uses function descriptors, and symbol st_value points to one, ADDRESS will be matched against either the adjusted st_value or the associated - function entry value as described in dwfl_module_getsym_info. If - OFFSET is not NULL it will be filled in with the difference from - the start of the symbol (or function entry). If SYM is not NULL it - is filled in with the symbol associated with the matched ADDRESS. - The SYM->ST_VALUE itself isn't adjusted in any way. Fills in ELFP, - if not NULL, with the ELF file the symbol originally came from. - Note that symbols can come from either the main, debug or auxiliary - ELF symbol file (either dynsym or symtab). If SHNDXP is non-null, - it's set with the section index (whether from st_shndx or extended - index table). Fills in BIAS, if not NULL, with the difference - between addresses within the loaded module and those in symbol - table of the ELF file. Note that the address matched against the - symbol might be in a different section than the returned symbol. - The section in the main elf file in ADDRESS falls can be found with - dwfl_module_address_section. */ + function entry value as described in dwfl_module_getsym_info. + OFFSET will be filled in with the difference from the start of the + symbol (or function entry), OFFSET cannot be NULL. SYM is filled + in with the symbol associated with the matched ADDRESS, SYM cannot + be NULL. The SYM->ST_VALUE itself isn't adjusted in any way. + Fills in ELFP, if not NULL, with the ELF file the symbol originally + came from. Note that symbols can come from either the main, debug + or auxiliary ELF symbol file (either dynsym or symtab). If SHNDXP + is non-null, it's set with the section index (whether from st_shndx + or extended index table). Fills in BIAS, if not NULL, with the + difference between addresses within the loaded module and those in + symbol table of the ELF file. Note that the address matched + against the symbol might be in a different section than the + returned symbol. The section in the main elf file in ADDRESS falls + can be found with dwfl_module_address_section. */ extern const char *dwfl_module_addrinfo (Dwfl_Module *mod, GElf_Addr address, GElf_Off *offset, GElf_Sym *sym, GElf_Word *shndxp, Elf **elfp, Dwarf_Addr *bias) - __nonnull_attribute__ (3); + __nonnull_attribute__ (3, 4); /* Find the symbol that ADDRESS lies inside, and return detailed information as for dwfl_module_getsym (above). Note that like @@ -795,6 +802,19 @@ int dwfl_getthread_frames (Dwfl *dwfl, pid_t tid, bool dwfl_frame_pc (Dwfl_Frame *state, Dwarf_Addr *pc, bool *isactivation) __nonnull_attribute__ (1, 2); +/* Get the value of the DWARF register number in the given frame. + Returns zero on success, -1 on error (invalid DWARF register + number) or 1 if the value of the register in the frame is unknown. */ +int dwfl_frame_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Word *val) + __nonnull_attribute__ (1); + +/* Return the internal debuginfod-client connection handle for the DWFL session. + When the client connection has not yet been initialized, it will be done on the + first call to this function. If elfutils is compiled without support for debuginfod, + NULL will be returned. + */ +extern debuginfod_client *dwfl_get_debuginfod_client (Dwfl *dwfl); + #ifdef __cplusplus } #endif diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h index 4344e356..011b5de9 100644 --- a/libdwfl/libdwflP.h +++ b/libdwfl/libdwflP.h @@ -81,6 +81,7 @@ typedef struct Dwfl_Process Dwfl_Process; DWFL_ERROR (LIBEBL_BAD, N_("Internal error due to ebl")) \ DWFL_ERROR (CORE_MISSING, N_("Missing data in core file")) \ DWFL_ERROR (INVALID_REGISTER, N_("Invalid register")) \ + DWFL_ERROR (REGISTER_VAL_UNKNOWN, N_("Unknown register value")) \ DWFL_ERROR (PROCESS_MEMORY_READ, N_("Error reading process memory")) \ DWFL_ERROR (PROCESS_NO_ARCH, N_("Couldn't find architecture of any ELF")) \ DWFL_ERROR (PARSE_PROC, N_("Error parsing /proc filesystem")) \ @@ -276,9 +277,11 @@ struct Dwfl_Frame Dwarf_Addr regs[]; }; -/* Fetch value from Dwfl_Frame->regs indexed by DWARF REGNO. - No error code is set if the function returns FALSE. */ -bool __libdwfl_frame_reg_get (Dwfl_Frame *state, unsigned regno, +/* Fetch value from Dwfl_Frame->regs indexed by DWARF REGNO. The + function returns 0 on success, -1 on error (invalid DWARF register + number), 1 if the value of the register in the frame is unknown. + Even on error, no error code is set. */ +int __libdwfl_frame_reg_get (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val) internal_function; @@ -628,6 +631,11 @@ extern Dwfl_Error __libdw_open_file (int *fdp, Elf **elfp, bool close_on_fail, bool archive_ok) internal_function; +/* Same as __libdw_open_file, but opens Elf handle from memory region. */ +extern Dwfl_Error __libdw_open_elf_memory (char *data, size_t size, Elf **elfp, + bool archive_ok) + internal_function; + /* Same as __libdw_open_file, but never closes the given file descriptor and ELF_K_AR is always an acceptable type. */ extern Dwfl_Error __libdw_open_elf (int fd, Elf **elfp) internal_function; @@ -698,6 +706,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); @@ -756,6 +765,7 @@ INTDECL (dwfl_report_begin_add) INTDECL (dwfl_report_module) INTDECL (dwfl_report_segment) INTDECL (dwfl_report_offline) +INTDECL (dwfl_report_offline_memory) INTDECL (dwfl_report_end) INTDECL (dwfl_build_id_find_elf) INTDECL (dwfl_build_id_find_debuginfo) @@ -785,6 +795,8 @@ INTDECL (dwfl_getthread_frames) INTDECL (dwfl_getthreads) INTDECL (dwfl_thread_getframes) INTDECL (dwfl_frame_pc) +INTDECL (dwfl_frame_reg) +INTDECL (dwfl_get_debuginfod_client) /* Leading arguments standard to callbacks passed a Dwfl_Module. */ #define MODCB_ARGS(mod) (mod), &(mod)->userdata, (mod)->name, (mod)->low_addr diff --git a/libdwfl/libdwfl_crc32.c b/libdwfl/libdwfl_crc32.c index b89d0d36..5bc7a4ad 100644 --- a/libdwfl/libdwfl_crc32.c +++ b/libdwfl/libdwfl_crc32.c @@ -30,6 +30,5 @@ #endif #define crc32 attribute_hidden __libdwfl_crc32 -#define LIB_SYSTEM_H 1 #include #include "../lib/crc32.c" diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 0d8d1c17..7ec7eca1 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -31,8 +32,6 @@ #include "../libdw/memory-access.h" #include "system.h" -#include -#include #include /* This element is always provided and always has a constant value. @@ -254,9 +253,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 +269,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 +783,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 +848,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 +882,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 +906,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 +1018,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 +1047,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 +1064,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 +1075,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-core-attach.c b/libdwfl/linux-core-attach.c index f68062f0..ee7afa40 100644 --- a/libdwfl/linux-core-attach.c +++ b/libdwfl/linux-core-attach.c @@ -257,7 +257,7 @@ core_set_initial_registers (Dwfl_Thread *thread, void *thread_arg_voidp) FIXME: It depends now on their order in core notes. FIXME: It uses private function. */ if (regno < nregs - && __libdwfl_frame_reg_get (thread->unwound, regno, NULL)) + && __libdwfl_frame_reg_get (thread->unwound, regno, NULL) == 0) continue; Dwarf_Word val; switch (regloc->bits) diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c index cd534825..de867857 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -38,7 +38,6 @@ #include #include #include -#include #ifdef __linux__ @@ -135,7 +134,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..e090b42b 100644 --- a/libdwfl/offline.c +++ b/libdwfl/offline.c @@ -1,5 +1,7 @@ /* Recover relocatibility for addresses computed from debug information. Copyright (C) 2005-2009, 2012 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard + Copyright (C) 2022 Google LLC This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -32,7 +34,6 @@ #include "libdwflP.h" #include -#include /* Since dwfl_report_elf lays out the sections already, this will only be called when the section headers of the debuginfo file are being @@ -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); @@ -248,6 +252,7 @@ process_archive (Dwfl *dwfl, const char *name, const char *file_name, int fd, { Dwfl_Module *mod = NULL; + /* elf_begin supports opening archives even with fd == -1 passed. */ Elf *member = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, archive); if (unlikely (member == NULL)) /* Empty archive. */ { @@ -316,3 +321,27 @@ dwfl_report_offline (Dwfl *dwfl, const char *name, return __libdwfl_report_offline (dwfl, name, file_name, fd, closefd, NULL); } INTDEF (dwfl_report_offline) + +Dwfl_Module * +dwfl_report_offline_memory (Dwfl *dwfl, const char *name, + const char *file_name, char *data, size_t size) +{ + if (dwfl == NULL) + return NULL; + + Elf *elf; + Dwfl_Error error = __libdw_open_elf_memory (data, size, &elf, true); + if (error != DWFL_E_NOERROR) + { + __libdwfl_seterrno (error); + return NULL; + } + /* It is ok to pass fd == -1 here, because libelf uses it as a value for + "no file opened" and supports working with files without fd, thanks to + the existence of the elf_memory function. */ + Dwfl_Module *mod = process_file (dwfl, name, file_name, -1, elf, NULL); + if (mod == NULL) + elf_end (elf); + return mod; +} +INTDEF (dwfl_report_offline_memory) diff --git a/libdwfl/open.c b/libdwfl/open.c index 77bd2bd9..68b755cd 100644 --- a/libdwfl/open.c +++ b/libdwfl/open.c @@ -1,5 +1,6 @@ /* Decompression support for libdwfl: zlib (gzip), bzlib (bzip2) or lzma (xz). Copyright (C) 2009, 2016 Red Hat, Inc. + Copyright (C) 2022 Google LLC This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -34,8 +35,6 @@ #undef _ #include "libdwflP.h" -#include - #if !USE_BZLIB # define __libdw_bunzip2(...) DWFL_E_BADELF #endif @@ -53,6 +52,9 @@ static Dwfl_Error decompress (int fd __attribute__ ((unused)), Elf **elf) { Dwfl_Error error = DWFL_E_BADELF; + /* ELF cannot be decompressed, if there is no file descriptor. */ + if (fd == -1) + return error; void *buffer = NULL; size_t size = 0; @@ -124,11 +126,12 @@ what_kind (int fd, Elf **elfp, Elf_Kind *kind, bool *may_close_fd) static Dwfl_Error libdw_open_elf (int *fdp, Elf **elfp, bool close_on_fail, bool archive_ok, - bool never_close_fd, bool bad_elf_ok) + bool never_close_fd, bool bad_elf_ok, bool use_elfp) { bool may_close_fd = false; - Elf *elf = elf_begin (*fdp, ELF_C_READ_MMAP_PRIVATE, NULL); + Elf *elf = + use_elfp ? *elfp : elf_begin (*fdp, ELF_C_READ_MMAP_PRIVATE, NULL); Elf_Kind kind; Dwfl_Error error = what_kind (*fdp, &elf, &kind, &may_close_fd); @@ -194,11 +197,28 @@ libdw_open_elf (int *fdp, Elf **elfp, bool close_on_fail, bool archive_ok, Dwfl_Error internal_function __libdw_open_file (int *fdp, Elf **elfp, bool close_on_fail, bool archive_ok) { - return libdw_open_elf (fdp, elfp, close_on_fail, archive_ok, false, false); + return libdw_open_elf (fdp, elfp, close_on_fail, archive_ok, false, false, + false); +} + +Dwfl_Error internal_function +__libdw_open_elf_memory (char *data, size_t size, Elf **elfp, bool archive_ok) +{ + /* It is ok to use `fd == -1` here, because libelf uses it as a value for + "no file opened" and code supports working with this value, and also + `never_close_fd == false` is passed to prevent closing non-existant file. + The only caveat is in `decompress` method, which doesn't support + decompressing from memory, so reading compressed zImage using this method + won't work. */ + int fd = -1; + *elfp = elf_memory (data, size); + /* Allow using this ELF as reference for subsequent elf_begin calls. */ + (*elfp)->cmd = ELF_C_READ_MMAP_PRIVATE; + return libdw_open_elf (&fd, elfp, false, archive_ok, true, false, true); } Dwfl_Error internal_function __libdw_open_elf (int fd, Elf **elfp) { - return libdw_open_elf (&fd, elfp, false, true, true, true); + return libdw_open_elf (&fd, elfp, false, true, true, true, false); } diff --git a/libebl/ChangeLog b/libebl/ChangeLog index fff66b3e..6f55a5e7 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,32 @@ +2022-10-21 Yonggang Luo + + * eblclosebackend.c: Remove dlfcn.h include. + * eblopenbackend.c: Likewise. + +2022-08-08 Andreas Schwab + + * ebldynamictagname.c (ebl_dynamic_tag_name): Handle DT_RELRSZ, + DT_RELR, DT_RELRENT. + +2022-06-01 Ulrich Drepper + + * eblopenbackend.c (default_machine_flag_name): Add original flag + as first parameter. + * ebl-hooks.h (machine_flag_name): Ditto. + * eblmachineflagname.c (ebl_machine_flag_name): Modernize, use bool + for first. Pass original flag value to machine_flag_name + callback as well. Add space after comma in printed list. + Fix appending strings provided by callback. + +2021-12-21 Luca Boccassi + + * eblobjnote.c (ebl_object_note): Handle NT_FDO_PACKAGING_METADATA. + * eblobjnotetypename.c (ebl_object_note_type_name): Likewise. + +2021-09-06 Dmitry V. Levin + + * eblopenbackend.c (openbackend): Remove cast of calloc return value. + 2021-04-19 Martin Liska * eblobjnotetypename.c (ebl_object_note_type_name): Use startswith. diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h index 1214bb84..d6437e53 100644 --- a/libebl/ebl-hooks.h +++ b/libebl/ebl-hooks.h @@ -51,7 +51,7 @@ const char *EBLHOOK(section_type_name) (int, char *, size_t); const char *EBLHOOK(section_name) (int, int, char *, size_t); /* Return next machine flag name. */ -const char *EBLHOOK(machine_flag_name) (GElf_Word *); +const char *EBLHOOK(machine_flag_name) (GElf_Word, GElf_Word *); /* Check whether machine flags are valid. */ bool EBLHOOK(machine_flag_check) (GElf_Word); diff --git a/libebl/eblclosebackend.c b/libebl/eblclosebackend.c index 501e5c7b..7fa068ec 100644 --- a/libebl/eblclosebackend.c +++ b/libebl/eblclosebackend.c @@ -30,7 +30,6 @@ # include #endif -#include #include #include diff --git a/libebl/ebldynamictagname.c b/libebl/ebldynamictagname.c index 3f8d8ee4..5d4a3a58 100644 --- a/libebl/ebldynamictagname.c +++ b/libebl/ebldynamictagname.c @@ -54,7 +54,7 @@ ebl_dynamic_tag_name (Ebl *ebl, int64_t tag, char *buf, size_t len) "RELENT", "PLTREL", "DEBUG", "TEXTREL", "JMPREL", "BIND_NOW", "INIT_ARRAY", "FINI_ARRAY", "INIT_ARRAYSZ", "FINI_ARRAYSZ", "RUNPATH", "FLAGS", "ENCODING", "PREINIT_ARRAY", - "PREINIT_ARRAYSZ", "SYMTAB_SHNDX" + "PREINIT_ARRAYSZ", "SYMTAB_SHNDX", "RELRSZ", "RELR", "RELRENT" }; eu_static_assert (sizeof (stdtags) / sizeof (const char *) == DT_NUM); diff --git a/libebl/eblmachineflagname.c b/libebl/eblmachineflagname.c index 5f440776..02e11c65 100644 --- a/libebl/eblmachineflagname.c +++ b/libebl/eblmachineflagname.c @@ -46,8 +46,9 @@ ebl_machine_flag_name (Ebl *ebl, Elf64_Word flags, char *buf, size_t len) res = ""; else { + Elf64_Word orig_flags = flags; char *cp = buf; - int first = 1; + bool first = true; const char *machstr; size_t machstrlen; @@ -55,12 +56,13 @@ ebl_machine_flag_name (Ebl *ebl, Elf64_Word flags, char *buf, size_t len) { if (! first) { - if (cp + 1 >= buf + len) + if (cp + 2 >= buf + len) break; *cp++ = ','; + *cp++ = ' '; } - machstr = ebl != NULL ? ebl->machine_flag_name (&flags) : NULL; + machstr = ebl != NULL ? ebl->machine_flag_name (orig_flags, &flags) : NULL; if (machstr == NULL) { /* No more known flag. */ @@ -76,8 +78,9 @@ ebl_machine_flag_name (Ebl *ebl, Elf64_Word flags, char *buf, size_t len) } cp = mempcpy (cp, machstr, machstrlen); + --cp; - first = 0; + first = false; } while (flags != 0); 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 71fafed7..02f80653 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -31,7 +31,6 @@ #endif #include -#include #include #include #include @@ -169,7 +168,7 @@ static const char *default_section_type_name (int ignore, char *buf, size_t len); static const char *default_section_name (int ignore, int ignore2, char *buf, size_t len); -static const char *default_machine_flag_name (Elf64_Word *ignore); +static const char *default_machine_flag_name (Elf64_Word orig, Elf64_Word *ignore); static bool default_machine_flag_check (Elf64_Word flags); static bool default_machine_section_flag_check (GElf_Xword flags); static const char *default_symbol_type_name (int ignore, char *buf, @@ -274,7 +273,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 @@ -450,7 +449,8 @@ default_section_name (int ignore __attribute__ ((unused)), } static const char * -default_machine_flag_name (Elf64_Word *ignore __attribute__ ((unused))) +default_machine_flag_name (Elf64_Word orig __attribute__ ((unused)), + Elf64_Word *ignore __attribute__ ((unused))) { return NULL; } diff --git a/libebl/libeblP.h b/libebl/libeblP.h index fa1c2c9f..c408ed97 100644 --- a/libebl/libeblP.h +++ b/libebl/libeblP.h @@ -32,7 +32,6 @@ #include #include #include -#include /* Backend handle. */ diff --git a/libelf/ChangeLog b/libelf/ChangeLog index a1fd414c..8107c71e 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,137 @@ +2022-10-28 Mark Wielaard + + * elf.h: Update from glibc. + +2022-10-21 Yonggang Luo + + * libelf_crc32.c: Remove LIB_SYSTEM_H define. + +2022-09-20 Yonggang Luo + + * elf32_checksum.c: Use BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN. + * elf32_xlatetof.c: Likewise. + * elf_getarsym.c: Likewise. + +2022-10-16 Yonggang Luo + + * common.h: Remove ar.h, byteswap.h and endian.h. + * elf32_checksum.c: Remove endian.h. + * elf32_getphdr.c: Remove unistd.h and system.h. + * elf32_getshdr.c: Remove unistd.h.h and system.h. + * elf32_updatefile.c: Remove unistd.h, sys/mman.h and system.h. + * elf32_updatenull.c: Remove endian.h and system.h. + * elf32_xlatetof.c: Remove endian.h. + * elf32_xlatetom.c: Likewise. + * elf_begin.c: Remove unistd.h, sys/mman.h and system.h. + * elf_cntl.c: Remove unistd.h. + * elf_compress.c: Remove system.h and unistd.h. + * elf_end.c: Remove sys.mman.h. + * elf_getarsym.c: Remove byteswap.h, endian.h, unistd.h and + system.h. + * elf_getdata.c: Remove unistd.h and system.h. + * elf_getdata_rawchunk.c: Remove unistd.h and system.h. + * elf_getshdrstrndx.c: Likewise. + * elf_readall.c: Likewise. + * elf_update.c: Remove unistd.h and sys/mman.h. + * gelf_xlate.c: Remove byteswap.h. + * libelfP.h: Add system.h. + * nlist.c: Remove unistd.h. + +2022-08-28 Mark Wielaard + + * elf_begin.c (__libelf_next_arhdr_wrlock): Add OCT_FIELD macro, + like INT_FIELD but use strtol with octal base 8. Use for ar_mode. + +2022-08-08 Andreas Schwab + + * elf.h: Update from glibc. + +2022-04-24 Mark Wielaard + + * elf_update.c (write_file): Check HAVE_MREMAP. + +2022-04-01 Mark Wielaard + + * 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 + + * 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 + + * elf.h: Update from glibc. + +2022-03-22 Mark Wielaard + + * elf_getdata.c (__libelf_type_aligns): ELF_T_GNUHASH has different + alignment for ELFCLASS32 and ELFCLASS64. + +2022-03-20 Mark Wielaard + + * 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 + + * 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 + + * elf_begin.c (read_long_names): Check ar_size starts with a digit. + +2022-03-17 Mark Wielaard + + * elf_begin.c (get_shnum): Take offset into account for Shdr + alignment check. + +2021-12-19 Mark Wielaard + + * 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 + + * libelfP.h (NOTE_ALIGN4): And with negative unsigned long. + (NOTE_ALIGN8): Likewise. + +2021-12-15 Mark Wielaard + + * elf_begin.c (get_shnum): Use offsetof to get field of unaligned + struct. + +2021-09-06 Dmitry V. Levin + + * 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 + + * elf_strptr.c (validate_str): Check last char is zero first before + calling memrchr on the whole block. + +2021-06-09 Andrei Homescu + + * elf_getdata.c: Fix d_align for sections where alignment is larger + than offset. + 2020-12-12 Mark Wielaard * elf.h: Update from glibc. diff --git a/libelf/common.h b/libelf/common.h index e41c717d..9b2a856d 100644 --- a/libelf/common.h +++ b/libelf/common.h @@ -30,9 +30,6 @@ #ifndef _COMMON_H #define _COMMON_H 1 -#include -#include -#include #include #include @@ -71,7 +68,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 @@ -154,7 +151,7 @@ libelf_release_all (Elf *elf) : bswap_64 (Var)))) -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if BYTE_ORDER == LITTLE_ENDIAN # define MY_ELFDATA ELFDATA2LSB #else # define MY_ELFDATA ELFDATA2MSB diff --git a/libelf/elf.h b/libelf/elf.h index 8e3e618f..f51300bc 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 */ @@ -357,8 +358,9 @@ typedef struct #define EM_BPF 247 /* Linux BPF -- in-kernel virtual machine */ #define EM_CSKY 252 /* C-SKY */ +#define EM_LOONGARCH 258 /* LoongArch */ -#define EM_NUM 253 +#define EM_NUM 259 /* Old spellings/synonyms. */ @@ -442,7 +444,8 @@ typedef struct #define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ #define SHT_GROUP 17 /* Section group */ #define SHT_SYMTAB_SHNDX 18 /* Extended section indices */ -#define SHT_NUM 19 /* Number of defined types. */ +#define SHT_RELR 19 /* RELR relative relocations */ +#define SHT_NUM 20 /* Number of defined types. */ #define SHT_LOOS 0x60000000 /* Start OS-specific. */ #define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */ #define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */ @@ -503,6 +506,7 @@ typedef struct /* Legal values for ch_type (compression algorithm). */ #define ELFCOMPRESS_ZLIB 1 /* ZLIB/DEFLATE algorithm. */ +#define ELFCOMPRESS_ZSTD 2 /* Zstandard algorithm. */ #define ELFCOMPRESS_LOOS 0x60000000 /* Start of OS-specific. */ #define ELFCOMPRESS_HIOS 0x6fffffff /* End of OS-specific. */ #define ELFCOMPRESS_LOPROC 0x70000000 /* Start of processor-specific. */ @@ -661,6 +665,11 @@ typedef struct Elf64_Sxword r_addend; /* Addend */ } Elf64_Rela; +/* RELR relocation table entry */ + +typedef Elf32_Word Elf32_Relr; +typedef Elf64_Xword Elf64_Relr; + /* How to extract and insert information held in the r_info field. */ #define ELF32_R_SYM(val) ((val) >> 8) @@ -800,6 +809,7 @@ typedef struct #define NT_S390_GS_BC 0x30c /* s390 guarded storage broadcast control block. */ #define NT_S390_RI_CB 0x30d /* s390 runtime instrumentation. */ +#define NT_S390_PV_CPU_DATA 0x30e /* s390 protvirt cpu dump data. */ #define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ #define NT_ARM_TLS 0x401 /* ARM TLS register */ #define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ @@ -813,10 +823,23 @@ 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. */ #define NT_MIPS_MSA 0x802 /* MIPS SIMD registers. */ +#define NT_LOONGARCH_CPUCFG 0xa00 /* LoongArch CPU config registers. */ +#define NT_LOONGARCH_CSR 0xa01 /* LoongArch control and + status registers. */ +#define NT_LOONGARCH_LSX 0xa02 /* LoongArch Loongson SIMD + Extension registers. */ +#define NT_LOONGARCH_LASX 0xa03 /* LoongArch Loongson Advanced + SIMD Extension registers. */ +#define NT_LOONGARCH_LBT 0xa04 /* LoongArch Loongson Binary + Translation registers. */ /* Legal values for the note segment descriptor types for object files. */ @@ -882,7 +905,10 @@ typedef struct #define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ #define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ #define DT_SYMTAB_SHNDX 34 /* Address of SYMTAB_SHNDX section */ -#define DT_NUM 35 /* Number used */ +#define DT_RELRSZ 35 /* Total size of RELR relative relocations */ +#define DT_RELR 36 /* Address of RELR relative relocations */ +#define DT_RELRENT 37 /* Size of one RELR relative relocaction */ +#define DT_NUM 38 /* Number used */ #define DT_LOOS 0x6000000d /* Start of OS-specific */ #define DT_HIOS 0x6ffff000 /* End of OS-specific */ #define DT_LOPROC 0x70000000 /* Start of processor-specific */ @@ -1039,7 +1065,8 @@ typedef struct /* Legal values for vd_flags (version information flags). */ #define VER_FLG_BASE 0x1 /* Version definition of file itself */ -#define VER_FLG_WEAK 0x2 /* Weak version identifier */ +#define VER_FLG_WEAK 0x2 /* Weak version identifier. Also + used by vna_flags below. */ /* Versym symbol index values. */ #define VER_NDX_LOCAL 0 /* Symbol is local. */ @@ -1117,10 +1144,6 @@ typedef struct } Elf64_Vernaux; -/* Legal values for vna_flags. */ -#define VER_FLG_WEAK 0x2 /* Weak version identifier */ - - /* Auxiliary vector. */ /* This vector is normally only used by the program interpreter. The @@ -1226,8 +1249,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 +1276,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 +1321,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 +1335,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 +1369,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. */ @@ -2871,6 +2911,9 @@ enum #define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */ #define R_AARCH64_IRELATIVE 1032 /* STT_GNU_IFUNC relocation. */ +/* MTE memory tag segment type. */ +#define PT_AARCH64_MEMTAG_MTE (PT_LOPROC + 2) + /* AArch64 specific values for the Dyn d_tag field. */ #define DT_AARCH64_BTI_PLT (DT_LOPROC + 1) #define DT_AARCH64_PAC_PLT (DT_LOPROC + 3) @@ -3896,6 +3939,8 @@ enum #define EF_RISCV_FLOAT_ABI_SINGLE 0x0002 #define EF_RISCV_FLOAT_ABI_DOUBLE 0x0004 #define EF_RISCV_FLOAT_ABI_QUAD 0x0006 +#define EF_RISCV_RVE 0x0008 +#define EF_RISCV_TSO 0x0010 /* RISC-V relocations. */ #define R_RISCV_NONE 0 @@ -3956,6 +4001,19 @@ enum #define R_RISCV_NUM 59 +/* RISC-V specific values for the st_other field. */ +#define STO_RISCV_VARIANT_CC 0x80 /* Function uses variant calling + convention */ + +/* RISC-V specific values for the sh_type field. */ +#define SHT_RISCV_ATTRIBUTES (SHT_LOPROC + 3) + +/* RISC-V specific values for the p_type field. */ +#define PT_RISCV_ATTRIBUTES (PT_LOPROC + 3) + +/* RISC-V specific values for the d_tag field. */ +#define DT_RISCV_VARIANT_CC (DT_LOPROC + 1) + /* BPF specific declarations. */ #define R_BPF_NONE 0 /* No reloc */ @@ -4034,6 +4092,71 @@ enum #define R_NDS32_TLS_TPOFF 102 #define R_NDS32_TLS_DESC 119 +/* LoongArch ELF Flags */ +#define EF_LARCH_ABI 0x07 +#define EF_LARCH_ABI_LP64D 0x03 + +/* LoongArch specific dynamic relocations */ +#define R_LARCH_NONE 0 +#define R_LARCH_32 1 +#define R_LARCH_64 2 +#define R_LARCH_RELATIVE 3 +#define R_LARCH_COPY 4 +#define R_LARCH_JUMP_SLOT 5 +#define R_LARCH_TLS_DTPMOD32 6 +#define R_LARCH_TLS_DTPMOD64 7 +#define R_LARCH_TLS_DTPREL32 8 +#define R_LARCH_TLS_DTPREL64 9 +#define R_LARCH_TLS_TPREL32 10 +#define R_LARCH_TLS_TPREL64 11 +#define R_LARCH_IRELATIVE 12 + +/* Reserved for future relocs that the dynamic linker must understand. */ + +/* used by the static linker for relocating .text. */ +#define R_LARCH_MARK_LA 20 +#define R_LARCH_MARK_PCREL 21 +#define R_LARCH_SOP_PUSH_PCREL 22 +#define R_LARCH_SOP_PUSH_ABSOLUTE 23 +#define R_LARCH_SOP_PUSH_DUP 24 +#define R_LARCH_SOP_PUSH_GPREL 25 +#define R_LARCH_SOP_PUSH_TLS_TPREL 26 +#define R_LARCH_SOP_PUSH_TLS_GOT 27 +#define R_LARCH_SOP_PUSH_TLS_GD 28 +#define R_LARCH_SOP_PUSH_PLT_PCREL 29 +#define R_LARCH_SOP_ASSERT 30 +#define R_LARCH_SOP_NOT 31 +#define R_LARCH_SOP_SUB 32 +#define R_LARCH_SOP_SL 33 +#define R_LARCH_SOP_SR 34 +#define R_LARCH_SOP_ADD 35 +#define R_LARCH_SOP_AND 36 +#define R_LARCH_SOP_IF_ELSE 37 +#define R_LARCH_SOP_POP_32_S_10_5 38 +#define R_LARCH_SOP_POP_32_U_10_12 39 +#define R_LARCH_SOP_POP_32_S_10_12 40 +#define R_LARCH_SOP_POP_32_S_10_16 41 +#define R_LARCH_SOP_POP_32_S_10_16_S2 42 +#define R_LARCH_SOP_POP_32_S_5_20 43 +#define R_LARCH_SOP_POP_32_S_0_5_10_16_S2 44 +#define R_LARCH_SOP_POP_32_S_0_10_10_16_S2 45 +#define R_LARCH_SOP_POP_32_U 46 + +/* used by the static linker for relocating non .text. */ +#define R_LARCH_ADD8 47 +#define R_LARCH_ADD16 48 +#define R_LARCH_ADD24 49 +#define R_LARCH_ADD32 50 +#define R_LARCH_ADD64 51 +#define R_LARCH_SUB8 52 +#define R_LARCH_SUB16 53 +#define R_LARCH_SUB24 54 +#define R_LARCH_SUB32 55 +#define R_LARCH_SUB64 56 +#define R_LARCH_GNU_VTINHERIT 57 +#define R_LARCH_GNU_VTENTRY 58 + + /* ARCompact/ARCv2 specific relocs. */ #define R_ARC_NONE 0x0 #define R_ARC_8 0x1 @@ -4102,4 +4225,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_checksum.c b/libelf/elf32_checksum.c index c5f27bbe..a47b307d 100644 --- a/libelf/elf32_checksum.c +++ b/libelf/elf32_checksum.c @@ -32,7 +32,6 @@ #endif #include -#include #include #include #include @@ -74,9 +73,9 @@ elfw2(LIBELFBITS,checksum) (Elf *elf) is the same. */ ident = elf->state.ELFW(elf,LIBELFBITS).ehdr->e_ident; same_byte_order = ((ident[EI_DATA] == ELFDATA2LSB - && __BYTE_ORDER == __LITTLE_ENDIAN) + && BYTE_ORDER == LITTLE_ENDIAN) || (ident[EI_DATA] == ELFDATA2MSB - && __BYTE_ORDER == __BIG_ENDIAN)); + && BYTE_ORDER == BIG_ENDIAN)); /* If we don't have native byte order, we will likely need to convert the data with xlate functions. We do it upfront instead diff --git a/libelf/elf32_getphdr.c b/libelf/elf32_getphdr.c index 99b4ac09..4bfca24b 100644 --- a/libelf/elf32_getphdr.c +++ b/libelf/elf32_getphdr.c @@ -34,10 +34,8 @@ #include #include #include -#include #include -#include #include "libelfP.h" #include "common.h" diff --git a/libelf/elf32_getshdr.c b/libelf/elf32_getshdr.c index 237d9122..fc696302 100644 --- a/libelf/elf32_getshdr.c +++ b/libelf/elf32_getshdr.c @@ -34,9 +34,7 @@ #include #include #include -#include -#include #include "libelfP.h" #include "common.h" diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c index f67e6261..46afa1f4 100644 --- a/libelf/elf32_updatefile.c +++ b/libelf/elf32_updatefile.c @@ -37,10 +37,7 @@ #include #include #include -#include -#include -#include #include "libelfP.h" @@ -218,7 +215,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 +685,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/elf32_updatenull.c b/libelf/elf32_updatenull.c index d0d4d1eb..6c06e5e4 100644 --- a/libelf/elf32_updatenull.c +++ b/libelf/elf32_updatenull.c @@ -32,12 +32,10 @@ #endif #include -#include #include #include #include -#include #include "libelfP.h" #include "elf-knowledge.h" diff --git a/libelf/elf32_xlatetof.c b/libelf/elf32_xlatetof.c index 082d833f..ab857409 100644 --- a/libelf/elf32_xlatetof.c +++ b/libelf/elf32_xlatetof.c @@ -32,7 +32,6 @@ #endif #include -#include #include #include "libelfP.h" @@ -83,8 +82,8 @@ elfw2(LIBELFBITS, xlatetof) (Elf_Data *dest, const Elf_Data *src, and vice versa since the function only has to copy and/or change the byte order. */ - if ((__BYTE_ORDER == __LITTLE_ENDIAN && encode == ELFDATA2LSB) - || (__BYTE_ORDER == __BIG_ENDIAN && encode == ELFDATA2MSB)) + if ((BYTE_ORDER == LITTLE_ENDIAN && encode == ELFDATA2LSB) + || (BYTE_ORDER == BIG_ENDIAN && encode == ELFDATA2MSB)) { /* We simply have to copy since the byte order is the same. */ if (src->d_buf != dest->d_buf) diff --git a/libelf/elf32_xlatetom.c b/libelf/elf32_xlatetom.c index cb0bb8d5..fa3dc9a7 100644 --- a/libelf/elf32_xlatetom.c +++ b/libelf/elf32_xlatetom.c @@ -32,7 +32,6 @@ #endif #include -#include #include #include "libelfP.h" diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 32648c15..fe8c640a 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 This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -38,11 +39,8 @@ #include #include #include -#include -#include #include -#include #include "libelfP.h" #include "common.h" @@ -157,7 +155,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 +169,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 +216,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 +228,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 +382,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 +394,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 +486,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 +762,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 +785,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; @@ -963,7 +974,8 @@ __libelf_next_arhdr_wrlock (Elf *elf) atoll depending on the size of the types. We are also prepared for the case where the whole field in the `struct ar_hdr' is filled in which case we cannot simply use atol/l but instead have - to create a temporary copy. */ + to create a temporary copy. Note that all fields use decimal + encoding, except ar_mode which uses octal. */ #define INT_FIELD(FIELD) \ do \ @@ -983,10 +995,30 @@ __libelf_next_arhdr_wrlock (Elf *elf) } \ while (0) +#define OCT_FIELD(FIELD) \ + do \ + { \ + char buf[sizeof (ar_hdr->FIELD) + 1]; \ + const char *string = ar_hdr->FIELD; \ + if (ar_hdr->FIELD[sizeof (ar_hdr->FIELD) - 1] != ' ') \ + { \ + *((char *) mempcpy (buf, ar_hdr->FIELD, sizeof (ar_hdr->FIELD))) \ + = '\0'; \ + string = buf; \ + } \ + if (sizeof (elf_ar_hdr->FIELD) <= sizeof (long int)) \ + elf_ar_hdr->FIELD \ + = (__typeof (elf_ar_hdr->FIELD)) strtol (string, NULL, 8); \ + else \ + elf_ar_hdr->FIELD \ + = (__typeof (elf_ar_hdr->FIELD)) strtoll (string, NULL, 8); \ + } \ + while (0) + INT_FIELD (ar_date); INT_FIELD (ar_uid); INT_FIELD (ar_gid); - INT_FIELD (ar_mode); + OCT_FIELD (ar_mode); INT_FIELD (ar_size); if (elf_ar_hdr->ar_size < 0) diff --git a/libelf/elf_cntl.c b/libelf/elf_cntl.c index fd681789..04aa9132 100644 --- a/libelf/elf_cntl.c +++ b/libelf/elf_cntl.c @@ -31,8 +31,6 @@ # include #endif -#include - #include "libelfP.h" diff --git a/libelf/elf_compress.c b/libelf/elf_compress.c index df0144e8..d7f53af2 100644 --- a/libelf/elf_compress.c +++ b/libelf/elf_compress.c @@ -31,14 +31,12 @@ #endif #include -#include #include "libelfP.h" #include "common.h" #include #include #include -#include #include /* Cleanup and return result. Don't leak memory. */ diff --git a/libelf/elf_end.c b/libelf/elf_end.c index 160f0b88..5c451f36 100644 --- a/libelf/elf_end.c +++ b/libelf/elf_end.c @@ -34,7 +34,6 @@ #include #include #include -#include #include "libelfP.h" diff --git a/libelf/elf_error.c b/libelf/elf_error.c index 5364e685..e596108d 100644 --- a/libelf/elf_error.c +++ b/libelf/elf_error.c @@ -32,7 +32,6 @@ #endif #include -#include #include #include #include diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c index 1f031fca..281f0c1c 100644 --- a/libelf/elf_getarsym.c +++ b/libelf/elf_getarsym.c @@ -32,16 +32,12 @@ #endif #include -#include -#include #include #include #include #include #include -#include -#include #include #include "libelfP.h" @@ -65,7 +61,7 @@ read_number_entries (uint64_t *nump, Elf *elf, size_t *offp, bool index64_p) *offp += w; - if (__BYTE_ORDER == __LITTLE_ENDIAN) + if (BYTE_ORDER == LITTLE_ENDIAN) *nump = index64_p ? bswap_64 (u.ret64) : bswap_32 (u.ret32); else *nump = index64_p ? u.ret64 : u.ret32; @@ -198,7 +194,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 +212,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); @@ -271,7 +266,7 @@ elf_getarsym (Elf *elf, size_t *ptr) if (index64_p) { uint64_t tmp = (*u64)[cnt]; - if (__BYTE_ORDER == __LITTLE_ENDIAN) + if (BYTE_ORDER == LITTLE_ENDIAN) tmp = bswap_64 (tmp); arsym[cnt].as_off = tmp; @@ -291,7 +286,7 @@ elf_getarsym (Elf *elf, size_t *ptr) goto out; } } - else if (__BYTE_ORDER == __LITTLE_ENDIAN) + else if (BYTE_ORDER == LITTLE_ENDIAN) arsym[cnt].as_off = bswap_32 ((*u32)[cnt]); else arsym[cnt].as_off = (*u32)[cnt]; diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c index 6ed44504..5ebd270f 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 This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -34,10 +35,8 @@ #include #include #include -#include #include "libelfP.h" -#include #include "common.h" #include "elf-knowledge.h" @@ -77,7 +76,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 +98,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 +148,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 +163,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 +177,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 +330,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 +385,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..5a35ccdc 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 This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -34,9 +35,7 @@ #include #include #include -#include -#include #include "libelfP.h" #include "common.h" @@ -75,6 +74,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 +184,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_getshdrstrndx.c b/libelf/elf_getshdrstrndx.c index ad884fd3..2391317b 100644 --- a/libelf/elf_getshdrstrndx.c +++ b/libelf/elf_getshdrstrndx.c @@ -35,9 +35,7 @@ #include #include #include -#include -#include #include "libelfP.h" #include "common.h" 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..d0f9a28c 100644 --- a/libelf/elf_readall.c +++ b/libelf/elf_readall.c @@ -32,10 +32,8 @@ #endif #include -#include #include -#include #include "libelfP.h" #include "common.h" @@ -107,7 +105,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..56af3a1c 100644 --- a/libelf/elf_update.c +++ b/libelf/elf_update.c @@ -33,8 +33,6 @@ #include #include -#include -#include #include #include "libelfP.h" @@ -106,8 +104,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..d8ad0634 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 This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -31,7 +32,6 @@ # include #endif -#include #include #include #include @@ -138,9 +138,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..d88a613c 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -39,6 +39,7 @@ #include #include +#include /* Helper Macros to write 32 bit and 64 bit functions. */ #define __elfw2_(Bits, Name) __elf##Bits##_##Name @@ -266,6 +267,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 +605,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/libelf_crc32.c b/libelf/libelf_crc32.c index 1426faf1..f1cf4868 100644 --- a/libelf/libelf_crc32.c +++ b/libelf/libelf_crc32.c @@ -30,6 +30,5 @@ #endif #define crc32 attribute_hidden __libelf_crc32 -#define LIB_SYSTEM_H 1 #include #include "../lib/crc32.c" diff --git a/libelf/nlist.c b/libelf/nlist.c index 8593c1de..b3d60435 100644 --- a/libelf/nlist.c +++ b/libelf/nlist.c @@ -35,7 +35,6 @@ #include #include #include -#include #include "libelfP.h" 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 This file is part of elfutils. Written by Ulrich Drepper , 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 + + * biarch.m4: Don't check whether -m64 works for 32bit host. + +2022-03-14 Mark Wielaard + + * biarch.m4: Use AS_HELP_STRING instead of AC_HELP_STRING. + * zip.m4: Likewise. + 2020-12-15 Dmitry V. Levin * .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..8894a9b5 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,26 @@ +2022-10-02 Mark Wielaard + + * *.po: Update for 0.188. + +2022-08-05 Mark Wielaard + + * de.po: Set Project-Id-Version: to elfutils. + * es.po: Likewise. + * ja.po: Likewise. + * uk.po: Likewise. + +2022-04-25 Mark Wielaard + + * *.po: Update for 0.187. + +2021-11-10 Mark Wielaard + + * *.po: Update for 0.186. + +2021-07-25 Hayatsu Shunsuke + + * ja.po: update Japanese translation + 2021-05-22 Mark Wielaard * *.po: Update for 0.185. diff --git a/po/de.po b/po/de.po index a7615810..0c4c4920 100644 --- a/po/de.po +++ b/po/de.po @@ -9,9 +9,9 @@ # Michael Münch , 2009. msgid "" msgstr "" -"Project-Id-Version: elfutils VERSION\n" +"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-11-02 13:30+0100\n" "PO-Revision-Date: 2009-06-29 15:15+0200\n" "Last-Translator: Michael Münch \n" "Language-Team: German\n" @@ -22,12 +22,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 0.3\n" -#: lib/color.c:53 +#: lib/color.c:51 msgid "" "colorize the output. WHEN defaults to 'always' or can be 'auto' or 'never'" msgstr "" -#: lib/color.c:129 +#: lib/color.c:127 #, c-format msgid "" "%s: invalid argument '%s' for '--color'\n" @@ -37,12 +37,7 @@ 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 +#: lib/printversion.c:39 #, fuzzy, c-format msgid "" "Copyright (C) %s The elfutils developers <%s>.\n" @@ -54,70 +49,70 @@ 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:47 lib/xmalloc.c:60 lib/xmalloc.c:72 src/readelf.c:11754 +#: src/unstrip.c:311 #, c-format msgid "memory exhausted" msgstr "Kein Speicher mehr verfügbar" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 -#: libelf/elf_error.c:60 +#: libasm/asm_error.c:64 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 +#: libelf/elf_error.c:59 msgid "no error" msgstr "kein Fehler" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 -#: libelf/elf_error.c:91 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 +#: libelf/elf_error.c:90 msgid "out of memory" msgstr "nicht genügend Speicher" -#: libasm/asm_error.c:67 +#: libasm/asm_error.c:66 msgid "cannot create output file" msgstr "Ausgangsdatei konnte nicht erstellt werden" -#: libasm/asm_error.c:68 +#: libasm/asm_error.c:67 msgid "invalid parameter" msgstr "ungültiger Parameter" -#: libasm/asm_error.c:69 +#: libasm/asm_error.c:68 msgid "cannot change mode of output file" msgstr "konnte Modus der Ausgabedatei nicht ändern" -#: libasm/asm_error.c:70 +#: libasm/asm_error.c:69 msgid "cannot rename output file" msgstr "Ausgangsdatei konnte nicht umbenannt werden" -#: libasm/asm_error.c:71 +#: libasm/asm_error.c:70 msgid "duplicate symbol" msgstr "Symbol doppelt vorhanden" -#: libasm/asm_error.c:72 +#: libasm/asm_error.c:71 msgid "invalid section type for operation" msgstr "ungültiger Abschnittstyp für Operation" -#: libasm/asm_error.c:73 +#: libasm/asm_error.c:72 msgid "error during output of data" msgstr "Fehler bei Datenausgabe" -#: libasm/asm_error.c:74 +#: libasm/asm_error.c:73 msgid "no backend support available" msgstr "keine Backend-Unterstützung verfügbar" -#: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 -#: libelf/elf_error.c:63 +#: libasm/asm_error.c:82 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 +#: libelf/elf_error.c:62 msgid "unknown error" msgstr "unbekannter Fehler" -#: libcpu/i386_lex.l:122 +#: libcpu/i386_lex.l:121 #, c-format msgid "invalid character '%c' at line %d; ignored" msgstr "" -#: libcpu/i386_lex.l:123 +#: libcpu/i386_lex.l:122 #, c-format msgid "invalid character '\\%o' at line %d; ignored" msgstr "" -#: libcpu/i386_parse.y:554 +#: libcpu/i386_parse.y:553 #, c-format msgid "while reading i386 CPU description: %s at line %d" msgstr "" @@ -158,7 +153,7 @@ msgstr "ELF Kopf konnte nicht ausgelesen werden" msgid "not implemented" msgstr "Nicht implementiert" -#: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159 +#: libdw/dwarf_error.c:69 libelf/elf_error.c:110 libelf/elf_error.c:158 msgid "invalid command" msgstr "Ungültiger Befehl" @@ -272,7 +267,7 @@ msgstr "Kein passender Adressbereich" msgid "no flag value" msgstr "" -#: libdw/dwarf_error.c:96 libelf/elf_error.c:236 +#: libdw/dwarf_error.c:96 libelf/elf_error.c:235 msgid "invalid offset" msgstr "ungültiger Offset" @@ -313,68 +308,68 @@ 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:45 src/stack.c:643 src/unstrip.c:2547 msgid "Input selection options:" msgstr "Eingabeauswahloptionen:" -#: libdwfl/argp-std.c:48 +#: libdwfl/argp-std.c:46 msgid "Find addresses in FILE" msgstr "Finde Adressen in FILE" -#: libdwfl/argp-std.c:50 +#: libdwfl/argp-std.c:48 msgid "Find addresses from signatures found in COREFILE" msgstr "Finde Adressen von Signatur aus COREFILE" -#: libdwfl/argp-std.c:52 +#: libdwfl/argp-std.c:50 msgid "Find addresses in files mapped into process PID" msgstr "" -#: libdwfl/argp-std.c:54 +#: libdwfl/argp-std.c:52 msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" msgstr "" -#: libdwfl/argp-std.c:56 +#: libdwfl/argp-std.c:54 msgid "Find addresses in the running kernel" msgstr "Finde Adressen im laufenden Kernel" -#: libdwfl/argp-std.c:58 +#: libdwfl/argp-std.c:56 msgid "Kernel with all modules" msgstr "Kernel mit allen Modulen" -#: libdwfl/argp-std.c:60 src/stack.c:650 +#: libdwfl/argp-std.c:58 src/stack.c:650 msgid "Search path for separate debuginfo files" msgstr "Dateisuchpfad für separate Debug-Informationen" -#: libdwfl/argp-std.c:161 +#: libdwfl/argp-std.c:159 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "Nur eine Option von -e, -p, -k, -K, oder --core erlaubt" -#: libdwfl/argp-std.c:234 +#: libdwfl/argp-std.c:232 msgid "cannot load kernel symbols" msgstr "Konnte Kernel Symbole nicht laden" #. Non-fatal to have no modules since we do have the kernel. -#: libdwfl/argp-std.c:238 +#: libdwfl/argp-std.c:236 msgid "cannot find kernel modules" msgstr "Konnte Kernel Module nicht finden" -#: libdwfl/argp-std.c:255 +#: libdwfl/argp-std.c:253 msgid "cannot find kernel or modules" msgstr "Konnte Kernel oder Module nicht finden" -#: libdwfl/argp-std.c:294 +#: libdwfl/argp-std.c:292 #, c-format msgid "cannot read ELF core file: %s" msgstr "Konnte ELF Kerndatei %s nicht lesen" -#: libdwfl/argp-std.c:317 +#: libdwfl/argp-std.c:315 #, fuzzy msgid "Not enough memory" msgstr "nicht genügend Speicher" -#: libdwfl/argp-std.c:327 +#: libdwfl/argp-std.c:325 msgid "No modules recognized in core file" msgstr "Keine Module in der Kerndatei gefunden" @@ -426,7 +421,7 @@ msgstr "" msgid "r_offset is bogus" msgstr "" -#: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175 +#: libdwfl/libdwflP.h:66 libelf/elf_error.c:114 libelf/elf_error.c:174 msgid "offset out of range" msgstr "Offset ausserhalb des Bereichs" @@ -499,48 +494,54 @@ msgid "Invalid register" msgstr "ungültiger Parameter" #: libdwfl/libdwflP.h:84 +#, fuzzy +#| msgid "no reference value" +msgid "Unknown register value" +msgstr "Kein Referenz-Wert" + +#: libdwfl/libdwflP.h:85 msgid "Error reading process memory" msgstr "" -#: libdwfl/libdwflP.h:85 +#: libdwfl/libdwflP.h:86 msgid "Couldn't find architecture of any ELF" msgstr "" -#: libdwfl/libdwflP.h:86 +#: libdwfl/libdwflP.h:87 msgid "Error parsing /proc filesystem" msgstr "" -#: libdwfl/libdwflP.h:87 +#: libdwfl/libdwflP.h:88 #, fuzzy msgid "Invalid DWARF" msgstr "DWARF ungültig" -#: libdwfl/libdwflP.h:88 +#: libdwfl/libdwflP.h:89 msgid "Unsupported DWARF" msgstr "" -#: libdwfl/libdwflP.h:89 +#: libdwfl/libdwflP.h:90 msgid "Unable to find more threads" msgstr "" -#: libdwfl/libdwflP.h:90 +#: libdwfl/libdwflP.h:91 msgid "Dwfl already has attached state" msgstr "" -#: libdwfl/libdwflP.h:91 +#: libdwfl/libdwflP.h:92 msgid "Dwfl has no attached state" msgstr "" -#: libdwfl/libdwflP.h:92 +#: libdwfl/libdwflP.h:93 msgid "Unwinding not supported for this architecture" msgstr "" -#: libdwfl/libdwflP.h:93 +#: libdwfl/libdwflP.h:94 #, fuzzy msgid "Invalid argument" msgstr "ungültiger Parameter" -#: libdwfl/libdwflP.h:94 +#: libdwfl/libdwflP.h:95 #, fuzzy msgid "Not an ET_CORE ELF file" msgstr "Ungültige ELF Datei" @@ -550,7 +551,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 "" @@ -601,18 +602,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: " @@ -626,769 +627,771 @@ msgstr "" msgid ": %d" msgstr ": %d" -#: libelf/elf_error.c:67 +#: libelf/elf_error.c:66 msgid "unknown version" msgstr "unbekannte Version" -#: libelf/elf_error.c:71 +#: libelf/elf_error.c:70 msgid "unknown type" msgstr "unbekannter Typ" -#: libelf/elf_error.c:75 +#: libelf/elf_error.c:74 msgid "invalid `Elf' handle" msgstr "ungültiges `Elf'-Handle" -#: libelf/elf_error.c:79 +#: libelf/elf_error.c:78 msgid "invalid size of source operand" msgstr "ungültige Grösse des Quell-Operanden" -#: libelf/elf_error.c:83 +#: libelf/elf_error.c:82 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:86 src/readelf.c:6378 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" -#: libelf/elf_error.c:95 +#: libelf/elf_error.c:94 msgid "invalid file descriptor" msgstr "ungültiger Datei-Deskriptor" -#: libelf/elf_error.c:99 +#: libelf/elf_error.c:98 #, fuzzy msgid "invalid ELF file data" msgstr "Ungültige ELF Datei" -#: libelf/elf_error.c:103 +#: libelf/elf_error.c:102 msgid "invalid operation" msgstr "ungültige Operation" -#: libelf/elf_error.c:107 +#: libelf/elf_error.c:106 msgid "ELF version not set" msgstr "ELF-Version nicht gesetzt" -#: libelf/elf_error.c:119 +#: libelf/elf_error.c:118 msgid "invalid fmag field in archive header" msgstr "ungültiges fmag-Feld im Archivheader" -#: libelf/elf_error.c:123 +#: libelf/elf_error.c:122 msgid "invalid archive file" msgstr "Ungültige Archiv-Datei" -#: libelf/elf_error.c:127 +#: libelf/elf_error.c:126 msgid "descriptor is not for an archive" msgstr "" -#: libelf/elf_error.c:131 +#: libelf/elf_error.c:130 msgid "no index available" msgstr "kein Index verfügbar" -#: libelf/elf_error.c:135 +#: libelf/elf_error.c:134 msgid "cannot read data from file" msgstr "Daten aus der Datei konnten nicht gelesen werden" -#: libelf/elf_error.c:139 +#: libelf/elf_error.c:138 msgid "cannot write data to file" msgstr "Daten konnten nicht in die Datei geschrieben werden" -#: libelf/elf_error.c:143 +#: libelf/elf_error.c:142 msgid "invalid binary class" msgstr "ungültige Binärklasse" -#: libelf/elf_error.c:147 +#: libelf/elf_error.c:146 msgid "invalid section index" msgstr "ungültiger Abschnittsindex" -#: libelf/elf_error.c:151 +#: libelf/elf_error.c:150 msgid "invalid operand" msgstr "ungültiger Operand" -#: libelf/elf_error.c:155 +#: libelf/elf_error.c:154 msgid "invalid section" msgstr "ungültiger Abschnitt" -#: libelf/elf_error.c:163 +#: libelf/elf_error.c:162 msgid "executable header not created first" msgstr "ausführbarer Header wurde nicht zuerst erstellt" -#: libelf/elf_error.c:167 +#: libelf/elf_error.c:166 msgid "file descriptor disabled" msgstr "Datei-Deskriptor deaktiviert" -#: libelf/elf_error.c:171 +#: libelf/elf_error.c:170 #, fuzzy msgid "archive/member file descriptor mismatch" msgstr "Datei-Deskriptor deaktiviert" -#: libelf/elf_error.c:179 +#: libelf/elf_error.c:178 msgid "cannot manipulate null section" msgstr "" -#: libelf/elf_error.c:183 +#: libelf/elf_error.c:182 #, fuzzy msgid "data/scn mismatch" msgstr "data/scn Unterschied" -#: libelf/elf_error.c:187 +#: libelf/elf_error.c:186 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:190 src/readelf.c:10266 src/readelf.c:10866 +#: src/readelf.c:10967 src/readelf.c:11149 #, c-format msgid "invalid data" msgstr "Ungültige Daten" -#: libelf/elf_error.c:195 +#: libelf/elf_error.c:194 msgid "unknown data encoding" msgstr "Unbekannte Datenkodierung" -#: libelf/elf_error.c:199 +#: libelf/elf_error.c:198 msgid "section `sh_size' too small for data" msgstr "Abschnitt `sh_size' zu klein für Daten" -#: libelf/elf_error.c:203 +#: libelf/elf_error.c:202 msgid "invalid section alignment" msgstr "ungültige Abschnittsausrichtung" -#: libelf/elf_error.c:207 +#: libelf/elf_error.c:206 msgid "invalid section entry size" msgstr "" -#: libelf/elf_error.c:211 +#: libelf/elf_error.c:210 msgid "update() for write on read-only file" msgstr "" -#: libelf/elf_error.c:215 +#: libelf/elf_error.c:214 msgid "no such file" msgstr "Datei nicht gefunden" -#: libelf/elf_error.c:219 +#: libelf/elf_error.c:218 msgid "only relocatable files can contain section groups" msgstr "" -#: libelf/elf_error.c:224 +#: libelf/elf_error.c:223 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" -#: libelf/elf_error.c:231 +#: libelf/elf_error.c:230 msgid "file has no program header" msgstr "Datei hat keinen Programm-Kopf" -#: libelf/elf_error.c:241 +#: libelf/elf_error.c:240 #, fuzzy msgid "invalid section type" msgstr "ungültiger Abschnitt" -#: libelf/elf_error.c:246 +#: libelf/elf_error.c:245 #, fuzzy msgid "invalid section flags" msgstr "ungültiger Abschnitt" -#: libelf/elf_error.c:251 +#: libelf/elf_error.c:250 msgid "section does not contain compressed data" msgstr "" -#: libelf/elf_error.c:256 +#: libelf/elf_error.c:255 msgid "section contains compressed data" msgstr "" -#: libelf/elf_error.c:261 +#: libelf/elf_error.c:260 #, fuzzy msgid "unknown compression type" msgstr "unbekannter Typ" -#: libelf/elf_error.c:266 +#: libelf/elf_error.c:265 #, fuzzy msgid "cannot compress data" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: libelf/elf_error.c:271 +#: libelf/elf_error.c:270 #, fuzzy msgid "cannot decompress data" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/addr2line.c:57 +#: src/addr2line.c:58 #, fuzzy msgid "Input format options:" msgstr "Eingabeauswahloptionen:" -#: src/addr2line.c:59 +#: src/addr2line.c:60 msgid "Treat addresses as offsets relative to NAME section." msgstr "" -#: src/addr2line.c:61 +#: src/addr2line.c:62 #, fuzzy msgid "Output format options:" msgstr "Ausgabeformat:" -#: src/addr2line.c:62 +#: src/addr2line.c:63 msgid "Print address before each entry" msgstr "" -#: src/addr2line.c:63 +#: src/addr2line.c:64 msgid "Show only base names of source files" msgstr "" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:66 +msgid "Show absolute file names using compilation directory (default)" msgstr "" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Also show function names" msgstr "" -#: src/addr2line.c:67 +#: src/addr2line.c:68 msgid "Also show symbol or section names" msgstr "" -#: src/addr2line.c:68 +#: src/addr2line.c:69 msgid "Also show symbol and the section names" msgstr "" -#: src/addr2line.c:69 +#: src/addr2line.c:70 msgid "Also show line table flags" msgstr "" -#: src/addr2line.c:71 +#: src/addr2line.c:72 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -#: src/addr2line.c:74 +#: src/addr2line.c:75 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" -#: src/addr2line.c:76 +#: src/addr2line.c:77 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/strings.c:78 +#: src/addr2line.c:79 +msgid "Show relative file names without compilation directory" +msgstr "" + +#: src/addr2line.c:81 src/elfcmp.c:69 src/findtextrel.c:65 src/nm.c:99 +#: src/strings.c:77 msgid "Miscellaneous:" msgstr "Verschiedenes:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:89 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:93 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:519 -#, fuzzy, c-format +#: src/addr2line.c:526 +#, fuzzy msgid "Section syntax requires exactly one module" msgstr "Abschnitt syntax benötigt genau ein Modul" -#: src/addr2line.c:542 +#: src/addr2line.c:548 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:652 +#: src/addr2line.c:658 #, c-format msgid "cannot find symbol '%s'" msgstr "Konnte Symbol '%s' nicht finden" -#: src/addr2line.c:657 +#: src/addr2line.c:663 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" -#: src/ar.c:67 +#: src/ar.c:66 msgid "Commands:" msgstr "Befehle:" -#: src/ar.c:68 +#: src/ar.c:67 msgid "Delete files from archive." msgstr "Dateien aus dem Archiv löschen." -#: src/ar.c:69 +#: src/ar.c:68 msgid "Move files in archive." msgstr "Dateien zum Archiv hinzufügen." -#: src/ar.c:70 +#: src/ar.c:69 msgid "Print files in archive." msgstr "Packe Dateien in Archiv" -#: src/ar.c:71 +#: src/ar.c:70 msgid "Quick append files to archive." msgstr "Hänge Dateien an ein Archiv" -#: src/ar.c:73 +#: src/ar.c:72 msgid "Replace existing or insert new file into archive." msgstr "Ersetze existierende oder füge neue Datei in das Archiv ein." -#: src/ar.c:74 +#: src/ar.c:73 msgid "Display content of archive." msgstr "Zeige Archivinhalt an." -#: src/ar.c:75 +#: src/ar.c:74 msgid "Extract files from archive." msgstr "Entpacke Dateien aus dem Archiv" -#: src/ar.c:77 +#: src/ar.c:76 msgid "Command Modifiers:" msgstr "" -#: src/ar.c:78 +#: src/ar.c:77 msgid "Preserve original dates." msgstr "Erhalte ursprüngliche Daten." -#: src/ar.c:79 +#: src/ar.c:78 msgid "Use instance [COUNT] of name." msgstr "" -#: src/ar.c:81 +#: src/ar.c:80 msgid "Do not replace existing files with extracted files." msgstr "Ersetze existierende Dateien nicht mit entpackten Dateien" -#: src/ar.c:82 +#: src/ar.c:81 msgid "Allow filename to be truncated if necessary." msgstr "Erlaube angehängte Dateinamen, wenn nötig" -#: src/ar.c:84 +#: src/ar.c:83 msgid "Provide verbose output." msgstr "Zeige detaillierte Ausgabe." -#: src/ar.c:85 +#: src/ar.c:84 msgid "Force regeneration of symbol table." msgstr "Erzwinge Regenerierung der Symboltabelle." -#: src/ar.c:86 +#: src/ar.c:85 msgid "Insert file after [MEMBER]." msgstr "Füge Datei nach [MEMBER] ein." -#: src/ar.c:87 +#: src/ar.c:86 msgid "Insert file before [MEMBER]." msgstr "Füge Datei vor [MEMBER] ein." -#: src/ar.c:88 +#: src/ar.c:87 msgid "Same as -b." msgstr "Genau wie -b." -#: src/ar.c:89 +#: src/ar.c:88 msgid "Suppress message when library has to be created." msgstr "Unterdrücke Nachricht wenn Bibliothek erstellt werden muss." -#: src/ar.c:91 +#: src/ar.c:90 #, fuzzy msgid "Use full path for file matching." msgstr "Vollständigen Pfad für Dateiabgleich verwenden." -#: src/ar.c:92 +#: src/ar.c:91 msgid "Update only older files in archive." msgstr "Nur ältere Datein im Archiv aktualisieren" #. Short description of program. -#: src/ar.c:98 +#: src/ar.c:97 msgid "Create, modify, and extract from archives." msgstr "Erstelle, ändere, extrahiere von Archiven" #. Strings for arguments in help texts. -#: src/ar.c:101 +#: src/ar.c:100 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" msgstr "[MEMBER] [COUNT] ARCHIVE [FILE...]" -#: src/ar.c:180 +#: src/ar.c:179 #, c-format msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" msgstr "'a', 'b', und 'i' nur zusammen mit 'm' and 'r Optionen" -#: src/ar.c:185 +#: src/ar.c:184 #, c-format msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" msgstr "" -#: src/ar.c:201 +#: src/ar.c:200 #, c-format msgid "'N' is only meaningful with the 'x' and 'd' options" msgstr "'N' ist nur mit den Optionen 'x' und 'd' von Bedeutung." -#: src/ar.c:206 +#: src/ar.c:205 #, c-format msgid "COUNT parameter required" msgstr "COUNT Parameter erforderlich" -#: src/ar.c:218 +#: src/ar.c:217 #, c-format msgid "invalid COUNT parameter %s" msgstr "Ungültiger COUNT Parameter %s" -#: src/ar.c:225 +#: src/ar.c:224 #, fuzzy, c-format msgid "'%c' is only meaningful with the 'x' option" msgstr "'%' ist nur mit der Option 'x' von Bedeutung" -#: src/ar.c:231 +#: src/ar.c:230 #, c-format msgid "archive name required" msgstr "Archivname erforderlich" -#: src/ar.c:244 +#: src/ar.c:243 #, c-format msgid "command option required" msgstr "" -#: src/ar.c:295 +#: src/ar.c:294 #, c-format msgid "More than one operation specified" msgstr "Mehr als eine Operation angegeben" -#: src/ar.c:389 +#: src/ar.c:388 #, c-format msgid "cannot open archive '%s'" msgstr "Konnte Archiv '%s' nicht öffnen" -#: src/ar.c:399 +#: src/ar.c:398 #, c-format msgid "cannot open archive '%s': %s" msgstr "Konnte Archiv '%s': %s nicht öffnen" -#: src/ar.c:403 +#: src/ar.c:402 #, c-format msgid "%s: not an archive file" msgstr "%s: Keine Archiv-Datei" -#: src/ar.c:407 +#: src/ar.c:406 #, c-format msgid "cannot stat archive '%s'" msgstr "" -#: src/ar.c:419 +#: src/ar.c:418 #, c-format 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:471 src/ar.c:925 src/ar.c:1131 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:477 src/ar.c:931 src/ar.c:1139 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:485 src/ranlib.c:147 #, c-format msgid "cannot stat '%s'" msgstr "" -#: src/ar.c:589 +#: src/ar.c:587 #, c-format msgid "cannot read content of %s: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/ar.c:632 +#: src/ar.c:630 #, c-format msgid "cannot open %.*s" msgstr "Konnte %.*s nicht öffnen" -#: src/ar.c:654 +#: src/ar.c:652 #, c-format msgid "failed to write %s" msgstr "Konnte %s nicht schreiben" -#: src/ar.c:666 +#: src/ar.c:664 #, c-format msgid "cannot change mode of %s" msgstr "" -#: src/ar.c:682 +#: src/ar.c:680 #, c-format msgid "cannot change modification time of %s" msgstr "Konnte Bearbeitungszeit von %s nicht ändern" -#: src/ar.c:728 +#: src/ar.c:726 #, 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:762 src/ar.c:1016 src/ar.c:1419 src/ranlib.c:221 #, c-format msgid "cannot create new file" msgstr "neue Datei konnte nicht angelegt werden" -#: src/ar.c:1225 +#: src/ar.c:1221 #, c-format msgid "position member %s not found" msgstr "" -#: src/ar.c:1235 +#: src/ar.c:1231 #, 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:1260 src/objdump.c:240 #, c-format msgid "cannot open %s" msgstr "Konnte %s nicht öffnen" -#: src/ar.c:1269 +#: src/ar.c:1265 #, c-format msgid "cannot stat %s" msgstr "" -#: src/ar.c:1275 +#: src/ar.c:1271 #, c-format msgid "%s is no regular file" msgstr "%s ist keine reguläre Datei" -#: src/ar.c:1288 +#: src/ar.c:1284 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "" -#: src/ar.c:1308 +#: src/ar.c:1304 #, c-format msgid "cannot read %s: %s" msgstr "Konnte %s: %s nicht lesen" -#: src/ar.c:1483 +#: src/ar.c:1479 #, fuzzy, c-format msgid "cannot represent ar_date" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1489 +#: src/ar.c:1485 #, fuzzy, c-format msgid "cannot represent ar_uid" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1495 +#: src/ar.c:1491 #, fuzzy, c-format msgid "cannot represent ar_gid" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1501 +#: src/ar.c:1497 #, fuzzy, c-format msgid "cannot represent ar_mode" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/ar.c:1507 +#: src/ar.c:1503 #, fuzzy, c-format msgid "cannot represent ar_size" msgstr "Konnte %s nicht öffnen" -#: src/arlib-argp.c:32 +#: src/arlib-argp.c:31 msgid "Use zero for uid, gid, and date in archive members." msgstr "" -#: src/arlib-argp.c:34 +#: src/arlib-argp.c:33 msgid "Use actual uid, gid, and date in archive members." msgstr "" -#: src/arlib-argp.c:63 +#: src/arlib-argp.c:62 #, c-format msgid "%s (default)" msgstr "" #. The archive is too big. -#: src/arlib.c:213 +#: src/arlib.c:212 #, c-format msgid "the archive '%s' is too large" msgstr "Das Archiv '%s' ist zu groß" -#: src/arlib.c:226 +#: src/arlib.c:225 #, c-format 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/readelf.c:158 +#: src/elfclassify.c:979 src/elfcompress.c:1358 src/elflint.c:76 +#: src/readelf.c:160 msgid "FILE..." msgstr "DATEI..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1427,230 +1430,230 @@ msgid "" "change the exit status." msgstr "" -#: src/elfcmp.c:60 +#: src/elfcmp.c:59 msgid "Control options:" msgstr "" -#: src/elfcmp.c:62 +#: src/elfcmp.c:61 msgid "Output all differences, not just the first" msgstr "" -#: src/elfcmp.c:63 +#: src/elfcmp.c:62 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" msgstr "" -#: src/elfcmp.c:65 +#: src/elfcmp.c:64 msgid "Ignore permutation of buckets in SHT_HASH section" msgstr "" -#: src/elfcmp.c:67 +#: src/elfcmp.c:66 msgid "Ignore differences in build ID" msgstr "" -#: src/elfcmp.c:68 +#: src/elfcmp.c:67 msgid "Output nothing; yield exit status only" msgstr "" #. Short description of program. -#: src/elfcmp.c:75 +#: src/elfcmp.c:74 msgid "Compare relevant parts of two ELF files for equality." msgstr "" #. Strings for arguments in help texts. -#: src/elfcmp.c:79 +#: src/elfcmp.c:78 #, fuzzy msgid "FILE1 FILE2" msgstr "DATEI1 DATEI2" -#: src/elfcmp.c:141 +#: src/elfcmp.c:140 msgid "Invalid number of parameters.\n" msgstr "Ungültige Anzahl von Parametern.\n" -#: src/elfcmp.c:172 src/elfcmp.c:177 +#: src/elfcmp.c:171 src/elfcmp.c:176 #, c-format msgid "cannot get ELF header of '%s': %s" msgstr "" -#: src/elfcmp.c:203 +#: src/elfcmp.c:202 #, c-format msgid "%s %s diff: ELF header" msgstr "" -#: src/elfcmp.c:210 src/elfcmp.c:213 +#: src/elfcmp.c:209 src/elfcmp.c:212 #, fuzzy, c-format msgid "cannot get section count of '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfcmp.c:218 +#: src/elfcmp.c:217 #, c-format msgid "%s %s diff: section count" msgstr "" -#: src/elfcmp.c:225 src/elfcmp.c:228 +#: src/elfcmp.c:224 src/elfcmp.c:227 #, fuzzy, c-format msgid "cannot get program header count of '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/elfcmp.c:233 +#: src/elfcmp.c:232 #, fuzzy, c-format msgid "%s %s diff: program header count" msgstr "Datei hat keinen Programm-Kopf" -#: src/elfcmp.c:241 src/elfcmp.c:244 +#: src/elfcmp.c:240 src/elfcmp.c:243 #, fuzzy, c-format msgid "cannot get hdrstrndx of '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfcmp.c:249 +#: src/elfcmp.c:248 #, c-format msgid "%s %s diff: shdr string index" msgstr "" -#: src/elfcmp.c:307 +#: src/elfcmp.c:306 #, c-format msgid "%s %s differ: section [%zu], [%zu] name" msgstr "" -#: src/elfcmp.c:330 +#: src/elfcmp.c:329 #, c-format msgid "%s %s differ: section [%zu] '%s' header" msgstr "" -#: src/elfcmp.c:338 src/elfcmp.c:344 +#: src/elfcmp.c:337 src/elfcmp.c:343 #, c-format msgid "cannot get content of section %zu in '%s': %s" msgstr "" -#: src/elfcmp.c:353 +#: src/elfcmp.c:352 #, c-format msgid "symbol table [%zu] in '%s' has zero sh_entsize" msgstr "" -#: src/elfcmp.c:365 src/elfcmp.c:371 +#: src/elfcmp.c:364 src/elfcmp.c:370 #, c-format msgid "cannot get symbol in '%s': %s" msgstr "" -#: src/elfcmp.c:393 +#: src/elfcmp.c:392 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "" -#: src/elfcmp.c:396 +#: src/elfcmp.c:395 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "" -#: src/elfcmp.c:443 src/elfcmp.c:513 +#: src/elfcmp.c:442 src/elfcmp.c:512 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "" -#: src/elfcmp.c:451 +#: src/elfcmp.c:450 #, fuzzy, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfcmp.c:462 +#: src/elfcmp.c:461 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "" -#: src/elfcmp.c:470 +#: src/elfcmp.c:469 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "" -#: src/elfcmp.c:485 +#: src/elfcmp.c:484 #, c-format msgid "%s %s differ: build ID length" msgstr "" -#: src/elfcmp.c:493 +#: src/elfcmp.c:492 #, c-format msgid "%s %s differ: build ID content" msgstr "" -#: src/elfcmp.c:502 +#: src/elfcmp.c:501 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "" -#: src/elfcmp.c:543 +#: src/elfcmp.c:542 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "" -#: src/elfcmp.c:547 +#: src/elfcmp.c:546 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "" -#: src/elfcmp.c:562 +#: src/elfcmp.c:561 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "" -#: src/elfcmp.c:595 src/elfcmp.c:600 +#: src/elfcmp.c:594 src/elfcmp.c:599 #, c-format msgid "cannot load data of '%s': %s" msgstr "" -#: src/elfcmp.c:619 src/elfcmp.c:625 +#: src/elfcmp.c:618 src/elfcmp.c:624 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "" -#: src/elfcmp.c:631 +#: src/elfcmp.c:630 #, c-format msgid "%s %s differ: program header %d" msgstr "" -#: src/elfcmp.c:655 +#: src/elfcmp.c:654 #, c-format msgid "%s %s differ: gap" msgstr "" -#: src/elfcmp.c:706 +#: src/elfcmp.c:705 #, c-format 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/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:733 src/findtextrel.c:194 src/nm.c:363 src/ranlib.c:140 +#: src/size.c:271 src/strings.c:184 src/strip.c:1040 src/strip.c:1077 +#: src/unstrip.c:2194 src/unstrip.c:2223 #, 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:737 src/findtextrel.c:213 src/ranlib.c:157 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "" -#: src/elfcmp.c:743 +#: src/elfcmp.c:742 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:760 src/findtextrel.c:384 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "" -#: src/elfcmp.c:771 +#: src/elfcmp.c:770 #, c-format msgid "cannot get content of section %zu: %s" msgstr "" -#: src/elfcmp.c:781 src/elfcmp.c:795 +#: src/elfcmp.c:780 src/elfcmp.c:794 #, c-format 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:305 src/unstrip.c:116 #, c-format msgid "-o option specified twice" msgstr "" @@ -1666,318 +1669,318 @@ msgid "unknown compression type '%s'" msgstr "unbekannter Typ" #. We need at least one input file. -#: src/elfcompress.c:145 src/elfcompress.c:1345 +#: src/elfcompress.c:145 src/elfcompress.c:1369 #, fuzzy, c-format msgid "No input file given" msgstr "Eingabedatei '%s' ignoriert" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1373 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "" -#: src/elfcompress.c:1307 +#: src/elfcompress.c:1331 msgid "Place (de)compressed output into FILE" msgstr "" -#: src/elfcompress.c:1310 +#: src/elfcompress.c:1334 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" "gnu' (.zdebug GNU style compression, 'gnu' is an alias)" msgstr "" -#: src/elfcompress.c:1313 +#: src/elfcompress.c:1337 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" -#: src/elfcompress.c:1316 +#: src/elfcompress.c:1340 msgid "Print a message for each section being (de)compressed" msgstr "" -#: src/elfcompress.c:1319 +#: src/elfcompress.c:1343 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" msgstr "" -#: src/elfcompress.c:1322 src/strip.c:93 +#: src/elfcompress.c:1346 src/strip.c:92 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "" -#: src/elfcompress.c:1325 +#: src/elfcompress.c:1349 #, fuzzy msgid "Be silent when a section cannot be compressed" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfcompress.c:1335 +#: src/elfcompress.c:1359 msgid "Compress or decompress sections in an ELF file." msgstr "" -#: src/elflint.c:63 +#: src/elflint.c:62 msgid "Be extremely strict, flag level 2 features." msgstr "" -#: src/elflint.c:64 +#: src/elflint.c:63 msgid "Do not print anything if successful" msgstr "Gebe nichts aus, wenn erfolgreich" -#: src/elflint.c:65 +#: src/elflint.c:64 msgid "Binary is a separate debuginfo file" msgstr "" -#: src/elflint.c:67 +#: src/elflint.c:66 msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" msgstr "" #. Short description of program. -#: src/elflint.c:73 +#: src/elflint.c:72 msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" -#: src/elflint.c:154 src/readelf.c:368 +#: src/elflint.c:153 src/readelf.c:391 #, fuzzy, c-format msgid "cannot open input file '%s'" msgstr "Kann Eingabedatei nicht öffnen" -#: src/elflint.c:161 +#: src/elflint.c:160 #, fuzzy, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" msgstr "kann Elf-Deskriptor nicht erzeugen: %s\n" -#: src/elflint.c:180 +#: src/elflint.c:179 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/elflint.c:184 +#: src/elflint.c:183 msgid "No errors" msgstr "Keine Fehler" -#: src/elflint.c:219 src/readelf.c:577 +#: src/elflint.c:218 src/readelf.c:603 msgid "Missing file name.\n" msgstr "Dateiname fehlt.\n" -#: src/elflint.c:284 +#: src/elflint.c:283 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr "" #. We cannot do anything. -#: src/elflint.c:292 +#: src/elflint.c:291 #, fuzzy, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Keine ELF-Datei - sie hat die falschen Magic Bytes am Anfang\n" -#: src/elflint.c:357 +#: src/elflint.c:356 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "" -#: src/elflint.c:362 +#: src/elflint.c:361 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "" -#: src/elflint.c:366 +#: src/elflint.c:365 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "" -#: src/elflint.c:374 +#: src/elflint.c:373 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "" -#: src/elflint.c:380 +#: src/elflint.c:379 #, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "" -#: src/elflint.c:385 +#: src/elflint.c:384 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] ist nicht null\n" -#: src/elflint.c:390 +#: src/elflint.c:389 #, c-format msgid "unknown object file type %d\n" msgstr "" -#: src/elflint.c:397 +#: src/elflint.c:396 #, c-format msgid "unknown machine type %d\n" msgstr "" -#: src/elflint.c:401 +#: src/elflint.c:400 #, c-format msgid "unknown object file version\n" msgstr "" -#: src/elflint.c:407 +#: src/elflint.c:406 #, c-format msgid "invalid program header offset\n" msgstr "" -#: src/elflint.c:409 +#: src/elflint.c:408 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" -#: src/elflint.c:413 +#: src/elflint.c:412 #, c-format msgid "invalid number of program header entries\n" msgstr "" -#: src/elflint.c:421 +#: src/elflint.c:420 #, c-format msgid "invalid section header table offset\n" msgstr "" -#: src/elflint.c:424 +#: src/elflint.c:423 #, c-format msgid "section header table must be present\n" msgstr "" -#: src/elflint.c:438 +#: src/elflint.c:437 #, c-format msgid "invalid number of section header table entries\n" msgstr "" -#: src/elflint.c:455 +#: src/elflint.c:454 #, c-format msgid "invalid section header index\n" msgstr "" -#: src/elflint.c:473 +#: src/elflint.c:472 #, c-format msgid "Can only check %u headers, shnum was %u\n" msgstr "" -#: src/elflint.c:487 +#: src/elflint.c:486 #, fuzzy, c-format msgid "invalid number of program header table entries\n" msgstr "Ungültige Anzahl von Parametern.\n" -#: src/elflint.c:504 +#: src/elflint.c:503 #, c-format msgid "Can only check %u headers, phnum was %u\n" msgstr "" -#: src/elflint.c:509 +#: src/elflint.c:508 #, c-format msgid "invalid machine flags: %s\n" msgstr "" -#: src/elflint.c:516 src/elflint.c:533 +#: src/elflint.c:515 src/elflint.c:532 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "" -#: src/elflint.c:519 src/elflint.c:536 +#: src/elflint.c:518 src/elflint.c:535 #, c-format msgid "invalid program header size: %hd\n" msgstr "" -#: src/elflint.c:522 src/elflint.c:539 +#: src/elflint.c:521 src/elflint.c:538 #, c-format msgid "invalid program header position or size\n" msgstr "" -#: src/elflint.c:525 src/elflint.c:542 +#: src/elflint.c:524 src/elflint.c:541 #, c-format msgid "invalid section header size: %hd\n" msgstr "" -#: src/elflint.c:528 src/elflint.c:545 +#: src/elflint.c:527 src/elflint.c:544 #, c-format msgid "invalid section header position or size\n" msgstr "" -#: src/elflint.c:590 +#: src/elflint.c:589 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " "group\n" msgstr "" -#: src/elflint.c:594 +#: src/elflint.c:593 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" 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:609 src/elflint.c:1497 src/elflint.c:1548 src/elflint.c:1654 +#: src/elflint.c:1990 src/elflint.c:2316 src/elflint.c:2942 src/elflint.c:3105 +#: src/elflint.c:3253 src/elflint.c:3455 src/elflint.c:4464 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "" -#: src/elflint.c:623 src/elflint.c:1662 +#: src/elflint.c:622 src/elflint.c:1661 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " "type is not SHT_STRTAB\n" msgstr "" -#: src/elflint.c:646 +#: src/elflint.c:645 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " "section\n" msgstr "" -#: src/elflint.c:658 +#: src/elflint.c:657 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "" -#: src/elflint.c:662 +#: src/elflint.c:661 #, c-format msgid "" "section [%2u] '%s': number of local entries in 'st_info' larger than table " "size\n" msgstr "" -#: src/elflint.c:671 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "" -#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685 -#: src/elflint.c:688 src/elflint.c:691 +#: src/elflint.c:675 src/elflint.c:678 src/elflint.c:681 src/elflint.c:684 +#: src/elflint.c:687 src/elflint.c:690 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "" -#: src/elflint.c:694 +#: src/elflint.c:693 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "" -#: src/elflint.c:704 +#: src/elflint.c:703 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "" -#: src/elflint.c:713 +#: src/elflint.c:712 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "" -#: src/elflint.c:728 +#: src/elflint.c:727 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): too large section index but no extended " "section index section\n" msgstr "" -#: src/elflint.c:734 +#: src/elflint.c:733 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): XINDEX used for index which would fit " @@ -1985,119 +1988,119 @@ msgid "" msgstr "" #. || sym->st_shndx > SHN_HIRESERVE always false -#: src/elflint.c:746 +#: src/elflint.c:745 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): invalid section index\n" msgstr "ungültiger Abschnittsindex" -#: src/elflint.c:754 +#: src/elflint.c:753 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown type\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:760 +#: src/elflint.c:759 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown symbol binding\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:765 +#: src/elflint.c:764 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): unique symbol not of object type\n" msgstr "" -#: src/elflint.c:773 +#: src/elflint.c:772 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): COMMON only allowed in relocatable " "files\n" msgstr "" -#: src/elflint.c:777 +#: src/elflint.c:776 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local COMMON symbols are nonsense\n" msgstr "" -#: src/elflint.c:781 +#: src/elflint.c:780 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): function in COMMON section is nonsense\n" msgstr "" -#: src/elflint.c:832 +#: src/elflint.c:831 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): st_value out of bounds\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912 +#: src/elflint.c:837 src/elflint.c:862 src/elflint.c:911 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s) does not fit completely in referenced " "section [%2d] '%s'\n" msgstr "" -#: src/elflint.c:847 +#: src/elflint.c:846 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): referenced section [%2d] '%s' does not " "have SHF_TLS flag set\n" msgstr "" -#: src/elflint.c:857 src/elflint.c:905 +#: src/elflint.c:856 src/elflint.c:904 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value out of bounds of referenced " "section [%2d] '%s'\n" msgstr "" -#: src/elflint.c:884 +#: src/elflint.c:883 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but no TLS program header " "entry\n" msgstr "" -#: src/elflint.c:890 +#: src/elflint.c:889 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but couldn't get TLS program " "header entry\n" msgstr "" -#: src/elflint.c:898 +#: src/elflint.c:897 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value short of referenced section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:925 +#: src/elflint.c:924 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local symbol outside range described in " "sh_info\n" msgstr "" -#: src/elflint.c:932 +#: src/elflint.c:931 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): non-local symbol outside range " "described in sh_info\n" msgstr "" -#: src/elflint.c:939 +#: src/elflint.c:938 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): non-local section symbol\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:989 +#: src/elflint.c:988 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " "[%2d]\n" msgstr "" -#: src/elflint.c:996 +#: src/elflint.c:995 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -2107,1372 +2110,1372 @@ msgstr "" #. This test is more strict than the psABIs which #. usually allow the symbol to be in the middle of #. the .got section, allowing negative offsets. -#: src/elflint.c:1012 +#: src/elflint.c:1011 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " "match %s section address %#\n" msgstr "" -#: src/elflint.c:1019 +#: src/elflint.c:1018 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " "match %s section size %\n" msgstr "" -#: src/elflint.c:1027 +#: src/elflint.c:1026 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " "section\n" msgstr "" -#: src/elflint.c:1043 +#: src/elflint.c:1042 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " "segment address %#\n" msgstr "" -#: src/elflint.c:1050 +#: src/elflint.c:1049 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " "segment size %\n" msgstr "" -#: src/elflint.c:1063 +#: src/elflint.c:1062 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): symbol in dynamic symbol table with non-" "default visibility\n" msgstr "" -#: src/elflint.c:1067 +#: src/elflint.c:1066 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown bit set in st_other\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:1105 +#: src/elflint.c:1104 #, fuzzy, c-format msgid "section [%2d] '%s': cannot get section data.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:1121 +#: src/elflint.c:1120 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "" -#: src/elflint.c:1132 src/elflint.c:1185 +#: src/elflint.c:1131 src/elflint.c:1184 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" -#: src/elflint.c:1157 src/elflint.c:1210 +#: src/elflint.c:1156 src/elflint.c:1209 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " "DT_RELCOUNT\n" msgstr "" -#: src/elflint.c:1163 src/elflint.c:1216 +#: src/elflint.c:1162 src/elflint.c:1215 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " "specified %d relative relocations\n" msgstr "" -#: src/elflint.c:1175 +#: src/elflint.c:1174 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "" -#: src/elflint.c:1258 +#: src/elflint.c:1257 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "" -#: src/elflint.c:1270 +#: src/elflint.c:1269 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "" -#: src/elflint.c:1278 +#: src/elflint.c:1277 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "" -#: src/elflint.c:1286 +#: src/elflint.c:1285 #, fuzzy, c-format msgid "" "section [%2d] '%s': no relocations for merge-able string sections possible\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:1294 +#: src/elflint.c:1293 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" -#: src/elflint.c:1354 +#: src/elflint.c:1353 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" -#: src/elflint.c:1381 +#: src/elflint.c:1380 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "" -#: src/elflint.c:1389 +#: src/elflint.c:1388 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " "type\n" msgstr "" -#: src/elflint.c:1397 +#: src/elflint.c:1396 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" -#: src/elflint.c:1415 +#: src/elflint.c:1414 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " "be used with %s\n" msgstr "" -#: src/elflint.c:1432 +#: src/elflint.c:1431 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "" -#: src/elflint.c:1447 +#: src/elflint.c:1446 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " "%s\n" msgstr "" -#: src/elflint.c:1468 +#: src/elflint.c:1467 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " "relocation flag not set\n" msgstr "" -#: src/elflint.c:1483 +#: src/elflint.c:1482 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" -#: src/elflint.c:1523 src/elflint.c:1574 +#: src/elflint.c:1522 src/elflint.c:1573 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1650 +#: src/elflint.c:1649 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1668 +#: src/elflint.c:1667 #, c-format msgid "" "section [%2d]: referenced as string table for section [%2d] '%s' but section " "link value is invalid\n" msgstr "" -#: src/elflint.c:1676 +#: src/elflint.c:1675 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1681 src/elflint.c:1970 +#: src/elflint.c:1680 src/elflint.c:1969 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1691 +#: src/elflint.c:1690 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1699 +#: src/elflint.c:1698 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1706 +#: src/elflint.c:1705 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1717 +#: src/elflint.c:1716 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1727 +#: src/elflint.c:1726 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1745 +#: src/elflint.c:1744 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" msgstr "" -#: src/elflint.c:1758 +#: src/elflint.c:1757 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " "[%2d] '%s' referenced by sh_link\n" msgstr "" -#: src/elflint.c:1801 +#: src/elflint.c:1800 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1816 +#: src/elflint.c:1815 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:1836 src/elflint.c:1864 +#: src/elflint.c:1835 src/elflint.c:1863 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "" -#: src/elflint.c:1848 +#: src/elflint.c:1847 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1857 +#: src/elflint.c:1856 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1872 src/elflint.c:1879 +#: src/elflint.c:1871 src/elflint.c:1878 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "" -#: src/elflint.c:1889 src/elflint.c:1893 +#: src/elflint.c:1888 src/elflint.c:1892 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" -#: src/elflint.c:1899 +#: src/elflint.c:1898 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922 +#: src/elflint.c:1909 src/elflint.c:1913 src/elflint.c:1917 src/elflint.c:1921 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" -#: src/elflint.c:1934 +#: src/elflint.c:1933 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1944 +#: src/elflint.c:1943 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1948 +#: src/elflint.c:1947 #, c-format msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n" msgstr "" -#: src/elflint.c:1953 +#: src/elflint.c:1952 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1956 +#: src/elflint.c:1955 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1965 +#: src/elflint.c:1964 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1980 +#: src/elflint.c:1979 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " "same symbol table\n" msgstr "" -#: src/elflint.c:1998 +#: src/elflint.c:1997 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:2010 +#: src/elflint.c:2009 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:2015 +#: src/elflint.c:2014 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:2032 src/elflint.c:2089 +#: src/elflint.c:2031 src/elflint.c:2088 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" msgstr "" -#: src/elflint.c:2046 src/elflint.c:2103 +#: src/elflint.c:2045 src/elflint.c:2102 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:2060 src/elflint.c:2117 +#: src/elflint.c:2059 src/elflint.c:2116 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2070 +#: src/elflint.c:2069 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2127 +#: src/elflint.c:2126 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" -#: src/elflint.c:2140 +#: src/elflint.c:2139 #, c-format msgid "section [%2d] '%s': not enough data\n" msgstr "" -#: src/elflint.c:2152 +#: src/elflint.c:2151 #, c-format msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n" msgstr "" -#: src/elflint.c:2168 +#: src/elflint.c:2167 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " "least %ld)\n" msgstr "" -#: src/elflint.c:2177 +#: src/elflint.c:2176 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2211 +#: src/elflint.c:2210 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" msgstr "" -#: src/elflint.c:2232 +#: src/elflint.c:2231 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " "undefined\n" msgstr "" -#: src/elflint.c:2245 +#: src/elflint.c:2244 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" msgstr "" -#: src/elflint.c:2254 +#: src/elflint.c:2253 #, c-format msgid "" "section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n" msgstr "" -#: src/elflint.c:2284 +#: src/elflint.c:2283 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2289 +#: src/elflint.c:2288 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2295 +#: src/elflint.c:2294 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2308 +#: src/elflint.c:2307 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2326 +#: src/elflint.c:2325 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2330 +#: src/elflint.c:2329 #, c-format msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n" msgstr "" -#: src/elflint.c:2340 +#: src/elflint.c:2339 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2345 +#: src/elflint.c:2344 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2350 +#: src/elflint.c:2349 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " "entries\n" msgstr "" -#: src/elflint.c:2399 +#: src/elflint.c:2398 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523 +#: src/elflint.c:2422 src/elflint.c:2487 src/elflint.c:2522 #, c-format msgid "hash section [%2zu] '%s' does not contain enough data\n" msgstr "" -#: src/elflint.c:2444 +#: src/elflint.c:2443 #, c-format msgid "hash section [%2zu] '%s' has zero bit mask words\n" msgstr "" -#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536 +#: src/elflint.c:2454 src/elflint.c:2498 src/elflint.c:2535 #, c-format msgid "hash section [%2zu] '%s' uses too much data\n" msgstr "" -#: src/elflint.c:2470 +#: src/elflint.c:2469 #, c-format msgid "" "hash section [%2zu] '%s' invalid symbol index % (max_nsyms: " "%, nentries: %\n" msgstr "" -#: src/elflint.c:2557 +#: src/elflint.c:2556 #, c-format msgid "hash section [%2zu] '%s' invalid sh_entsize\n" msgstr "" -#: src/elflint.c:2567 src/elflint.c:2571 +#: src/elflint.c:2566 src/elflint.c:2570 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2578 +#: src/elflint.c:2577 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " "table in [%2zu] '%s'\n" msgstr "" -#: src/elflint.c:2590 +#: src/elflint.c:2589 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " "table in [%2zu] '%s'\n" msgstr "" -#: src/elflint.c:2606 +#: src/elflint.c:2605 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2626 +#: src/elflint.c:2625 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2637 +#: src/elflint.c:2636 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2642 +#: src/elflint.c:2641 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2648 +#: src/elflint.c:2647 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2653 +#: src/elflint.c:2652 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2660 +#: src/elflint.c:2659 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2664 +#: src/elflint.c:2663 #, c-format msgid "section [%2d] '%s': cannot get symbol name for signature\n" msgstr "" -#: src/elflint.c:2669 +#: src/elflint.c:2668 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "" -#: src/elflint.c:2675 +#: src/elflint.c:2674 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2681 +#: src/elflint.c:2680 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2690 +#: src/elflint.c:2689 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2696 +#: src/elflint.c:2695 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2704 +#: src/elflint.c:2703 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2708 +#: src/elflint.c:2707 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2719 +#: src/elflint.c:2718 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2731 +#: src/elflint.c:2730 #, fuzzy, c-format msgid "section [%2d] '%s': section index %zu out of range\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:2740 +#: src/elflint.c:2739 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2747 +#: src/elflint.c:2746 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2753 +#: src/elflint.c:2752 #, c-format msgid "" "section [%2d] '%s': element %zu references section [%2d] '%s' without " "SHF_GROUP flag set\n" msgstr "" -#: src/elflint.c:2760 +#: src/elflint.c:2759 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2957 +#: src/elflint.c:2956 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " "dynamic symbol table\n" msgstr "" -#: src/elflint.c:2969 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:2985 +#: src/elflint.c:2984 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:3001 +#: src/elflint.c:3000 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:3009 +#: src/elflint.c:3008 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:3023 +#: src/elflint.c:3022 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:3028 +#: src/elflint.c:3027 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:3038 +#: src/elflint.c:3037 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:3091 +#: src/elflint.c:3090 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:3099 src/elflint.c:3246 +#: src/elflint.c:3098 src/elflint.c:3245 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "" -#: src/elflint.c:3124 src/elflint.c:3300 +#: src/elflint.c:3123 src/elflint.c:3299 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "" -#: src/elflint.c:3131 src/elflint.c:3307 +#: src/elflint.c:3130 src/elflint.c:3306 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" -#: src/elflint.c:3141 +#: src/elflint.c:3140 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:3149 +#: src/elflint.c:3148 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:3161 +#: src/elflint.c:3160 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3169 +#: src/elflint.c:3168 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " "reference\n" msgstr "" -#: src/elflint.c:3178 +#: src/elflint.c:3177 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " "%#x, expected %#x\n" msgstr "" -#: src/elflint.c:3187 +#: src/elflint.c:3186 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " "name '%s'\n" msgstr "" -#: src/elflint.c:3198 +#: src/elflint.c:3197 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" -#: src/elflint.c:3215 src/elflint.c:3391 +#: src/elflint.c:3214 src/elflint.c:3390 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" -#: src/elflint.c:3223 src/elflint.c:3399 +#: src/elflint.c:3222 src/elflint.c:3398 #, c-format msgid "" "section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says " "there are more entries\n" msgstr "" -#: src/elflint.c:3238 +#: src/elflint.c:3237 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3285 +#: src/elflint.c:3284 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3289 +#: src/elflint.c:3288 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3295 +#: src/elflint.c:3294 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3322 +#: src/elflint.c:3321 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3329 +#: src/elflint.c:3328 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3337 +#: src/elflint.c:3336 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3357 +#: src/elflint.c:3356 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3374 +#: src/elflint.c:3373 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3407 +#: src/elflint.c:3406 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3423 +#: src/elflint.c:3422 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3448 +#: src/elflint.c:3447 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3464 +#: src/elflint.c:3463 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3475 +#: src/elflint.c:3474 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3484 +#: src/elflint.c:3483 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3496 +#: src/elflint.c:3495 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3513 +#: src/elflint.c:3512 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3522 +#: src/elflint.c:3521 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3531 +#: src/elflint.c:3530 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3546 +#: src/elflint.c:3545 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" #. Tag_File -#: src/elflint.c:3557 +#: src/elflint.c:3556 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3575 +#: src/elflint.c:3574 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3586 +#: src/elflint.c:3585 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3599 +#: src/elflint.c:3598 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3603 +#: src/elflint.c:3602 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" -#: src/elflint.c:3613 +#: src/elflint.c:3612 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3619 +#: src/elflint.c:3618 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3716 +#: src/elflint.c:3715 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3720 +#: src/elflint.c:3719 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3722 +#: src/elflint.c:3721 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3724 +#: src/elflint.c:3723 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3726 +#: src/elflint.c:3725 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3728 +#: src/elflint.c:3727 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3730 +#: src/elflint.c:3729 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3732 +#: src/elflint.c:3731 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3735 +#: src/elflint.c:3734 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" msgstr "" -#: src/elflint.c:3739 +#: src/elflint.c:3738 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" msgstr "" -#: src/elflint.c:3743 +#: src/elflint.c:3742 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" msgstr "" -#: src/elflint.c:3761 +#: src/elflint.c:3760 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3770 +#: src/elflint.c:3769 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3797 +#: src/elflint.c:3796 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3814 +#: src/elflint.c:3813 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3832 +#: src/elflint.c:3831 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" -#: src/elflint.c:3849 +#: src/elflint.c:3848 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3855 src/elflint.c:3887 +#: src/elflint.c:3854 src/elflint.c:3886 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" -#: src/elflint.c:3860 src/elflint.c:3892 +#: src/elflint.c:3859 src/elflint.c:3891 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " "segments\n" msgstr "" -#: src/elflint.c:3868 +#: src/elflint.c:3867 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3911 +#: src/elflint.c:3910 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3916 +#: src/elflint.c:3915 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3926 +#: src/elflint.c:3925 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3946 +#: src/elflint.c:3945 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" msgstr "" -#: src/elflint.c:3956 +#: src/elflint.c:3955 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "" -#: src/elflint.c:3964 +#: src/elflint.c:3963 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3974 +#: src/elflint.c:3973 #, fuzzy, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:3979 +#: src/elflint.c:3978 #, fuzzy, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:3985 +#: src/elflint.c:3984 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "" -#: src/elflint.c:3991 +#: src/elflint.c:3990 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3996 +#: src/elflint.c:3995 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:4003 +#: src/elflint.c:4002 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:4008 +#: src/elflint.c:4007 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:4027 +#: src/elflint.c:4026 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:4036 +#: src/elflint.c:4035 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "" -#: src/elflint.c:4043 +#: src/elflint.c:4042 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:4074 +#: src/elflint.c:4073 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " "%d\n" msgstr "" -#: src/elflint.c:4084 +#: src/elflint.c:4083 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d\n" msgstr "" -#: src/elflint.c:4110 +#: src/elflint.c:4109 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d and file contents is non-zero\n" msgstr "" -#: src/elflint.c:4121 +#: src/elflint.c:4120 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " "segment of program header entry %d\n" msgstr "" -#: src/elflint.c:4132 +#: src/elflint.c:4131 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:4142 +#: src/elflint.c:4141 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:4152 +#: src/elflint.c:4151 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" -#: src/elflint.c:4158 +#: src/elflint.c:4157 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " "but type is not SHT_TYPE\n" msgstr "" -#: src/elflint.c:4166 +#: src/elflint.c:4165 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:4217 +#: src/elflint.c:4216 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:4240 +#: src/elflint.c:4239 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:4251 +#: src/elflint.c:4250 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:4257 +#: src/elflint.c:4256 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:4268 +#: src/elflint.c:4267 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" msgstr "" -#: src/elflint.c:4281 +#: src/elflint.c:4280 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:4295 +#: src/elflint.c:4294 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:4344 +#: src/elflint.c:4343 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" -#: src/elflint.c:4348 +#: src/elflint.c:4347 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" msgstr "" -#: src/elflint.c:4397 +#: src/elflint.c:4403 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4402 +#: src/elflint.c:4408 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4421 +#: src/elflint.c:4427 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4441 +#: src/elflint.c:4447 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4444 +#: src/elflint.c:4450 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4465 +#: src/elflint.c:4471 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4472 +#: src/elflint.c:4478 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4475 +#: src/elflint.c:4481 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4493 +#: src/elflint.c:4499 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4508 +#: src/elflint.c:4514 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4518 +#: src/elflint.c:4524 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4529 +#: src/elflint.c:4535 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4537 +#: src/elflint.c:4543 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4544 +#: src/elflint.c:4550 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4558 +#: src/elflint.c:4564 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4561 +#: src/elflint.c:4567 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4571 +#: src/elflint.c:4577 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4592 +#: src/elflint.c:4598 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4603 +#: src/elflint.c:4609 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4610 +#: src/elflint.c:4616 #, 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:4625 src/elflint.c:4648 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4648 +#: src/elflint.c:4654 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4675 +#: src/elflint.c:4681 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4678 +#: src/elflint.c:4684 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4691 +#: src/elflint.c:4697 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4699 +#: src/elflint.c:4705 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4702 +#: src/elflint.c:4708 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4706 +#: src/elflint.c:4712 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4709 +#: src/elflint.c:4715 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4714 +#: src/elflint.c:4720 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4717 +#: src/elflint.c:4723 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4728 +#: src/elflint.c:4737 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4735 +#: src/elflint.c:4744 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4738 +#: src/elflint.c:4747 #, 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:4760 #, 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:4794 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4797 +#: src/elflint.c:4806 #, 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:4827 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3495,32 +3498,32 @@ 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/strings.c:87 src/strip.c:101 +#: src/findtextrel.c:74 src/nm.c:107 src/objdump.c:70 src/size.c:79 +#: src/strings.c:86 src/strip.c:100 msgid "[FILE...]" msgstr "" -#: src/findtextrel.c:222 +#: src/findtextrel.c:223 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "" -#: src/findtextrel.c:233 +#: src/findtextrel.c:234 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "" -#: src/findtextrel.c:253 +#: src/findtextrel.c:254 #, c-format msgid "getting get section header of section %zu: %s" msgstr "" -#: src/findtextrel.c:277 +#: src/findtextrel.c:278 #, c-format msgid "cannot read dynamic section: %s" msgstr "" -#: src/findtextrel.c:298 +#: src/findtextrel.c:299 #, c-format msgid "no text relocations reported in '%s'" msgstr "" @@ -3535,90 +3538,90 @@ msgstr "" 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:325 src/findtextrel.c:340 #, 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:396 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:417 src/findtextrel.c:440 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:516 +#: src/findtextrel.c:506 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:570 +#: src/findtextrel.c:560 #, 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:567 src/findtextrel.c:587 #, 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:575 #, 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:595 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" msgstr "" -#: src/nm.c:66 src/strip.c:70 +#: src/nm.c:65 src/strip.c:69 msgid "Output selection:" msgstr "" -#: src/nm.c:67 +#: src/nm.c:66 msgid "Display debugger-only symbols" msgstr "" -#: src/nm.c:68 +#: src/nm.c:67 msgid "Display only defined symbols" msgstr "Zeige nur definierte Symbole" -#: src/nm.c:71 +#: src/nm.c:70 msgid "Display dynamic symbols instead of normal symbols" msgstr "Zeige dynamische Symbole anstelle normaler Symbole" -#: src/nm.c:72 +#: src/nm.c:71 msgid "Display only external symbols" msgstr "Zeige nur externe Symbole" -#: src/nm.c:73 +#: src/nm.c:72 msgid "Display only undefined symbols" msgstr "Zeige nur undefinierte Symbole" -#: src/nm.c:75 +#: src/nm.c:74 msgid "Include index for symbols from archive members" msgstr "" -#: src/nm.c:77 src/size.c:54 +#: src/nm.c:76 src/size.c:53 msgid "Output format:" msgstr "Ausgabeformat:" -#: src/nm.c:79 +#: src/nm.c:78 #, fuzzy msgid "Print name of the input file before every symbol" msgstr "Zeige Name der Eingabedatei vor jedem Symbol" -#: src/nm.c:82 +#: src/nm.c:81 msgid "" "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " "default is `sysv'" @@ -3626,76 +3629,76 @@ msgstr "" "Benutze das Ausgabeformat FORMAT. FORMAT kann `bsd', `sysv' or `posix' sein. " "Der Standard ist `sysv'" -#: src/nm.c:84 +#: src/nm.c:83 msgid "Same as --format=bsd" msgstr "Genau wie --format=bsd" -#: src/nm.c:85 +#: src/nm.c:84 msgid "Same as --format=posix" msgstr "Genau wie --format=posix" -#: src/nm.c:86 src/size.c:60 +#: src/nm.c:85 src/size.c:59 msgid "Use RADIX for printing symbol values" msgstr "Benutze RADIX zur Ausgabe von Symbolwerten" -#: src/nm.c:87 +#: src/nm.c:86 #, fuzzy msgid "Mark special symbols" msgstr "Kennzeichne schwache Symbole" -#: src/nm.c:89 +#: src/nm.c:88 #, fuzzy msgid "Print size of defined symbols" msgstr "Zeige Grösse der definierten Symbole" -#: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 +#: src/nm.c:90 src/size.c:67 src/strip.c:74 src/unstrip.c:68 msgid "Output options:" msgstr "Ausgabeoptionen:" -#: src/nm.c:92 +#: src/nm.c:91 msgid "Sort symbols numerically by address" msgstr "Symbole anhand der Adresse numerisch sortieren" -#: src/nm.c:94 +#: src/nm.c:93 msgid "Do not sort the symbols" msgstr "Symbole nicht sortieren" -#: src/nm.c:95 +#: src/nm.c:94 msgid "Reverse the sense of the sort" msgstr "Sortierreihenfolge umkehren" -#: src/nm.c:98 +#: src/nm.c:97 msgid "Decode low-level symbol names into source code names" msgstr "" #. Short description of program. -#: src/nm.c:105 +#: src/nm.c:104 msgid "List symbols from FILEs (a.out by default)." msgstr "" -#: src/nm.c:116 src/objdump.c:79 +#: src/nm.c:115 src/objdump.c:78 #, fuzzy msgid "Output formatting" msgstr "Ausgabeformat:" -#: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 +#: src/nm.c:139 src/objdump.c:102 src/size.c:104 src/strip.c:132 #, fuzzy, c-format 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/nm.c:380 src/nm.c:392 src/size.c:287 src/size.c:296 src/size.c:307 +#: src/strip.c:2766 #, 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:402 src/objdump.c:279 src/strip.c:827 #, c-format msgid "%s: File format not recognized" msgstr "%s: Dateiformat nicht erkannt" #. Note: 0 is no valid offset. -#: src/nm.c:443 +#: src/nm.c:442 #, fuzzy msgid "" "\n" @@ -3704,44 +3707,43 @@ msgstr "" "\n" "Archiv-Index:" -#: src/nm.c:452 +#: src/nm.c:451 #, c-format msgid "invalid offset %zu for symbol %s" msgstr "ungültiger Offset %zu für Symbol %s" -#: src/nm.c:457 +#: src/nm.c:456 #, c-format msgid "%s in %s\n" msgstr "" -#: src/nm.c:465 +#: src/nm.c:464 #, c-format msgid "cannot reset archive offset to beginning" msgstr "" -#: src/nm.c:490 src/objdump.c:328 +#: src/nm.c:489 src/objdump.c:327 #, c-format msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: Dateiformat nicht erkannt" -#: src/nm.c:705 -#, c-format +#: src/nm.c:702 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:742 src/nm.c:1234 src/objdump.c:778 src/readelf.c:663 +#: src/readelf.c:1471 src/readelf.c:1620 src/readelf.c:1847 src/readelf.c:2084 +#: src/readelf.c:2273 src/readelf.c:2451 src/readelf.c:2526 src/readelf.c:2791 +#: src/readelf.c:2866 src/readelf.c:2952 src/readelf.c:3547 src/readelf.c:3595 +#: src/readelf.c:3664 src/readelf.c:11581 src/readelf.c:12771 +#: src/readelf.c:12981 src/readelf.c:13049 src/size.c:396 src/size.c:467 +#: src/strip.c:1093 #, c-format msgid "cannot get section header string table index" msgstr "" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:767 #, c-format msgid "" "\n" @@ -3755,110 +3757,110 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:770 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:776 +#: src/nm.c:772 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:774 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:776 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:778 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1245 #, 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:1250 #, 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:1330 #, 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:1566 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Ungültige Operation" -#: src/nm.c:1622 +#: src/nm.c:1616 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: keine Symbole" -#: src/objdump.c:52 +#: src/objdump.c:51 msgid "Mode selection:" msgstr "" -#: src/objdump.c:53 +#: src/objdump.c:52 msgid "Display relocation information." msgstr "" -#: src/objdump.c:55 +#: src/objdump.c:54 msgid "Display the full contents of all sections requested" msgstr "" -#: src/objdump.c:57 +#: src/objdump.c:56 msgid "Display assembler code of executable sections" msgstr "" -#: src/objdump.c:59 +#: src/objdump.c:58 #, fuzzy msgid "Output content selection:" msgstr "Eingabeauswahloptionen:" -#: src/objdump.c:61 +#: src/objdump.c:60 msgid "Only display information for section NAME." msgstr "" #. Short description of program. -#: src/objdump.c:67 +#: src/objdump.c:66 msgid "Show information from FILEs (a.out by default)." msgstr "" -#: src/objdump.c:218 src/readelf.c:582 +#: src/objdump.c:217 src/readelf.c:608 msgid "No operation specified.\n" msgstr "Keine Operation angegeben.\n" -#: src/objdump.c:258 src/objdump.c:270 +#: src/objdump.c:257 src/objdump.c:269 #, c-format msgid "while close `%s'" msgstr "" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:362 src/readelf.c:2179 src/readelf.c:2370 msgid "INVALID SYMBOL" msgstr "" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:377 src/readelf.c:2213 src/readelf.c:2406 msgid "INVALID SECTION" msgstr "" -#: src/objdump.c:498 +#: src/objdump.c:497 #, c-format msgid "" "\n" @@ -3866,106 +3868,105 @@ msgid "" "%-*s TYPE VALUE\n" msgstr "" -#: src/objdump.c:501 +#: src/objdump.c:500 msgid "OFFSET" msgstr "OFFSET" -#: src/objdump.c:566 +#: src/objdump.c:565 #, c-format msgid "Contents of section %s:\n" msgstr "Inhalt des Abschnitts %s:\n" -#: src/objdump.c:687 -#, c-format +#: src/objdump.c:686 msgid "cannot disassemble" msgstr "Disassemblieren nicht möglich" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:757 +#, fuzzy msgid "cannot create backend for elf file" msgstr "neue Datei konnte nicht angelegt werden" #. Short description of program. -#: src/ranlib.c:63 +#: src/ranlib.c:62 msgid "Generate an index to speed access to archives." msgstr "Erstelle einen Index zur Beschleunigung des Zugriffs auf Archive." #. Strings for arguments in help texts. -#: src/ranlib.c:66 +#: src/ranlib.c:65 msgid "ARCHIVE" msgstr "ARCHIV" -#: src/ranlib.c:102 +#: src/ranlib.c:101 #, c-format msgid "Archive name required" msgstr "Archivname benötigt" -#: src/ranlib.c:166 +#: src/ranlib.c:165 #, c-format msgid "'%s' is no archive" msgstr "'%s' ist kein Archiv" -#: src/ranlib.c:201 +#: src/ranlib.c:200 #, c-format msgid "error while freeing sub-ELF descriptor: %s" msgstr "" -#: src/readelf.c:97 +#: src/readelf.c:96 #, fuzzy msgid "ELF input selection:" msgstr "Eingabeauswahloptionen:" -#: src/readelf.c:99 +#: src/readelf.c:98 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" msgstr "" -#: src/readelf.c:102 +#: src/readelf.c:101 msgid "" "Used with -w to find the skeleton Compile Units in FILE associated with the " "Split Compile units in a .dwo input file" msgstr "" -#: src/readelf.c:104 +#: src/readelf.c:103 #, fuzzy msgid "ELF output selection:" msgstr "Eingabeauswahloptionen:" -#: src/readelf.c:106 +#: src/readelf.c:105 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "" -#: src/readelf.c:107 +#: src/readelf.c:106 msgid "Display the dynamic segment" msgstr "" -#: src/readelf.c:108 +#: src/readelf.c:107 msgid "Display the ELF file header" msgstr "" -#: src/readelf.c:110 +#: src/readelf.c:109 msgid "Display histogram of bucket list lengths" msgstr "" -#: src/readelf.c:111 +#: src/readelf.c:110 msgid "Display the program headers" msgstr "Programm-Köpfe anzeigen" -#: src/readelf.c:113 +#: src/readelf.c:112 msgid "Display relocations" msgstr "Relocations anzeigen" -#: src/readelf.c:114 +#: src/readelf.c:113 #, fuzzy msgid "Display the section groups" msgstr "Programm-Köpfe anzeigen" -#: src/readelf.c:115 +#: src/readelf.c:114 #, fuzzy msgid "Display the sections' headers" msgstr "Programm-Köpfe anzeigen" -#: src/readelf.c:118 +#: src/readelf.c:117 #, fuzzy msgid "Display the symbol table sections" msgstr "Symboltabelle anzeigen" @@ -4017,406 +4018,410 @@ msgid "Display the symbol index of an archive" msgstr "Symbolindex des Archivs anzeigen" #: src/readelf.c:141 +msgid "Use the dynamic segment when possible for displaying info" +msgstr "" + +#: src/readelf.c:143 msgid "Output control:" msgstr "Ausgabekontrolle:" -#: src/readelf.c:143 +#: src/readelf.c:145 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Keine symbolischen Namen für Adressen in DWARF-Daten suchen" -#: src/readelf.c:145 +#: src/readelf.c:147 #, fuzzy msgid "" "Display just offsets instead of resolving values to addresses in DWARF data" msgstr "Keine symbolischen Namen für Adressen in DWARF-Daten suchen" -#: src/readelf.c:147 +#: src/readelf.c:149 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:149 +#: src/readelf.c:151 msgid "" "Show compression information for compressed sections (when used with -S); " "decompress section before dumping data (when used with -p or -x)" msgstr "" #. Short description of program. -#: src/readelf.c:154 +#: src/readelf.c:156 msgid "Print information from ELF file in human-readable form." msgstr "Informationen aus der ELF-Datei in menschenlesbarer Form ausgeben." #. Look up once. -#: src/readelf.c:350 +#: src/readelf.c:373 msgid "yes" msgstr "ja" -#: src/readelf.c:351 +#: src/readelf.c:374 msgid "no" msgstr "nein" -#: src/readelf.c:550 +#: src/readelf.c:576 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "" -#: src/readelf.c:621 src/readelf.c:732 +#: src/readelf.c:647 src/readelf.c:758 #, c-format 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:654 src/readelf.c:980 src/strip.c:1188 #, 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:672 src/readelf.c:1287 src/readelf.c:1495 #, 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/readelf.c:681 src/readelf.c:1294 src/readelf.c:1502 src/readelf.c:13001 +#: src/unstrip.c:396 src/unstrip.c:427 src/unstrip.c:490 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/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 #, c-format msgid "cannot get section header: %s" msgstr "" -#: src/readelf.c:663 +#: src/readelf.c:689 #, fuzzy, c-format 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:698 src/readelf.c:6797 src/readelf.c:10854 src/readelf.c:10956 +#: src/readelf.c:11134 #, c-format msgid "cannot get %s content: %s" msgstr "" -#: src/readelf.c:688 +#: src/readelf.c:714 #, fuzzy, c-format msgid "cannot create temp file '%s'" msgstr "neue Datei konnte nicht angelegt werden" -#: src/readelf.c:697 +#: src/readelf.c:723 #, fuzzy, c-format msgid "cannot write section data" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 +#: src/readelf.c:729 src/readelf.c:746 src/readelf.c:775 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "" -#: src/readelf.c:710 +#: src/readelf.c:736 #, fuzzy, c-format msgid "error while rewinding file descriptor" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/readelf.c:744 +#: src/readelf.c:770 #, c-format msgid "'%s' is not an archive, cannot print archive index" msgstr "" -#: src/readelf.c:848 +#: src/readelf.c:874 #, c-format msgid "cannot stat input file" msgstr "" -#: src/readelf.c:850 +#: src/readelf.c:876 #, c-format msgid "input file is empty" msgstr "" -#: src/readelf.c:852 +#: src/readelf.c:878 #, c-format msgid "failed reading '%s': %s" msgstr "Konnte '%s' nicht lesen: %s" -#: src/readelf.c:881 +#: src/readelf.c:907 #, fuzzy, c-format msgid "No such section '%s' in '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:940 +#: src/readelf.c:966 #, c-format msgid "cannot read ELF header: %s" msgstr "" -#: src/readelf.c:948 +#: src/readelf.c:974 #, c-format msgid "cannot create EBL handle" msgstr "" -#: src/readelf.c:961 +#: src/readelf.c:985 #, 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:1017 #, fuzzy, c-format msgid "cannot read ELF: %s" msgstr "Konnte %s: %s nicht lesen" -#: src/readelf.c:1054 +#: src/readelf.c:1078 msgid "NONE (None)" msgstr "" -#: src/readelf.c:1055 +#: src/readelf.c:1079 msgid "REL (Relocatable file)" msgstr "" -#: src/readelf.c:1056 +#: src/readelf.c:1080 msgid "EXEC (Executable file)" msgstr "" -#: src/readelf.c:1057 +#: src/readelf.c:1081 msgid "DYN (Shared object file)" msgstr "" -#: src/readelf.c:1058 +#: src/readelf.c:1082 msgid "CORE (Core file)" msgstr "" -#: src/readelf.c:1063 +#: src/readelf.c:1087 #, c-format msgid "OS Specific: (%x)\n" msgstr "" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1089 #, c-format msgid "Processor Specific: (%x)\n" msgstr "" -#: src/readelf.c:1075 +#: src/readelf.c:1099 msgid "" "ELF Header:\n" " Magic: " msgstr "" -#: src/readelf.c:1079 +#: src/readelf.c:1103 #, c-format msgid "" "\n" " Class: %s\n" msgstr "" -#: src/readelf.c:1084 +#: src/readelf.c:1108 #, fuzzy, c-format msgid " Data: %s\n" msgstr " Daten: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1114 #, c-format msgid " Ident Version: %hhd %s\n" msgstr "" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1116 src/readelf.c:1138 msgid "(current)" msgstr "(aktuell)" -#: src/readelf.c:1096 +#: src/readelf.c:1120 #, c-format msgid " OS/ABI: %s\n" msgstr "" -#: src/readelf.c:1099 +#: src/readelf.c:1123 #, c-format msgid " ABI Version: %hhd\n" msgstr "" -#: src/readelf.c:1102 +#: src/readelf.c:1126 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:1107 +#: src/readelf.c:1131 #, c-format msgid " Machine: %s\n" msgstr "" -#: src/readelf.c:1109 +#: src/readelf.c:1133 #, fuzzy, c-format msgid " Machine: : 0x%x\n" msgstr " Daten: %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1136 #, c-format msgid " Version: %d %s\n" msgstr "" -#: src/readelf.c:1116 +#: src/readelf.c:1140 #, c-format msgid " Entry point address: %#\n" msgstr "" -#: src/readelf.c:1119 +#: src/readelf.c:1143 #, c-format msgid " Start of program headers: % %s\n" msgstr "" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1144 src/readelf.c:1147 msgid "(bytes into file)" msgstr "" -#: src/readelf.c:1122 +#: src/readelf.c:1146 #, c-format msgid " Start of section headers: % %s\n" msgstr "" -#: src/readelf.c:1125 +#: src/readelf.c:1149 #, c-format msgid " Flags: %s\n" msgstr "" -#: src/readelf.c:1128 +#: src/readelf.c:1152 #, c-format msgid " Size of this header: % %s\n" msgstr "" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1153 src/readelf.c:1156 src/readelf.c:1173 msgid "(bytes)" msgstr "(Bytes)" -#: src/readelf.c:1131 +#: src/readelf.c:1155 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" -#: src/readelf.c:1134 +#: src/readelf.c:1158 #, c-format msgid " Number of program headers entries: %" msgstr "" -#: src/readelf.c:1141 +#: src/readelf.c:1165 #, c-format msgid " (% in [0].sh_info)" msgstr "" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1168 src/readelf.c:1185 src/readelf.c:1199 msgid " ([0] not available)" msgstr "" -#: src/readelf.c:1148 +#: src/readelf.c:1172 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" -#: src/readelf.c:1151 +#: src/readelf.c:1175 #, c-format msgid " Number of section headers entries: %" msgstr "" -#: src/readelf.c:1158 +#: src/readelf.c:1182 #, c-format msgid " (% in [0].sh_size)" msgstr "" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1195 #, c-format msgid " (% in [0].sh_link)" msgstr "" -#: src/readelf.c:1179 +#: src/readelf.c:1203 #, c-format msgid "" " Section header string table index: XINDEX%s\n" "\n" msgstr "" -#: src/readelf.c:1183 +#: src/readelf.c:1207 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr "" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1253 src/readelf.c:1461 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1256 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" "\n" msgstr " %s: %\n" -#: src/readelf.c:1242 +#: src/readelf.c:1264 #, 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:1267 msgid "Section Headers:" msgstr "" -#: src/readelf.c:1248 +#: src/readelf.c:1270 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" msgstr "" -#: src/readelf.c:1250 +#: src/readelf.c:1272 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" msgstr "" -#: src/readelf.c:1255 +#: src/readelf.c:1277 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1279 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1357 #, c-format msgid "bad compression header for section %zd: %s" msgstr "" -#: src/readelf.c:1346 +#: src/readelf.c:1368 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "" -#: src/readelf.c:1364 +#: src/readelf.c:1386 msgid "Program Headers:" msgstr "Programm-Köpfe:" -#: src/readelf.c:1366 +#: src/readelf.c:1388 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" -#: src/readelf.c:1369 +#: src/readelf.c:1391 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" msgstr "" -#: src/readelf.c:1426 +#: src/readelf.c:1448 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "" -#: src/readelf.c:1453 +#: src/readelf.c:1473 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:1484 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 #, c-format msgid "cannot get program header: %s" msgstr "" -#: src/readelf.c:1610 +#: src/readelf.c:1628 #, c-format msgid "" "\n" @@ -4427,7 +4432,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1615 +#: src/readelf.c:1633 #, c-format msgid "" "\n" @@ -4438,31 +4443,31 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1623 +#: src/readelf.c:1641 msgid "" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1655 msgid "" 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:1678 src/readelf.c:2461 src/readelf.c:3563 src/readelf.c:12873 +#: src/readelf.c:12880 src/readelf.c:12924 src/readelf.c:12931 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1682 src/readelf.c:2466 src/readelf.c:3567 #, 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:1851 src/readelf.c:2532 src/readelf.c:2797 src/readelf.c:2872 +#: src/readelf.c:3175 src/readelf.c:3249 src/readelf.c:5570 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:1812 +#: src/readelf.c:1854 #, c-format msgid "" "\n" @@ -4475,43 +4480,61 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1822 +#: src/readelf.c:1867 +#, c-format +msgid "" +"\n" +"Dynamic segment contains %lu entry:\n" +" Addr: %#0* Offset: %#08\n" +msgid_plural "" +"\n" +"Dynamic segment contains %lu entries:\n" +" Addr: %#0* Offset: %#08\n" +msgstr[0] "" +msgstr[1] "" + +#: src/readelf.c:1877 msgid " Type Value\n" msgstr "" -#: src/readelf.c:1846 +#: src/readelf.c:1886 +#, fuzzy +msgid "cannot get string table by using dynamic segment" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/readelf.c:1925 #, c-format msgid "Shared library: [%s]\n" msgstr "" -#: src/readelf.c:1851 +#: src/readelf.c:1929 #, c-format msgid "Library soname: [%s]\n" msgstr "" -#: src/readelf.c:1856 +#: src/readelf.c:1933 #, c-format msgid "Library rpath: [%s]\n" msgstr "" -#: src/readelf.c:1861 +#: src/readelf.c:1937 #, c-format msgid "Library runpath: [%s]\n" msgstr "" -#: src/readelf.c:1881 +#: src/readelf.c:1956 #, c-format msgid "% (bytes)\n" msgstr "" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2070 src/readelf.c:2259 #, c-format msgid "" "\n" "Invalid symbol table at offset %#0\n" msgstr "" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2087 src/readelf.c:2276 #, c-format msgid "" "\n" @@ -4530,7 +4553,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:2102 src/readelf.c:2291 #, c-format msgid "" "\n" @@ -4541,29 +4564,29 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2037 +#: src/readelf.c:2112 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:2039 +#: src/readelf.c:2114 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:2167 src/readelf.c:2178 src/readelf.c:2191 src/readelf.c:2212 +#: src/readelf.c:2224 src/readelf.c:2357 src/readelf.c:2369 src/readelf.c:2383 +#: src/readelf.c:2405 src/readelf.c:2418 msgid "" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2301 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2229 +#: src/readelf.c:2303 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2467 +#: src/readelf.c:2540 #, c-format msgid "" "\n" @@ -4574,40 +4597,40 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2472 +#: src/readelf.c:2545 #, 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:2553 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2482 +#: src/readelf.c:2555 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2502 +#: src/readelf.c:2575 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2595 +#: src/readelf.c:2668 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2680 +#: src/readelf.c:2753 msgid "none" msgstr "keine" -#: src/readelf.c:2697 +#: src/readelf.c:2770 msgid "| " msgstr "| " -#: src/readelf.c:2728 +#: src/readelf.c:2800 #, c-format msgid "" "\n" @@ -4620,17 +4643,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2749 +#: src/readelf.c:2821 #, 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:2834 #, 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:2876 #, c-format msgid "" "\n" @@ -4643,18 +4666,18 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2833 +#: src/readelf.c:2904 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2848 +#: src/readelf.c:2919 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3179 #, c-format msgid "" "\n" @@ -4667,15 +4690,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3137 +#: src/readelf.c:3207 msgid " 0 *local* " msgstr " 0 *lokal* " -#: src/readelf.c:3142 +#: src/readelf.c:3212 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3184 +#: src/readelf.c:3254 #, c-format msgid "" "\n" @@ -4690,66 +4713,66 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3206 +#: src/readelf.c:3276 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:3208 +#: src/readelf.c:3278 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3285 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3298 #, 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:3316 src/readelf.c:3380 src/readelf.c:3446 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:3254 +#: src/readelf.c:3324 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3283 +#: src/readelf.c:3353 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3318 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3349 +#: src/readelf.c:3419 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3385 +#: src/readelf.c:3455 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3452 +#: src/readelf.c:3521 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:3541 +#: src/readelf.c:3606 #, c-format msgid "" "\n" @@ -4760,13 +4783,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3555 +#: src/readelf.c:3620 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:3614 +#: src/readelf.c:3680 #, c-format msgid "" "\n" @@ -4774,102 +4797,102 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:3631 +#: src/readelf.c:3697 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3655 +#: src/readelf.c:3721 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3760 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3765 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3814 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3817 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3820 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3830 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3833 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, fuzzy, c-format +#: src/readelf.c:3903 +#, fuzzy msgid "sprintf failure" msgstr "mprotect fehlgeschlagen" -#: src/readelf.c:4319 +#: src/readelf.c:4387 msgid "empty block" msgstr "" -#: src/readelf.c:4322 +#: src/readelf.c:4390 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:4800 +#: src/readelf.c:4868 #, c-format msgid "%*s[%2] %s \n" msgstr "" -#: src/readelf.c:4867 +#: src/readelf.c:5028 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:4874 +#: src/readelf.c:5035 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4881 +#: src/readelf.c:5042 #, c-format msgid "%s %# used with different base addresses" msgstr "" -#: src/readelf.c:4888 +#: src/readelf.c:5049 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:5149 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4996 +#: src/readelf.c:5157 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5260 #, c-format msgid "" "\n" @@ -4877,79 +4900,79 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:5107 +#: src/readelf.c:5268 #, c-format msgid "" "\n" "Abbreviation section at offset %:\n" msgstr "" -#: src/readelf.c:5120 +#: src/readelf.c:5281 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:5136 +#: src/readelf.c:5297 #, c-format msgid " [%5u] offset: %, 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:5330 src/readelf.c:5639 src/readelf.c:5806 src/readelf.c:6191 +#: src/readelf.c:6807 src/readelf.c:8562 src/readelf.c:9308 src/readelf.c:9791 +#: src/readelf.c:10042 src/readelf.c:10208 src/readelf.c:10595 +#: src/readelf.c:10655 #, c-format msgid "" "\n" "DWARF section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:5182 +#: src/readelf.c:5343 #, 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:5443 src/readelf.c:5467 src/readelf.c:5851 src/readelf.c:9353 #, fuzzy, c-format msgid " Length: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5445 src/readelf.c:5482 src/readelf.c:5864 src/readelf.c:9366 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5446 src/readelf.c:5491 src/readelf.c:5873 src/readelf.c:9375 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5448 src/readelf.c:5501 src/readelf.c:5883 src/readelf.c:9385 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5486 src/readelf.c:5868 src/readelf.c:9370 src/readelf.c:10787 #, 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:5496 src/readelf.c:5709 src/readelf.c:5878 src/readelf.c:9380 #, 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:5507 src/readelf.c:5720 src/readelf.c:5888 src/readelf.c:9390 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5560 src/readelf.c:5634 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:5414 +#: src/readelf.c:5575 #, c-format msgid "" "\n" @@ -4960,239 +4983,239 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5445 +#: src/readelf.c:5606 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5608 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5652 src/readelf.c:8589 #, 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:5656 src/readelf.c:5832 src/readelf.c:6831 src/readelf.c:8600 +#: src/readelf.c:9334 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5511 +#: src/readelf.c:5672 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5523 +#: src/readelf.c:5684 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5527 +#: src/readelf.c:5688 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5699 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5544 +#: src/readelf.c:5705 #, c-format msgid " Address size: %6\n" msgstr "" -#: src/readelf.c:5555 +#: src/readelf.c:5716 #, c-format msgid "" " Segment size: %6\n" "\n" msgstr "" -#: src/readelf.c:5610 +#: src/readelf.c:5771 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5815 #, 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:5838 src/readelf.c:9340 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " %s: %\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5893 src/readelf.c:9395 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5909 src/readelf.c:9411 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5911 src/readelf.c:9413 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5917 src/readelf.c:9419 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5928 src/readelf.c:9430 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5932 src/readelf.c:9434 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " %s: %\n" -#: src/readelf.c:5823 +#: src/readelf.c:5984 #, fuzzy, c-format msgid "invalid range list data" msgstr "Ungültige Daten" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6169 src/readelf.c:9769 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6186 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6222 src/readelf.c:9824 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6224 src/readelf.c:9826 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6233 src/readelf.c:9852 src/readelf.c:9878 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6258 src/readelf.c:9962 #, fuzzy msgid "base address" msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6268 src/readelf.c:9972 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:6367 +#: src/readelf.c:6528 msgid " \n" msgstr "" -#: src/readelf.c:6624 +#: src/readelf.c:6785 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:6642 +#: src/readelf.c:6803 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:6692 +#: src/readelf.c:6853 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6954 src/readelf.c:7108 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:6808 +#: src/readelf.c:6969 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:6814 +#: src/readelf.c:6975 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:6924 +#: src/readelf.c:7085 #, c-format msgid " (offset: %#)" msgstr "" -#: src/readelf.c:6931 +#: src/readelf.c:7092 #, c-format msgid " (end offset: %#)" msgstr "" -#: src/readelf.c:6968 +#: src/readelf.c:7129 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "" -#: src/readelf.c:7053 +#: src/readelf.c:7214 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "" -#: src/readelf.c:7063 +#: src/readelf.c:7224 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "" -#: src/readelf.c:7085 +#: src/readelf.c:7246 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "" -#: src/readelf.c:7415 +#: src/readelf.c:7576 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "Ungültige Datei" -#: src/readelf.c:7419 +#: src/readelf.c:7580 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr "unbekannte Form %" -#: src/readelf.c:7423 +#: src/readelf.c:7584 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:7738 +#: src/readelf.c:7899 #, c-format msgid "" "\n" @@ -5200,12 +5223,12 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:7788 +#: src/readelf.c:7949 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7969 #, c-format msgid "" " Type unit at offset %:\n" @@ -5214,7 +5237,7 @@ msgid "" " Type signature: %#, Type offset: %# [%]\n" msgstr "" -#: src/readelf.c:7820 +#: src/readelf.c:7981 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5222,37 +5245,37 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7991 src/readelf.c:8152 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:8018 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:8047 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:7895 +#: src/readelf.c:8056 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:7933 +#: src/readelf.c:8092 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:7941 +#: src/readelf.c:8100 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:7985 +#: src/readelf.c:8144 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5260,7 +5283,7 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:8037 +#: src/readelf.c:8196 #, c-format msgid "" "\n" @@ -5268,18 +5291,18 @@ msgid "" "\n" msgstr "" -#: src/readelf.c:8369 +#: src/readelf.c:8528 #, fuzzy, c-format msgid "unknown form: %s" msgstr "unbekannte Form %" -#: src/readelf.c:8400 +#: src/readelf.c:8576 #, c-format msgid "cannot get line data section data: %s" msgstr "" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8680 #, c-format msgid "" "\n" @@ -5298,177 +5321,187 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:8524 +#: src/readelf.c:8702 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:8532 +#: src/readelf.c:8710 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "Kein Adress-Wert" -#: src/readelf.c:8540 +#: src/readelf.c:8718 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "" -#: src/readelf.c:8550 +#: src/readelf.c:8728 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:8565 +#: src/readelf.c:8743 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:8576 +#: src/readelf.c:8754 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8760 src/readelf.c:8837 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8831 msgid "" "\n" "File name table:" msgstr "" -#: src/readelf.c:8714 +#: src/readelf.c:8892 msgid " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:8753 +#: src/readelf.c:8938 msgid "" "\n" "No line number statements." msgstr "" -#: src/readelf.c:8757 +#: src/readelf.c:8942 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:8777 +#: src/readelf.c:8957 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8811 +#: src/readelf.c:8991 #, c-format msgid " special opcode %u: address+%u = " msgstr "" -#: src/readelf.c:8815 +#: src/readelf.c:8995 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:8818 +#: src/readelf.c:8998 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:9016 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:8841 +#: src/readelf.c:9021 msgid " end of sequence" msgstr "" -#: src/readelf.c:8859 +#: src/readelf.c:9039 #, fuzzy, c-format msgid " set address to " msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:8887 +#: src/readelf.c:9067 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -#: src/readelf.c:8901 +#: src/readelf.c:9081 #, c-format msgid " set discriminator to %u\n" msgstr "" +#: src/readelf.c:9108 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:9132 +#, c-format +msgid " set function name %s (0x%x)\n" +msgstr "" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:9139 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:9151 msgid " copy" msgstr "" -#: src/readelf.c:8929 +#: src/readelf.c:9162 #, c-format msgid " advance address by %u to " msgstr "" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9166 src/readelf.c:9227 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9178 #, c-format msgid " advance line by constant %d to %\n" msgstr "" -#: src/readelf.c:8955 +#: src/readelf.c:9188 #, c-format msgid " set file to %\n" msgstr "" -#: src/readelf.c:8966 +#: src/readelf.c:9199 #, c-format msgid " set column to %\n" msgstr "" -#: src/readelf.c:8973 +#: src/readelf.c:9206 #, c-format msgid " set '%s' to %\n" msgstr "" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9212 msgid " set basic block flag" msgstr "" -#: src/readelf.c:8990 +#: src/readelf.c:9223 #, c-format msgid " advance address by constant %u to " msgstr "" -#: src/readelf.c:9010 +#: src/readelf.c:9243 #, c-format msgid " advance address by fixed value %u to \n" msgstr "" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9253 msgid " set prologue end flag" msgstr "" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9258 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:9035 +#: src/readelf.c:9268 #, c-format msgid " set isa to %u\n" msgstr "" @@ -5476,108 +5509,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:9277 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:9084 +#: src/readelf.c:9317 #, 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:9483 #, c-format msgid " \n" msgstr "" -#: src/readelf.c:9290 +#: src/readelf.c:9523 #, fuzzy, c-format msgid "invalid loclists data" msgstr "Ungültige Daten" -#: src/readelf.c:9543 +#: src/readelf.c:9786 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9999 src/readelf.c:11043 msgid " \n" msgstr "" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:10054 src/readelf.c:10217 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:9891 +#: src/readelf.c:10134 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:9914 +#: src/readelf.c:10157 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "" -#: src/readelf.c:10015 +#: src/readelf.c:10258 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " %s: %\n" -#: src/readelf.c:10027 +#: src/readelf.c:10270 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10276 src/readelf.c:11163 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10283 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " %s: %\n" -#: src/readelf.c:10069 +#: src/readelf.c:10312 #, c-format msgid " Offset length: %\n" msgstr "" -#: src/readelf.c:10077 +#: src/readelf.c:10320 #, c-format msgid " .debug_line offset: 0x%\n" msgstr "" -#: src/readelf.c:10102 +#: src/readelf.c:10345 #, c-format msgid " extension opcode table, % items:\n" msgstr "" -#: src/readelf.c:10109 +#: src/readelf.c:10352 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10364 #, c-format msgid " % arguments:" msgstr "" -#: src/readelf.c:10136 +#: src/readelf.c:10379 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10580 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" -#: src/readelf.c:10381 +#: src/readelf.c:10624 #, c-format msgid "" "\n" @@ -5586,77 +5619,77 @@ msgid "" msgstr "" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10629 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10639 #, c-format msgid " *** error, missing string terminator\n" msgstr "" -#: src/readelf.c:10425 +#: src/readelf.c:10668 #, 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:10767 #, fuzzy, c-format msgid " Length: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10526 +#: src/readelf.c:10769 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10540 +#: src/readelf.c:10783 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10549 +#: src/readelf.c:10792 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10603 +#: src/readelf.c:10846 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:10705 +#: src/readelf.c:10948 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:10728 +#: src/readelf.c:10971 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:10740 +#: src/readelf.c:10983 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:10755 +#: src/readelf.c:10998 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:10768 +#: src/readelf.c:11011 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:10782 +#: src/readelf.c:11025 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5665,142 +5698,142 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:10855 +#: src/readelf.c:11098 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:10882 +#: src/readelf.c:11125 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %# contains % bytes :\n" msgstr "" -#: src/readelf.c:10911 +#: src/readelf.c:11154 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:11172 #, c-format msgid " CU offset: %#\n" msgstr "" -#: src/readelf.c:10936 +#: src/readelf.c:11179 #, c-format msgid " TU offset: %#\n" msgstr "" -#: src/readelf.c:10943 +#: src/readelf.c:11186 #, c-format msgid " address offset: %#\n" msgstr "" -#: src/readelf.c:10950 +#: src/readelf.c:11193 #, c-format msgid " symbol offset: %#\n" msgstr "" -#: src/readelf.c:10957 +#: src/readelf.c:11200 #, c-format msgid " constant offset: %#\n" msgstr "" -#: src/readelf.c:10971 +#: src/readelf.c:11214 #, c-format msgid "" "\n" " CU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:10996 +#: src/readelf.c:11239 #, c-format msgid "" "\n" " TU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11025 +#: src/readelf.c:11268 #, c-format msgid "" "\n" " Address list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11057 +#: src/readelf.c:11300 #, c-format msgid "" "\n" " Symbol table at offset %# contains %zu slots:\n" msgstr "" -#: src/readelf.c:11195 +#: src/readelf.c:11438 #, 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:11804 src/readelf.c:12431 src/readelf.c:12541 +#: src/readelf.c:12598 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:11926 +#: src/readelf.c:12168 #, c-format msgid "" "\n" "%*s... ..." msgstr "" -#: src/readelf.c:12438 +#: src/readelf.c:12677 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:12466 +#: src/readelf.c:12705 #, c-format msgid " %-13.*s %9 %s\n" msgstr "" -#: src/readelf.c:12518 +#: src/readelf.c:12757 #, 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:12790 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12575 +#: src/readelf.c:12813 #, c-format msgid "" "\n" "Note segment of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12622 +#: src/readelf.c:12860 #, 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:12887 src/readelf.c:12938 #, 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:12892 #, c-format msgid "" "\n" "Hex dump of section [%zu] '%s', % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12659 +#: src/readelf.c:12897 #, c-format msgid "" "\n" @@ -5808,21 +5841,21 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:12673 +#: src/readelf.c:12911 #, 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:12943 #, c-format msgid "" "\n" "String section [%zu] '%s' contains % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12710 +#: src/readelf.c:12948 #, c-format msgid "" "\n" @@ -5830,170 +5863,170 @@ msgid "" "offset %#0:\n" msgstr "" -#: src/readelf.c:12759 +#: src/readelf.c:12996 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:12789 +#: src/readelf.c:13026 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:12846 +#: src/readelf.c:13081 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:12849 +#: src/readelf.c:13084 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:12853 +#: src/readelf.c:13088 #, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" -#: src/readelf.c:12871 +#: src/readelf.c:13106 #, 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:13111 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" -#: src/size.c:56 +#: src/size.c:55 msgid "" "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " "is `bsd'" msgstr "" -#: src/size.c:58 +#: src/size.c:57 msgid "Same as `--format=sysv'" msgstr "Genau wie `--format=sysv'" -#: src/size.c:59 +#: src/size.c:58 msgid "Same as `--format=bsd'" msgstr "Genau wie `--format=bsd'" -#: src/size.c:62 +#: src/size.c:61 msgid "Same as `--radix=10'" msgstr "Genau wie `--radix=10'" -#: src/size.c:63 +#: src/size.c:62 msgid "Same as `--radix=8'" msgstr "Genau wie `--radix=8'" -#: src/size.c:64 +#: src/size.c:63 msgid "Same as `--radix=16'" msgstr "Genau wie `--radix=16'" -#: src/size.c:66 +#: src/size.c:65 msgid "Similar to `--format=sysv' output but in one line" msgstr "" -#: src/size.c:70 +#: src/size.c:69 msgid "Print size and permission flags for loadable segments" msgstr "" -#: src/size.c:71 +#: src/size.c:70 msgid "Display the total sizes (bsd only)" msgstr "" #. Short description of program. -#: src/size.c:76 +#: src/size.c:75 msgid "List section sizes of FILEs (a.out by default)." msgstr "" -#: src/size.c:240 +#: src/size.c:239 #, c-format msgid "Invalid format: %s" msgstr "Ungültiges Format: %s" -#: src/size.c:251 +#: src/size.c:250 #, c-format msgid "Invalid radix: %s" msgstr "" -#: src/size.c:310 +#: src/size.c:309 #, c-format msgid "%s: file format not recognized" msgstr "" -#: src/size.c:328 +#: src/size.c:327 msgctxt "bsd" msgid "text" msgstr "" -#: src/size.c:329 +#: src/size.c:328 msgctxt "bsd" msgid "data" msgstr "" -#: src/size.c:330 +#: src/size.c:329 msgctxt "bsd" msgid "bss" msgstr "" -#: src/size.c:331 +#: src/size.c:330 msgctxt "bsd" msgid "dec" msgstr "" -#: src/size.c:332 +#: src/size.c:331 msgctxt "bsd" msgid "hex" msgstr "" -#: src/size.c:333 +#: src/size.c:332 msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:416 src/size.c:557 #, c-format msgid " (ex %s)" msgstr "" -#: src/size.c:420 +#: src/size.c:418 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "ungültiger Abschnitt" -#: src/size.c:421 +#: src/size.c:419 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:420 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:449 src/size.c:452 src/size.c:455 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:479 +#, fuzzy msgid "cannot get section header" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/size.c:585 +#: src/size.c:582 msgid "(TOTALS)\n" msgstr "" @@ -6114,103 +6147,100 @@ msgstr "" msgid "Couldn't show any frames." msgstr "" -#: src/strings.c:65 +#: src/strings.c:64 msgid "Output Selection:" msgstr "" -#: src/strings.c:66 +#: src/strings.c:65 msgid "Scan entire file, not only loaded sections" msgstr "" -#: src/strings.c:68 +#: src/strings.c:67 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" msgstr "" -#: src/strings.c:69 +#: src/strings.c:68 msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" msgstr "" -#: src/strings.c:73 +#: src/strings.c:72 msgid "Print name of the file before each string." msgstr "" -#: src/strings.c:75 +#: src/strings.c:74 msgid "Print location of the string in base 8, 10, or 16 respectively." msgstr "" -#: src/strings.c:76 +#: src/strings.c:75 msgid "Alias for --radix=o" msgstr "Alias für --radix=o" #. Short description of program. -#: src/strings.c:83 +#: src/strings.c:82 msgid "Print the strings of printable characters in files." msgstr "" -#: src/strings.c:256 src/strings.c:291 +#: src/strings.c:255 src/strings.c:290 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:302 -#, c-format +#: src/strings.c:300 msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:585 -#, fuzzy, c-format +#: src/strings.c:583 +#, fuzzy msgid "lseek failed" msgstr "lseek64 fehlgeschlagen" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:600 src/strings.c:664 msgid "re-mmap failed" msgstr "re-mmap fehlgeschlagen" -#: src/strings.c:639 -#, c-format +#: src/strings.c:637 msgid "mprotect failed" msgstr "mprotect fehlgeschlagen" -#: src/strings.c:728 +#: src/strings.c:726 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" -#: src/strip.c:71 +#: src/strip.c:70 msgid "Place stripped output into FILE" msgstr "" -#: src/strip.c:72 +#: src/strip.c:71 msgid "Extract the removed sections into FILE" msgstr "" -#: src/strip.c:73 +#: src/strip.c:72 msgid "Embed name FILE instead of -f argument" msgstr "" -#: src/strip.c:77 +#: src/strip.c:76 msgid "Remove all debugging symbols" msgstr "" -#: src/strip.c:81 +#: src/strip.c:80 msgid "Remove section headers (not recommended)" msgstr "" -#: src/strip.c:83 +#: src/strip.c:82 msgid "Copy modified/access timestamps to the output" msgstr "" -#: src/strip.c:85 +#: src/strip.c:84 msgid "" "Resolve all trivial relocations between debug sections if the removed " "sections are placed in a debug file (only relevant for ET_REL files, " "operation is not reversible, needs -f)" msgstr "" -#: src/strip.c:87 +#: src/strip.c:86 msgid "" "Similar to --reloc-debug-sections, but resolve all trivial relocations " "between debug sections in place. No other stripping is performed (operation " @@ -6218,75 +6248,72 @@ msgid "" "section)" msgstr "" -#: src/strip.c:89 +#: src/strip.c:88 msgid "Remove .comment section" msgstr "" -#: src/strip.c:90 +#: src/strip.c:89 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 "" -#: src/strip.c:91 +#: src/strip.c:90 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." msgstr "" #. Short description of program. -#: src/strip.c:98 +#: src/strip.c:97 msgid "Discard symbols from object files." msgstr "" -#: src/strip.c:247 -#, c-format +#: src/strip.c:245 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:251 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:265 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "" -#: src/strip.c:290 +#: src/strip.c:287 #, c-format msgid "-f option specified twice" msgstr "" -#: src/strip.c:299 +#: src/strip.c:296 #, c-format msgid "-F option specified twice" msgstr "" -#: src/strip.c:362 +#: src/strip.c:359 #, c-format msgid "cannot both keep and remove .comment section" msgstr "" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:478 +#, fuzzy msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:756 src/strip.c:780 #, c-format msgid "cannot stat input file '%s'" msgstr "" -#: src/strip.c:761 +#: src/strip.c:770 #, c-format msgid "while opening '%s'" msgstr "" -#: src/strip.c:799 +#: src/strip.c:808 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6297,294 +6324,303 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:820 #, 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:1057 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:1092 -#, fuzzy, c-format +#: src/strip.c:1101 +#, 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:1115 src/strip.c:1158 #, 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:1125 src/strip.c:1168 #, 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:1248 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:1250 +#: src/strip.c:1258 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/strip.c:1259 +#: src/strip.c:1267 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Konnte Archiv '%s' nicht öffnen" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1631 src/strip.c:1746 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:1688 +#: src/strip.c:1695 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1697 +#: src/strip.c:1704 #, fuzzy, c-format 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:1712 src/strip.c:2553 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1722 +#: src/strip.c:1729 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1790 src/strip.c:1852 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1793 +#: src/strip.c:1799 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1866 -#, c-format +#: src/strip.c:1869 msgid "no memory to create section header string table" msgstr "" -#: src/strip.c:2079 +#: src/strip.c:2082 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2469 src/strip.c:2577 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:2477 +#: src/strip.c:2480 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:2500 +#: src/strip.c:2503 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:2541 +#: src/strip.c:2544 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:2559 +#: src/strip.c:2562 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2602 src/strip.c:2622 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2659 src/strip.c:2666 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2683 src/strip.c:2759 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" -#: src/unstrip.c:66 +#: src/unstrip.c:65 msgid "Match MODULE against file names, not module names" msgstr "" -#: src/unstrip.c:67 +#: src/unstrip.c:66 msgid "Silently skip unfindable files" msgstr "" -#: src/unstrip.c:70 +#: src/unstrip.c:69 msgid "Place output into FILE" msgstr "" -#: src/unstrip.c:72 +#: src/unstrip.c:71 msgid "Create multiple output files under DIRECTORY" msgstr "" -#: src/unstrip.c:73 +#: src/unstrip.c:72 msgid "Use module rather than file names" msgstr "" -#: src/unstrip.c:75 +#: src/unstrip.c:74 msgid "Create output for modules that have no separate debug information" msgstr "" -#: src/unstrip.c:78 +#: src/unstrip.c:77 msgid "Apply relocations to section contents in ET_REL files" msgstr "" -#: src/unstrip.c:80 +#: src/unstrip.c:79 msgid "Only list module and file names, build IDs" msgstr "" -#: src/unstrip.c:82 +#: src/unstrip.c:81 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" -#: src/unstrip.c:126 +#: src/unstrip.c:125 #, c-format msgid "-d option specified twice" msgstr "Option -d zweimal angegeben" -#: src/unstrip.c:161 +#: src/unstrip.c:160 #, c-format msgid "only one of -o or -d allowed" msgstr "nur entweder -o oder -d erlaubt" -#: src/unstrip.c:170 +#: src/unstrip.c:169 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "-n kann nicht mit expliziten Dateien oder -o oder -d verwendet werden" -#: src/unstrip.c:185 +#: src/unstrip.c:184 #, c-format msgid "output directory '%s'" msgstr "Ausgabeverzeichnis '%s'" -#: src/unstrip.c:194 +#: src/unstrip.c:193 #, c-format msgid "exactly two file arguments are required" msgstr "genau zwei Datei-Argumente werden benötigt" -#: src/unstrip.c:200 +#: src/unstrip.c:199 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" -#: src/unstrip.c:213 +#: src/unstrip.c:212 #, c-format msgid "-o or -d is required when using implicit files" msgstr "" -#: src/unstrip.c:236 +#: src/unstrip.c:235 #, c-format msgid "cannot create ELF header: %s" msgstr "" -#: src/unstrip.c:240 +#: src/unstrip.c:239 #, fuzzy, c-format msgid "cannot get shdrstrndx:%s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:243 src/unstrip.c:2085 #, c-format msgid "cannot get ELF header: %s" msgstr "" -#: src/unstrip.c:254 +#: src/unstrip.c:253 #, fuzzy, c-format msgid "cannot get new zero section: %s" msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" -#: src/unstrip.c:257 +#: src/unstrip.c:256 #, fuzzy, c-format msgid "cannot update new zero section: %s" msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" -#: src/unstrip.c:261 +#: src/unstrip.c:260 #, c-format msgid "cannot copy ELF header: %s" msgstr "" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:264 src/unstrip.c:2103 src/unstrip.c:2146 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:269 src/unstrip.c:2107 #, c-format msgid "cannot create program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:276 +#: src/unstrip.c:275 #, c-format msgid "cannot copy program header: %s" msgstr "konnte Programm-Kopf nicht kopieren: %s" -#: src/unstrip.c:286 +#: src/unstrip.c:285 #, c-format msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:288 src/unstrip.c:1707 #, c-format msgid "cannot get section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:290 src/unstrip.c:1709 #, c-format msgid "cannot copy section data: %s" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/unstrip.c:319 +#: src/unstrip.c:318 #, c-format 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:1750 +#: src/unstrip.c:392 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:1749 #, 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:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:408 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 #, c-format msgid "cannot update symbol table: %s" msgstr "konnte Symboltabelle nicht aktualisieren: %s" -#: src/unstrip.c:419 +#: src/unstrip.c:418 #, c-format msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:464 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:467 src/unstrip.c:482 #, c-format msgid "cannot update relocation: %s" msgstr "" +#: src/unstrip.c:479 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + #: src/unstrip.c:580 #, c-format msgid "cannot get symbol version: %s" @@ -6640,7 +6676,7 @@ msgstr "konnte Programm-Kopf nicht erstellen: %s" 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:1073 src/unstrip.c:1553 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" @@ -6660,7 +6696,7 @@ msgstr "" 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:1337 src/unstrip.c:1353 src/unstrip.c:1633 src/unstrip.c:1924 #, c-format msgid "cannot add section name to string table: %s" msgstr "" @@ -6675,148 +6711,144 @@ msgstr "" 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:1399 src/unstrip.c:1403 src/unstrip.c:1648 #, c-format msgid "cannot get section count: %s" msgstr "" #: src/unstrip.c:1406 -#, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" #: src/unstrip.c:1410 -#, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1458 src/unstrip.c:1568 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1628 +#: src/unstrip.c:1627 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1758 +#: src/unstrip.c:1757 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:1790 +#: src/unstrip.c:1789 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:2065 +#: src/unstrip.c:2064 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2093 #, c-format msgid "cannot update ELF header: %s" msgstr "" -#: src/unstrip.c:2118 +#: src/unstrip.c:2117 #, c-format msgid "cannot update program header: %s" msgstr "konnte Programm-Kopf nicht aktualisieren: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2122 src/unstrip.c:2205 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2174 +#: src/unstrip.c:2173 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2177 +#: src/unstrip.c:2176 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2196 src/unstrip.c:2248 src/unstrip.c:2260 src/unstrip.c:2350 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2235 +#: src/unstrip.c:2234 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2236 msgid ", use --force" msgstr "" -#: src/unstrip.c:2265 +#: src/unstrip.c:2264 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2268 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2273 +#: src/unstrip.c:2272 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2277 +#: src/unstrip.c:2276 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2308 +#: src/unstrip.c:2307 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2312 +#: src/unstrip.c:2311 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2327 +#: src/unstrip.c:2326 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2331 +#: src/unstrip.c:2330 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2344 +#: src/unstrip.c:2343 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2375 +#: src/unstrip.c:2374 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2502 msgid "no matching modules found" msgstr "kein passendes Modul gefunden" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2512 msgid "matched more than one module" msgstr "mehr als ein passendes Modul" -#: src/unstrip.c:2560 +#: src/unstrip.c:2557 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2561 +#: src/unstrip.c:2558 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -6858,9 +6890,11 @@ msgid "" "executable PATH\n" "source BUILDID /FILENAME\n" "source PATH /FILENAME\n" +"section BUILDID SECTION-NAME\n" +"section PATH SECTION-NAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -6872,6 +6906,10 @@ msgstr "" msgid "Show instances of inlined functions" msgstr "" +#, fuzzy, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "konnte Verzeichnis nicht erstellen: %s" + #~ msgid "%s+%# <%s+%#>" #~ msgstr "%s+%# <%s+%#>" diff --git a/po/es.po b/po/es.po index 65bf523d..2b20a61b 100644 --- a/po/es.po +++ b/po/es.po @@ -1,5 +1,5 @@ -# Fedora Spanish Translation of elfutils.master. -# This file is distributed under the same license as the elfutils.master package. +# Fedora Spanish Translation of elfutils +# This file is distributed under the same license as the elfutils package. # # Domingo Becker , 2009. # Gladys Guerrero Lozano , 2009. @@ -8,9 +8,9 @@ # msgid "" msgstr "" -"Project-Id-Version: elfutils.master.es\n" +"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-11-02 13:30+0100\n" "PO-Revision-Date: 2011-01-10 15:17-0300\n" "Last-Translator: Claudio Rodrigo Pereyra Diaz \n" @@ -24,12 +24,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Country: ARGENTINA\n" -#: lib/color.c:53 +#: lib/color.c:51 msgid "" "colorize the output. WHEN defaults to 'always' or can be 'auto' or 'never'" msgstr "" -#: lib/color.c:129 +#: lib/color.c:127 #, c-format msgid "" "%s: invalid argument '%s' for '--color'\n" @@ -39,12 +39,7 @@ 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 +#: lib/printversion.c:39 #, fuzzy, c-format msgid "" "Copyright (C) %s The elfutils developers <%s>.\n" @@ -57,72 +52,72 @@ 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:47 lib/xmalloc.c:60 lib/xmalloc.c:72 src/readelf.c:11754 +#: src/unstrip.c:311 #, c-format msgid "memory exhausted" msgstr "memoria agotada" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 -#: libelf/elf_error.c:60 +#: libasm/asm_error.c:64 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 +#: libelf/elf_error.c:59 msgid "no error" msgstr "ningún error" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 -#: libelf/elf_error.c:91 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 +#: libelf/elf_error.c:90 msgid "out of memory" msgstr "memoria agotada" -#: libasm/asm_error.c:67 +#: libasm/asm_error.c:66 msgid "cannot create output file" msgstr "no se puede crear el archivo de salida" -#: libasm/asm_error.c:68 +#: libasm/asm_error.c:67 msgid "invalid parameter" msgstr "Parámetro inválido" -#: libasm/asm_error.c:69 +#: libasm/asm_error.c:68 msgid "cannot change mode of output file" msgstr "no sepuede cambiar modo de archivo de salida" -#: libasm/asm_error.c:70 +#: libasm/asm_error.c:69 msgid "cannot rename output file" msgstr "no se puede renombrar el archivo de salida" -#: libasm/asm_error.c:71 +#: libasm/asm_error.c:70 msgid "duplicate symbol" msgstr "Duplicar símbolo" -#: libasm/asm_error.c:72 +#: libasm/asm_error.c:71 msgid "invalid section type for operation" msgstr "tipo de sección inválido para operación" -#: libasm/asm_error.c:73 +#: libasm/asm_error.c:72 msgid "error during output of data" msgstr "error durante salida de datos" -#: libasm/asm_error.c:74 +#: libasm/asm_error.c:73 msgid "no backend support available" msgstr "No hay soporte de segundo plano" -#: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 -#: libelf/elf_error.c:63 +#: libasm/asm_error.c:82 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 +#: libelf/elf_error.c:62 msgid "unknown error" msgstr "error desconocido" -#: libcpu/i386_lex.l:122 +#: libcpu/i386_lex.l:121 #, fuzzy, c-format #| msgid "invalid page size value '%s': ignored" msgid "invalid character '%c' at line %d; ignored" msgstr "Valor de tamaño de página'%s': ignorado" -#: libcpu/i386_lex.l:123 +#: libcpu/i386_lex.l:122 #, fuzzy, c-format #| msgid "invalid page size value '%s': ignored" msgid "invalid character '\\%o' at line %d; ignored" msgstr "Valor de tamaño de página'%s': ignorado" -#: libcpu/i386_parse.y:554 +#: libcpu/i386_parse.y:553 #, fuzzy, c-format #| msgid "while reading linker script '%s': %s at line %d" msgid "while reading i386 CPU description: %s at line %d" @@ -164,7 +159,7 @@ msgstr "no se puede obtener el encabezamiento ELF" msgid "not implemented" msgstr "sin implementar" -#: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159 +#: libdw/dwarf_error.c:69 libelf/elf_error.c:110 libelf/elf_error.c:158 msgid "invalid command" msgstr "comando inválido" @@ -278,7 +273,7 @@ msgstr "dirección de rango no coincidente" msgid "no flag value" msgstr "sin valor de bandera" -#: libdw/dwarf_error.c:96 libelf/elf_error.c:236 +#: libdw/dwarf_error.c:96 libelf/elf_error.c:235 msgid "invalid offset" msgstr "desplazamiento inválido" @@ -318,23 +313,23 @@ 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:45 src/stack.c:643 src/unstrip.c:2547 msgid "Input selection options:" msgstr "Opciones de selección de entrada:" -#: libdwfl/argp-std.c:48 +#: libdwfl/argp-std.c:46 msgid "Find addresses in FILE" msgstr "Hallar direcciones en FICHERO" -#: libdwfl/argp-std.c:50 +#: libdwfl/argp-std.c:48 msgid "Find addresses from signatures found in COREFILE" msgstr "Buscar direcciones desde firmas encontradas en COREFILE" -#: libdwfl/argp-std.c:52 +#: libdwfl/argp-std.c:50 msgid "Find addresses in files mapped into process PID" msgstr "Busca direcciones en archivos mapeados sobre procesos PID" -#: libdwfl/argp-std.c:54 +#: libdwfl/argp-std.c:52 msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" @@ -342,46 +337,46 @@ msgstr "" "Busca direcciones en archivos asignados como leídos desde FILE en formato " "Linux /proc/PID/maps" -#: libdwfl/argp-std.c:56 +#: libdwfl/argp-std.c:54 msgid "Find addresses in the running kernel" msgstr "Busca direcciones en el kernel que está ejecutándose" -#: libdwfl/argp-std.c:58 +#: libdwfl/argp-std.c:56 msgid "Kernel with all modules" msgstr "Kernel con todos los módulos" -#: libdwfl/argp-std.c:60 src/stack.c:650 +#: libdwfl/argp-std.c:58 src/stack.c:650 msgid "Search path for separate debuginfo files" msgstr "Ruta de búsqueda para archivos debugingfo independientes" -#: libdwfl/argp-std.c:161 +#: libdwfl/argp-std.c:159 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "Sólo uno de -e, -p, -k, -K, ó --core está permitido" -#: libdwfl/argp-std.c:234 +#: libdwfl/argp-std.c:232 msgid "cannot load kernel symbols" msgstr "No se pueden cargar símbolos de kernel" #. Non-fatal to have no modules since we do have the kernel. -#: libdwfl/argp-std.c:238 +#: libdwfl/argp-std.c:236 msgid "cannot find kernel modules" msgstr "no se pueden hallar módulos de kernel" -#: libdwfl/argp-std.c:255 +#: libdwfl/argp-std.c:253 msgid "cannot find kernel or modules" msgstr "imposible encontrar kernel o módulos" -#: libdwfl/argp-std.c:294 +#: libdwfl/argp-std.c:292 #, c-format msgid "cannot read ELF core file: %s" msgstr "No se puede leer archivo core ELF: %s" -#: libdwfl/argp-std.c:317 +#: libdwfl/argp-std.c:315 #, fuzzy msgid "Not enough memory" msgstr "memoria agotada" -#: libdwfl/argp-std.c:327 +#: libdwfl/argp-std.c:325 msgid "No modules recognized in core file" msgstr "No hay módulos reconocidos en el archivo core" @@ -434,7 +429,7 @@ msgstr "Tipo de reubicación no soportada" msgid "r_offset is bogus" msgstr "r_offset se encuentra inutilizable" -#: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175 +#: libdwfl/libdwflP.h:66 libelf/elf_error.c:114 libelf/elf_error.c:174 msgid "offset out of range" msgstr "desplazamiento fuera de rango" @@ -501,48 +496,54 @@ msgid "Invalid register" msgstr "Parámetro inválido" #: libdwfl/libdwflP.h:84 +#, fuzzy +#| msgid "no reference value" +msgid "Unknown register value" +msgstr "no hay valor de referencia" + +#: libdwfl/libdwflP.h:85 msgid "Error reading process memory" msgstr "" -#: libdwfl/libdwflP.h:85 +#: libdwfl/libdwflP.h:86 msgid "Couldn't find architecture of any ELF" msgstr "" -#: libdwfl/libdwflP.h:86 +#: libdwfl/libdwflP.h:87 msgid "Error parsing /proc filesystem" msgstr "" -#: libdwfl/libdwflP.h:87 +#: libdwfl/libdwflP.h:88 #, fuzzy msgid "Invalid DWARF" msgstr "DWARF inválido" -#: libdwfl/libdwflP.h:88 +#: libdwfl/libdwflP.h:89 msgid "Unsupported DWARF" msgstr "" -#: libdwfl/libdwflP.h:89 +#: libdwfl/libdwflP.h:90 msgid "Unable to find more threads" msgstr "" -#: libdwfl/libdwflP.h:90 +#: libdwfl/libdwflP.h:91 msgid "Dwfl already has attached state" msgstr "" -#: libdwfl/libdwflP.h:91 +#: libdwfl/libdwflP.h:92 msgid "Dwfl has no attached state" msgstr "" -#: libdwfl/libdwflP.h:92 +#: libdwfl/libdwflP.h:93 msgid "Unwinding not supported for this architecture" msgstr "" -#: libdwfl/libdwflP.h:93 +#: libdwfl/libdwflP.h:94 #, fuzzy msgid "Invalid argument" msgstr "Parámetro inválido" -#: libdwfl/libdwflP.h:94 +#: libdwfl/libdwflP.h:95 #, fuzzy msgid "Not an ET_CORE ELF file" msgstr "no es un archivo ELF válido" @@ -552,7 +553,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 "" @@ -603,18 +604,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: " @@ -628,257 +629,266 @@ msgstr "Autónomo" msgid ": %d" msgstr ": %d" -#: libelf/elf_error.c:67 +#: libelf/elf_error.c:66 msgid "unknown version" msgstr "versión desconocida" -#: libelf/elf_error.c:71 +#: libelf/elf_error.c:70 msgid "unknown type" msgstr "tipo desconocido" -#: libelf/elf_error.c:75 +#: libelf/elf_error.c:74 msgid "invalid `Elf' handle" msgstr "manejo`ELF' inválido" -#: libelf/elf_error.c:79 +#: libelf/elf_error.c:78 msgid "invalid size of source operand" msgstr "tamaño inválido del operando fuente" -#: libelf/elf_error.c:83 +#: libelf/elf_error.c:82 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:86 src/readelf.c:6378 #, c-format msgid "invalid encoding" msgstr "codificación inválida" -#: libelf/elf_error.c:95 +#: libelf/elf_error.c:94 msgid "invalid file descriptor" msgstr "descriptor de archivo inválido" -#: libelf/elf_error.c:99 +#: libelf/elf_error.c:98 #, fuzzy msgid "invalid ELF file data" msgstr "Archivo ELF inválido" -#: libelf/elf_error.c:103 +#: libelf/elf_error.c:102 msgid "invalid operation" msgstr "operación inválida" -#: libelf/elf_error.c:107 +#: libelf/elf_error.c:106 msgid "ELF version not set" msgstr "no se estableció la versión de ELF" -#: libelf/elf_error.c:119 +#: libelf/elf_error.c:118 msgid "invalid fmag field in archive header" msgstr "campo fmag no válido en el encabezamiento del archivo" -#: libelf/elf_error.c:123 +#: libelf/elf_error.c:122 msgid "invalid archive file" msgstr "fichero de archivo inválido" -#: libelf/elf_error.c:127 +#: libelf/elf_error.c:126 msgid "descriptor is not for an archive" msgstr "el descriptor no es de un archivo" -#: libelf/elf_error.c:131 +#: libelf/elf_error.c:130 msgid "no index available" msgstr "no hay índice disponible" -#: libelf/elf_error.c:135 +#: libelf/elf_error.c:134 msgid "cannot read data from file" msgstr "no se pueden leer los datos del archivo" -#: libelf/elf_error.c:139 +#: libelf/elf_error.c:138 msgid "cannot write data to file" msgstr "no se puede escribir los datos al archivo" -#: libelf/elf_error.c:143 +#: libelf/elf_error.c:142 msgid "invalid binary class" msgstr "clase de binario inválida" -#: libelf/elf_error.c:147 +#: libelf/elf_error.c:146 msgid "invalid section index" msgstr "índice de sección inválido" -#: libelf/elf_error.c:151 +#: libelf/elf_error.c:150 msgid "invalid operand" msgstr "operando inválido" -#: libelf/elf_error.c:155 +#: libelf/elf_error.c:154 msgid "invalid section" msgstr "sección inválida" -#: libelf/elf_error.c:163 +#: libelf/elf_error.c:162 msgid "executable header not created first" msgstr "no se ha creado primero el encabezamiento ejecutable" -#: libelf/elf_error.c:167 +#: libelf/elf_error.c:166 msgid "file descriptor disabled" msgstr "descriptor de archivo inhabilitada" -#: libelf/elf_error.c:171 +#: libelf/elf_error.c:170 msgid "archive/member file descriptor mismatch" msgstr "archivo/miembro no coincide el descriptor de archivos" -#: libelf/elf_error.c:179 +#: libelf/elf_error.c:178 msgid "cannot manipulate null section" msgstr "no se pudo manipular una sección nula" -#: libelf/elf_error.c:183 +#: libelf/elf_error.c:182 msgid "data/scn mismatch" msgstr "no coinciden los datos/scn" -#: libelf/elf_error.c:187 +#: libelf/elf_error.c:186 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:190 src/readelf.c:10266 src/readelf.c:10866 +#: src/readelf.c:10967 src/readelf.c:11149 #, c-format msgid "invalid data" msgstr "datos inválidos" -#: libelf/elf_error.c:195 +#: libelf/elf_error.c:194 msgid "unknown data encoding" msgstr "codificación de caracteres desconocida" -#: libelf/elf_error.c:199 +#: libelf/elf_error.c:198 msgid "section `sh_size' too small for data" msgstr "el tamaño de la sección `sh_size' es demasiado pequeño para los datos " -#: libelf/elf_error.c:203 +#: libelf/elf_error.c:202 msgid "invalid section alignment" msgstr "alineación de la sección inválida" -#: libelf/elf_error.c:207 +#: libelf/elf_error.c:206 msgid "invalid section entry size" msgstr "tamaño de la entrada de la sección inválida" -#: libelf/elf_error.c:211 +#: libelf/elf_error.c:210 msgid "update() for write on read-only file" msgstr "update() para escribir sobre archivo de sólo lectura" -#: libelf/elf_error.c:215 +#: libelf/elf_error.c:214 msgid "no such file" msgstr "no hay tal archivo" -#: libelf/elf_error.c:219 +#: libelf/elf_error.c:218 msgid "only relocatable files can contain section groups" msgstr "solo los archivos reubicables pueden contener grupos de sección" -#: libelf/elf_error.c:224 +#: libelf/elf_error.c:223 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" "los encabezamientos de los programas solo son permitidos en archivos " "ejecutables, archivos principales, u objetos compartidos" -#: libelf/elf_error.c:231 +#: libelf/elf_error.c:230 msgid "file has no program header" msgstr "el archivo no tiene encabezamiento de programa" -#: libelf/elf_error.c:241 +#: libelf/elf_error.c:240 #, fuzzy msgid "invalid section type" msgstr "sección inválida" -#: libelf/elf_error.c:246 +#: libelf/elf_error.c:245 #, fuzzy msgid "invalid section flags" msgstr "sección inválida" -#: libelf/elf_error.c:251 +#: libelf/elf_error.c:250 #, fuzzy msgid "section does not contain compressed data" msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" -#: libelf/elf_error.c:256 +#: libelf/elf_error.c:255 msgid "section contains compressed data" msgstr "" -#: libelf/elf_error.c:261 +#: libelf/elf_error.c:260 #, fuzzy msgid "unknown compression type" msgstr "tipo desconocido" -#: libelf/elf_error.c:266 +#: libelf/elf_error.c:265 #, fuzzy msgid "cannot compress data" msgstr "no pueden copiar datos de sección: %s" -#: libelf/elf_error.c:271 +#: libelf/elf_error.c:270 #, fuzzy msgid "cannot decompress data" msgstr "no pueden copiar datos de sección: %s" -#: src/addr2line.c:57 +#: src/addr2line.c:58 #, fuzzy msgid "Input format options:" msgstr "Opciones de selección de entrada:" -#: src/addr2line.c:59 +#: src/addr2line.c:60 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:62 #, fuzzy msgid "Output format options:" msgstr "Formato de salida:" -#: src/addr2line.c:62 +#: src/addr2line.c:63 #, fuzzy msgid "Print address before each entry" msgstr "Imprimir nombre de archivo antes de cada cadena." -#: src/addr2line.c:63 +#: src/addr2line.c:64 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:66 +#, 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:67 msgid "Also show function names" msgstr "También mostrar nombres de función" -#: src/addr2line.c:67 +#: src/addr2line.c:68 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:69 #, 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:70 msgid "Also show line table flags" msgstr "También mostrar marcas de líneas de tabla" -#: src/addr2line.c:71 +#: src/addr2line.c:72 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -#: src/addr2line.c:74 +#: src/addr2line.c:75 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" -#: src/addr2line.c:76 +#: src/addr2line.c:77 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/strings.c:78 +#: src/addr2line.c:79 +#, 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:81 src/elfcmp.c:69 src/findtextrel.c:65 src/nm.c:99 +#: src/strings.c:77 msgid "Miscellaneous:" msgstr "Misceláneos:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:89 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" @@ -886,517 +896,514 @@ msgstr "" "por defecto)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:93 msgid "[ADDR...]" msgstr "[DIREC...]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:526 msgid "Section syntax requires exactly one module" msgstr "Sintaxis de sección requiere exactamente un módulo" -#: src/addr2line.c:542 +#: src/addr2line.c:548 #, c-format msgid "offset %# lies outside section '%s'" msgstr "Compensación %# se encuentra fuera de sección '%s'" -#: src/addr2line.c:652 +#: src/addr2line.c:658 #, c-format msgid "cannot find symbol '%s'" msgstr "no se puede encontrar símbolo '%s'" -#: src/addr2line.c:657 +#: src/addr2line.c:663 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "compensación %# se encuentra fuera de contenido de '%s'" -#: src/ar.c:67 +#: src/ar.c:66 msgid "Commands:" msgstr "Comandos:" -#: src/ar.c:68 +#: src/ar.c:67 msgid "Delete files from archive." msgstr "Borrar archivos de un archivo" -#: src/ar.c:69 +#: src/ar.c:68 msgid "Move files in archive." msgstr "Desplazar ficheros en archivo." -#: src/ar.c:70 +#: src/ar.c:69 msgid "Print files in archive." msgstr "Imprimir ficheros en archivo." -#: src/ar.c:71 +#: src/ar.c:70 msgid "Quick append files to archive." msgstr "Adición rápida de ficheros para archivar" -#: src/ar.c:73 +#: src/ar.c:72 msgid "Replace existing or insert new file into archive." msgstr "Remplazar fichero existente o insertar uno nuevo en el archivo." -#: src/ar.c:74 +#: src/ar.c:73 msgid "Display content of archive." msgstr "Mostrar contenido de archivo" -#: src/ar.c:75 +#: src/ar.c:74 msgid "Extract files from archive." msgstr "extraer ficheros de un archivo" -#: src/ar.c:77 +#: src/ar.c:76 msgid "Command Modifiers:" msgstr "Modificadores de comandos:" -#: src/ar.c:78 +#: src/ar.c:77 msgid "Preserve original dates." msgstr "Preservar fechas originales." -#: src/ar.c:79 +#: src/ar.c:78 msgid "Use instance [COUNT] of name." msgstr "Usar instancia [COUNT] de nombre." -#: src/ar.c:81 +#: src/ar.c:80 msgid "Do not replace existing files with extracted files." msgstr "No remplazar los archivos existentes por los archivos extractados." -#: src/ar.c:82 +#: src/ar.c:81 msgid "Allow filename to be truncated if necessary." msgstr "Permitir truncamiento del nombre de archivo de ser necesario." -#: src/ar.c:84 +#: src/ar.c:83 msgid "Provide verbose output." msgstr "Proporcionar salida detallada" -#: src/ar.c:85 +#: src/ar.c:84 msgid "Force regeneration of symbol table." msgstr "Forzar regeneración de tabla de símbolos." -#: src/ar.c:86 +#: src/ar.c:85 msgid "Insert file after [MEMBER]." msgstr "Insertar archivo después de [MIEMBRO]." -#: src/ar.c:87 +#: src/ar.c:86 msgid "Insert file before [MEMBER]." msgstr "Introducir fichero antes de [MIEMBRO]." -#: src/ar.c:88 +#: src/ar.c:87 msgid "Same as -b." msgstr "Igual que -b." -#: src/ar.c:89 +#: src/ar.c:88 msgid "Suppress message when library has to be created." msgstr "Suprimir mensaje cuando se tenga que crear la biblioteca." -#: src/ar.c:91 +#: src/ar.c:90 msgid "Use full path for file matching." msgstr "Usar la ruta total para fichero coincidente." -#: src/ar.c:92 +#: src/ar.c:91 msgid "Update only older files in archive." msgstr "Actualizar sólo ficheros antiguos en archivo." #. Short description of program. -#: src/ar.c:98 +#: src/ar.c:97 msgid "Create, modify, and extract from archives." msgstr "Crear, modificar, y extraer de archivos." #. Strings for arguments in help texts. -#: src/ar.c:101 +#: src/ar.c:100 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" msgstr "[MIEMBRO] [CONTAR] ARCHIVO [FICHERO...]" -#: src/ar.c:180 +#: src/ar.c:179 #, c-format msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" msgstr "'a', 'b', é 'i' sólo se permiten con las opciones 'm' y 'r'." -#: src/ar.c:185 +#: src/ar.c:184 #, c-format msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" msgstr "Parámetro MIEMBRO requerido para modificadores 'a', 'b', e 'i'" -#: src/ar.c:201 +#: src/ar.c:200 #, c-format msgid "'N' is only meaningful with the 'x' and 'd' options" msgstr "'N' sólo es significativa con las opciones `x' y `d'." -#: src/ar.c:206 +#: src/ar.c:205 #, c-format msgid "COUNT parameter required" msgstr "Parámetro CONTAR requerido" -#: src/ar.c:218 +#: src/ar.c:217 #, c-format msgid "invalid COUNT parameter %s" msgstr "Parámetro CONTAR inválido %s" -#: src/ar.c:225 +#: src/ar.c:224 #, c-format msgid "'%c' is only meaningful with the 'x' option" msgstr "'%c' es sólo significativo con la opción 'x'" -#: src/ar.c:231 +#: src/ar.c:230 #, c-format msgid "archive name required" msgstr "nombre de archivo requerido" -#: src/ar.c:244 +#: src/ar.c:243 #, c-format msgid "command option required" msgstr "" -#: src/ar.c:295 +#: src/ar.c:294 #, c-format msgid "More than one operation specified" msgstr "Más de una operación especificada" -#: src/ar.c:389 +#: src/ar.c:388 #, c-format msgid "cannot open archive '%s'" msgstr "Imposible abrir el archivo '%s'" -#: src/ar.c:399 +#: src/ar.c:398 #, c-format msgid "cannot open archive '%s': %s" msgstr "Imposible abrir el archivo '%s': %s" -#: src/ar.c:403 +#: src/ar.c:402 #, c-format msgid "%s: not an archive file" msgstr "%s: no es un fichero de archivo" -#: src/ar.c:407 +#: src/ar.c:406 #, c-format msgid "cannot stat archive '%s'" msgstr "no sepuede stat el archivo '%s'" -#: src/ar.c:419 +#: src/ar.c:418 #, c-format 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:471 src/ar.c:925 src/ar.c:1131 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:477 src/ar.c:931 src/ar.c:1139 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:485 src/ranlib.c:147 #, c-format msgid "cannot stat '%s'" msgstr "no se puede stat '%s'" -#: src/ar.c:589 +#: src/ar.c:587 #, 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:630 #, c-format msgid "cannot open %.*s" msgstr " Imposible abrir %.*s" -#: src/ar.c:654 +#: src/ar.c:652 #, c-format msgid "failed to write %s" msgstr "Falló al escribir %s" -#: src/ar.c:666 +#: src/ar.c:664 #, c-format msgid "cannot change mode of %s" msgstr "No se puede cambiar el modo de %s" -#: src/ar.c:682 +#: src/ar.c:680 #, 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:726 #, 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:762 src/ar.c:1016 src/ar.c:1419 src/ranlib.c:221 #, c-format msgid "cannot create new file" msgstr "no sepuede crear fichero nuevo" -#: src/ar.c:1225 +#: src/ar.c:1221 #, c-format msgid "position member %s not found" msgstr "no se encuentra miembro de posición %s " -#: src/ar.c:1235 +#: src/ar.c:1231 #, 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:1260 src/objdump.c:240 #, c-format msgid "cannot open %s" msgstr "no sepuede abrir %s" -#: src/ar.c:1269 +#: src/ar.c:1265 #, c-format msgid "cannot stat %s" msgstr "no sepuede efectuar stat %s" -#: src/ar.c:1275 +#: src/ar.c:1271 #, c-format msgid "%s is no regular file" msgstr " %s no es un fichero ordinario " -#: src/ar.c:1288 +#: src/ar.c:1284 #, 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:1304 #, c-format msgid "cannot read %s: %s" msgstr "no sepuede leer %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1479 #, fuzzy, c-format msgid "cannot represent ar_date" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1489 +#: src/ar.c:1485 #, fuzzy, c-format msgid "cannot represent ar_uid" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1495 +#: src/ar.c:1491 #, fuzzy, c-format msgid "cannot represent ar_gid" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1501 +#: src/ar.c:1497 #, 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:1503 #, fuzzy, c-format msgid "cannot represent ar_size" msgstr "no sepuede abrir %s" -#: src/arlib-argp.c:32 +#: src/arlib-argp.c:31 msgid "Use zero for uid, gid, and date in archive members." msgstr "" -#: src/arlib-argp.c:34 +#: src/arlib-argp.c:33 msgid "Use actual uid, gid, and date in archive members." msgstr "" -#: src/arlib-argp.c:63 +#: src/arlib-argp.c:62 #, c-format msgid "%s (default)" msgstr "" #. The archive is too big. -#: src/arlib.c:213 +#: src/arlib.c:212 #, c-format msgid "the archive '%s' is too large" msgstr " El archivo '%s' es demasiado grande" -#: src/arlib.c:226 +#: src/arlib.c:225 #, c-format 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/readelf.c:158 +#: src/elfclassify.c:979 src/elfcompress.c:1358 src/elflint.c:76 +#: src/readelf.c:160 msgid "FILE..." msgstr "FICHERO..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1435,15 +1442,15 @@ msgid "" "change the exit status." msgstr "" -#: src/elfcmp.c:60 +#: src/elfcmp.c:59 msgid "Control options:" msgstr "Opciones de control:" -#: src/elfcmp.c:62 +#: src/elfcmp.c:61 msgid "Output all differences, not just the first" msgstr "" -#: src/elfcmp.c:63 +#: src/elfcmp.c:62 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" @@ -1451,218 +1458,218 @@ msgstr "" "Tratamiento de control de brechas en segmento cargables [ignorar|" "coincidencia] (por defecto: ignorar)" -#: src/elfcmp.c:65 +#: src/elfcmp.c:64 msgid "Ignore permutation of buckets in SHT_HASH section" msgstr "Ignorar permutación de cubetas en sección SHT_HASH" -#: src/elfcmp.c:67 +#: src/elfcmp.c:66 msgid "Ignore differences in build ID" msgstr "" -#: src/elfcmp.c:68 +#: src/elfcmp.c:67 msgid "Output nothing; yield exit status only" msgstr "Nada de salida; producir estado de salida únicamente" #. Short description of program. -#: src/elfcmp.c:75 +#: src/elfcmp.c:74 msgid "Compare relevant parts of two ELF files for equality." msgstr "Comparar partes relevantes de dos ficheros ELF para igualdad." #. Strings for arguments in help texts. -#: src/elfcmp.c:79 +#: src/elfcmp.c:78 msgid "FILE1 FILE2" msgstr "FICHERO1 FICHERO2" -#: src/elfcmp.c:141 +#: src/elfcmp.c:140 msgid "Invalid number of parameters.\n" msgstr "Número inválido de parámetros.\n" -#: src/elfcmp.c:172 src/elfcmp.c:177 +#: src/elfcmp.c:171 src/elfcmp.c:176 #, c-format msgid "cannot get ELF header of '%s': %s" msgstr "no se puede obtener encabezamiento de '%s': %s" -#: src/elfcmp.c:203 +#: src/elfcmp.c:202 #, c-format msgid "%s %s diff: ELF header" msgstr "%s %s diff: encabezamiento ELF" -#: src/elfcmp.c:210 src/elfcmp.c:213 +#: src/elfcmp.c:209 src/elfcmp.c:212 #, c-format msgid "cannot get section count of '%s': %s" msgstr "no se puede obtener un conteo de sección en '%s': %s" -#: src/elfcmp.c:218 +#: src/elfcmp.c:217 #, c-format msgid "%s %s diff: section count" msgstr "%s %s diff: conteo de sección" -#: src/elfcmp.c:225 src/elfcmp.c:228 +#: src/elfcmp.c:224 src/elfcmp.c:227 #, c-format msgid "cannot get program header count of '%s': %s" msgstr "no se puede obtener un conteo de encabezado de programa de '%s': %s" -#: src/elfcmp.c:233 +#: src/elfcmp.c:232 #, c-format msgid "%s %s diff: program header count" msgstr "%s %s diff: encabezado de programa" -#: src/elfcmp.c:241 src/elfcmp.c:244 +#: src/elfcmp.c:240 src/elfcmp.c:243 #, fuzzy, c-format msgid "cannot get hdrstrndx of '%s': %s" msgstr "no se puede obtener encabezamiento de '%s': %s" -#: src/elfcmp.c:249 +#: src/elfcmp.c:248 #, fuzzy, c-format msgid "%s %s diff: shdr string index" msgstr "%s %s diff: conteo de sección" -#: src/elfcmp.c:307 +#: src/elfcmp.c:306 #, fuzzy, c-format msgid "%s %s differ: section [%zu], [%zu] name" msgstr "%s %s differ: sección [%zu,%zu] contenido '%s'" -#: src/elfcmp.c:330 +#: src/elfcmp.c:329 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' header" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:338 src/elfcmp.c:344 +#: src/elfcmp.c:337 src/elfcmp.c:343 #, c-format msgid "cannot get content of section %zu in '%s': %s" msgstr "No se puede obtener contenido de sección %zu en '%s': %s" -#: src/elfcmp.c:353 +#: src/elfcmp.c:352 #, fuzzy, c-format msgid "symbol table [%zu] in '%s' has zero sh_entsize" msgstr "" "\n" "La tabla de símbolos [%2u] '%s' contiene entrada %u:\n" -#: src/elfcmp.c:365 src/elfcmp.c:371 +#: src/elfcmp.c:364 src/elfcmp.c:370 #, c-format msgid "cannot get symbol in '%s': %s" msgstr "No se puede obtener símbolo en '%s': %s" -#: src/elfcmp.c:393 +#: src/elfcmp.c:392 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "%s %s differ: tabla de símbolos [%zu]" -#: src/elfcmp.c:396 +#: src/elfcmp.c:395 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "%s %s differ: tabla de símbolos [%zu,%zu]" -#: src/elfcmp.c:443 src/elfcmp.c:513 +#: src/elfcmp.c:442 src/elfcmp.c:512 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:451 +#: src/elfcmp.c:450 #, fuzzy, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "No se puede obtener contenido de sección %zu en '%s': %s" -#: src/elfcmp.c:462 +#: src/elfcmp.c:461 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:470 +#: src/elfcmp.c:469 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:485 +#: src/elfcmp.c:484 #, fuzzy, c-format msgid "%s %s differ: build ID length" msgstr "%s %s differ: brecha" -#: src/elfcmp.c:493 +#: src/elfcmp.c:492 #, fuzzy, c-format msgid "%s %s differ: build ID content" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:502 +#: src/elfcmp.c:501 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:543 +#: src/elfcmp.c:542 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:547 +#: src/elfcmp.c:546 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "%s %s differ: sección [%zu,%zu] contenido '%s'" -#: src/elfcmp.c:562 +#: src/elfcmp.c:561 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "%s %s differ: cantidad desigual de secciones importantes" -#: src/elfcmp.c:595 src/elfcmp.c:600 +#: src/elfcmp.c:594 src/elfcmp.c:599 #, c-format msgid "cannot load data of '%s': %s" msgstr "no se pueden cargar los datos de '%s': %s" -#: src/elfcmp.c:619 src/elfcmp.c:625 +#: src/elfcmp.c:618 src/elfcmp.c:624 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "" "no se puede obtener entrada de encabezamiento de programa %d de '%s': %s" -#: src/elfcmp.c:631 +#: src/elfcmp.c:630 #, c-format msgid "%s %s differ: program header %d" msgstr "%s %s differ: encabezamiento de programa %d" -#: src/elfcmp.c:655 +#: src/elfcmp.c:654 #, c-format msgid "%s %s differ: gap" msgstr "%s %s differ: brecha" -#: src/elfcmp.c:706 +#: src/elfcmp.c:705 #, c-format 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/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:733 src/findtextrel.c:194 src/nm.c:363 src/ranlib.c:140 +#: src/size.c:271 src/strings.c:184 src/strip.c:1040 src/strip.c:1077 +#: src/unstrip.c:2194 src/unstrip.c:2223 #, 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:737 src/findtextrel.c:213 src/ranlib.c:157 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "No puede crear descriptor ELF para '%s': %s" -#: src/elfcmp.c:743 +#: src/elfcmp.c:742 #, c-format 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:760 src/findtextrel.c:384 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/elfcmp.c:771 +#: src/elfcmp.c:770 #, c-format msgid "cannot get content of section %zu: %s" msgstr "No se puede obtener contenido de sección %zu: %s" -#: src/elfcmp.c:781 src/elfcmp.c:795 +#: src/elfcmp.c:780 src/elfcmp.c:794 #, c-format 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:305 src/unstrip.c:116 #, c-format msgid "-o option specified twice" msgstr "opción -o especificada dos veces" @@ -1678,71 +1685,71 @@ msgid "unknown compression type '%s'" msgstr "tipo desconocido" #. We need at least one input file. -#: src/elfcompress.c:145 src/elfcompress.c:1345 +#: src/elfcompress.c:145 src/elfcompress.c:1369 #, fuzzy, c-format 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:1373 #, 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'" -#: src/elfcompress.c:1307 +#: src/elfcompress.c:1331 #, fuzzy msgid "Place (de)compressed output into FILE" msgstr "Colocar la salida obtenida en FICHERO" -#: src/elfcompress.c:1310 +#: src/elfcompress.c:1334 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" "gnu' (.zdebug GNU style compression, 'gnu' is an alias)" msgstr "" -#: src/elfcompress.c:1313 +#: src/elfcompress.c:1337 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" -#: src/elfcompress.c:1316 +#: src/elfcompress.c:1340 msgid "Print a message for each section being (de)compressed" msgstr "" -#: src/elfcompress.c:1319 +#: src/elfcompress.c:1343 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" msgstr "" -#: src/elfcompress.c:1322 src/strip.c:93 +#: src/elfcompress.c:1346 src/strip.c:92 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "Relaja algunas reglas para manejar ficheros ELF rotos" -#: src/elfcompress.c:1325 +#: src/elfcompress.c:1349 #, fuzzy msgid "Be silent when a section cannot be compressed" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#: src/elfcompress.c:1335 +#: src/elfcompress.c:1359 msgid "Compress or decompress sections in an ELF file." msgstr "" -#: src/elflint.c:63 +#: src/elflint.c:62 msgid "Be extremely strict, flag level 2 features." msgstr "Sea extremadamente estricto, característica de marca de nivel 2." -#: src/elflint.c:64 +#: src/elflint.c:63 msgid "Do not print anything if successful" msgstr "No imprime nada si está correcto" -#: src/elflint.c:65 +#: src/elflint.c:64 msgid "Binary is a separate debuginfo file" msgstr "Binario es un archivo debuginfo independiente" -#: src/elflint.c:67 +#: src/elflint.c:66 msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" @@ -1751,174 +1758,174 @@ msgstr "" "roto de alguna forma" #. Short description of program. -#: src/elflint.c:73 +#: src/elflint.c:72 msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "Chequeo minucioso de ficheros ELF de acuerdo con gABI/psABI " -#: src/elflint.c:154 src/readelf.c:368 +#: src/elflint.c:153 src/readelf.c:391 #, fuzzy, c-format msgid "cannot open input file '%s'" msgstr "no se puede abrir el fichero de entrada" -#: src/elflint.c:161 +#: src/elflint.c:160 #, fuzzy, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" msgstr "no se puede crear descriptor ELF: %s\n" -#: src/elflint.c:180 +#: src/elflint.c:179 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "error al cerrar el descriptor ELF: %s\n" -#: src/elflint.c:184 +#: src/elflint.c:183 msgid "No errors" msgstr "No hay errores" -#: src/elflint.c:219 src/readelf.c:577 +#: src/elflint.c:218 src/readelf.c:603 msgid "Missing file name.\n" msgstr "Falta el nombre de archivo.\n" -#: src/elflint.c:284 +#: src/elflint.c:283 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " error al liberar descriptor sub-ELF: %s\n" #. We cannot do anything. -#: src/elflint.c:292 +#: src/elflint.c:291 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "No es un fichero ELF - tiene los bytes mágicos errados en el inicio\n" -#: src/elflint.c:357 +#: src/elflint.c:356 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d es una clase desconocida\n" -#: src/elflint.c:362 +#: src/elflint.c:361 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d es una codificación de datos desconocida\n" -#: src/elflint.c:366 +#: src/elflint.c:365 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "" "número de versión de encabezamiento ELF desconocido e_ident[%d] == %d\n" -#: src/elflint.c:374 +#: src/elflint.c:373 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "Sistema operativo OS ABI e_ident[%d] == '%s' incompatible\n" -#: src/elflint.c:380 +#: src/elflint.c:379 #, fuzzy, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "Versión incompatible ABI e_ident[%d] == %d\n" -#: src/elflint.c:385 +#: src/elflint.c:384 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] no es cero\n" -#: src/elflint.c:390 +#: src/elflint.c:389 #, c-format msgid "unknown object file type %d\n" msgstr "tipo de fichero objeto desconocido %d\n" -#: src/elflint.c:397 +#: src/elflint.c:396 #, c-format msgid "unknown machine type %d\n" msgstr "tipo de máquina desconocido %d\n" -#: src/elflint.c:401 +#: src/elflint.c:400 #, c-format msgid "unknown object file version\n" msgstr "versión de fichero objeto desconocido\n" -#: src/elflint.c:407 +#: src/elflint.c:406 #, c-format msgid "invalid program header offset\n" msgstr "Compensación de encabezamiento de programa inválida\n" -#: src/elflint.c:409 +#: src/elflint.c:408 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "tanto los ejecutables como los DSO no pueden tener compensación de " "encabezamiento de programa cero\n" -#: src/elflint.c:413 +#: src/elflint.c:412 #, c-format msgid "invalid number of program header entries\n" msgstr "cantidad no válida de entradas del encabezamiento del programa\n" -#: src/elflint.c:421 +#: src/elflint.c:420 #, c-format msgid "invalid section header table offset\n" msgstr "compensación de sección de tabla de encabezamiento inválida\n" -#: src/elflint.c:424 +#: src/elflint.c:423 #, c-format msgid "section header table must be present\n" msgstr "tabla de encabezamiento de sección debe estar presente\n" -#: src/elflint.c:438 +#: src/elflint.c:437 #, c-format msgid "invalid number of section header table entries\n" msgstr "" "cantidad no válida de entradas en la tabla del encabezamiento de sección\n" -#: src/elflint.c:455 +#: src/elflint.c:454 #, c-format msgid "invalid section header index\n" msgstr "Índice de sección de encabezamiento inválido\n" -#: src/elflint.c:473 +#: src/elflint.c:472 #, c-format msgid "Can only check %u headers, shnum was %u\n" msgstr "" -#: src/elflint.c:487 +#: src/elflint.c:486 #, c-format msgid "invalid number of program header table entries\n" msgstr "cantidad no válida de entradas de tabla de encabezado del programa\n" -#: src/elflint.c:504 +#: src/elflint.c:503 #, c-format msgid "Can only check %u headers, phnum was %u\n" msgstr "" -#: src/elflint.c:509 +#: src/elflint.c:508 #, c-format msgid "invalid machine flags: %s\n" msgstr "Indicadores de máquina inválidos: %s\n" -#: src/elflint.c:516 src/elflint.c:533 +#: src/elflint.c:515 src/elflint.c:532 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "tamaño inválido del encabezamiento ELF: %hd\n" -#: src/elflint.c:519 src/elflint.c:536 +#: src/elflint.c:518 src/elflint.c:535 #, c-format msgid "invalid program header size: %hd\n" msgstr "tamaño inválido del encabezamiento del programa: %hd\n" -#: src/elflint.c:522 src/elflint.c:539 +#: src/elflint.c:521 src/elflint.c:538 #, c-format msgid "invalid program header position or size\n" msgstr "tamaño o posición inválidos del encabezamiento del programa\n" -#: src/elflint.c:525 src/elflint.c:542 +#: src/elflint.c:524 src/elflint.c:541 #, c-format msgid "invalid section header size: %hd\n" msgstr "tamaño inválido del encabezamiento de sección: %hd\n" -#: src/elflint.c:528 src/elflint.c:545 +#: src/elflint.c:527 src/elflint.c:544 #, c-format msgid "invalid section header position or size\n" msgstr "tamaño o posición no válidos del encabezamiento de sección\n" -#: src/elflint.c:590 +#: src/elflint.c:589 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1927,7 +1934,7 @@ msgstr "" "sección [%2d] '%s': sección con la bandera SHF_GROUP no es parte de una " "sección de grupo\n" -#: src/elflint.c:594 +#: src/elflint.c:593 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1935,14 +1942,14 @@ msgstr "" "sección [%2d] '%s': el grupo de sección [%2zu] '%s' no precede al miembro de " "grupo\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:609 src/elflint.c:1497 src/elflint.c:1548 src/elflint.c:1654 +#: src/elflint.c:1990 src/elflint.c:2316 src/elflint.c:2942 src/elflint.c:3105 +#: src/elflint.c:3253 src/elflint.c:3455 src/elflint.c:4464 #, 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" -#: src/elflint.c:623 src/elflint.c:1662 +#: src/elflint.c:622 src/elflint.c:1661 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1951,7 +1958,7 @@ msgstr "" "sección [%2d] '%s': nombrado como una tabla de cadena para la sección [%2d] " "'%s' pero el tipo no es SHT_STRTAB\n" -#: src/elflint.c:646 +#: src/elflint.c:645 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1960,13 +1967,13 @@ msgstr "" "sección [%2d] '%s': la tabla de símbolo no puede tener más de una sección de " "índice extendido\n" -#: src/elflint.c:658 +#: src/elflint.c:657 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "" "sección [%2u] '%s': el tamaño de la entrada no coincide con ElfXX_Sym\n" -#: src/elflint.c:662 +#: src/elflint.c:661 #, fuzzy, c-format msgid "" "section [%2u] '%s': number of local entries in 'st_info' larger than table " @@ -1975,33 +1982,33 @@ msgstr "" "Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de " "archivo\n" -#: src/elflint.c:671 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "Sección [%2d] '%s': no se puede obtener símbolo %d: %s\n" -#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685 -#: src/elflint.c:688 src/elflint.c:691 +#: src/elflint.c:675 src/elflint.c:678 src/elflint.c:681 src/elflint.c:684 +#: src/elflint.c:687 src/elflint.c:690 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "Sección [%2d] '%s': '%s' en la entrada zeroth no es cero\n" -#: src/elflint.c:694 +#: src/elflint.c:693 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "sección [%2d] '%s': XINDEX en la entrada zeroth no es cero\n" -#: src/elflint.c:704 +#: src/elflint.c:703 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "sección [%2d] '%s': no es posible obtener el símbolo %zu: %s\n" -#: src/elflint.c:713 +#: src/elflint.c:712 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "sección [%2d] '%s': símbolo %zu: valor de nombre inválido\n" -#: src/elflint.c:728 +#: src/elflint.c:727 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): too large section index but no extended " @@ -2010,7 +2017,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: el índice de sección es demasiado extenso, " "pero no la sección extendida de la sección de índice\n" -#: src/elflint.c:734 +#: src/elflint.c:733 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): XINDEX used for index which would fit " @@ -2020,27 +2027,27 @@ msgstr "" "caber en st_shndx (%)\n" #. || sym->st_shndx > SHN_HIRESERVE always false -#: src/elflint.c:746 +#: src/elflint.c:745 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): invalid section index\n" msgstr "sección [%2d] '%s': símbolo %zu: índice de sección inválido\n" -#: src/elflint.c:754 +#: src/elflint.c:753 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown type\n" msgstr "sección [%2d] '%s': símbolo %zu: tipo desconocido\n" -#: src/elflint.c:760 +#: src/elflint.c:759 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown symbol binding\n" msgstr "sección [%2d] '%s': símbolo %zu: asociación de símbolo desconocida\n" -#: src/elflint.c:765 +#: src/elflint.c:764 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unique symbol not of object type\n" msgstr "Sección [%2d] '%s': símbolo %zu: símbolo único no de tipo de objeto\n" -#: src/elflint.c:773 +#: src/elflint.c:772 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): COMMON only allowed in relocatable " @@ -2049,26 +2056,26 @@ msgstr "" "sección [%2d] '%s': símbolo %zu: COMMON solo es permitido en archivos " "realojables\n" -#: src/elflint.c:777 +#: src/elflint.c:776 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local COMMON symbols are nonsense\n" msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolos locales COMMON no tienen sentido\n" -#: src/elflint.c:781 +#: src/elflint.c:780 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): function in COMMON section is nonsense\n" msgstr "" "Sección [%2d] '%s': símbolo %zu: función en sección COMMON no tiene sentido\n" -#: src/elflint.c:832 +#: src/elflint.c:831 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): st_value out of bounds\n" msgstr "sección [%2d] '%s': símbolo %zu: st_value fuera de límites\n" -#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912 +#: src/elflint.c:837 src/elflint.c:862 src/elflint.c:911 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s) does not fit completely in referenced " @@ -2077,7 +2084,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu no se ajusta totalmente en la sección [%2d] " "'%s'\n" -#: src/elflint.c:847 +#: src/elflint.c:846 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): referenced section [%2d] '%s' does not " @@ -2086,7 +2093,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: sección de referencia [%2d] '%s' no tiene " "establecida bandera SHF_TLS\n" -#: src/elflint.c:857 src/elflint.c:905 +#: src/elflint.c:856 src/elflint.c:904 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value out of bounds of referenced " @@ -2095,7 +2102,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: st_value fuera de límites de sección de " "referencia [%2d] '%s'\n" -#: src/elflint.c:884 +#: src/elflint.c:883 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but no TLS program header " @@ -2104,7 +2111,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de " "programa TLS\n" -#: src/elflint.c:890 +#: src/elflint.c:889 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but couldn't get TLS program " @@ -2113,7 +2120,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de " "programa TLS\n" -#: src/elflint.c:898 +#: src/elflint.c:897 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value short of referenced section " @@ -2122,7 +2129,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: st_value falta sección de referencia [%2d] " "'%s'\n" -#: src/elflint.c:925 +#: src/elflint.c:924 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local symbol outside range described in " @@ -2131,7 +2138,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo local fuera del rango descrito en " "sh_info\n" -#: src/elflint.c:932 +#: src/elflint.c:931 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): non-local symbol outside range " @@ -2140,12 +2147,12 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo non-local fuera del rango descrito " "en sh_info\n" -#: src/elflint.c:939 +#: src/elflint.c:938 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): non-local section symbol\n" msgstr "Sección [%2d] '%s': símbolo %zu: símbolo de sección non-local\n" -#: src/elflint.c:989 +#: src/elflint.c:988 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -2154,7 +2161,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección " "errada [%2d]\n" -#: src/elflint.c:996 +#: src/elflint.c:995 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -2166,7 +2173,7 @@ msgstr "" #. This test is more strict than the psABIs which #. usually allow the symbol to be in the middle of #. the .got section, allowing negative offsets. -#: src/elflint.c:1012 +#: src/elflint.c:1011 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -2175,7 +2182,7 @@ msgstr "" "Sección [%2d] '%s': valor del símbolo _GLOBAL_OFFSET_TABLE_ %# no " "coincide con dirección de sección %s %#\n" -#: src/elflint.c:1019 +#: src/elflint.c:1018 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -2184,7 +2191,7 @@ msgstr "" "Sección [%2d] '%s': tamaño de símbolo _GLOBAL_OFFSET_TABLE_ % no " "coincide con tamaño de sección %s %\n" -#: src/elflint.c:1027 +#: src/elflint.c:1026 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -2193,7 +2200,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ presente, pero no. sección " "got\n" -#: src/elflint.c:1043 +#: src/elflint.c:1042 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -2202,7 +2209,7 @@ msgstr "" "sección [%2d] '%s': Valor de símbolo _DYNAMIC_ %# no coincide con la " "dirección de segmento%#\n" -#: src/elflint.c:1050 +#: src/elflint.c:1049 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -2211,7 +2218,7 @@ msgstr "" "Sección [%2d] '%s': tamaño de símbolo _DYNAMIC % no coincide con " "tamaño de segmento %\n" -#: src/elflint.c:1063 +#: src/elflint.c:1062 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): symbol in dynamic symbol table with non-" @@ -2220,29 +2227,29 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo en tabla de símbolos dinámicos sin " "visibilidad predeterminada\n" -#: src/elflint.c:1067 +#: src/elflint.c:1066 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown bit set in st_other\n" msgstr "" "Sección [%2d] '%s': símbolo %zu: bit desconocido establecido en st_other\n" -#: src/elflint.c:1105 +#: src/elflint.c:1104 #, fuzzy, 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" -#: src/elflint.c:1121 +#: src/elflint.c:1120 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "Sección [%2d] '%s': DT_RELCOUNT utilizada para esta sección RELA\n" -#: src/elflint.c:1132 src/elflint.c:1185 +#: src/elflint.c:1131 src/elflint.c:1184 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" "Sección [%2d] '%s': valor DT_RELCOUNT %d demasiado alto para esta sección\n" -#: src/elflint.c:1157 src/elflint.c:1210 +#: src/elflint.c:1156 src/elflint.c:1209 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -2251,7 +2258,7 @@ msgstr "" "Sección [%2d] '%s': reubicaciones relativas después de que el %d de índice " "haya sido especificado por DT_RELCOUNT\n" -#: src/elflint.c:1163 src/elflint.c:1216 +#: src/elflint.c:1162 src/elflint.c:1215 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -2260,50 +2267,50 @@ msgstr "" "Sección [%2d] '%s': reubicación no-relativa en %zu de índice; DT_RELCOUNT " "especificado %d reubicaciones relativas\n" -#: src/elflint.c:1175 +#: src/elflint.c:1174 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "sección [%2d] '%s': DT_RELACOUNT utilizado para esta sección REL\n" -#: src/elflint.c:1258 +#: src/elflint.c:1257 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "Sección [%2d] '%s': índice de sección de destino inválido\n" -#: src/elflint.c:1270 +#: src/elflint.c:1269 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "Sección [%2d] '%s': tipo de sección de destino inválido\n" -#: src/elflint.c:1278 +#: src/elflint.c:1277 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "Sección [%2d] '%s': sh_info debe ser cero\n" -#: src/elflint.c:1286 +#: src/elflint.c:1285 #, fuzzy, c-format msgid "" "section [%2d] '%s': no relocations for merge-able string sections possible\n" msgstr "" "Sección [%2d] '%s': no reubicaciones para secciones de fusión posibles\n" -#: src/elflint.c:1294 +#: src/elflint.c:1293 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Rela\n" -#: src/elflint.c:1354 +#: src/elflint.c:1353 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "Reubicación de bandera pero no hay segmento de sólo lectura\n" -#: src/elflint.c:1381 +#: src/elflint.c:1380 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "Sección [%2d] '%s': reubicación %zu: tipo inválido\n" -#: src/elflint.c:1389 +#: src/elflint.c:1388 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -2312,12 +2319,12 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: tipo de reubicación inválido para el " "tipo de archivo\n" -#: src/elflint.c:1397 +#: src/elflint.c:1396 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "Sección [%2d] '%s': reubicación %zu: índice de símbolo inválido\n" -#: src/elflint.c:1415 +#: src/elflint.c:1414 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -2326,12 +2333,12 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: sólo el símbolo '_GLOBAL_OFFSET_TABLE_' " "puede utilizarse con %s\n" -#: src/elflint.c:1432 +#: src/elflint.c:1431 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "Sección [%2d] '%s': reubicación %zu: compensación fuera de límites\n" -#: src/elflint.c:1447 +#: src/elflint.c:1446 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -2340,7 +2347,7 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: reubicación de copia con símbolo de " "tipo %s\n" -#: src/elflint.c:1468 +#: src/elflint.c:1467 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -2349,24 +2356,24 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: sección de sólo-lectura modificada, " "pero no se estableció bandera de reubicación\n" -#: src/elflint.c:1483 +#: src/elflint.c:1482 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" "Sección [%2d] '%s': las reubicaciones se hacen con datos cargados y " "descargados\n" -#: src/elflint.c:1523 src/elflint.c:1574 +#: src/elflint.c:1522 src/elflint.c:1573 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "Sección [%2d] '%s': no puede obtener reubicación %zu: %s\n" -#: src/elflint.c:1650 +#: src/elflint.c:1649 #, c-format msgid "more than one dynamic section present\n" msgstr "más de una sección dinámica presente\n" -#: src/elflint.c:1668 +#: src/elflint.c:1667 #, fuzzy, c-format msgid "" "section [%2d]: referenced as string table for section [%2d] '%s' but section " @@ -2375,44 +2382,44 @@ msgstr "" "sección [%2d] '%s': nombrado como una tabla de cadena para la sección [%2d] " "'%s' pero el tipo no es SHT_STRTAB\n" -#: src/elflint.c:1676 +#: src/elflint.c:1675 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" "Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Dyn\n" -#: src/elflint.c:1681 src/elflint.c:1970 +#: src/elflint.c:1680 src/elflint.c:1969 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "Sección [%2d] '%s': sh_info no es cero\n" -#: src/elflint.c:1691 +#: src/elflint.c:1690 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" "Sección [%2d] '%s': no puede obtener entrada de sección dinámica %zu: %s\n" -#: src/elflint.c:1699 +#: src/elflint.c:1698 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "Sección [%2d] '%s': entradas non-DT_NULL siguen a la entrada DT_NULL\n" -#: src/elflint.c:1706 +#: src/elflint.c:1705 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "Sección [%2d] '%s': entrada %zu: etiqueta desconocida\n" -#: src/elflint.c:1717 +#: src/elflint.c:1716 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "Sección [%2d] '%s': entrada %zu: más de una entrada con etiqueta %s\n" -#: src/elflint.c:1727 +#: src/elflint.c:1726 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "Sección [%2d] '%s': entrada %zu: nivel 2 etiqueta %s utilizada\n" -#: src/elflint.c:1745 +#: src/elflint.c:1744 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -2420,7 +2427,7 @@ msgstr "" "Sección [%2d] '%s': entrada %zu: el valor DT_PLTREL debe ser DT_REL or " "DT_RELA\n" -#: src/elflint.c:1758 +#: src/elflint.c:1757 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -2429,14 +2436,14 @@ msgstr "" "Sección [%2d] '%s': entrada %zu: puntero no coincide con dirección de " "sección [%2d] '%s' al que hace referencia sh_link\n" -#: src/elflint.c:1801 +#: src/elflint.c:1800 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" "Sección [%2d] '%s': entrada %zu: valor %s debe apuntar en segmento cargado\n" -#: src/elflint.c:1816 +#: src/elflint.c:1815 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -2445,46 +2452,46 @@ msgstr "" "sección [%2d] '%s': entrada %zu: valor %s debe ser compensación válida en " "sección [%2d] '%s'\n" -#: src/elflint.c:1836 src/elflint.c:1864 +#: src/elflint.c:1835 src/elflint.c:1863 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "Sección [%2d] '%s': contiene entrada %s pero no %s\n" -#: src/elflint.c:1848 +#: src/elflint.c:1847 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "Sección [%2d] '%s': etiqueta obligatoria %s no está presente\n" -#: src/elflint.c:1857 +#: src/elflint.c:1856 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "Sección [%2d] '%s': no hay sección de dispersión presente\n" -#: src/elflint.c:1872 src/elflint.c:1879 +#: src/elflint.c:1871 src/elflint.c:1878 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "Sección [%2d] '%s': no todas las %s, %s, y %s están presentes\n" -#: src/elflint.c:1889 src/elflint.c:1893 +#: src/elflint.c:1888 src/elflint.c:1892 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" "Sección [%2d] '%s': etiqueta %s faltante en DSO marcada durante el pre-" "enlace\n" -#: src/elflint.c:1899 +#: src/elflint.c:1898 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" "Sección [%2d] '%s': archivo no-DSO marcado como dependencia durante el pre-" "enlace\n" -#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922 +#: src/elflint.c:1909 src/elflint.c:1913 src/elflint.c:1917 src/elflint.c:1921 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "Sección [%2d] '%s': etiqueta %s faltante en pre-enlace ejecutable\n" -#: src/elflint.c:1934 +#: src/elflint.c:1933 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -2492,37 +2499,37 @@ msgstr "" "Sección [%2d] '%s': sólo los archivos reubicables pueden tener índice de " "sección extendido\n" -#: src/elflint.c:1944 +#: src/elflint.c:1943 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" "Sección [%2d] '%s': índice de sección extendido no para tabla de símbolos\n" -#: src/elflint.c:1948 +#: src/elflint.c:1947 #, fuzzy, c-format msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n" msgstr "" "Sección [%2d] '%s': índice de sección extendido no para tabla de símbolos\n" -#: src/elflint.c:1953 +#: src/elflint.c:1952 #, c-format msgid "cannot get data for symbol section\n" msgstr "no se puede obtener sección para símbolos\n" -#: src/elflint.c:1956 +#: src/elflint.c:1955 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "Sección [%2d] '%s': tamaño de entrada no coincide con Elf32_Word\n" -#: src/elflint.c:1965 +#: src/elflint.c:1964 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" "Sección [%2d] '%s': tabla de índice extendida demasiado pequeña para tabla " "de símbolos\n" -#: src/elflint.c:1980 +#: src/elflint.c:1979 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -2531,24 +2538,24 @@ msgstr "" "Sección [%2d] '%s': índice de sección extendida en sección [%2zu] '%s' se " "refiere a la misma tabla de símbolos\n" -#: src/elflint.c:1998 +#: src/elflint.c:1997 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "símbolo 0 debe tener índice de sección extendida cero\n" -#: src/elflint.c:2010 +#: src/elflint.c:2009 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "no puede obtener datos para símbolo %zu\n" -#: src/elflint.c:2015 +#: src/elflint.c:2014 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" "índice de sección extendida es % pero índice de símbolo no es " "XINDEX\n" -#: src/elflint.c:2032 src/elflint.c:2089 +#: src/elflint.c:2031 src/elflint.c:2088 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" @@ -2556,42 +2563,42 @@ msgstr "" "Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es " "%ld, se espera %ld)\n" -#: src/elflint.c:2046 src/elflint.c:2103 +#: src/elflint.c:2045 src/elflint.c:2102 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "Sección [%2d] '%s': índice de la cadena es demasiado grande\n" -#: src/elflint.c:2060 src/elflint.c:2117 +#: src/elflint.c:2059 src/elflint.c:2116 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cubetas de dispersión %zu fuera de " "límites\n" -#: src/elflint.c:2070 +#: src/elflint.c:2069 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cadena de dispersión %zu fuera de límites\n" -#: src/elflint.c:2127 +#: src/elflint.c:2126 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cadena de dispersión % fuera de " "límites\n" -#: src/elflint.c:2140 +#: src/elflint.c:2139 #, fuzzy, c-format msgid "section [%2d] '%s': not enough data\n" msgstr "Sección [%2d] '%s': no puede obtener datos: %s\n" -#: src/elflint.c:2152 +#: src/elflint.c:2151 #, fuzzy, c-format msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n" msgstr "Sección [%2d] '%s': tamaño de bitmask no es potencia de 2: %u\n" -#: src/elflint.c:2168 +#: src/elflint.c:2167 #, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " @@ -2600,14 +2607,14 @@ msgstr "" "Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es " "%ld, se espera al menos least%ld)\n" -#: src/elflint.c:2177 +#: src/elflint.c:2176 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" "Sección [%2d] '%s': segundo cambio de función de dispersión demasiado " "grande: %u\n" -#: src/elflint.c:2211 +#: src/elflint.c:2210 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -2615,7 +2622,7 @@ msgstr "" "Sección [%2d] '%s': cadena de dispersión para cubetas %zu inferior a " "polarización de índice de símbolo\n" -#: src/elflint.c:2232 +#: src/elflint.c:2231 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -2624,7 +2631,7 @@ msgstr "" "Sección [%2d] '%s': el símbolo %u al que se hace referencia en cadena para " "cubeta %zu es indefinido\n" -#: src/elflint.c:2245 +#: src/elflint.c:2244 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -2632,7 +2639,7 @@ msgstr "" "Sección [%2d] '%s': valor de dispersión para símbolo %u en cadena para " "cubeta %zu está errado\n" -#: src/elflint.c:2254 +#: src/elflint.c:2253 #, fuzzy, c-format msgid "" "section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n" @@ -2640,13 +2647,13 @@ msgstr "" "Sección [%2d] '%s': valor de dispersión para símbolo %u en cadena para " "cubeta %zu está errado\n" -#: src/elflint.c:2284 +#: src/elflint.c:2283 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" "Sección [%2d] '%s': cadena de dispersión para cubeta %zu fuera de limites\n" -#: src/elflint.c:2289 +#: src/elflint.c:2288 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2654,43 +2661,43 @@ msgstr "" "Sección [%2d] '%s': referencia de símbolo en cadena para cubeta %zu fuera de " "límites\n" -#: src/elflint.c:2295 +#: src/elflint.c:2294 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" "Sección [%2d] '%s': bitmask no coincide con nombres en la tabla de " "dispersión\n" -#: src/elflint.c:2308 +#: src/elflint.c:2307 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "Sección [%2d] '%s': archivos reubicables no pueden tener tablas de " "dispersión\n" -#: src/elflint.c:2326 +#: src/elflint.c:2325 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" "Sección [%2d] '%s': tabla de dispersión no para tabla de símbolos dinámicos\n" -#: src/elflint.c:2330 +#: src/elflint.c:2329 #, fuzzy, c-format msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n" msgstr "Sección [%2d] '%s': índice de sección de destino inválido\n" -#: src/elflint.c:2340 +#: src/elflint.c:2339 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" "Sección [%2d] '%s': tamaño incorrecto de entrada de tabla de dispersión\n" -#: src/elflint.c:2345 +#: src/elflint.c:2344 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "Sección [%2d] '%s': no marcada para ser asignada\n" -#: src/elflint.c:2350 +#: src/elflint.c:2349 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2699,46 +2706,46 @@ msgstr "" "Sección [%2d] '%s': tabla de dispersión no tiene ni siquiera espacio para " "entradas administrativas iniciales\n" -#: src/elflint.c:2399 +#: src/elflint.c:2398 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" "sh_link en secciones de dispersión [%2zu] '%s' y [%2zu] '%s' no son " "idénticas\n" -#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523 +#: src/elflint.c:2422 src/elflint.c:2487 src/elflint.c:2522 #, fuzzy, c-format msgid "hash section [%2zu] '%s' does not contain enough data\n" msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" -#: src/elflint.c:2444 +#: src/elflint.c:2443 #, fuzzy, c-format msgid "hash section [%2zu] '%s' has zero bit mask words\n" msgstr "Sección [%2d] '%s': grupo de sección sin palabra de banderas\n" -#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536 +#: src/elflint.c:2454 src/elflint.c:2498 src/elflint.c:2535 #, fuzzy, c-format msgid "hash section [%2zu] '%s' uses too much data\n" msgstr "sección [%2zu] '%s' debe ser asignada\n" -#: src/elflint.c:2470 +#: src/elflint.c:2469 #, c-format msgid "" "hash section [%2zu] '%s' invalid symbol index % (max_nsyms: " "%, nentries: %\n" msgstr "" -#: src/elflint.c:2557 +#: src/elflint.c:2556 #, fuzzy, c-format msgid "hash section [%2zu] '%s' invalid sh_entsize\n" msgstr "Sección [%2zu]: nombre inválido\n" -#: src/elflint.c:2567 src/elflint.c:2571 +#: src/elflint.c:2566 src/elflint.c:2570 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "Sección [%2zu] '%s': referencia al índice de símbolo 0\n" -#: src/elflint.c:2578 +#: src/elflint.c:2577 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2747,7 +2754,7 @@ msgstr "" "Símbolo %d nombrado en nueva tabla de dispersión en [%2zu] '%s' pero no en " "la tabla de dispersión anterior en [%2zu] '%s'\n" -#: src/elflint.c:2590 +#: src/elflint.c:2589 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2756,12 +2763,12 @@ msgstr "" "Símbolo %d nombrado en la tabla de dispersión anterior en [%2zu] '%s' pero " "no en la nueva tabla de dispersión en [%2zu] '%s'\n" -#: src/elflint.c:2606 +#: src/elflint.c:2605 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "Sección [%2d] '%s': nonzero sh_%s para sección NULL\n" -#: src/elflint.c:2626 +#: src/elflint.c:2625 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2769,99 +2776,99 @@ msgstr "" "Sección [%2d] '%s': grupos de sección sólo permitidos en archivos de objeto " "reubicables\n" -#: src/elflint.c:2637 +#: src/elflint.c:2636 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "Sección [%2d] '%s': no puede obtener tabla de símbolos: %s\n" -#: src/elflint.c:2642 +#: src/elflint.c:2641 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" "Sección [%2d] '%s': referencia de sección en sh_link no es una tabla de " "símbolos\n" -#: src/elflint.c:2648 +#: src/elflint.c:2647 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "Sección [%2d] '%s': índice de símbolo inválido en sh_info\n" -#: src/elflint.c:2653 +#: src/elflint.c:2652 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "Sección [%2d] '%s': sh_flags no cero\n" -#: src/elflint.c:2660 +#: src/elflint.c:2659 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "Sección [%2d] '%s': no puede obtener símbolo para firma\n" -#: src/elflint.c:2664 +#: src/elflint.c:2663 #, fuzzy, c-format msgid "section [%2d] '%s': cannot get symbol name for signature\n" msgstr "Sección [%2d] '%s': no puede obtener símbolo para firma\n" -#: src/elflint.c:2669 +#: src/elflint.c:2668 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "" "sección [%2d] '%s': el símbolo de firma no puede ser una cadena vacía\n" -#: src/elflint.c:2675 +#: src/elflint.c:2674 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "Sección [%2d] '%s': sh_flags no establecida correctamente\n" -#: src/elflint.c:2681 +#: src/elflint.c:2680 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "Sección [%2d] '%s': no puede obtener datos: %s\n" -#: src/elflint.c:2690 +#: src/elflint.c:2689 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" "Sección [%2d] '%s': tamaño de sección no es múltiplo de tamaño de " "(Elf32_Word)\n" -#: src/elflint.c:2696 +#: src/elflint.c:2695 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "Sección [%2d] '%s': grupo de sección sin palabra de banderas\n" -#: src/elflint.c:2704 +#: src/elflint.c:2703 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "Sección [%2d] '%s': grupo de sección sin miembro\n" -#: src/elflint.c:2708 +#: src/elflint.c:2707 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "Sección [%2d] '%s': grupo de sección con sólo un miembro\n" -#: src/elflint.c:2719 +#: src/elflint.c:2718 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "Sección [%2d] '%s': banderas de grupo de sección desconocido\n" -#: src/elflint.c:2731 +#: src/elflint.c:2730 #, fuzzy, c-format msgid "section [%2d] '%s': section index %zu out of range\n" msgstr "Sección [%2d] '%s': índice de sección %Zu fuera de rango\n" -#: src/elflint.c:2740 +#: src/elflint.c:2739 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" "Sección [%2d] '%s': no se puede obtener encabezamiento de sección para " "elemento %zu: %s\n" -#: src/elflint.c:2747 +#: src/elflint.c:2746 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "Sección [%2d] '%s': grupo de sección contiene otro grupo [%2d] '%s'\n" -#: src/elflint.c:2753 +#: src/elflint.c:2752 #, fuzzy, c-format msgid "" "section [%2d] '%s': element %zu references section [%2d] '%s' without " @@ -2870,12 +2877,12 @@ msgstr "" "Sección [%2d] '%s': elemento %Zu hace referencia a sección [%2d] '%s' sin " "establecer bandera SHF_GROUP\n" -#: src/elflint.c:2760 +#: src/elflint.c:2759 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "Sección [%2d] '%s' está contenida en más de un grupo de sección\n" -#: src/elflint.c:2957 +#: src/elflint.c:2956 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2884,7 +2891,7 @@ msgstr "" "Sección [%2d] '%s' se refiere en sh_link a la sección [%2d] '%s' la cual no " "es una tabla de símbolos dinámicos\n" -#: src/elflint.c:2969 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2893,29 +2900,29 @@ msgstr "" "Sección [%2d] '%s' tiene un número diferente de entradas a la de la tabla de " "símbolos [%2d] '%s'\n" -#: src/elflint.c:2985 +#: src/elflint.c:2984 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" "Sección [%2d] '%s': el símbolo %d: no se pueden leer datos de versión\n" -#: src/elflint.c:3001 +#: src/elflint.c:3000 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" "Sección [%2d] '%s': el símbolo %d: el símbolo local con alcance mundial\n" -#: src/elflint.c:3009 +#: src/elflint.c:3008 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "Sección [%2d] '%s': símbolo %d: símbolo local con versión\n" -#: src/elflint.c:3023 +#: src/elflint.c:3022 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "Sección [%2d] '%s': símbolo %d: índice de versión inválida %d\n" -#: src/elflint.c:3028 +#: src/elflint.c:3027 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" @@ -2923,7 +2930,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %d: índice de versión %d es para versión " "definida\n" -#: src/elflint.c:3038 +#: src/elflint.c:3037 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" @@ -2931,46 +2938,46 @@ msgstr "" "Sección [%2d] '%s': símbolo %d: índice de versión %d es para la versión " "solicitada\n" -#: src/elflint.c:3091 +#: src/elflint.c:3090 #, c-format msgid "more than one version reference section present\n" msgstr "Más de una sección de referencia de versión presente\n" -#: src/elflint.c:3099 src/elflint.c:3246 +#: src/elflint.c:3098 src/elflint.c:3245 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "Sección [%2d] '%s': sh_link no se enlaza a la tabla de cadenas\n" -#: src/elflint.c:3124 src/elflint.c:3300 +#: src/elflint.c:3123 src/elflint.c:3299 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "Sección [%2d] '%s': entrada %d tiene versión %d errada\n" -#: src/elflint.c:3131 src/elflint.c:3307 +#: src/elflint.c:3130 src/elflint.c:3306 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene compensación errada de datos " "auxiliares\n" -#: src/elflint.c:3141 +#: src/elflint.c:3140 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "Sección [%2d] '%s': entrada %d tiene referencia de archivo inválida\n" -#: src/elflint.c:3149 +#: src/elflint.c:3148 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "Sección [%2d] '%s': %d hace referencia a dependencia desconocida\n" -#: src/elflint.c:3161 +#: src/elflint.c:3160 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene bandera " "desconocida\n" -#: src/elflint.c:3169 +#: src/elflint.c:3168 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2979,7 +2986,7 @@ msgstr "" "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene referencia de " "nombre inválida\n" -#: src/elflint.c:3178 +#: src/elflint.c:3177 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2988,7 +2995,7 @@ msgstr "" "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene valor de " "dispersión: %#x, esperado %#x\n" -#: src/elflint.c:3187 +#: src/elflint.c:3186 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2997,7 +3004,7 @@ msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene nombre duplicado " "'%s'\n" -#: src/elflint.c:3198 +#: src/elflint.c:3197 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -3005,14 +3012,14 @@ msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene próximo campo " "errado\n" -#: src/elflint.c:3215 src/elflint.c:3391 +#: src/elflint.c:3214 src/elflint.c:3390 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" "sección [%2d] '%s': entrada %d tiene compensación inválida para próxima " "entrada\n" -#: src/elflint.c:3223 src/elflint.c:3399 +#: src/elflint.c:3222 src/elflint.c:3398 #, fuzzy, c-format msgid "" "section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says " @@ -3021,46 +3028,46 @@ msgstr "" "sección [%2d] '%s': entrada %d tiene compensación inválida para próxima " "entrada\n" -#: src/elflint.c:3238 +#: src/elflint.c:3237 #, c-format msgid "more than one version definition section present\n" msgstr "más de una definición de versión presente de sección\n" -#: src/elflint.c:3285 +#: src/elflint.c:3284 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "Sección [%2d] '%s': más de una definición de BASE\n" -#: src/elflint.c:3289 +#: src/elflint.c:3288 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" "Sección [%2d] '%s': definición de BASE debe tener índice VER_NDX_GLOBAL\n" -#: src/elflint.c:3295 +#: src/elflint.c:3294 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "Sección [%2d] '%s': entrada %d tiene bandera desconocida\n" -#: src/elflint.c:3322 +#: src/elflint.c:3321 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida\n" -#: src/elflint.c:3329 +#: src/elflint.c:3328 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene valor de dispersión errado: %#x, " "esperado %#x\n" -#: src/elflint.c:3337 +#: src/elflint.c:3336 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene nombre de versión duplicado '%s'\n" -#: src/elflint.c:3357 +#: src/elflint.c:3356 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -3068,34 +3075,34 @@ msgstr "" "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida en datos " "auxiliares\n" -#: src/elflint.c:3374 +#: src/elflint.c:3373 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene próximo campo errado en datos " "auxiliares\n" -#: src/elflint.c:3407 +#: src/elflint.c:3406 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "Sección [%2d] '%s': no hay definición de BASE\n" -#: src/elflint.c:3423 +#: src/elflint.c:3422 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "Sección [%2d] '%s': desconocida versión principal '%s'\n" -#: src/elflint.c:3448 +#: src/elflint.c:3447 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "Sección [%2d] '%s': sección de atributos de objeto vacío\n" -#: src/elflint.c:3464 +#: src/elflint.c:3463 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "Sección[%2d] '%s': formato de atributo no reconocido\n" -#: src/elflint.c:3475 +#: src/elflint.c:3474 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" @@ -3103,21 +3110,21 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: campo de longitud cero en sección de " "atributo\n" -#: src/elflint.c:3484 +#: src/elflint.c:3483 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "Sección[%2d] '%s': compensación %zu: longitud inválida en sección de " "atributo\n" -#: src/elflint.c:3496 +#: src/elflint.c:3495 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" "Sección[%2d] '%s': compensación %zu: cadena de nombre de proveedor sin " "terminar\n" -#: src/elflint.c:3513 +#: src/elflint.c:3512 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -3125,12 +3132,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de sub-" "sección de atributo\n" -#: src/elflint.c:3522 +#: src/elflint.c:3521 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "Sección [%2d] '%s': compensación %zu: sección de atributo truncado\n" -#: src/elflint.c:3531 +#: src/elflint.c:3530 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -3138,7 +3145,7 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: campo de longitud cero length en sub-" "sección de atributo\n" -#: src/elflint.c:3546 +#: src/elflint.c:3545 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -3147,7 +3154,7 @@ msgstr "" "atributo\n" #. Tag_File -#: src/elflint.c:3557 +#: src/elflint.c:3556 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -3155,26 +3162,26 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: sub-sección de atributo tiene etiqueta " "inesperada %u\n" -#: src/elflint.c:3575 +#: src/elflint.c:3574 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "Sección[%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de " "atributo\n" -#: src/elflint.c:3586 +#: src/elflint.c:3585 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" "Sección [%2d] '%s': compensación %zu: cadena sin terminar en atributo\n" -#: src/elflint.c:3599 +#: src/elflint.c:3598 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" "Sección [%2d] '%s': compensación %zu: etiqueta de atributo no reconocida %u\n" -#: src/elflint.c:3603 +#: src/elflint.c:3602 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" @@ -3182,12 +3189,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: no reconocido %s valor de atributo " "%\n" -#: src/elflint.c:3613 +#: src/elflint.c:3612 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "Sección [%2d] '%s': compensación %zu: proveedor '%s' desconocido\n" -#: src/elflint.c:3619 +#: src/elflint.c:3618 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -3195,47 +3202,47 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: extra bytes después de la última " "sección de atributo\n" -#: src/elflint.c:3716 +#: src/elflint.c:3715 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "no puede obtener encabezamiento de sección de sección zeroth\n" -#: src/elflint.c:3720 +#: src/elflint.c:3719 #, c-format msgid "zeroth section has nonzero name\n" msgstr "Sección zeroth tiene nombre nonzero\n" -#: src/elflint.c:3722 +#: src/elflint.c:3721 #, c-format msgid "zeroth section has nonzero type\n" msgstr "Sección zeroth tiene tipo nonzero\n" -#: src/elflint.c:3724 +#: src/elflint.c:3723 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "Sección zeroth tiene banderas nonzero\n" -#: src/elflint.c:3726 +#: src/elflint.c:3725 #, c-format msgid "zeroth section has nonzero address\n" msgstr "Sección zeroth tiene dirección nonzero\n" -#: src/elflint.c:3728 +#: src/elflint.c:3727 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "Sección zeroth tiene compensación nonzero\n" -#: src/elflint.c:3730 +#: src/elflint.c:3729 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "Sección zeroth tiene valor de alineación nonzero\n" -#: src/elflint.c:3732 +#: src/elflint.c:3731 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "Sección zeroth tiene valor de tamaño de entrada nonzero\n" -#: src/elflint.c:3735 +#: src/elflint.c:3734 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -3244,7 +3251,7 @@ msgstr "" "Sección zeroth tiene valor de tamaño nonzero mientras que el encabezamiento " "ELF tiene valor shnum nonzero\n" -#: src/elflint.c:3739 +#: src/elflint.c:3738 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3253,7 +3260,7 @@ msgstr "" "Sección zeroth tiene valor de enlace nonzero mientras que el encabezamiento " "ELF no señala sobreflujo en shstrndx\n" -#: src/elflint.c:3743 +#: src/elflint.c:3742 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3262,27 +3269,27 @@ msgstr "" "la sección zeroth tiene un valor de enlace distinto a cero mientras que el " "encabezamiento ELF no señala desbordamiento en phnum\n" -#: src/elflint.c:3761 +#: src/elflint.c:3760 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "No se puede obtener encabezamiento para sección [%2zu] '%s': %s\n" -#: src/elflint.c:3770 +#: src/elflint.c:3769 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "Sección [%2zu]: nombre inválido\n" -#: src/elflint.c:3797 +#: src/elflint.c:3796 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "Sección [%2d] '%s' tiene tipo errado: %s esperado, es %s\n" -#: src/elflint.c:3814 +#: src/elflint.c:3813 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "Sección [%2zu] '%s' tiene banderas erradas: %s esperado, es %s\n" -#: src/elflint.c:3832 +#: src/elflint.c:3831 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -3290,12 +3297,12 @@ msgstr "" "Sección [%2zu] '%s' tiene banderas erradas: %s esperado y posiblemente %s, " "es %s\n" -#: src/elflint.c:3849 +#: src/elflint.c:3848 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "Sección [%2zu] '%s' presente en archivo objeto\n" -#: src/elflint.c:3855 src/elflint.c:3887 +#: src/elflint.c:3854 src/elflint.c:3886 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -3303,7 +3310,7 @@ msgstr "" "Sección [%2zu] '%s' tiene bandera SHF_ALLOC establecida pero no es un " "segmento cargable\n" -#: src/elflint.c:3860 src/elflint.c:3892 +#: src/elflint.c:3859 src/elflint.c:3891 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -3312,7 +3319,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene bandera SHF_ALLOC establecida pero hay " "segmentos cargables\n" -#: src/elflint.c:3868 +#: src/elflint.c:3867 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -3320,22 +3327,22 @@ msgstr "" "Sección [%2zu] '%s' es tabla de índice de sección de extensión en archivo no-" "objeto\n" -#: src/elflint.c:3911 +#: src/elflint.c:3910 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "Sección [%2zu] '%s': tamaño no es múltiplo de tamaño de entrada\n" -#: src/elflint.c:3916 +#: src/elflint.c:3915 #, c-format msgid "cannot get section header\n" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elflint.c:3926 +#: src/elflint.c:3925 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "sección [%2zu] '%s' tiene tipo %d incompatible \n" -#: src/elflint.c:3946 +#: src/elflint.c:3945 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -3343,76 +3350,76 @@ msgstr "" "Sección [%2zu] '%s' contiene bandera(s) de procesador-específico inválidas " "%#\n" -#: src/elflint.c:3956 +#: src/elflint.c:3955 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "Sección [%2zu] '%s' contiene bandera(s) desconocidas %#\n" -#: src/elflint.c:3964 +#: src/elflint.c:3963 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#: src/elflint.c:3974 +#: src/elflint.c:3973 #, fuzzy, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#: src/elflint.c:3979 +#: src/elflint.c:3978 #, fuzzy, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "Sección [%2d] '%s': no hay sección de dispersión presente\n" -#: src/elflint.c:3985 +#: src/elflint.c:3984 #, fuzzy, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "Sección [%2d] '%s': grupo de sección con sólo un miembro\n" -#: src/elflint.c:3991 +#: src/elflint.c:3990 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "Sección [%2zu] '%s': referencia de sección inválida en valor de enlace\n" -#: src/elflint.c:3996 +#: src/elflint.c:3995 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "Sección [%2zu] '%s': referencia de sección inválida en valor de información\n" -#: src/elflint.c:4003 +#: src/elflint.c:4002 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" "Sección [%2zu] '%s': bandera de cadenas establecida sin bandera de fusión\n" -#: src/elflint.c:4008 +#: src/elflint.c:4007 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "Sección [%2zu] '%s': bandera de fusión establecida pero tamaño de entrada es " "cero\n" -#: src/elflint.c:4027 +#: src/elflint.c:4026 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" "Sección [%2zu] '%s' tiene un tipo %d inesperado para una sección ejecutable\n" -#: src/elflint.c:4036 +#: src/elflint.c:4035 #, fuzzy, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n" -#: src/elflint.c:4043 +#: src/elflint.c:4042 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "Sección [%2zu] '%s' es tanto de ejecución como de escritura\n" -#: src/elflint.c:4074 +#: src/elflint.c:4073 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -3421,7 +3428,7 @@ msgstr "" "Sección [%2zu] '%s' no contenida totalmente en segmento de entrada de " "encabezamiento de programa %d\n" -#: src/elflint.c:4084 +#: src/elflint.c:4083 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3430,7 +3437,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero es leída desde el archivo en " "segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:4110 +#: src/elflint.c:4109 #, fuzzy, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3439,7 +3446,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero es leída desde el archivo en " "segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:4121 +#: src/elflint.c:4120 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -3448,18 +3455,18 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero no es leída desde el fichero " "en segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:4132 +#: src/elflint.c:4131 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "Sección [%2zu] '%s' es ejecutable en segmento no ejecutable %d\n" -#: src/elflint.c:4142 +#: src/elflint.c:4141 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" "Sección [%2zu] '%s' es de escritura en segmento que no es de escritura %d\n" -#: src/elflint.c:4152 +#: src/elflint.c:4151 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -3467,7 +3474,7 @@ msgstr "" "Sección [%2zu] '%s': asignación de bandera establecida pero sección no en " "ningún segmento cargado\n" -#: src/elflint.c:4158 +#: src/elflint.c:4157 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -3476,7 +3483,7 @@ msgstr "" "Sección [%2zu] '%s': encabezamiento ELF dice esta es la tabla de cadena de " "encabezamiento de sección, pero el tipo no es SHT_TYPE\n" -#: src/elflint.c:4166 +#: src/elflint.c:4165 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -3484,32 +3491,32 @@ msgstr "" "sección [%2zu] '%s': ficheros reubicables no pueden tener tablas de símbolos " "dinámicos\n" -#: src/elflint.c:4217 +#: src/elflint.c:4216 #, c-format msgid "more than one version symbol table present\n" msgstr "Más de una tabla de símbolos presente\n" -#: src/elflint.c:4240 +#: src/elflint.c:4239 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" "Entrada de encabezamiento de programa INTERP pero no la sección .interp\n" -#: src/elflint.c:4251 +#: src/elflint.c:4250 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" "segmento cargable [%u] es ejecutable pero no contiene secciones ejecutables\n" -#: src/elflint.c:4257 +#: src/elflint.c:4256 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "segmento cargable [%u] es de escritura pero contiene secciones protegidas " "contra escritura\n" -#: src/elflint.c:4268 +#: src/elflint.c:4267 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -3518,26 +3525,26 @@ msgstr "" "Sección no .gnu.versym presente, pero la sección .gnu.versym_d o la sección ." "gnu.versym_r existen\n" -#: src/elflint.c:4281 +#: src/elflint.c:4280 #, c-format msgid "duplicate version index %d\n" msgstr "Duplicar índice de versión %d\n" -#: src/elflint.c:4295 +#: src/elflint.c:4294 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" "Sección .gnu.versym presente sin las secciones .gnu.versym_d o .gnu." "versym_r\n" -#: src/elflint.c:4344 +#: src/elflint.c:4343 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" "phdr[%d]: tipo de nota de fichero core desconocido % en compensación " "%\n" -#: src/elflint.c:4348 +#: src/elflint.c:4347 #, fuzzy, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" @@ -3545,7 +3552,7 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero core desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4403 #, fuzzy, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " @@ -3554,7 +3561,7 @@ msgstr "" "phdr[%d]: tipo de nota de fichero objeto desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4408 #, fuzzy, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " @@ -3563,40 +3570,40 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4427 #, 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:4447 #, 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:4450 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: extra % bytes después de la última nota\n" -#: src/elflint.c:4465 +#: src/elflint.c:4471 #, 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:4478 #, 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:4481 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "Sección[%2d] '%s': extra % bytes después de la última nota\n" -#: src/elflint.c:4493 +#: src/elflint.c:4499 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3604,145 +3611,145 @@ msgstr "" "Sólo ejecutables, objetos compartidos y ficheros core pueden tener " "encabezamientos de programas\n" -#: src/elflint.c:4508 +#: src/elflint.c:4514 #, 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:4524 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "entrada de encabezamiento de programa %d: tipo %# de entrada de " "encabezamiento de programa desconocido\n" -#: src/elflint.c:4529 +#: src/elflint.c:4535 #, 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:4543 #, 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:4550 #, 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:4564 #, 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:4567 #, 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:4577 #, 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:4598 #, 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:4609 #, 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:4616 #, 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:4625 src/elflint.c:4648 #, 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:4654 #, 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:4681 #, 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:4684 #, 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:4697 #, 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:4705 #, 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:4708 #, 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:4712 #, 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:4715 #, 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:4720 #, 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:4723 #, 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:4737 #, 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:4744 #, 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:4747 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3751,7 +3758,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:4760 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3760,17 +3767,17 @@ 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:4794 #, 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:4806 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "no sepuede crear fichero nuevo" -#: src/elflint.c:4818 +#: src/elflint.c:4827 #, c-format msgid "text relocation flag set but not needed\n" msgstr "Bandera de reubicación de texto establecida pero no necesaria\n" @@ -3794,32 +3801,32 @@ 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/strings.c:87 src/strip.c:101 +#: src/findtextrel.c:74 src/nm.c:107 src/objdump.c:70 src/size.c:79 +#: src/strings.c:86 src/strip.c:100 msgid "[FILE...]" msgstr "[FICHERO...]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:223 #, 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:234 #, 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:254 #, 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:278 #, 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:299 #, c-format msgid "no text relocations reported in '%s'" msgstr "no hay reubicaciones de texto reportado en '%s'" @@ -3834,37 +3841,37 @@ msgstr "Error al leer fichero ELF" 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:325 src/findtextrel.c:340 #, 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:396 #, 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:417 src/findtextrel.c:440 #, 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:506 #, 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:560 #, 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:567 src/findtextrel.c:587 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3873,7 +3880,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:575 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3882,7 +3889,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:595 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3890,43 +3897,43 @@ msgstr "" "Una reubicación modifica memoria en compensación %llu en un segmento " "protegido contra escritura\n" -#: src/nm.c:66 src/strip.c:70 +#: src/nm.c:65 src/strip.c:69 msgid "Output selection:" msgstr "Selección de salida:" -#: src/nm.c:67 +#: src/nm.c:66 msgid "Display debugger-only symbols" msgstr "Mostrar sólo símbolos del depurador" -#: src/nm.c:68 +#: src/nm.c:67 msgid "Display only defined symbols" msgstr "Mostrar sólo símbolos definidos" -#: src/nm.c:71 +#: src/nm.c:70 msgid "Display dynamic symbols instead of normal symbols" msgstr "Mostrar símbolos dinámicos en lugar de símbolos normales" -#: src/nm.c:72 +#: src/nm.c:71 msgid "Display only external symbols" msgstr "Mostrar sólo símbolos externos" -#: src/nm.c:73 +#: src/nm.c:72 msgid "Display only undefined symbols" msgstr "Mostrar sólo símbolos indefinidos" -#: src/nm.c:75 +#: src/nm.c:74 msgid "Include index for symbols from archive members" msgstr "Incluir índices para símbolos de miembros de archivo" -#: src/nm.c:77 src/size.c:54 +#: src/nm.c:76 src/size.c:53 msgid "Output format:" msgstr "Formato de salida:" -#: src/nm.c:79 +#: src/nm.c:78 msgid "Print name of the input file before every symbol" msgstr "Imprimir nombre de archivo de entrada antes de cada símbolo" -#: src/nm.c:82 +#: src/nm.c:81 msgid "" "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " "default is `sysv'" @@ -3934,75 +3941,75 @@ msgstr "" "Usar el formato de salida FORMATO. FORMATO puede ser o bien `bsd', o " "`sysv', o `posix'. El establecido por defecto es `sysv'" -#: src/nm.c:84 +#: src/nm.c:83 msgid "Same as --format=bsd" msgstr "lo mismo que --format=bsd" -#: src/nm.c:85 +#: src/nm.c:84 msgid "Same as --format=posix" msgstr "lo mismo que --format=posix" -#: src/nm.c:86 src/size.c:60 +#: src/nm.c:85 src/size.c:59 msgid "Use RADIX for printing symbol values" msgstr "Utilizar RADIX para imprimir valores de símbolo" -#: src/nm.c:87 +#: src/nm.c:86 #, fuzzy msgid "Mark special symbols" msgstr "Marcar símbolos débiles" -#: src/nm.c:89 +#: src/nm.c:88 msgid "Print size of defined symbols" msgstr "Tamaño de impresión de símbolos definidos" -#: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 +#: src/nm.c:90 src/size.c:67 src/strip.c:74 src/unstrip.c:68 msgid "Output options:" msgstr "Opciones de salida:" -#: src/nm.c:92 +#: src/nm.c:91 msgid "Sort symbols numerically by address" msgstr "Ordenar los símbolos numéricos por dirección" -#: src/nm.c:94 +#: src/nm.c:93 msgid "Do not sort the symbols" msgstr "No ordenar los símbolos" -#: src/nm.c:95 +#: src/nm.c:94 msgid "Reverse the sense of the sort" msgstr "Invertir el orden" -#: src/nm.c:98 +#: src/nm.c:97 msgid "Decode low-level symbol names into source code names" msgstr "" #. Short description of program. -#: src/nm.c:105 +#: src/nm.c:104 msgid "List symbols from FILEs (a.out by default)." msgstr "Listar símbolos de FICHEROS (a.out por defecto)." -#: src/nm.c:116 src/objdump.c:79 +#: src/nm.c:115 src/objdump.c:78 #, fuzzy msgid "Output formatting" msgstr "Formato de salida:" -#: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 +#: src/nm.c:139 src/objdump.c:102 src/size.c:104 src/strip.c:132 #, fuzzy, c-format 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/nm.c:380 src/nm.c:392 src/size.c:287 src/size.c:296 src/size.c:307 +#: src/strip.c:2766 #, 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:402 src/objdump.c:279 src/strip.c:827 #, c-format msgid "%s: File format not recognized" msgstr "%s: No se reconoce el formato del fichero" #. Note: 0 is no valid offset. -#: src/nm.c:443 +#: src/nm.c:442 #, fuzzy msgid "" "\n" @@ -4011,44 +4018,43 @@ msgstr "" "\n" "Índice de archivo:" -#: src/nm.c:452 +#: src/nm.c:451 #, c-format msgid "invalid offset %zu for symbol %s" msgstr "Compensación %zu inválida para símbolo %s" -#: src/nm.c:457 +#: src/nm.c:456 #, c-format msgid "%s in %s\n" msgstr "%s en %s\n" -#: src/nm.c:465 +#: src/nm.c:464 #, c-format msgid "cannot reset archive offset to beginning" msgstr "imposible restablecer compensación de archivo al inicio" -#: src/nm.c:490 src/objdump.c:328 +#: src/nm.c:489 src/objdump.c:327 #, c-format 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:702 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:742 src/nm.c:1234 src/objdump.c:778 src/readelf.c:663 +#: src/readelf.c:1471 src/readelf.c:1620 src/readelf.c:1847 src/readelf.c:2084 +#: src/readelf.c:2273 src/readelf.c:2451 src/readelf.c:2526 src/readelf.c:2791 +#: src/readelf.c:2866 src/readelf.c:2952 src/readelf.c:3547 src/readelf.c:3595 +#: src/readelf.c:3664 src/readelf.c:11581 src/readelf.c:12771 +#: src/readelf.c:12981 src/readelf.c:13049 src/size.c:396 src/size.c:467 +#: src/strip.c:1093 #, 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:767 #, c-format msgid "" "\n" @@ -4062,7 +4068,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:770 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4071,105 +4077,105 @@ msgstr "" "%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" "\n" -#: src/nm.c:776 +#: src/nm.c:772 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:774 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:776 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:778 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1245 #, 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:1250 #, 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:1330 #, 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:1566 #, 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:1616 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: No hay símbolos" -#: src/objdump.c:52 +#: src/objdump.c:51 msgid "Mode selection:" msgstr "Selección de modo:" -#: src/objdump.c:53 +#: src/objdump.c:52 msgid "Display relocation information." msgstr "Mostrar la reubicación de información." -#: src/objdump.c:55 +#: src/objdump.c:54 msgid "Display the full contents of all sections requested" msgstr "Mostrar el contenido total de todas las secciones solicitadas" -#: src/objdump.c:57 +#: src/objdump.c:56 msgid "Display assembler code of executable sections" msgstr "Mostrar código de ensamblador de secciones ejecutables" -#: src/objdump.c:59 +#: src/objdump.c:58 #, fuzzy msgid "Output content selection:" msgstr "Selección de opción de salida:" -#: src/objdump.c:61 +#: src/objdump.c:60 msgid "Only display information for section NAME." msgstr "Sólo muestra información para NOMBRE de sección." #. Short description of program. -#: src/objdump.c:67 +#: src/objdump.c:66 msgid "Show information from FILEs (a.out by default)." msgstr "Muestra información de FICHEROS (a.out por defecto)." -#: src/objdump.c:218 src/readelf.c:582 +#: src/objdump.c:217 src/readelf.c:608 msgid "No operation specified.\n" msgstr "No se especificó una operación.\n" -#: src/objdump.c:258 src/objdump.c:270 +#: src/objdump.c:257 src/objdump.c:269 #, c-format msgid "while close `%s'" msgstr "mientras cierra `%s'" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:362 src/readelf.c:2179 src/readelf.c:2370 msgid "INVALID SYMBOL" msgstr "SÍMBOLO INVÁLIDO" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:377 src/readelf.c:2213 src/readelf.c:2406 msgid "INVALID SECTION" msgstr "SECCIÓN INVÁLIDA" -#: src/objdump.c:498 +#: src/objdump.c:497 #, c-format msgid "" "\n" @@ -4180,104 +4186,103 @@ msgstr "" "REUBICACIÓN DE REGISTROS PARA [%s]:\n" "%-*s TIPO VALOR\n" -#: src/objdump.c:501 +#: src/objdump.c:500 msgid "OFFSET" msgstr "COMPENSACIÓN" -#: src/objdump.c:566 +#: src/objdump.c:565 #, c-format msgid "Contents of section %s:\n" msgstr "Contenido de la sección %s:\n" -#: src/objdump.c:687 -#, c-format +#: src/objdump.c:686 msgid "cannot disassemble" msgstr "No se puede desensamblar" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:757 +#, fuzzy msgid "cannot create backend for elf file" msgstr "no sepuede crear fichero nuevo" #. Short description of program. -#: src/ranlib.c:63 +#: src/ranlib.c:62 msgid "Generate an index to speed access to archives." msgstr " Generar un índice para acelerar el acceso a los archivos." #. Strings for arguments in help texts. -#: src/ranlib.c:66 +#: src/ranlib.c:65 msgid "ARCHIVE" msgstr "ARCHIVO " -#: src/ranlib.c:102 +#: src/ranlib.c:101 #, c-format msgid "Archive name required" msgstr "Se requiere nombre de archivo" -#: src/ranlib.c:166 +#: src/ranlib.c:165 #, c-format msgid "'%s' is no archive" msgstr "%s: no es un archivo" -#: src/ranlib.c:201 +#: src/ranlib.c:200 #, c-format msgid "error while freeing sub-ELF descriptor: %s" msgstr "error al liberar descriptor sub-ELF: %s" -#: src/readelf.c:97 +#: src/readelf.c:96 #, fuzzy msgid "ELF input selection:" msgstr "Selección de salida de ELF:" -#: src/readelf.c:99 +#: src/readelf.c:98 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" msgstr "" -#: src/readelf.c:102 +#: src/readelf.c:101 msgid "" "Used with -w to find the skeleton Compile Units in FILE associated with the " "Split Compile units in a .dwo input file" msgstr "" -#: src/readelf.c:104 +#: src/readelf.c:103 msgid "ELF output selection:" msgstr "Selección de salida de ELF:" -#: src/readelf.c:106 +#: src/readelf.c:105 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "Todo esto mas -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:107 +#: src/readelf.c:106 msgid "Display the dynamic segment" msgstr "Mostrar el segmento dinámico" -#: src/readelf.c:108 +#: src/readelf.c:107 msgid "Display the ELF file header" msgstr "Mostrar el encabezamiento del fichero ELF" -#: src/readelf.c:110 +#: src/readelf.c:109 msgid "Display histogram of bucket list lengths" msgstr "Mostrar histograma de las longitudes de las listas de cubetas" -#: src/readelf.c:111 +#: src/readelf.c:110 msgid "Display the program headers" msgstr "Mostrar encabezamientos de programa" -#: src/readelf.c:113 +#: src/readelf.c:112 msgid "Display relocations" msgstr "Mostrar reubicaciones" -#: src/readelf.c:114 +#: src/readelf.c:113 #, fuzzy msgid "Display the section groups" msgstr "Mostrar los encabezados de las secciones" -#: src/readelf.c:115 +#: src/readelf.c:114 msgid "Display the sections' headers" msgstr "Mostrar los encabezados de las secciones" -#: src/readelf.c:118 +#: src/readelf.c:117 #, fuzzy msgid "Display the symbol table sections" msgstr "Mostrar la tabla de símbolos" @@ -4331,184 +4336,188 @@ msgid "Display the symbol index of an archive" msgstr "Muestra el índice de símbolos de un archivo" #: src/readelf.c:141 +msgid "Use the dynamic segment when possible for displaying info" +msgstr "" + +#: src/readelf.c:143 msgid "Output control:" msgstr "Control de salida:" -#: src/readelf.c:143 +#: src/readelf.c:145 msgid "Do not find symbol names for addresses in DWARF data" msgstr "" "No se encuentran los nombres de símbolos para direcciones en datos DWARF" -#: src/readelf.c:145 +#: src/readelf.c:147 #, fuzzy msgid "" "Display just offsets instead of resolving values to addresses in DWARF data" msgstr "" "No se encuentran los nombres de símbolos para direcciones en datos DWARF" -#: src/readelf.c:147 +#: src/readelf.c:149 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:149 +#: src/readelf.c:151 msgid "" "Show compression information for compressed sections (when used with -S); " "decompress section before dumping data (when used with -p or -x)" msgstr "" #. Short description of program. -#: src/readelf.c:154 +#: src/readelf.c:156 msgid "Print information from ELF file in human-readable form." msgstr "" "Imprimir información del fichero ELF en una forma comprensible para los " "seres humanos." #. Look up once. -#: src/readelf.c:350 +#: src/readelf.c:373 msgid "yes" msgstr "sí" -#: src/readelf.c:351 +#: src/readelf.c:374 msgid "no" msgstr "no" -#: src/readelf.c:550 +#: src/readelf.c:576 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Sección de depuración DWARF desconocida `%s'.\n" -#: src/readelf.c:621 src/readelf.c:732 +#: src/readelf.c:647 src/readelf.c:758 #, c-format 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:654 src/readelf.c:980 src/strip.c:1188 #, 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:672 src/readelf.c:1287 src/readelf.c:1495 #, 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/readelf.c:681 src/readelf.c:1294 src/readelf.c:1502 src/readelf.c:13001 +#: src/unstrip.c:396 src/unstrip.c:427 src/unstrip.c:490 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/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 #, c-format msgid "cannot get section header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" -#: src/readelf.c:663 +#: src/readelf.c:689 #, fuzzy, c-format 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:698 src/readelf.c:6797 src/readelf.c:10854 src/readelf.c:10956 +#: src/readelf.c:11134 #, c-format msgid "cannot get %s content: %s" msgstr "No se puede obtener el contenido %s: %s" -#: src/readelf.c:688 +#: src/readelf.c:714 #, fuzzy, c-format msgid "cannot create temp file '%s'" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/readelf.c:697 +#: src/readelf.c:723 #, fuzzy, c-format msgid "cannot write section data" msgstr "no se puede leer la sección de datos: %s" -#: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 +#: src/readelf.c:729 src/readelf.c:746 src/readelf.c:775 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "error al cerrar el descriptor ELF: %s" -#: src/readelf.c:710 +#: src/readelf.c:736 #, fuzzy, c-format msgid "error while rewinding file descriptor" msgstr "error al cerrar el descriptor ELF: %s" -#: src/readelf.c:744 +#: src/readelf.c:770 #, c-format msgid "'%s' is not an archive, cannot print archive index" msgstr "'%s' no es un archivo, no se puede imprimir índice de archivo" -#: src/readelf.c:848 +#: src/readelf.c:874 #, c-format msgid "cannot stat input file" msgstr "no sepudo stat archivo de entrada" -#: src/readelf.c:850 +#: src/readelf.c:876 #, c-format msgid "input file is empty" msgstr "archivo de entrada vacío" -#: src/readelf.c:852 +#: src/readelf.c:878 #, c-format msgid "failed reading '%s': %s" msgstr "Falló lectura de '%s': %s" -#: src/readelf.c:881 +#: src/readelf.c:907 #, fuzzy, c-format msgid "No such section '%s' in '%s'" msgstr "No se puede obtener contenido de sección %zu en '%s': %s" -#: src/readelf.c:940 +#: src/readelf.c:966 #, c-format msgid "cannot read ELF header: %s" msgstr "no se pudo leer encabezamiento ELF: %s" -#: src/readelf.c:948 +#: src/readelf.c:974 #, c-format msgid "cannot create EBL handle" msgstr "no se puede crear EBL" -#: src/readelf.c:961 +#: src/readelf.c:985 #, 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:1017 #, fuzzy, c-format msgid "cannot read ELF: %s" msgstr "no sepuede leer %s: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1078 msgid "NONE (None)" msgstr "NONE (Ninguno)" -#: src/readelf.c:1055 +#: src/readelf.c:1079 msgid "REL (Relocatable file)" msgstr "REL (Fichero reubicable)" -#: src/readelf.c:1056 +#: src/readelf.c:1080 msgid "EXEC (Executable file)" msgstr "EXEC (Fichero ejecutable)" -#: src/readelf.c:1057 +#: src/readelf.c:1081 msgid "DYN (Shared object file)" msgstr "DYN (Fichero objeto compartido)" -#: src/readelf.c:1058 +#: src/readelf.c:1082 msgid "CORE (Core file)" msgstr "CORE (Fichero núcleo)" -#: src/readelf.c:1063 +#: src/readelf.c:1087 #, 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:1089 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Específico del procesador: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1099 msgid "" "ELF Header:\n" " Magic: " @@ -4516,7 +4525,7 @@ msgstr "" "Encabezamiento ELF:\n" " Mágico: " -#: src/readelf.c:1079 +#: src/readelf.c:1103 #, c-format msgid "" "\n" @@ -4525,125 +4534,125 @@ msgstr "" "\n" " Clase: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1108 #, c-format msgid " Data: %s\n" msgstr " Datos: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1114 #, 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:1116 src/readelf.c:1138 msgid "(current)" msgstr "(actual)" -#: src/readelf.c:1096 +#: src/readelf.c:1120 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1123 #, c-format msgid " ABI Version: %hhd\n" msgstr " Versión ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1126 msgid " Type: " msgstr " Tipo: " -#: src/readelf.c:1107 +#: src/readelf.c:1131 #, c-format msgid " Machine: %s\n" msgstr " Máquina: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1133 #, fuzzy, c-format msgid " Machine: : 0x%x\n" msgstr " Máquina: %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1136 #, c-format msgid " Version: %d %s\n" msgstr " Versión: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1140 #, c-format msgid " Entry point address: %#\n" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1143 #, c-format msgid " Start of program headers: % %s\n" msgstr " Inicio de encabezamientos de programa: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1144 src/readelf.c:1147 msgid "(bytes into file)" msgstr " (bytes en el archivo)" -#: src/readelf.c:1122 +#: src/readelf.c:1146 #, c-format msgid " Start of section headers: % %s\n" msgstr " Inicio de encabezamientos de sección: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1149 #, c-format msgid " Flags: %s\n" msgstr " Indicadores: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1152 #, c-format msgid " Size of this header: % %s\n" msgstr " Tamaño de este encabezamiento: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1153 src/readelf.c:1156 src/readelf.c:1173 msgid "(bytes)" msgstr "(bytes)" -#: src/readelf.c:1131 +#: src/readelf.c:1155 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" " Tamaño de las entradas en encabezamiento del programa: % %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1158 #, c-format msgid " Number of program headers entries: %" msgstr " Cantidad de entradas de encabezados de programa: %" -#: src/readelf.c:1141 +#: src/readelf.c:1165 #, c-format msgid " (% in [0].sh_info)" msgstr " (% in [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1168 src/readelf.c:1185 src/readelf.c:1199 msgid " ([0] not available)" msgstr " ([0] no disponible)" -#: src/readelf.c:1148 +#: src/readelf.c:1172 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" " Tamaño de las entradas en el encabezamiento de sección: % %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1175 #, c-format msgid " Number of section headers entries: %" msgstr " Cantidad de entradas en los encabezamientos de sección: %" -#: src/readelf.c:1158 +#: src/readelf.c:1182 #, c-format msgid " (% in [0].sh_size)" msgstr " (% en [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1195 #, c-format msgid " (% in [0].sh_link)" msgstr " (% en [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1203 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4652,19 +4661,19 @@ msgstr "" " Índice de tabla de cadenas de sección de encabezamiento de : XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1207 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr " Índice de tabla de cadenas de sección de encabezamiento: %\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1253 src/readelf.c:1461 #, 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:1256 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4673,16 +4682,16 @@ msgstr "" "Hay %d encabezamientos de sección, comenzando en compensación %#:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1264 #, 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:1267 msgid "Section Headers:" msgstr "encabezamientos de sección:" -#: src/readelf.c:1248 +#: src/readelf.c:1270 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4690,7 +4699,7 @@ msgstr "" "[Nr] Nombre Tipo Dirección Off Tamaño Inf Al " "Enlace banderas ES" -#: src/readelf.c:1250 +#: src/readelf.c:1272 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4698,36 +4707,36 @@ msgstr "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1277 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1279 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1357 #, 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:1368 #, 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:1386 msgid "Program Headers:" msgstr "encabezamientos de programa:" -#: src/readelf.c:1366 +#: src/readelf.c:1388 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:1391 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4735,12 +4744,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:1448 #, 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:1473 msgid "" "\n" " Section to Segment mapping:\n" @@ -4750,12 +4759,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:1484 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 #, 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:1628 #, c-format msgid "" "\n" @@ -4770,7 +4779,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:1633 #, c-format msgid "" "\n" @@ -4785,31 +4794,31 @@ msgstr[1] "" "\n" "Grupo de sección [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1641 msgid "" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1655 msgid "" 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:1678 src/readelf.c:2461 src/readelf.c:3563 src/readelf.c:12873 +#: src/readelf.c:12880 src/readelf.c:12924 src/readelf.c:12931 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1682 src/readelf.c:2466 src/readelf.c:3567 #, 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:1851 src/readelf.c:2532 src/readelf.c:2797 src/readelf.c:2872 +#: src/readelf.c:3175 src/readelf.c:3249 src/readelf.c:5570 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr ".debug_line section inválida" -#: src/readelf.c:1812 +#: src/readelf.c:1854 #, c-format msgid "" "\n" @@ -4830,36 +4839,70 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1867 +#, fuzzy, c-format +#| msgid "" +#| "\n" +#| "Dynamic segment contains %lu entry:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +#| msgid_plural "" +#| "\n" +#| "Dynamic segment contains %lu entries:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +msgid "" +"\n" +"Dynamic segment contains %lu entry:\n" +" Addr: %#0* Offset: %#08\n" +msgid_plural "" +"\n" +"Dynamic segment contains %lu entries:\n" +" Addr: %#0* Offset: %#08\n" +msgstr[0] "" +"\n" +"Segmento dinámico contiene entrada %lu:\n" +" Dirección: %#0* Compensación: %#08 Enlace a sección: " +"[%2u] '%s'\n" +msgstr[1] "" +"\n" +"Segmento dinámico contiene entradas %lu:\n" +" Dirección: %#0* Compensación: %#08 Enlace a sección: " +"[%2u] '%s'\n" + +#: src/readelf.c:1877 msgid " Type Value\n" msgstr " Tipo Valor\n" -#: src/readelf.c:1846 +#: src/readelf.c:1886 +#, fuzzy +msgid "cannot get string table by using dynamic segment" +msgstr "no se pueden obtener datos de sección: %s" + +#: src/readelf.c:1925 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteca compartida: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1929 #, c-format msgid "Library soname: [%s]\n" msgstr "Nombre-so de la biblioteca: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1933 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath de la biblioteca: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1937 #, c-format msgid "Library runpath: [%s]\n" msgstr "Ruta de ejecución de la biblioteca: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1956 #, c-format msgid "% (bytes)\n" msgstr "% (bytes)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2070 src/readelf.c:2259 #, c-format msgid "" "\n" @@ -4868,7 +4911,7 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2087 src/readelf.c:2276 #, c-format msgid "" "\n" @@ -4893,7 +4936,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:2102 src/readelf.c:2291 #, c-format msgid "" "\n" @@ -4910,29 +4953,29 @@ msgstr[1] "" "Sección de reubicación [%2u] '%s' en compensación %#0 contiene " "entradas %d:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2112 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:2039 +#: src/readelf.c:2114 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:2167 src/readelf.c:2178 src/readelf.c:2191 src/readelf.c:2212 +#: src/readelf.c:2224 src/readelf.c:2357 src/readelf.c:2369 src/readelf.c:2383 +#: src/readelf.c:2405 src/readelf.c:2418 msgid "" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2301 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2229 +#: src/readelf.c:2303 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2467 +#: src/readelf.c:2540 #, c-format msgid "" "\n" @@ -4947,40 +4990,40 @@ msgstr[1] "" "\n" "La tabla de símbolos [%2u] '%s' contiene entradas %u:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2545 #, 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:2553 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:2555 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:2575 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2668 #, c-format msgid "bad dynamic symbol" msgstr "símbolo dinámico erróneo" -#: src/readelf.c:2680 +#: src/readelf.c:2753 msgid "none" msgstr "nada" -#: src/readelf.c:2697 +#: src/readelf.c:2770 msgid "| " msgstr "| " -#: src/readelf.c:2728 +#: src/readelf.c:2800 #, c-format msgid "" "\n" @@ -5001,17 +5044,17 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2749 +#: src/readelf.c:2821 #, 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:2834 #, 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:2876 #, c-format msgid "" "\n" @@ -5032,19 +5075,19 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2833 +#: src/readelf.c:2904 #, 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:2919 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Principal %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3179 #, c-format msgid "" "\n" @@ -5065,15 +5108,15 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'" -#: src/readelf.c:3137 +#: src/readelf.c:3207 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:3142 +#: src/readelf.c:3212 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3184 +#: src/readelf.c:3254 #, c-format msgid "" "\n" @@ -5098,22 +5141,22 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:3206 +#: src/readelf.c:3276 #, 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:3278 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3285 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3298 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5122,37 +5165,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:3316 src/readelf.c:3380 src/readelf.c:3446 #, 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:3324 #, 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:3353 #, 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:3388 #, 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:3419 #, 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:3455 #, 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:3521 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5162,7 +5205,7 @@ msgstr "" " Tamaño de Bitmask: %zu bytes %%% bits establecen segundo " "cambio de dispersión: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3606 #, c-format msgid "" "\n" @@ -5179,7 +5222,7 @@ msgstr[1] "" "Sección de lista de biblioteca [%2zu] '%s' en compensación %#0 " "contiene entradas %d:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3620 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5187,7 +5230,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:3614 +#: src/readelf.c:3680 #, c-format msgid "" "\n" @@ -5198,102 +5241,102 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de % bytes con " "desplazamiento %#0:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3697 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3655 +#: src/readelf.c:3721 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3760 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3765 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3814 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3817 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3820 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3830 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3833 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, fuzzy, c-format +#: src/readelf.c:3903 +#, fuzzy msgid "sprintf failure" msgstr "mprotect falló" -#: src/readelf.c:4319 +#: src/readelf.c:4387 msgid "empty block" msgstr "bloque vacío" -#: src/readelf.c:4322 +#: src/readelf.c:4390 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:4800 +#: src/readelf.c:4868 #, fuzzy, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:4867 +#: src/readelf.c:5028 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4874 +#: src/readelf.c:5035 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4881 +#: src/readelf.c:5042 #, fuzzy, c-format msgid "%s %# used with different base addresses" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4888 +#: src/readelf.c:5049 #, fuzzy, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4988 +#: src/readelf.c:5149 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4996 +#: src/readelf.c:5157 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bytes ...\n" -#: src/readelf.c:5099 +#: src/readelf.c:5260 #, c-format msgid "" "\n" @@ -5304,7 +5347,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [ Código]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5268 #, c-format msgid "" "\n" @@ -5313,20 +5356,20 @@ msgstr "" "\n" "Sección de abreviatura en compensación %:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5281 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5297 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] compensación: %, 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:5330 src/readelf.c:5639 src/readelf.c:5806 src/readelf.c:6191 +#: src/readelf.c:6807 src/readelf.c:8562 src/readelf.c:9308 src/readelf.c:9791 +#: src/readelf.c:10042 src/readelf.c:10208 src/readelf.c:10595 +#: src/readelf.c:10655 #, c-format msgid "" "\n" @@ -5335,52 +5378,52 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5343 #, 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:5443 src/readelf.c:5467 src/readelf.c:5851 src/readelf.c:9353 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5445 src/readelf.c:5482 src/readelf.c:5864 src/readelf.c:9366 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5446 src/readelf.c:5491 src/readelf.c:5873 src/readelf.c:9375 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5448 src/readelf.c:5501 src/readelf.c:5883 src/readelf.c:9385 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5486 src/readelf.c:5868 src/readelf.c:9370 src/readelf.c:10787 #, 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:5496 src/readelf.c:5709 src/readelf.c:5878 src/readelf.c:9380 #, 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:5507 src/readelf.c:5720 src/readelf.c:5888 src/readelf.c:9390 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5560 src/readelf.c:5634 #, 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:5575 #, c-format msgid "" "\n" @@ -5395,12 +5438,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entradas %zu:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5606 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5608 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5408,7 +5451,7 @@ msgstr "" " Inicio [%*zu]: %0#*, longitud: %5, compensación CU DIE: " "%6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5652 src/readelf.c:8589 #, fuzzy, c-format msgid "" "\n" @@ -5417,150 +5460,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:5656 src/readelf.c:5832 src/readelf.c:6831 src/readelf.c:8600 +#: src/readelf.c:9334 #, 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:5672 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " (compensación: %#)" -#: src/readelf.c:5523 +#: src/readelf.c:5684 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5527 +#: src/readelf.c:5688 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5699 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " (compensación: %#)" -#: src/readelf.c:5544 +#: src/readelf.c:5705 #, fuzzy, c-format msgid " Address size: %6\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5555 +#: src/readelf.c:5716 #, fuzzy, c-format msgid "" " Segment size: %6\n" "\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5610 +#: src/readelf.c:5771 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5815 #, 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:5838 src/readelf.c:9340 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5893 src/readelf.c:9395 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5909 src/readelf.c:9411 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5911 src/readelf.c:9413 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5917 src/readelf.c:9419 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5928 src/readelf.c:9430 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5932 src/readelf.c:9434 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:5823 +#: src/readelf.c:5984 #, fuzzy, c-format msgid "invalid range list data" msgstr "datos inválidos" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6169 src/readelf.c:9769 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6186 #, 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:6222 src/readelf.c:9824 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6224 src/readelf.c:9826 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6233 src/readelf.c:9852 src/readelf.c:9878 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6258 src/readelf.c:9962 #, fuzzy msgid "base address" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6268 src/readelf.c:9972 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacía\n" -#: src/readelf.c:6367 +#: src/readelf.c:6528 #, fuzzy msgid " \n" msgstr " \n" -#: src/readelf.c:6624 +#: src/readelf.c:6785 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6803 #, c-format msgid "" "\n" @@ -5570,7 +5613,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6853 #, c-format msgid "" "\n" @@ -5579,65 +5622,65 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6954 src/readelf.c:7108 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:6808 +#: src/readelf.c:6969 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:6814 +#: src/readelf.c:6975 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:6924 +#: src/readelf.c:7085 #, c-format msgid " (offset: %#)" msgstr " (compensación: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:7092 #, c-format msgid " (end offset: %#)" msgstr " (fin de compensación: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:7129 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "Puntero %-26sLSDA: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7214 #, fuzzy, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7224 #, fuzzy, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7246 #, fuzzy, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:7415 +#: src/readelf.c:7576 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "Archivo inválido" -#: src/readelf.c:7419 +#: src/readelf.c:7580 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr " establecer archivo a %\n" -#: src/readelf.c:7423 +#: src/readelf.c:7584 #, 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:7899 #, c-format msgid "" "\n" @@ -5648,12 +5691,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [Offset]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7949 #, 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:7969 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5666,7 +5709,7 @@ msgstr "" "Tamaño de dirección: %, Tamaño de compensación: %\n" " Tipo de firma: %#, Tipo de compensación: %#\n" -#: src/readelf.c:7820 +#: src/readelf.c:7981 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5677,39 +5720,39 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7991 src/readelf.c:8152 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:8018 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:8047 #, 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:8056 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "no se ha podido obtener etiqueta de DIE en compensación% en sección " "'%s': %s" -#: src/readelf.c:7933 +#: src/readelf.c:8092 #, 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:8100 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:8144 #, fuzzy, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5720,7 +5763,7 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:8037 +#: src/readelf.c:8196 #, fuzzy, c-format msgid "" "\n" @@ -5730,18 +5773,18 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:8369 +#: src/readelf.c:8528 #, fuzzy, c-format msgid "unknown form: %s" msgstr "Forma % desconocida" -#: src/readelf.c:8400 +#: src/readelf.c:8576 #, 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:8680 #, fuzzy, c-format msgid "" "\n" @@ -5772,34 +5815,34 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8702 #, 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:8710 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "no hay valor de dirección" -#: src/readelf.c:8540 +#: src/readelf.c:8718 #, 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:8728 #, 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:8743 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] argumento %hhu \n" msgstr[1] " [%*] argumento %hhu\n" -#: src/readelf.c:8576 +#: src/readelf.c:8754 msgid "" "\n" "Directory table:" @@ -5807,12 +5850,12 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8760 src/readelf.c:8837 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8831 #, fuzzy msgid "" "\n" @@ -5821,7 +5864,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:8714 +#: src/readelf.c:8892 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5829,7 +5872,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:8753 +#: src/readelf.c:8938 #, fuzzy msgid "" "\n" @@ -5838,7 +5881,7 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:8757 +#: src/readelf.c:8942 msgid "" "\n" "Line number statements:" @@ -5846,121 +5889,132 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:8777 +#: src/readelf.c:8957 #, 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:8991 #, 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:8995 #, 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:8998 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:9016 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:8841 +#: src/readelf.c:9021 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:8859 +#: src/readelf.c:9039 #, fuzzy, c-format msgid " set address to " msgstr "Establecer dirección a %s\n" -#: src/readelf.c:8887 +#: src/readelf.c:9067 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -"definir nuevo archivo: dir=%u, mtime=%, longitud=%, nombre=" -"%s\n" +"definir nuevo archivo: dir=%u, mtime=%, longitud=%, " +"nombre=%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:9081 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" +#: src/readelf.c:9108 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:9132 +#, 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:9139 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:9151 msgid " copy" msgstr "Copiar" -#: src/readelf.c:8929 +#: src/readelf.c:9162 #, 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:9166 src/readelf.c:9227 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9178 #, c-format msgid " advance line by constant %d to %\n" msgstr " línea de avance por la constante %d a %\n" -#: src/readelf.c:8955 +#: src/readelf.c:9188 #, c-format msgid " set file to %\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:8966 +#: src/readelf.c:9199 #, c-format msgid " set column to %\n" msgstr " Establecer columna a %\n" -#: src/readelf.c:8973 +#: src/readelf.c:9206 #, c-format msgid " set '%s' to %\n" msgstr "Establecer '%s' a %\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9212 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:8990 +#: src/readelf.c:9223 #, 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:9243 #, 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:9253 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9258 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:9035 +#: src/readelf.c:9268 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" @@ -5968,110 +6022,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:9277 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " opcódigo con parámetro % desconocido:" msgstr[1] " opcódigo con parámetros % desconocido:" -#: src/readelf.c:9084 +#: src/readelf.c:9317 #, 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:9483 #, fuzzy, c-format msgid " \n" msgstr " \n" -#: src/readelf.c:9290 +#: src/readelf.c:9523 #, fuzzy, c-format msgid "invalid loclists data" msgstr "datos inválidos" -#: src/readelf.c:9543 +#: src/readelf.c:9786 #, 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:9999 src/readelf.c:11043 msgid " \n" msgstr " \n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:10054 src/readelf.c:10217 #, 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:10134 #, 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:10157 #, 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:10258 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:10027 +#: src/readelf.c:10270 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10276 src/readelf.c:11163 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10283 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:10069 +#: src/readelf.c:10312 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (compensación: %#)" -#: src/readelf.c:10077 +#: src/readelf.c:10320 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10102 +#: src/readelf.c:10345 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " opcódigo con parámetro % desconocido:" -#: src/readelf.c:10109 +#: src/readelf.c:10352 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10364 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] argumento %hhu \n" -#: src/readelf.c:10136 +#: src/readelf.c:10379 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10580 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " Compensación [%5d] DIE: %6, Compensación CU DIE: %6, " "nombre: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10624 #, c-format msgid "" "\n" @@ -6083,42 +6137,42 @@ msgstr "" " %*s String\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10629 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10639 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:10425 +#: src/readelf.c:10668 #, 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:10767 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10526 +#: src/readelf.c:10769 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10540 +#: src/readelf.c:10783 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10549 +#: src/readelf.c:10792 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10603 +#: src/readelf.c:10846 #, c-format msgid "" "\n" @@ -6127,7 +6181,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:10948 #, c-format msgid "" "\n" @@ -6136,22 +6190,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:10971 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10983 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10998 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:11011 msgid "" "\n" " Call site table:" @@ -6159,7 +6213,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:10782 +#: src/readelf.c:11025 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6172,12 +6226,12 @@ msgstr "" " Landing pad: %#\n" " Action: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:11098 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:10882 +#: src/readelf.c:11125 #, fuzzy, c-format msgid "" "\n" @@ -6186,37 +6240,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:10911 +#: src/readelf.c:11154 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:11172 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:10936 +#: src/readelf.c:11179 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:10943 +#: src/readelf.c:11186 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10950 +#: src/readelf.c:11193 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:10957 +#: src/readelf.c:11200 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10971 +#: src/readelf.c:11214 #, fuzzy, c-format msgid "" "\n" @@ -6225,7 +6279,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11239 #, fuzzy, c-format msgid "" "\n" @@ -6234,7 +6288,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11268 #, fuzzy, c-format msgid "" "\n" @@ -6243,7 +6297,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11300 #, fuzzy, c-format msgid "" "\n" @@ -6252,18 +6306,18 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:11195 +#: src/readelf.c:11438 #, 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:11804 src/readelf.c:12431 src/readelf.c:12541 +#: src/readelf.c:12598 #, 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:12168 #, c-format msgid "" "\n" @@ -6272,21 +6326,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:12438 +#: src/readelf.c:12677 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:12466 +#: src/readelf.c:12705 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12757 #, 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:12790 #, c-format msgid "" "\n" @@ -6295,7 +6349,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de % bytes en compensación %#0:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12813 #, c-format msgid "" "\n" @@ -6304,7 +6358,7 @@ msgstr "" "\n" "Segmento de nota de % bytes en compensación %#0:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12860 #, fuzzy, c-format msgid "" "\n" @@ -6313,12 +6367,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12887 src/readelf.c:12938 #, 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:12892 #, fuzzy, c-format msgid "" "\n" @@ -6328,7 +6382,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12897 #, fuzzy, c-format msgid "" "\n" @@ -6339,7 +6393,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12911 #, fuzzy, c-format msgid "" "\n" @@ -6348,7 +6402,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12943 #, fuzzy, c-format msgid "" "\n" @@ -6358,7 +6412,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12948 #, fuzzy, c-format msgid "" "\n" @@ -6369,7 +6423,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12996 #, c-format msgid "" "\n" @@ -6378,7 +6432,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:12789 +#: src/readelf.c:13026 #, c-format msgid "" "\n" @@ -6387,12 +6441,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:12846 +#: src/readelf.c:13081 #, 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:13084 #, c-format msgid "" "\n" @@ -6401,7 +6455,7 @@ msgstr "" "\n" "Archivo '%s' no tiene índice de símbolo\n" -#: src/readelf.c:12853 +#: src/readelf.c:13088 #, fuzzy, c-format msgid "" "\n" @@ -6410,17 +6464,17 @@ msgstr "" "\n" "Índice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:12871 +#: src/readelf.c:13106 #, 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:13111 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" -#: src/size.c:56 +#: src/size.c:55 msgid "" "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " "is `bsd'" @@ -6428,123 +6482,123 @@ msgstr "" "Utilice el formato de salida FORMAT. FORMAT puede ser tanto `bsd' como " "`sysv'. El establecido por defecto es `bsd'" -#: src/size.c:58 +#: src/size.c:57 msgid "Same as `--format=sysv'" msgstr "lo mismo que `--format=sysv'" -#: src/size.c:59 +#: src/size.c:58 msgid "Same as `--format=bsd'" msgstr "lo mismo que `--format=bsd'" -#: src/size.c:62 +#: src/size.c:61 msgid "Same as `--radix=10'" msgstr "lo mismo que `--radix=10'" -#: src/size.c:63 +#: src/size.c:62 msgid "Same as `--radix=8'" msgstr "lo mismo que `--radix=8'" -#: src/size.c:64 +#: src/size.c:63 msgid "Same as `--radix=16'" msgstr "lo mismo que`--radix=16'" -#: src/size.c:66 +#: src/size.c:65 msgid "Similar to `--format=sysv' output but in one line" msgstr "Similar a la salida `--format=sysv' pero en una sola línea" -#: src/size.c:70 +#: src/size.c:69 msgid "Print size and permission flags for loadable segments" msgstr "" "Imprime el tamaño y las marcas de permiso para los segmentos que pueden ser " "cargados" -#: src/size.c:71 +#: src/size.c:70 msgid "Display the total sizes (bsd only)" msgstr "Muestra el tamaño total (bsd solamente)" #. Short description of program. -#: src/size.c:76 +#: src/size.c:75 msgid "List section sizes of FILEs (a.out by default)." msgstr "Lista los tamaños de sección de FICHEROS (por defecto a.out). " -#: src/size.c:240 +#: src/size.c:239 #, c-format msgid "Invalid format: %s" msgstr "Formato de archivo inválido: %s" -#: src/size.c:251 +#: src/size.c:250 #, c-format msgid "Invalid radix: %s" msgstr "Radical inválido: %s" -#: src/size.c:310 +#: src/size.c:309 #, c-format msgid "%s: file format not recognized" msgstr "%s: No se reconoce el formato del fichero" -#: src/size.c:328 +#: src/size.c:327 msgctxt "bsd" msgid "text" msgstr "" -#: src/size.c:329 +#: src/size.c:328 msgctxt "bsd" msgid "data" msgstr "" -#: src/size.c:330 +#: src/size.c:329 msgctxt "bsd" msgid "bss" msgstr "" -#: src/size.c:331 +#: src/size.c:330 msgctxt "bsd" msgid "dec" msgstr "" -#: src/size.c:332 +#: src/size.c:331 msgctxt "bsd" msgid "hex" msgstr "" -#: src/size.c:333 +#: src/size.c:332 msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:416 src/size.c:557 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:418 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "sección inválida" -#: src/size.c:421 +#: src/size.c:419 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:420 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:449 src/size.c:452 src/size.c:455 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:479 +#, fuzzy msgid "cannot get section header" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/size.c:585 +#: src/size.c:582 msgid "(TOTALS)\n" msgstr "(TOTALES)\n" @@ -6666,19 +6720,19 @@ msgstr "" msgid "Couldn't show any frames." msgstr "" -#: src/strings.c:65 +#: src/strings.c:64 msgid "Output Selection:" msgstr "Selección de salida:" -#: src/strings.c:66 +#: src/strings.c:65 msgid "Scan entire file, not only loaded sections" msgstr "Explorar todo el archivo, no sólo las secciones cargadas" -#: src/strings.c:68 +#: src/strings.c:67 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" msgstr "Sólo secuencias NUL-terminated de caracteres MIN-LEN o más se imprimen" -#: src/strings.c:69 +#: src/strings.c:68 msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" @@ -6686,85 +6740,82 @@ msgstr "" "Seleccionar tamaño de caracter y Endianess: s = 7-bit, S = 8-bit, {b,l} = 16-" "bit, {B,L} = 32-bit" -#: src/strings.c:73 +#: src/strings.c:72 msgid "Print name of the file before each string." msgstr "Imprimir nombre de archivo antes de cada cadena." -#: src/strings.c:75 +#: src/strings.c:74 msgid "Print location of the string in base 8, 10, or 16 respectively." msgstr "Imprimir ubicación de la cadena en base 8, 10, o 16 respectivamente." -#: src/strings.c:76 +#: src/strings.c:75 msgid "Alias for --radix=o" msgstr "Alias para --radix=o" #. Short description of program. -#: src/strings.c:83 +#: src/strings.c:82 msgid "Print the strings of printable characters in files." msgstr "Imprimir las cadenas de caracteres imprimibles en archivos." -#: src/strings.c:256 src/strings.c:291 +#: src/strings.c:255 src/strings.c:290 #, c-format 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:300 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:583 +#, fuzzy msgid "lseek failed" msgstr "lseek64 falló" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:600 src/strings.c:664 msgid "re-mmap failed" msgstr "re-mmap falló" -#: src/strings.c:639 -#, c-format +#: src/strings.c:637 msgid "mprotect failed" msgstr "mprotect falló" -#: src/strings.c:728 +#: src/strings.c:726 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" -#: src/strip.c:71 +#: src/strip.c:70 msgid "Place stripped output into FILE" msgstr "Colocar la salida obtenida en FICHERO" -#: src/strip.c:72 +#: src/strip.c:71 msgid "Extract the removed sections into FILE" msgstr "Extraer secciones eliminadas en FICHERO" -#: src/strip.c:73 +#: src/strip.c:72 msgid "Embed name FILE instead of -f argument" msgstr "Incorporar nombre FILE en lugar de argumento -f" -#: src/strip.c:77 +#: src/strip.c:76 msgid "Remove all debugging symbols" msgstr "Elimina todos los símbolos de depuración" -#: src/strip.c:81 +#: src/strip.c:80 msgid "Remove section headers (not recommended)" msgstr "Quitar sección de cabeceras (no recomendado)" -#: src/strip.c:83 +#: src/strip.c:82 msgid "Copy modified/access timestamps to the output" msgstr "Copiar marcas de tiempo modificadas/acceso a la salida" -#: src/strip.c:85 +#: src/strip.c:84 msgid "" "Resolve all trivial relocations between debug sections if the removed " "sections are placed in a debug file (only relevant for ET_REL files, " "operation is not reversible, needs -f)" msgstr "" -#: src/strip.c:87 +#: src/strip.c:86 msgid "" "Similar to --reloc-debug-sections, but resolve all trivial relocations " "between debug sections in place. No other stripping is performed (operation " @@ -6772,75 +6823,72 @@ msgid "" "section)" msgstr "" -#: src/strip.c:89 +#: src/strip.c:88 msgid "Remove .comment section" msgstr "Quitar sección de comentario" -#: src/strip.c:90 +#: src/strip.c:89 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 "" -#: src/strip.c:91 +#: src/strip.c:90 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." msgstr "" #. Short description of program. -#: src/strip.c:98 +#: src/strip.c:97 msgid "Discard symbols from object files." msgstr "Descarta símbolos de archivos objeto." -#: src/strip.c:247 -#, c-format +#: src/strip.c:245 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:251 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:265 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:287 #, c-format msgid "-f option specified twice" msgstr "opción -f especificada dos veces" -#: src/strip.c:299 +#: src/strip.c:296 #, c-format msgid "-F option specified twice" msgstr "opción -F especificada dos veces" -#: src/strip.c:362 +#: src/strip.c:359 #, 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:478 +#, fuzzy msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:756 src/strip.c:780 #, c-format msgid "cannot stat input file '%s'" msgstr "no sepuede stat fichero de entrada '%s'" -#: src/strip.c:761 +#: src/strip.c:770 #, c-format msgid "while opening '%s'" msgstr "mientras se abría '%s'" -#: src/strip.c:799 +#: src/strip.c:808 #, 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,296 +6899,306 @@ 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:820 #, 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:1057 #, 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:1101 +#, 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:1115 src/strip.c:1158 #, 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:1125 src/strip.c:1168 #, 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:1248 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:1250 +#: src/strip.c:1258 #, 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:1267 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "No se puede añadir nueva sección: %s" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1631 src/strip.c:1746 #, c-format msgid "while generating output file: %s" msgstr "al generar fichero de salida: %s" -#: src/strip.c:1688 +#: src/strip.c:1695 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1704 #, fuzzy, c-format 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:1712 src/strip.c:2553 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1722 +#: src/strip.c:1729 #, c-format msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1790 src/strip.c:1852 #, 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:1799 #, 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:1863 #, 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:1869 +#, 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:2082 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2469 src/strip.c:2577 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:2477 +#: src/strip.c:2480 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:2500 +#: src/strip.c:2503 #, 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:2544 #, 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:2562 #, 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:2602 src/strip.c:2622 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2659 src/strip.c:2666 #, 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:2683 src/strip.c:2759 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" -#: src/unstrip.c:66 +#: src/unstrip.c:65 msgid "Match MODULE against file names, not module names" msgstr "Coincidir MODULO con nombres de archivo, no con nombres de módulo" -#: src/unstrip.c:67 +#: src/unstrip.c:66 msgid "Silently skip unfindable files" msgstr "Omitir silenciosamente los archivos perdidos" -#: src/unstrip.c:70 +#: src/unstrip.c:69 msgid "Place output into FILE" msgstr "Colocar salida en FICHERO" -#: src/unstrip.c:72 +#: src/unstrip.c:71 msgid "Create multiple output files under DIRECTORY" msgstr "Crear archivos de salida múltiple bajo DIRECTORIO" -#: src/unstrip.c:73 +#: src/unstrip.c:72 msgid "Use module rather than file names" msgstr "Usar módulo en lugar de nombres de archivo" -#: src/unstrip.c:75 +#: src/unstrip.c:74 msgid "Create output for modules that have no separate debug information" msgstr "" "Crear salida para módulos que no tienen información de depuración " "independiente" -#: src/unstrip.c:78 +#: src/unstrip.c:77 msgid "Apply relocations to section contents in ET_REL files" msgstr "Aplicar reubicaciones a contenido de sección en archivos ET_REL" -#: src/unstrip.c:80 +#: src/unstrip.c:79 msgid "Only list module and file names, build IDs" msgstr "Solamente listar módulo y nombres de archivo, crear los ID" -#: src/unstrip.c:82 +#: src/unstrip.c:81 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" -#: src/unstrip.c:126 +#: src/unstrip.c:125 #, c-format msgid "-d option specified twice" msgstr "opción -d especificada dos veces" -#: src/unstrip.c:161 +#: src/unstrip.c:160 #, c-format msgid "only one of -o or -d allowed" msgstr "Sólo se permite usar -o ó -d " -#: src/unstrip.c:170 +#: src/unstrip.c:169 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "-n no puede utilizarse con archivos explícitos o con -o ó -d" -#: src/unstrip.c:185 +#: src/unstrip.c:184 #, c-format msgid "output directory '%s'" msgstr "Directorio de salida '%s'" -#: src/unstrip.c:194 +#: src/unstrip.c:193 #, c-format msgid "exactly two file arguments are required" msgstr "dos argumentos de archivos se requieren exactamente" -#: src/unstrip.c:200 +#: src/unstrip.c:199 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "No se permiten las opciones -m, -a, -R, ni -i con archivos explícitos" -#: src/unstrip.c:213 +#: src/unstrip.c:212 #, c-format msgid "-o or -d is required when using implicit files" msgstr "se requiere -o ó -d cuando se utilizan archivos implícitos" -#: src/unstrip.c:236 +#: src/unstrip.c:235 #, c-format msgid "cannot create ELF header: %s" msgstr "no se puede crear el encabezamiento ELF: %s" -#: src/unstrip.c:240 +#: src/unstrip.c:239 #, fuzzy, c-format msgid "cannot get shdrstrndx:%s" msgstr "No se puede encontrar la sección: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:243 src/unstrip.c:2085 #, c-format msgid "cannot get ELF header: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/unstrip.c:254 +#: src/unstrip.c:253 #, fuzzy, c-format msgid "cannot get new zero section: %s" msgstr "No se puede encontrar la sección: %s" -#: src/unstrip.c:257 +#: src/unstrip.c:256 #, fuzzy, c-format msgid "cannot update new zero section: %s" msgstr "no se puede actualizar reubicación: %s" -#: src/unstrip.c:261 +#: src/unstrip.c:260 #, c-format msgid "cannot copy ELF header: %s" msgstr "no se puede copiar encabezamiento ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:264 src/unstrip.c:2103 src/unstrip.c:2146 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:269 src/unstrip.c:2107 #, c-format msgid "cannot create program headers: %s" msgstr "No pueden crear encabezamientos de programa: %s" -#: src/unstrip.c:276 +#: src/unstrip.c:275 #, c-format msgid "cannot copy program header: %s" msgstr "no puede copiar encabezamiento de programa: %s" -#: src/unstrip.c:286 +#: src/unstrip.c:285 #, c-format msgid "cannot copy section header: %s" msgstr "no se puede copiar encabezamiento de sección: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:288 src/unstrip.c:1707 #, c-format msgid "cannot get section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:290 src/unstrip.c:1709 #, c-format msgid "cannot copy section data: %s" msgstr "no pueden copiar datos de sección: %s" -#: src/unstrip.c:319 +#: src/unstrip.c:318 #, c-format 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:1750 +#: src/unstrip.c:392 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:1749 #, 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:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:408 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 #, c-format msgid "cannot update symbol table: %s" msgstr "no se puede actualizar tabla de símbolos: %s" -#: src/unstrip.c:419 +#: src/unstrip.c:418 #, c-format 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:464 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:467 src/unstrip.c:482 #, c-format msgid "cannot update relocation: %s" msgstr "no se puede actualizar reubicación: %s" +#: src/unstrip.c:479 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + #: src/unstrip.c:580 #, c-format msgid "cannot get symbol version: %s" @@ -7196,7 +7254,7 @@ msgstr "no se puede obtener versión de símbolo: %s" 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:1073 src/unstrip.c:1553 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" @@ -7216,7 +7274,7 @@ msgstr "" 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:1337 src/unstrip.c:1353 src/unstrip.c:1633 src/unstrip.c:1924 #, 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" @@ -7235,71 +7293,69 @@ 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:1399 src/unstrip.c:1403 src/unstrip.c:1648 #, c-format msgid "cannot get section count: %s" msgstr "No se puede obtener cuenta de sección: %s" #: src/unstrip.c:1406 -#, c-format 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 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1458 src/unstrip.c:1568 #, c-format msgid "cannot read section header string table: %s" msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" -#: src/unstrip.c:1628 +#: src/unstrip.c:1627 #, c-format msgid "cannot add new section: %s" msgstr "No se puede añadir nueva sección: %s" -#: src/unstrip.c:1758 +#: src/unstrip.c:1757 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:1790 +#: src/unstrip.c:1789 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:2065 +#: src/unstrip.c:2064 #, c-format msgid "cannot read section data: %s" msgstr "no se puede leer la sección de datos: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2093 #, c-format msgid "cannot update ELF header: %s" msgstr "No se puede actualizar encabezamiento ELF: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2117 #, c-format msgid "cannot update program header: %s" msgstr "no se puede actualizar encabezamiento de programa: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2122 src/unstrip.c:2205 #, c-format msgid "cannot write output file: %s" msgstr "no se puede escribir al archivo de salida: %s" -#: src/unstrip.c:2174 +#: src/unstrip.c:2173 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "datos DWARF no se ajustan para polarización de pre-enlace; considere prelink " "-u" -#: src/unstrip.c:2177 +#: src/unstrip.c:2176 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7307,77 +7363,75 @@ msgstr "" "Datos DWARF en '%s' no se ajustan a polarización de pre-enlace; considere " "prelink -u" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2196 src/unstrip.c:2248 src/unstrip.c:2260 src/unstrip.c:2350 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "no se puede crear un descriptor ELF: %s" -#: src/unstrip.c:2235 +#: src/unstrip.c:2234 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2236 msgid ", use --force" msgstr "" -#: src/unstrip.c:2265 +#: src/unstrip.c:2264 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2268 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2273 +#: src/unstrip.c:2272 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2277 +#: src/unstrip.c:2276 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2308 +#: src/unstrip.c:2307 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "no se puede hallar archivo obtenido para módulo '%s': %s " -#: src/unstrip.c:2312 +#: src/unstrip.c:2311 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "No se puede abrir el archivo '%s' obtenido para módulo '%s': %s" -#: src/unstrip.c:2327 +#: src/unstrip.c:2326 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "no puede hallar archivo de depuración para módulo '%s': %su" -#: src/unstrip.c:2331 +#: src/unstrip.c:2330 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "No puede abrir archivo de depuración '%s' para módulo '%s': %s" -#: src/unstrip.c:2344 +#: src/unstrip.c:2343 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "No se obtuvo el archivo '%s' de módulo '%s' " -#: src/unstrip.c:2375 +#: src/unstrip.c:2374 #, c-format 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:2502 msgid "no matching modules found" msgstr "No se encontraron módulos coincidentes" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2512 msgid "matched more than one module" msgstr "coincidió con más de un módulo" -#: src/unstrip.c:2560 +#: src/unstrip.c:2557 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7385,7 +7439,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2558 #, fuzzy msgid "" "Combine stripped files with separate symbols and debug information.\n" @@ -7452,9 +7506,11 @@ msgid "" "executable PATH\n" "source BUILDID /FILENAME\n" "source PATH /FILENAME\n" +"section BUILDID SECTION-NAME\n" +"section PATH SECTION-NAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -7467,6 +7523,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..908303a9 100644 --- a/po/ja.po +++ b/po/ja.po @@ -6,9 +6,9 @@ # Hyu_gabaru Ryu_ichi , 2009. msgid "" msgstr "" -"Project-Id-Version: ja\n" +"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-11-02 13:30+0100\n" "PO-Revision-Date: 2009-09-20 15:32+0900\n" "Last-Translator: Hyu_gabaru Ryu_ichi \n" "Language-Team: Japanese \n" @@ -19,12 +19,12 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: lib/color.c:53 +#: lib/color.c:51 msgid "" "colorize the output. WHEN defaults to 'always' or can be 'auto' or 'never'" msgstr "" -#: lib/color.c:129 +#: lib/color.c:127 #, c-format msgid "" "%s: invalid argument '%s' for '--color'\n" @@ -34,96 +34,85 @@ 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 +#: lib/printversion.c:39 +#, 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:47 lib/xmalloc.c:60 lib/xmalloc.c:72 src/readelf.c:11754 +#: src/unstrip.c:311 #, 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 +#: libasm/asm_error.c:64 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 +#: libelf/elf_error.c:59 msgid "no error" msgstr "エラー無し" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 -#: libelf/elf_error.c:91 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 +#: libelf/elf_error.c:90 msgid "out of memory" -msgstr "メモリー不足" +msgstr "メモリー不足です" -#: libasm/asm_error.c:67 +#: libasm/asm_error.c:66 msgid "cannot create output file" msgstr "出力ファイルを作成できません" -#: libasm/asm_error.c:68 +#: libasm/asm_error.c:67 msgid "invalid parameter" -msgstr "不当なパラメーター" +msgstr "不当なパラメーターです" -#: libasm/asm_error.c:69 +#: libasm/asm_error.c:68 msgid "cannot change mode of output file" msgstr "出力ファイルのモードを変更できません" -#: libasm/asm_error.c:70 +#: libasm/asm_error.c:69 msgid "cannot rename output file" msgstr "出力ファイルの名前を変更できません" -#: libasm/asm_error.c:71 +#: libasm/asm_error.c:70 msgid "duplicate symbol" -msgstr "重複シンボル" +msgstr "重複シンボルです" -#: libasm/asm_error.c:72 +#: libasm/asm_error.c:71 msgid "invalid section type for operation" -msgstr "操作に不当なセクションタイプ" +msgstr "操作に不当なセクションタイプです" -#: libasm/asm_error.c:73 +#: libasm/asm_error.c:72 msgid "error during output of data" -msgstr "データの出力中にエラー" +msgstr "データ出力中のエラーです" -#: libasm/asm_error.c:74 +#: libasm/asm_error.c:73 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 +#: libasm/asm_error.c:82 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 +#: libelf/elf_error.c:62 msgid "unknown error" -msgstr "不明なエラー" +msgstr "不明なエラーです" -#: libcpu/i386_lex.l:122 -#, fuzzy, c-format -#| msgid "invalid page size value '%s': ignored" +#: libcpu/i386_lex.l:121 +#, 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" +#: libcpu/i386_lex.l:122 +#, 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" +#: libcpu/i386_parse.y:553 +#, 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 +#: libdw/dwarf_error.c:69 libelf/elf_error.c:110 libelf/elf_error.c:158 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,300 +240,290 @@ 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 +#: libdw/dwarf_error.c:96 libelf/elf_error.c:235 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:45 src/stack.c:643 src/unstrip.c:2547 msgid "Input selection options:" -msgstr "選択オプションを入力してください:" +msgstr "入力選択オプション:" -#: libdwfl/argp-std.c:48 +#: libdwfl/argp-std.c:46 msgid "Find addresses in FILE" -msgstr "ふぁいる 中のアドレスを探す" +msgstr "FILE の中から アドレスを探す" -#: libdwfl/argp-std.c:50 +#: libdwfl/argp-std.c:48 msgid "Find addresses from signatures found in COREFILE" -msgstr "COREFILE 中で見つかった署名からアドレスを探す" +msgstr "COREFILE 中で 見つかった 署名から アドレスを 探す" -#: libdwfl/argp-std.c:52 +#: libdwfl/argp-std.c:50 msgid "Find addresses in files mapped into process PID" -msgstr "プロセス PID に対応するファイル中のアドレスを探す" +msgstr "プロセス PID に 対応する ファイル中の アドレスを 探す" -#: libdwfl/argp-std.c:54 +#: libdwfl/argp-std.c:52 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 +#: libdwfl/argp-std.c:54 msgid "Find addresses in the running kernel" -msgstr "実行中のカーネルのアドレスを探す" +msgstr "実行中の カーネルから アドレスを 探す" -#: libdwfl/argp-std.c:58 +#: libdwfl/argp-std.c:56 msgid "Kernel with all modules" -msgstr "全てのモジュール付きのカーネル" +msgstr "全ての モジュール付きの カーネル" -#: libdwfl/argp-std.c:60 src/stack.c:650 +#: libdwfl/argp-std.c:58 src/stack.c:650 msgid "Search path for separate debuginfo files" -msgstr "分離した debuginfo ファイルべきパスを探す" +msgstr "分離された debuginfo ファイルを 探索する パス" -#: libdwfl/argp-std.c:161 +#: libdwfl/argp-std.c:159 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "-e か、-p、-k、-K、--core のひとつだけが認められます" -#: libdwfl/argp-std.c:234 +#: libdwfl/argp-std.c:232 msgid "cannot load kernel symbols" msgstr "カーネルシンボルをロードできません" #. Non-fatal to have no modules since we do have the kernel. -#: libdwfl/argp-std.c:238 +#: libdwfl/argp-std.c:236 msgid "cannot find kernel modules" -msgstr "カーネルモジュールを見つけられません" +msgstr "カーネルモジュールが見つかりません" -#: libdwfl/argp-std.c:255 +#: libdwfl/argp-std.c:253 msgid "cannot find kernel or modules" -msgstr "カーネルかモジュールを見つけられません" +msgstr "カーネルまたはモジュールが見つかりません" -#: libdwfl/argp-std.c:294 +#: libdwfl/argp-std.c:292 #, c-format msgid "cannot read ELF core file: %s" -msgstr "ELF コアファイルを読めません: %s" +msgstr "ELF コアファイルを読み込めません: %s" -#: libdwfl/argp-std.c:317 -#, fuzzy +#: libdwfl/argp-std.c:315 msgid "Not enough memory" -msgstr "メモリー不足" +msgstr "メモリーが十分ではありません" -#: libdwfl/argp-std.c:327 +#: libdwfl/argp-std.c:325 msgid "No modules recognized in core file" 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 +#: libdwfl/libdwflP.h:66 libelf/elf_error.c:114 libelf/elf_error.c:174 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 "" +#, fuzzy +#| msgid "no reference value" +msgid "Unknown register value" +msgstr "参照値ではありません" #: libdwfl/libdwflP.h:85 -msgid "Couldn't find architecture of any ELF" -msgstr "" +msgid "Error reading process memory" +msgstr "プロセスメモリーの読み込みエラーです" #: libdwfl/libdwflP.h:86 -msgid "Error parsing /proc filesystem" -msgstr "" +msgid "Couldn't find architecture of any ELF" +msgstr "ELF のアーキテクチャが1つも見つかりませんでした" #: libdwfl/libdwflP.h:87 -#, fuzzy -msgid "Invalid DWARF" -msgstr "不当な DWARF" +msgid "Error parsing /proc filesystem" +msgstr "/proc ファイルシステムのパースエラーです" #: libdwfl/libdwflP.h:88 -msgid "Unsupported DWARF" -msgstr "" +msgid "Invalid DWARF" +msgstr "不当な DWARF です" #: libdwfl/libdwflP.h:89 -msgid "Unable to find more threads" -msgstr "" +msgid "Unsupported DWARF" +msgstr "未対応の DWARF です" #: libdwfl/libdwflP.h:90 -msgid "Dwfl already has attached state" -msgstr "" +msgid "Unable to find more threads" +msgstr "これ以上スレッドが見つかりません" #: libdwfl/libdwflP.h:91 -msgid "Dwfl has no attached state" -msgstr "" +msgid "Dwfl already has attached state" +msgstr "Dwfl は既にアタッチ状態です" #: libdwfl/libdwflP.h:92 -msgid "Unwinding not supported for this architecture" -msgstr "" +msgid "Dwfl has no attached state" +msgstr "Dwfl はアタッチ状態ではありません" #: libdwfl/libdwflP.h:93 -#, fuzzy -msgid "Invalid argument" -msgstr "不当なパラメーター" +msgid "Unwinding not supported for this architecture" +msgstr "このアーキテクチャに対応していない巻き戻しです" #: libdwfl/libdwflP.h:94 -#, fuzzy +msgid "Invalid argument" +msgstr "不当な引数です" + +#: libdwfl/libdwflP.h:95 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 "" @@ -562,14 +535,14 @@ msgid ": %#" msgstr "<不明>: %#" #: 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 +574,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" @@ -626,771 +599,764 @@ msgstr "スタンドアローン" msgid ": %d" msgstr "<不明>: %d" -#: libelf/elf_error.c:67 +#: libelf/elf_error.c:66 msgid "unknown version" -msgstr "不明なバージョン" +msgstr "不明なバージョンです" -#: libelf/elf_error.c:71 +#: libelf/elf_error.c:70 msgid "unknown type" -msgstr "不明なタイプ" +msgstr "不明なタイプです" -#: libelf/elf_error.c:75 +#: libelf/elf_error.c:74 msgid "invalid `Elf' handle" -msgstr "無効な `Elf' の処理" +msgstr "無効な `Elf' のハンドルです" -#: libelf/elf_error.c:79 +#: libelf/elf_error.c:78 msgid "invalid size of source operand" -msgstr "ソース演算子の大きさが無効" +msgstr "ソース演算子の大きさが無効です" -#: libelf/elf_error.c:83 +#: libelf/elf_error.c:82 msgid "invalid size of destination operand" -msgstr "宛先演算子の大きさが無効" +msgstr "宛先演算子の大きさが無効です" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:86 src/readelf.c:6378 #, c-format msgid "invalid encoding" -msgstr "無効なエンコード" +msgstr "無効なエンコードです" -#: libelf/elf_error.c:95 +#: libelf/elf_error.c:94 msgid "invalid file descriptor" -msgstr "不当なファイル記述子" +msgstr "不当なファイル記述子です" -#: libelf/elf_error.c:99 -#, fuzzy +#: libelf/elf_error.c:98 msgid "invalid ELF file data" -msgstr "不当な ELF ファイル" +msgstr "不当な ELF ファイルデータです" -#: libelf/elf_error.c:103 +#: libelf/elf_error.c:102 msgid "invalid operation" -msgstr "不当な操作" +msgstr "不当な操作です" -#: libelf/elf_error.c:107 +#: libelf/elf_error.c:106 msgid "ELF version not set" -msgstr "ELF のバージョンが設定されていない" +msgstr "ELF のバージョンが設定されていません" -#: libelf/elf_error.c:119 +#: libelf/elf_error.c:118 msgid "invalid fmag field in archive header" -msgstr "アーカイブヘッダーの不当な fmag 領域" +msgstr "アーカイブヘッダーの不当な fmag 領域です" -#: libelf/elf_error.c:123 +#: libelf/elf_error.c:122 msgid "invalid archive file" -msgstr "不当なアーカイブファイル" +msgstr "不当なアーカイブファイルです" -#: libelf/elf_error.c:127 +#: libelf/elf_error.c:126 msgid "descriptor is not for an archive" -msgstr "記述子はアーカイブ用ではありません" +msgstr "記述子がアーカイブ用ではありません" -#: libelf/elf_error.c:131 +#: libelf/elf_error.c:130 msgid "no index available" -msgstr "索引が使えません" +msgstr "利用できる索引がありません" -#: libelf/elf_error.c:135 +#: libelf/elf_error.c:134 msgid "cannot read data from file" -msgstr "ファイルからデータを読みません" +msgstr "ファイルからデータを読み込めません" -#: libelf/elf_error.c:139 +#: libelf/elf_error.c:138 msgid "cannot write data to file" -msgstr "ファイルへデータを書けません" +msgstr "ファイルへデータを書き込めません" -#: libelf/elf_error.c:143 +#: libelf/elf_error.c:142 msgid "invalid binary class" -msgstr "不当なバイナリークラス" +msgstr "不当なバイナリークラスです" -#: libelf/elf_error.c:147 +#: libelf/elf_error.c:146 msgid "invalid section index" -msgstr "不当なセクション索引" +msgstr "不当なセクション索引です" -#: libelf/elf_error.c:151 +#: libelf/elf_error.c:150 msgid "invalid operand" -msgstr "不当なオペランド" +msgstr "不当なオペランドです" -#: libelf/elf_error.c:155 +#: libelf/elf_error.c:154 msgid "invalid section" -msgstr "不当なセクション" +msgstr "不当なセクションです" -#: libelf/elf_error.c:163 +#: libelf/elf_error.c:162 msgid "executable header not created first" -msgstr "エクゼキュータブルヘッダーが最初に作られていません" +msgstr "実行可能ヘッダーが最初に作られていません" -#: libelf/elf_error.c:167 +#: libelf/elf_error.c:166 msgid "file descriptor disabled" -msgstr "ファイル記述子が機能しません" +msgstr "ファイル記述子が無効化されています" -#: libelf/elf_error.c:171 -#, fuzzy +#: libelf/elf_error.c:170 msgid "archive/member file descriptor mismatch" -msgstr "アーカイブ/メンバー領域が不整合です" +msgstr "アーカイブ/メンバーのファイル記述子の不整合です" -#: libelf/elf_error.c:179 +#: libelf/elf_error.c:178 msgid "cannot manipulate null section" msgstr "null セクションを操作できません" -#: libelf/elf_error.c:183 +#: libelf/elf_error.c:182 msgid "data/scn mismatch" -msgstr "データ/scnが不整合です" +msgstr "データ/scnの不整合です" -#: libelf/elf_error.c:187 +#: libelf/elf_error.c:186 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:190 src/readelf.c:10266 src/readelf.c:10866 +#: src/readelf.c:10967 src/readelf.c:11149 #, c-format msgid "invalid data" -msgstr "不当なデータ" +msgstr "不当なデータです" -#: libelf/elf_error.c:195 +#: libelf/elf_error.c:194 msgid "unknown data encoding" -msgstr "不明なデータエンコード" +msgstr "不明なデータエンコードです" -#: libelf/elf_error.c:199 +#: libelf/elf_error.c:198 msgid "section `sh_size' too small for data" msgstr "`sh_size' セクションがデータには小さすぎます" -#: libelf/elf_error.c:203 +#: libelf/elf_error.c:202 msgid "invalid section alignment" -msgstr "不当なセクション調整" +msgstr "不当なセクションアラインメントです" -#: libelf/elf_error.c:207 +#: libelf/elf_error.c:206 msgid "invalid section entry size" -msgstr "不当なセクション項目の大きさ" +msgstr "不当なセクション項目の大きさです" -#: libelf/elf_error.c:211 +#: libelf/elf_error.c:210 msgid "update() for write on read-only file" -msgstr "読込み専用ファイルでの書込みのための update()" +msgstr "読み込み専用ファイルへの書き込みの update() です" -#: libelf/elf_error.c:215 +#: libelf/elf_error.c:214 msgid "no such file" msgstr "そのようなファイルはありません" -#: libelf/elf_error.c:219 +#: libelf/elf_error.c:218 msgid "only relocatable files can contain section groups" -msgstr "リロケータブルファイルのみセクショングループを含むことができます" +msgstr "リロケータブルファイルのみがセクショングループを含むことができます" -#: libelf/elf_error.c:224 +#: libelf/elf_error.c:223 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" -"プログラムヘッダーはエクゼキュータブルか、共用オブジェクト、コアファイルにの" -"み認められています" +"プログラムヘッダーは、実行可能ファイル、共有オブジェクト、コアファイルにのみ" +"認められています" -#: libelf/elf_error.c:231 +#: libelf/elf_error.c:230 msgid "file has no program header" msgstr "ファイルにプログラムヘッダーがありません" -#: libelf/elf_error.c:241 -#, fuzzy +#: libelf/elf_error.c:240 msgid "invalid section type" -msgstr "不当なセクション" +msgstr "不当なセクションタイプです" -#: libelf/elf_error.c:246 -#, fuzzy +#: libelf/elf_error.c:245 msgid "invalid section flags" -msgstr "不当なセクション" +msgstr "不当なセクションフラグです" -#: libelf/elf_error.c:251 -#, fuzzy +#: libelf/elf_error.c:250 msgid "section does not contain compressed data" -msgstr "セクション [%2d] '%s': セクションデータを得られません\n" +msgstr "セクションが圧縮データを含んでいません" -#: libelf/elf_error.c:256 +#: libelf/elf_error.c:255 msgid "section contains compressed data" -msgstr "" +msgstr "セクションが圧縮データを含んでいます" -#: libelf/elf_error.c:261 -#, fuzzy +#: libelf/elf_error.c:260 msgid "unknown compression type" -msgstr "不明なタイプ" +msgstr "不明な圧縮タイプです" -#: libelf/elf_error.c:266 -#, fuzzy +#: libelf/elf_error.c:265 msgid "cannot compress data" -msgstr "セクションデータを割り当てられません: %s" +msgstr "データを圧縮できません" -#: libelf/elf_error.c:271 -#, fuzzy +#: libelf/elf_error.c:270 msgid "cannot decompress data" -msgstr "セクションデータを割り当てられません: %s" +msgstr "データを展開できません" -#: src/addr2line.c:57 -#, fuzzy +#: src/addr2line.c:58 msgid "Input format options:" -msgstr "選択オプションを入力してください:" +msgstr "入力フォーマットオプション:" -#: src/addr2line.c:59 +#: src/addr2line.c:60 msgid "Treat addresses as offsets relative to NAME section." -msgstr "" +msgstr "アドレスを NAME セクションに 対する 相対 オフセット として 扱う" -#: src/addr2line.c:61 -#, fuzzy +#: src/addr2line.c:62 msgid "Output format options:" -msgstr "出力形式:" +msgstr "出力フォーマットオプション:" -#: src/addr2line.c:62 +#: src/addr2line.c:63 msgid "Print address before each entry" -msgstr "" +msgstr "各項目の前にアドレスを表示" -#: src/addr2line.c:63 +#: src/addr2line.c:64 msgid "Show only base names of source files" -msgstr "" - -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" -msgstr "" +msgstr "ソースファイルの ベースネーム のみ 表示" #: src/addr2line.c:66 -msgid "Also show function names" -msgstr "" +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" +msgstr "コンパイルディレクトリを 使用して 絶対ファイル名を 表示" #: src/addr2line.c:67 -msgid "Also show symbol or section names" -msgstr "" +msgid "Also show function names" +msgstr "関数名も表示" #: src/addr2line.c:68 -msgid "Also show symbol and the section names" -msgstr "" +msgid "Also show symbol or section names" +msgstr "シンボル名 または セクション名も 表示" #: src/addr2line.c:69 +msgid "Also show symbol and the section names" +msgstr "シンボル名と セクション名も 表示" + +#: src/addr2line.c:70 msgid "Also show line table flags" -msgstr "" +msgstr "行テーブルフラグも表示" -#: src/addr2line.c:71 +#: src/addr2line.c:72 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" +"アドレスの サブルーチンの インライン展開を 引き起こした 全ての ソース位置を " +"表示" -#: src/addr2line.c:74 +#: src/addr2line.c:75 msgid "Show demangled symbols (ARG is always ignored)" -msgstr "" +msgstr "デマングルされた シンボルを 表示 (ARGは常に無視される)" -#: src/addr2line.c:76 +#: src/addr2line.c:77 msgid "Print all information on one line, and indent inlines" -msgstr "" +msgstr "全ての 情報を 一行で 表示し、 字下げする" + +#: src/addr2line.c:79 +#, 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/strings.c:78 +#: src/addr2line.c:81 src/elfcmp.c:69 src/findtextrel.c:65 src/nm.c:99 +#: src/strings.c:77 msgid "Miscellaneous:" -msgstr "雑則:" +msgstr "Misc:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:89 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:93 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:526 msgid "Section syntax requires exactly one module" msgstr "" -#: src/addr2line.c:542 +#: src/addr2line.c:548 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:652 +#: src/addr2line.c:658 #, c-format msgid "cannot find symbol '%s'" -msgstr "" +msgstr "シンボル '%s' が見つかりません" -#: src/addr2line.c:657 +#: src/addr2line.c:663 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" -#: src/ar.c:67 +#: src/ar.c:66 msgid "Commands:" -msgstr "コマンド:" +msgstr "コマンド:" -#: src/ar.c:68 +#: src/ar.c:67 msgid "Delete files from archive." msgstr "アーカイブからファイルを削除。" -#: src/ar.c:69 +#: src/ar.c:68 msgid "Move files in archive." msgstr "アーカイブ内のファイルを移動。" -#: src/ar.c:70 +#: src/ar.c:69 msgid "Print files in archive." msgstr "アーカイブ内のファイルを印刷。" -#: src/ar.c:71 +#: src/ar.c:70 msgid "Quick append files to archive." -msgstr "アーカイブへの即座のファイル追加。" +msgstr "アーカイブへ ファイルを 素早く 追加。" -#: src/ar.c:73 +#: src/ar.c:72 msgid "Replace existing or insert new file into archive." -msgstr "アーカイブへの既存のファイルの置き換えか、新しいファイルの挿入。" +msgstr "アーカイブの既存ファイルの置き換えまたは新しいファイルの挿入。" -#: src/ar.c:74 +#: src/ar.c:73 msgid "Display content of archive." -msgstr "アーカイブの内容の表示" +msgstr "アーカイブの内容の表示。" -#: src/ar.c:75 +#: src/ar.c:74 msgid "Extract files from archive." -msgstr "アーカイブからのファイルの取出し" +msgstr "アーカイブからのファイルの取出し。" -#: src/ar.c:77 +#: src/ar.c:76 msgid "Command Modifiers:" -msgstr "コマンド修飾子:" +msgstr "コマンド修飾子:" -#: src/ar.c:78 +#: src/ar.c:77 msgid "Preserve original dates." msgstr "元データの保存。" -#: src/ar.c:79 +#: src/ar.c:78 msgid "Use instance [COUNT] of name." msgstr "名前のインスタンス [COUNT] の使用。" -#: src/ar.c:81 +#: src/ar.c:80 msgid "Do not replace existing files with extracted files." -msgstr "既存のファイルを抽出したファイルで置き換えない。" +msgstr "抽出したファイルで既存のファイルを置き換えない。" -#: src/ar.c:82 +#: src/ar.c:81 msgid "Allow filename to be truncated if necessary." -msgstr "必要ならばファイル名の切り捨てを認める。" +msgstr "必要ならば ファイル名の 切り詰めを 認める。" -#: src/ar.c:84 +#: src/ar.c:83 msgid "Provide verbose output." msgstr "饒舌な出力を提供する。" -#: src/ar.c:85 +#: src/ar.c:84 msgid "Force regeneration of symbol table." msgstr "シンボルテーブルの再生成を強制する。" -#: src/ar.c:86 +#: src/ar.c:85 msgid "Insert file after [MEMBER]." msgstr "[MEMBER]の後にファイルを挿入する。" -#: src/ar.c:87 +#: src/ar.c:86 msgid "Insert file before [MEMBER]." msgstr "[MEMBER]の前にファイルを挿入する。" -#: src/ar.c:88 +#: src/ar.c:87 msgid "Same as -b." msgstr "-b と同じ。" -#: src/ar.c:89 +#: src/ar.c:88 msgid "Suppress message when library has to be created." -msgstr "ライブラリーを生成しなければならない時にメッセージを抑止する。" +msgstr "ライブラリーを 生作成なければ ならない時に メッセージを 抑止する。" -#: src/ar.c:91 +#: src/ar.c:90 msgid "Use full path for file matching." msgstr "ファイル照合にフルパスを使う。" -#: src/ar.c:92 +#: src/ar.c:91 msgid "Update only older files in archive." -msgstr "アーカイブの古いファイルのみ更新する。" +msgstr "アーカイブの 古い ファイルのみ 更新する。" #. Short description of program. -#: src/ar.c:98 +#: src/ar.c:97 msgid "Create, modify, and extract from archives." -msgstr "アーカイブから作成や、修正、抽出する。" +msgstr "アーカイブの作成や修正、アーカイブからの抽出を行う。" #. Strings for arguments in help texts. -#: src/ar.c:101 +#: src/ar.c:100 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" -msgstr "[メンバー] [合計] アーカイブ [ファイル...]" +msgstr "" -#: src/ar.c:180 +#: src/ar.c:179 #, c-format msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" msgstr "'a'や、'b'、'i'は、'm' や 'r' オプションと一緒にしか指定できません" -#: src/ar.c:185 +#: src/ar.c:184 #, c-format msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" msgstr "'a'や、'b'、'i' 修飾子には MEMBER パラメーターが必要です" -#: src/ar.c:201 +#: src/ar.c:200 #, c-format msgid "'N' is only meaningful with the 'x' and 'd' options" msgstr "'N' は 'x' や 'd' オプションと一緒の時のみ意味を持ちます" -#: src/ar.c:206 +#: src/ar.c:205 #, c-format msgid "COUNT parameter required" msgstr "COUNT パラメーターが必要です" -#: src/ar.c:218 +#: src/ar.c:217 #, c-format msgid "invalid COUNT parameter %s" -msgstr "不当な COUNT パラメーター %s" +msgstr "不当な COUNT パラメーター %s です" -#: src/ar.c:225 +#: src/ar.c:224 #, c-format msgid "'%c' is only meaningful with the 'x' option" msgstr "'%c' は 'x' オプションと一緒の時のみ意味を持ちます" -#: src/ar.c:231 +#: src/ar.c:230 #, c-format msgid "archive name required" msgstr "アーカイブ名が必要です" -#: src/ar.c:244 +#: src/ar.c:243 #, c-format msgid "command option required" -msgstr "" +msgstr "コマンドオプションが必要です" -#: src/ar.c:295 +#: src/ar.c:294 #, c-format msgid "More than one operation specified" msgstr "1つを越える操作が指定されました" -#: src/ar.c:389 +#: src/ar.c:388 #, c-format msgid "cannot open archive '%s'" -msgstr "アーカイブ '%s' を開くことができません" +msgstr "アーカイブ '%s' を開けません" -#: src/ar.c:399 +#: src/ar.c:398 #, c-format msgid "cannot open archive '%s': %s" msgstr "アーカイブ '%s' を開けません: %s" -#: src/ar.c:403 +#: src/ar.c:402 #, c-format msgid "%s: not an archive file" msgstr "%s: アーカイブファイルではありません" -#: src/ar.c:407 +#: src/ar.c:406 #, c-format msgid "cannot stat archive '%s'" -msgstr "アーカイブに stat できません: '%s'" +msgstr "アーカイブ '%s' を stat できません" -#: src/ar.c:419 +#: src/ar.c:418 #, 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:471 src/ar.c:925 src/ar.c:1131 msgid "cannot create hash table" -msgstr "ハッシュテーブルを生成できません" +msgstr "ハッシュテーブルを作成できません" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:477 src/ar.c:931 src/ar.c:1139 msgid "cannot insert into hash table" -msgstr "ハッシュに挿入できません" +msgstr "ハッシュテーブルに挿入できません" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:485 src/ranlib.c:147 #, c-format msgid "cannot stat '%s'" -msgstr "'%s' に stat できません" +msgstr "'%s' を stat できません" -#: src/ar.c:589 +#: src/ar.c:587 #, c-format msgid "cannot read content of %s: %s" -msgstr "%s の内容を読むことができません: %s" +msgstr "%s の内容を読み込めません: %s" -#: src/ar.c:632 +#: src/ar.c:630 #, c-format msgid "cannot open %.*s" msgstr "%.*s を開けません" -#: src/ar.c:654 +#: src/ar.c:652 #, c-format msgid "failed to write %s" -msgstr "%s への書込みに失敗しました" +msgstr "%s への書き込みに失敗しました" -#: src/ar.c:666 +#: src/ar.c:664 #, c-format msgid "cannot change mode of %s" msgstr "%s のモードを変更できません" -#: src/ar.c:682 +#: src/ar.c:680 #, c-format msgid "cannot change modification time of %s" msgstr "%s の更新時間を変更できません" -#: src/ar.c:728 +#: src/ar.c:726 #, 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:762 src/ar.c:1016 src/ar.c:1419 src/ranlib.c:221 #, c-format msgid "cannot create new file" -msgstr "新しいファイルを生成できません" +msgstr "新しいファイルを作成できません" -#: src/ar.c:1225 +#: src/ar.c:1221 #, c-format msgid "position member %s not found" msgstr "位置メンバー %s が見つかりません" -#: src/ar.c:1235 +#: src/ar.c:1231 #, 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:1260 src/objdump.c:240 #, c-format msgid "cannot open %s" msgstr "%s を開けません" -#: src/ar.c:1269 +#: src/ar.c:1265 #, c-format msgid "cannot stat %s" msgstr "%s を stat できません" -#: src/ar.c:1275 +#: src/ar.c:1271 #, c-format msgid "%s is no regular file" msgstr "%s は一般ファイルではありません" -#: src/ar.c:1288 +#: src/ar.c:1284 #, 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:1304 #, c-format msgid "cannot read %s: %s" -msgstr "%s を読みません: %s" +msgstr "%s を読み込めません: %s" -#: src/ar.c:1483 -#, fuzzy, c-format +#: src/ar.c:1479 +#, c-format msgid "cannot represent ar_date" -msgstr "セクションデータを割り当てられません: %s" +msgstr "ar_date を表現できません" -#: src/ar.c:1489 -#, fuzzy, c-format +#: src/ar.c:1485 +#, c-format msgid "cannot represent ar_uid" -msgstr "セクションデータを割り当てられません: %s" +msgstr "ar_uid を表現できません" -#: src/ar.c:1495 -#, fuzzy, c-format +#: src/ar.c:1491 +#, c-format msgid "cannot represent ar_gid" -msgstr "セクションデータを割り当てられません: %s" +msgstr "ar_gid を表現できません" -#: src/ar.c:1501 -#, fuzzy, c-format +#: src/ar.c:1497 +#, c-format msgid "cannot represent ar_mode" -msgstr "セクションを得られません: %s" +msgstr "ar_mode を表現できません" -#: src/ar.c:1507 -#, fuzzy, c-format +#: src/ar.c:1503 +#, c-format msgid "cannot represent ar_size" -msgstr "%s を開けません" +msgstr "ar_size を表現できません" -#: src/arlib-argp.c:32 +#: src/arlib-argp.c:31 msgid "Use zero for uid, gid, and date in archive members." -msgstr "" +msgstr "アーカイブメンバの uid、 gid、 日付に ゼロを 使用する。" -#: src/arlib-argp.c:34 +#: src/arlib-argp.c:33 msgid "Use actual uid, gid, and date in archive members." -msgstr "" +msgstr "アーカイブメンバに 実際のuid、 gid、 日付を 使用する。" -#: src/arlib-argp.c:63 +#: src/arlib-argp.c:62 #, c-format msgid "%s (default)" -msgstr "" +msgstr "%s (デフォルト)" #. The archive is too big. -#: src/arlib.c:213 +#: src/arlib.c:212 #, c-format msgid "the archive '%s' is too large" msgstr "アーカイブ '%s' は大きすぎます" -#: src/arlib.c:226 +#: src/arlib.c:225 #, 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/readelf.c:158 +#: src/elfclassify.c:979 src/elfcompress.c:1358 src/elflint.c:76 +#: src/readelf.c:160 msgid "FILE..." -msgstr "ふぁいる..." +msgstr "" -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1429,482 +1395,483 @@ msgid "" "change the exit status." msgstr "" -#: src/elfcmp.c:60 +#: src/elfcmp.c:59 msgid "Control options:" -msgstr "" +msgstr "制御オプション:" -#: src/elfcmp.c:62 +#: src/elfcmp.c:61 msgid "Output all differences, not just the first" -msgstr "" +msgstr "最初のものに限らず、 全ての差異を 出力する" -#: src/elfcmp.c:63 +#: src/elfcmp.c:62 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" msgstr "" +"ロード可能セグメントの gap の 扱いを 制御する [ignore|match] (デフォルト: " +"ignore)" -#: src/elfcmp.c:65 +#: src/elfcmp.c:64 msgid "Ignore permutation of buckets in SHT_HASH section" -msgstr "" +msgstr "SHT_HASH セクションの バケットの 並べ替えを 無視" -#: src/elfcmp.c:67 +#: src/elfcmp.c:66 msgid "Ignore differences in build ID" -msgstr "" +msgstr "ビルド ID の差異を 無視" -#: src/elfcmp.c:68 +#: src/elfcmp.c:67 msgid "Output nothing; yield exit status only" -msgstr "" +msgstr "何も出力しない。 終了ステータスのみを生じさせる" #. Short description of program. -#: src/elfcmp.c:75 +#: src/elfcmp.c:74 msgid "Compare relevant parts of two ELF files for equality." -msgstr "" +msgstr "2つの ELF ファイルの 関連のある部分の 等価性を 比較する。" #. Strings for arguments in help texts. -#: src/elfcmp.c:79 +#: src/elfcmp.c:78 msgid "FILE1 FILE2" msgstr "" -#: src/elfcmp.c:141 +#: src/elfcmp.c:140 msgid "Invalid number of parameters.\n" -msgstr "" +msgstr "不当なパラメータ数です\n" -#: src/elfcmp.c:172 src/elfcmp.c:177 +#: src/elfcmp.c:171 src/elfcmp.c:176 #, c-format msgid "cannot get ELF header of '%s': %s" -msgstr "" +msgstr "'%s' の ELF ヘッダーを取得できません: %s" -#: src/elfcmp.c:203 +#: src/elfcmp.c:202 #, c-format msgid "%s %s diff: ELF header" msgstr "" -#: src/elfcmp.c:210 src/elfcmp.c:213 -#, fuzzy, c-format +#: src/elfcmp.c:209 src/elfcmp.c:212 +#, c-format msgid "cannot get section count of '%s': %s" -msgstr "セクションを得られません: %s" +msgstr "'%s' のセクションヘッダー数を取得できません: %s" -#: src/elfcmp.c:218 +#: src/elfcmp.c:217 #, c-format msgid "%s %s diff: section count" msgstr "" -#: src/elfcmp.c:225 src/elfcmp.c:228 -#, fuzzy, c-format +#: src/elfcmp.c:224 src/elfcmp.c:227 +#, c-format msgid "cannot get program header count of '%s': %s" -msgstr "プログラムヘッダーを得られません: %s" +msgstr "'%s' のプログラムヘッダー数を取得できません: %s" -#: src/elfcmp.c:233 -#, fuzzy, c-format +#: src/elfcmp.c:232 +#, c-format msgid "%s %s diff: program header count" -msgstr "ファイルにプログラムヘッダーがありません" +msgstr "" -#: src/elfcmp.c:241 src/elfcmp.c:244 -#, fuzzy, c-format +#: src/elfcmp.c:240 src/elfcmp.c:243 +#, c-format msgid "cannot get hdrstrndx of '%s': %s" -msgstr "セクションを得られません: %s" +msgstr "'%s' の hdrstrndx を取得できません: %s" -#: src/elfcmp.c:249 +#: src/elfcmp.c:248 #, c-format msgid "%s %s diff: shdr string index" msgstr "" -#: src/elfcmp.c:307 +#: src/elfcmp.c:306 #, c-format msgid "%s %s differ: section [%zu], [%zu] name" msgstr "" -#: src/elfcmp.c:330 -#, fuzzy, c-format +#: src/elfcmp.c:329 +#, c-format msgid "%s %s differ: section [%zu] '%s' header" -msgstr "セクション [%zu] '%s' の不当なデータ" +msgstr "" -#: src/elfcmp.c:338 src/elfcmp.c:344 +#: src/elfcmp.c:337 src/elfcmp.c:343 #, c-format msgid "cannot get content of section %zu in '%s': %s" msgstr "" -#: src/elfcmp.c:353 -#, fuzzy, c-format +#: src/elfcmp.c:352 +#, 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 +#: src/elfcmp.c:364 src/elfcmp.c:370 #, c-format msgid "cannot get symbol in '%s': %s" -msgstr "" +msgstr "'%s' のシンボルを取得できません: %s" -#: src/elfcmp.c:393 +#: src/elfcmp.c:392 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "" -#: src/elfcmp.c:396 +#: src/elfcmp.c:395 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "" -#: src/elfcmp.c:443 src/elfcmp.c:513 +#: src/elfcmp.c:442 src/elfcmp.c:512 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "" -#: src/elfcmp.c:451 -#, fuzzy, c-format +#: src/elfcmp.c:450 +#, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" -msgstr "セクション [%Zu] '%s' からデータが得られません: %s" +msgstr "" -#: src/elfcmp.c:462 +#: src/elfcmp.c:461 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "" -#: src/elfcmp.c:470 +#: src/elfcmp.c:469 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "" -#: src/elfcmp.c:485 +#: src/elfcmp.c:484 #, c-format msgid "%s %s differ: build ID length" msgstr "" -#: src/elfcmp.c:493 +#: src/elfcmp.c:492 #, c-format msgid "%s %s differ: build ID content" msgstr "" -#: src/elfcmp.c:502 +#: src/elfcmp.c:501 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "" -#: src/elfcmp.c:543 +#: src/elfcmp.c:542 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "" -#: src/elfcmp.c:547 +#: src/elfcmp.c:546 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "" -#: src/elfcmp.c:562 +#: src/elfcmp.c:561 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "" -#: src/elfcmp.c:595 src/elfcmp.c:600 +#: src/elfcmp.c:594 src/elfcmp.c:599 #, c-format msgid "cannot load data of '%s': %s" -msgstr "" +msgstr "'%s' のデータをロードできません: %s" -#: src/elfcmp.c:619 src/elfcmp.c:625 +#: src/elfcmp.c:618 src/elfcmp.c:624 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "" -#: src/elfcmp.c:631 +#: src/elfcmp.c:630 #, c-format msgid "%s %s differ: program header %d" msgstr "" -#: src/elfcmp.c:655 +#: src/elfcmp.c:654 #, c-format msgid "%s %s differ: gap" msgstr "" -#: src/elfcmp.c:706 +#: src/elfcmp.c:705 #, 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/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:733 src/findtextrel.c:194 src/nm.c:363 src/ranlib.c:140 +#: src/size.c:271 src/strings.c:184 src/strip.c:1040 src/strip.c:1077 +#: src/unstrip.c:2194 src/unstrip.c:2223 #, c-format msgid "cannot open '%s'" msgstr "'%s' を開けません" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:737 src/findtextrel.c:213 src/ranlib.c:157 #, c-format msgid "cannot create ELF descriptor for '%s': %s" -msgstr "" +msgstr "'%s' の ELF 記述子を作成できません: %s" -#: src/elfcmp.c:743 +#: src/elfcmp.c:742 #, c-format msgid "cannot create EBL descriptor for '%s'" -msgstr "" +msgstr "'%s' の EBL 記述子を作成できません" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:760 src/findtextrel.c:384 #, c-format msgid "cannot get section header of section %zu: %s" -msgstr "" +msgstr "セクション %zu のセクションヘッダーを取得できません: %s" -#: src/elfcmp.c:771 +#: src/elfcmp.c:770 #, c-format msgid "cannot get content of section %zu: %s" -msgstr "" +msgstr "セクション %zu の内容を取得できません: %s" -#: src/elfcmp.c:781 src/elfcmp.c:795 +#: src/elfcmp.c:780 src/elfcmp.c:794 #, 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:305 src/unstrip.c:116 #, 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 +#: src/elfcompress.c:145 src/elfcompress.c:1369 +#, 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:1373 +#, c-format msgid "Only one input file allowed together with '-o'" -msgstr "'-o' と '-f' と一緒の場合は入力ファイルは 1 つしか認められません" +msgstr "'-o' と一緒の場合は入力ファイルは 1 つしか認められません" -#: src/elfcompress.c:1307 -#, fuzzy +#: src/elfcompress.c:1331 msgid "Place (de)compressed output into FILE" -msgstr "はぎ取った出力を ふぁいる に置く" +msgstr "圧縮(展開)した出力を FILE に置く" -#: src/elfcompress.c:1310 +#: src/elfcompress.c:1334 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" "gnu' (.zdebug GNU style compression, 'gnu' is an alias)" msgstr "" -#: src/elfcompress.c:1313 +#: src/elfcompress.c:1337 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" +"圧縮(展開)する セクション名。 SECTION は 拡張 ワイルドカード パターン(デ" +"フォルトで '.?(z)debug*')" -#: src/elfcompress.c:1316 +#: src/elfcompress.c:1340 msgid "Print a message for each section being (de)compressed" -msgstr "" +msgstr "圧縮(展開) されている 各セクション に対する メッセージを 表示" -#: src/elfcompress.c:1319 +#: src/elfcompress.c:1343 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" msgstr "" -#: src/elfcompress.c:1322 src/strip.c:93 +#: src/elfcompress.c:1346 src/strip.c:92 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "少し壊れた ELF ファイルを取り扱うためにルールを少し緩和する" -#: src/elfcompress.c:1325 -#, fuzzy +#: src/elfcompress.c:1349 msgid "Be silent when a section cannot be compressed" -msgstr "セクション [%2d] '%s': セクションデータを得られません\n" +msgstr "セクションを圧縮できないときに静かにする" -#: src/elfcompress.c:1335 +#: src/elfcompress.c:1359 msgid "Compress or decompress sections in an ELF file." -msgstr "" +msgstr "ELF ファイルの セクションを 圧縮 または 展開する" -#: src/elflint.c:63 +#: src/elflint.c:62 msgid "Be extremely strict, flag level 2 features." -msgstr "非常に厳密にやってください、フラグレベル 2 機能。" +msgstr "非常に厳格にする。 フラグレベル 2 機能。" -#: src/elflint.c:64 +#: src/elflint.c:63 msgid "Do not print anything if successful" -msgstr "成功したら何も印刷しない" +msgstr "成功した場合は何も表示しない" -#: src/elflint.c:65 +#: src/elflint.c:64 msgid "Binary is a separate debuginfo file" msgstr "バイナリーは別の debuginfo ファイルです" -#: src/elflint.c:67 +#: src/elflint.c:66 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 +#: src/elflint.c:72 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 +#: src/elflint.c:153 src/readelf.c:391 +#, c-format msgid "cannot open input file '%s'" -msgstr "入力ファイルを開けません" +msgstr "入力ファイル '%s' を開けません" -#: src/elflint.c:161 -#, fuzzy, c-format +#: src/elflint.c:160 +#, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" -msgstr "Elf 記述子を生成できません: %s\n" +msgstr "'%s' に対する Elf 記述子を生成できません: %s\n" -#: src/elflint.c:180 +#: src/elflint.c:179 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "Elf 記述子を閉じている時にエラー: %s\n" -#: src/elflint.c:184 +#: src/elflint.c:183 msgid "No errors" msgstr "エラーはありません" -#: src/elflint.c:219 src/readelf.c:577 +#: src/elflint.c:218 src/readelf.c:603 msgid "Missing file name.\n" msgstr "ファイル名がありません。\n" -#: src/elflint.c:284 +#: src/elflint.c:283 #, 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 +#: src/elflint.c:291 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "ELF ファイルではありません - 最初に誤ったマジックバイトがあります\n" -#: src/elflint.c:357 +#: src/elflint.c:356 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d は既知のクラスではありません\n" -#: src/elflint.c:362 +#: src/elflint.c:361 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d は既知のデータエンコードではありません\n" -#: src/elflint.c:366 +#: src/elflint.c:365 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "不明な ELF ヘッダーバージョン数 e_ident[%d] == %d\n" -#: src/elflint.c:374 +#: src/elflint.c:373 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "不明な OS ABI e_ident[%d] == '%s'\n" -#: src/elflint.c:380 -#, fuzzy, c-format +#: src/elflint.c:379 +#, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "不明な ABI バージョン e_ident[%d] == %d\n" -#: src/elflint.c:385 +#: src/elflint.c:384 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] がゼロではありません\n" -#: src/elflint.c:390 +#: src/elflint.c:389 #, c-format msgid "unknown object file type %d\n" msgstr "不明なオブジェクトファイルタイプ %d\n" -#: src/elflint.c:397 +#: src/elflint.c:396 #, c-format msgid "unknown machine type %d\n" msgstr "不明なマシンタイプ %d\n" -#: src/elflint.c:401 +#: src/elflint.c:400 #, c-format msgid "unknown object file version\n" msgstr "不明なオブジェクトファイルバージョン\n" -#: src/elflint.c:407 +#: src/elflint.c:406 #, c-format msgid "invalid program header offset\n" msgstr "不当なプログラムヘッダーオフセット\n" -#: src/elflint.c:409 +#: src/elflint.c:408 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "実行ファイルと DSO はプログラムヘッダーオフセットが 0 であってはいけません\n" -#: src/elflint.c:413 +#: src/elflint.c:412 #, c-format msgid "invalid number of program header entries\n" msgstr "プログラムヘッダー項目数として不当な数\n" -#: src/elflint.c:421 +#: src/elflint.c:420 #, c-format msgid "invalid section header table offset\n" msgstr "不当なセクションヘッダーテーブルオフセット\n" -#: src/elflint.c:424 +#: src/elflint.c:423 #, c-format msgid "section header table must be present\n" msgstr "セクションヘッダーテーブルがなければなりません\n" -#: src/elflint.c:438 +#: src/elflint.c:437 #, c-format msgid "invalid number of section header table entries\n" msgstr "セクションヘッダーテーブル項目数として不当な数\n" -#: src/elflint.c:455 +#: src/elflint.c:454 #, c-format msgid "invalid section header index\n" msgstr "不当なセクションヘッダーインデックス\n" -#: src/elflint.c:473 +#: src/elflint.c:472 #, c-format msgid "Can only check %u headers, shnum was %u\n" msgstr "" -#: src/elflint.c:487 -#, fuzzy, c-format +#: src/elflint.c:486 +#, c-format msgid "invalid number of program header table entries\n" msgstr "プログラムヘッダー項目数として不当な数\n" -#: src/elflint.c:504 +#: src/elflint.c:503 #, c-format msgid "Can only check %u headers, phnum was %u\n" msgstr "" -#: src/elflint.c:509 +#: src/elflint.c:508 #, c-format msgid "invalid machine flags: %s\n" msgstr "不当なマシンフラグ: %s\n" -#: src/elflint.c:516 src/elflint.c:533 +#: src/elflint.c:515 src/elflint.c:532 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "不当な ELF ヘッダーサイズ: %hd\n" -#: src/elflint.c:519 src/elflint.c:536 +#: src/elflint.c:518 src/elflint.c:535 #, c-format msgid "invalid program header size: %hd\n" msgstr "不当なプログラムヘッダーサイズ: %hd\n" -#: src/elflint.c:522 src/elflint.c:539 +#: src/elflint.c:521 src/elflint.c:538 #, c-format msgid "invalid program header position or size\n" msgstr "不当なプログラムヘッダー位置かサイズ\n" -#: src/elflint.c:525 src/elflint.c:542 +#: src/elflint.c:524 src/elflint.c:541 #, c-format msgid "invalid section header size: %hd\n" msgstr "不当なセクションヘッダーサイズ: %hd\n" -#: src/elflint.c:528 src/elflint.c:545 +#: src/elflint.c:527 src/elflint.c:544 #, c-format msgid "invalid section header position or size\n" msgstr "不当なセクションヘッダー位置かサイズ\n" -#: src/elflint.c:590 +#: src/elflint.c:589 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1913,22 +1880,22 @@ msgstr "" "セクション [%2d] '%s': SHF_GROUP フラグのあるセクションにセクショングループの" "一部分が設定されていません\n" -#: src/elflint.c:594 -#, fuzzy, c-format +#: src/elflint.c:593 +#, 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:609 src/elflint.c:1497 src/elflint.c:1548 src/elflint.c:1654 +#: src/elflint.c:1990 src/elflint.c:2316 src/elflint.c:2942 src/elflint.c:3105 +#: src/elflint.c:3253 src/elflint.c:3455 src/elflint.c:4464 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:623 src/elflint.c:1662 +#: src/elflint.c:622 src/elflint.c:1661 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1937,7 +1904,7 @@ msgstr "" "セクション [%2d] '%s': セクション [%2d] '%s' 用の文字列テーブルとして参照され" "ていますが、タイプが SHT_STRTAB ではありません\n" -#: src/elflint.c:646 +#: src/elflint.c:645 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1946,45 +1913,45 @@ msgstr "" "セクション [%2d] '%s': シンボルテーブルは 1 個を越える拡張インデックスセク" "ションを持てません\n" -#: src/elflint.c:658 +#: src/elflint.c:657 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "セクション [%2u] '%s': 項目サイズが ElfXX_Sym と一致しません\n" -#: src/elflint.c:662 +#: src/elflint.c:661 #, c-format msgid "" "section [%2u] '%s': number of local entries in 'st_info' larger than table " "size\n" msgstr "" -#: src/elflint.c:671 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "セクション [%2d] '%s': シンボル %d を得られません: %s\n" -#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685 -#: src/elflint.c:688 src/elflint.c:691 +#: src/elflint.c:675 src/elflint.c:678 src/elflint.c:681 src/elflint.c:684 +#: src/elflint.c:687 src/elflint.c:690 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "セクション [%2d] '%s': 0番目の項目にある '%s' ゼロではありません\n" -#: src/elflint.c:694 +#: src/elflint.c:693 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "セクション [%2d] '%s': 0番目の項目用の XINDEX がゼロではありません\n" -#: src/elflint.c:704 +#: src/elflint.c:703 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "セクション [%2d] '%s': シンボル %zu を得られません: %s\n" -#: src/elflint.c:713 +#: src/elflint.c:712 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不当な名前の値\n" -#: src/elflint.c:728 +#: src/elflint.c:727 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): too large section index but no extended " @@ -1993,7 +1960,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 大きすぎるセクションインデックスだが、拡" "張セクションインデックスセクションがありません\n" -#: src/elflint.c:734 +#: src/elflint.c:733 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): XINDEX used for index which would fit " @@ -2003,29 +1970,29 @@ msgstr "" "クス用に使われる XINDEX\n" #. || sym->st_shndx > SHN_HIRESERVE always false -#: src/elflint.c:746 +#: src/elflint.c:745 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): invalid section index\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不当なセクションインデックス\n" -#: src/elflint.c:754 +#: src/elflint.c:753 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown type\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不明なタイプ\n" -#: src/elflint.c:760 +#: src/elflint.c:759 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown symbol binding\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不明なシンボルバインディング\n" -#: src/elflint.c:765 +#: src/elflint.c:764 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unique symbol not of object type\n" msgstr "" "セクション [%2d] '%s': シンボル %zu: オブジェクトタイプと異なる固有のシンボ" "ル\n" -#: src/elflint.c:773 +#: src/elflint.c:772 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): COMMON only allowed in relocatable " @@ -2034,7 +2001,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: COMMON はリロケータブルファイル内のみで" "許されます\n" -#: src/elflint.c:777 +#: src/elflint.c:776 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local COMMON symbols are nonsense\n" @@ -2042,7 +2009,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: ローカルな COMMON シンボルは意味がありま" "せん\n" -#: src/elflint.c:781 +#: src/elflint.c:780 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): function in COMMON section is nonsense\n" @@ -2050,12 +2017,12 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: COMMON セクションの機能は意味がありませ" "ん\n" -#: src/elflint.c:832 +#: src/elflint.c:831 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): st_value out of bounds\n" msgstr "セクション [%2d] '%s': シンボル %zu: st_value 境界外\n" -#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912 +#: src/elflint.c:837 src/elflint.c:862 src/elflint.c:911 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s) does not fit completely in referenced " @@ -2064,7 +2031,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu は参照されるセクション [%2d] '%s' とは完" "全に一致しません\n" -#: src/elflint.c:847 +#: src/elflint.c:846 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): referenced section [%2d] '%s' does not " @@ -2073,7 +2040,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' は " "SHF_TLS フラグが設定されていません\n" -#: src/elflint.c:857 src/elflint.c:905 +#: src/elflint.c:856 src/elflint.c:904 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value out of bounds of referenced " @@ -2082,7 +2049,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: st_value 参照されるセクション [%2d] " "'%s' の境界外\n" -#: src/elflint.c:884 +#: src/elflint.c:883 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but no TLS program header " @@ -2091,7 +2058,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目がない TLS シ" "ンボル\n" -#: src/elflint.c:890 +#: src/elflint.c:889 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but couldn't get TLS program " @@ -2100,7 +2067,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目がない TLS シ" "ンボル\n" -#: src/elflint.c:898 +#: src/elflint.c:897 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value short of referenced section " @@ -2109,7 +2076,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' の" "st_value 不足\n" -#: src/elflint.c:925 +#: src/elflint.c:924 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local symbol outside range described in " @@ -2118,7 +2085,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外のローカルシン" "ボル\n" -#: src/elflint.c:932 +#: src/elflint.c:931 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): non-local symbol outside range " @@ -2127,12 +2094,12 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外の非ローカルシ" "ンボル\n" -#: src/elflint.c:939 +#: src/elflint.c:938 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): non-local section symbol\n" msgstr "セクション [%2d] '%s': シンボル %zu: 非ローカルセクションシンボル\n" -#: src/elflint.c:989 +#: src/elflint.c:988 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -2141,7 +2108,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルが間違ったセクション " "[%2d] を参照しています\n" -#: src/elflint.c:996 +#: src/elflint.c:995 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -2153,7 +2120,7 @@ msgstr "" #. This test is more strict than the psABIs which #. usually allow the symbol to be in the middle of #. the .got section, allowing negative offsets. -#: src/elflint.c:1012 +#: src/elflint.c:1011 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -2162,7 +2129,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボル値 %# は %s のセ" "クションアドレス %# と一致しません\n" -#: src/elflint.c:1019 +#: src/elflint.c:1018 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -2171,7 +2138,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルサイズ % は %s " "のセクションサイズ % と一致しません\n" -#: src/elflint.c:1027 +#: src/elflint.c:1026 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -2180,7 +2147,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはありますが、.got セク" "ションがありません\n" -#: src/elflint.c:1043 +#: src/elflint.c:1042 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -2189,7 +2156,7 @@ msgstr "" "セクション [%2d] '%s': _DYNAMIC_ シンボル値 %# は動的セグメントアドレ" "ス %# と一致しません\n" -#: src/elflint.c:1050 +#: src/elflint.c:1049 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -2198,7 +2165,7 @@ msgstr "" "セクション [%2d] '%s': _DYNAMIC シンボルサイズ % は動的セグメントサイ" "ズ % と一致しません\n" -#: src/elflint.c:1063 +#: src/elflint.c:1062 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): symbol in dynamic symbol table with non-" @@ -2207,29 +2174,29 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 省略以外の可視性を持った動的シンボルテー" "ブル中のシンボル\n" -#: src/elflint.c:1067 +#: src/elflint.c:1066 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown bit set in st_other\n" msgstr "" "セクション [%2d] '%s': シンボル %zu: st_other 中に設定された不明なビット\n" -#: src/elflint.c:1105 +#: src/elflint.c:1104 #, fuzzy, c-format msgid "section [%2d] '%s': cannot get section data.\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:1121 +#: src/elflint.c:1120 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "セクション [%2d] '%s': この RELA セクション用に使われる DT_RELCOUNT\n" -#: src/elflint.c:1132 src/elflint.c:1185 +#: src/elflint.c:1131 src/elflint.c:1184 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" "セクション [%2d] '%s': このセクション用には高すぎる DT_RELCOUNT 値 %d\n" -#: src/elflint.c:1157 src/elflint.c:1210 +#: src/elflint.c:1156 src/elflint.c:1209 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -2238,7 +2205,7 @@ msgstr "" "セクション [%2d] '%s': UT_RELOCOUNT で指定されたインデックス %d 後の相対リロ" "ケーション\n" -#: src/elflint.c:1163 src/elflint.c:1216 +#: src/elflint.c:1162 src/elflint.c:1215 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -2247,52 +2214,52 @@ msgstr "" "セクション [%2d] '%s': インデックス %zu での非相対リロケーション; %d 相対リ" "ロケーションで指定された DT_RELCOUNT\n" -#: src/elflint.c:1175 +#: src/elflint.c:1174 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "セクション [%2d] '%s': この REL セクション用に使われる DT_RELACOUNT\n" -#: src/elflint.c:1258 +#: src/elflint.c:1257 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションインデックス\n" -#: src/elflint.c:1270 +#: src/elflint.c:1269 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションタイプ\n" -#: src/elflint.c:1278 +#: src/elflint.c:1277 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "セクション [%2d] '%s': sh_info はゼロでなければなりません\n" -#: src/elflint.c:1286 +#: src/elflint.c:1285 #, fuzzy, c-format msgid "" "section [%2d] '%s': no relocations for merge-able string sections possible\n" msgstr "" "セクション [%2d] '%s': マージできるセクションのリロケーションは不可能です\n" -#: src/elflint.c:1294 +#: src/elflint.c:1293 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "セクション [%2d] '%s': セクション項目サイズが ElfXX_Rela と一致しません\n" -#: src/elflint.c:1354 +#: src/elflint.c:1353 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "テキストリロケーションフラグが設定されていますが、読込み専用セグメントがあり" "ません\n" -#: src/elflint.c:1381 +#: src/elflint.c:1380 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "セクション [%2d] '%s': リロケーション %zu: 不当なタイプ\n" -#: src/elflint.c:1389 +#: src/elflint.c:1388 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -2301,13 +2268,13 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: このファイル用のリロケーションタイ" "プは不当です\n" -#: src/elflint.c:1397 +#: src/elflint.c:1396 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" "セクション [%2d] '%s': リロケーション %zu: 不当なシンボルインデックス\n" -#: src/elflint.c:1415 +#: src/elflint.c:1414 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -2316,12 +2283,12 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: シンボル '_GLOBAL_OFFSET_TABLE_' " "のみが %s と一緒に使用できます\n" -#: src/elflint.c:1432 +#: src/elflint.c:1431 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "セクション [%2d] '%s': リロケーション %zu: オフセット境界外\n" -#: src/elflint.c:1447 +#: src/elflint.c:1446 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -2330,7 +2297,7 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: タイプ %s のシンボルに対するコピー" "リロケーション\n" -#: src/elflint.c:1468 +#: src/elflint.c:1467 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -2339,24 +2306,24 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: 読込み専用セクションが変更されまし" "たが、テキストリロケーションフラグが設定されていません\n" -#: src/elflint.c:1483 +#: src/elflint.c:1482 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" "セクション [%2d] '%s': リロケーションがロードされたデータとロードされなかった" "データに対してです\n" -#: src/elflint.c:1523 src/elflint.c:1574 +#: src/elflint.c:1522 src/elflint.c:1573 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1650 +#: src/elflint.c:1649 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1668 +#: src/elflint.c:1667 #, fuzzy, c-format msgid "" "section [%2d]: referenced as string table for section [%2d] '%s' but section " @@ -2365,427 +2332,427 @@ msgstr "" "セクション [%2d] '%s': セクション [%2d] '%s' 用の文字列テーブルとして参照され" "ていますが、タイプが SHT_STRTAB ではありません\n" -#: src/elflint.c:1676 +#: src/elflint.c:1675 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1681 src/elflint.c:1970 +#: src/elflint.c:1680 src/elflint.c:1969 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1691 +#: src/elflint.c:1690 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1699 +#: src/elflint.c:1698 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1706 +#: src/elflint.c:1705 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1717 +#: src/elflint.c:1716 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1727 +#: src/elflint.c:1726 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1745 +#: src/elflint.c:1744 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" msgstr "" -#: src/elflint.c:1758 +#: src/elflint.c:1757 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " "[%2d] '%s' referenced by sh_link\n" msgstr "" -#: src/elflint.c:1801 +#: src/elflint.c:1800 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1816 +#: src/elflint.c:1815 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:1836 src/elflint.c:1864 +#: src/elflint.c:1835 src/elflint.c:1863 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "" -#: src/elflint.c:1848 +#: src/elflint.c:1847 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1857 +#: src/elflint.c:1856 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1872 src/elflint.c:1879 +#: src/elflint.c:1871 src/elflint.c:1878 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "" -#: src/elflint.c:1889 src/elflint.c:1893 +#: src/elflint.c:1888 src/elflint.c:1892 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" -#: src/elflint.c:1899 +#: src/elflint.c:1898 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922 +#: src/elflint.c:1909 src/elflint.c:1913 src/elflint.c:1917 src/elflint.c:1921 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" -#: src/elflint.c:1934 +#: src/elflint.c:1933 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1944 +#: src/elflint.c:1943 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1948 +#: src/elflint.c:1947 #, fuzzy, c-format msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションインデックス\n" -#: src/elflint.c:1953 +#: src/elflint.c:1952 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1956 +#: src/elflint.c:1955 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1965 +#: src/elflint.c:1964 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1980 +#: src/elflint.c:1979 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " "same symbol table\n" msgstr "" -#: src/elflint.c:1998 +#: src/elflint.c:1997 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:2010 +#: src/elflint.c:2009 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:2015 +#: src/elflint.c:2014 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:2032 src/elflint.c:2089 +#: src/elflint.c:2031 src/elflint.c:2088 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" msgstr "" -#: src/elflint.c:2046 src/elflint.c:2103 +#: src/elflint.c:2045 src/elflint.c:2102 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:2060 src/elflint.c:2117 +#: src/elflint.c:2059 src/elflint.c:2116 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2070 +#: src/elflint.c:2069 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2127 +#: src/elflint.c:2126 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" -#: src/elflint.c:2140 +#: src/elflint.c:2139 #, fuzzy, c-format msgid "section [%2d] '%s': not enough data\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:2152 +#: src/elflint.c:2151 #, fuzzy, c-format msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n" msgstr "セクション [%2d] '%s': 0番目の項目にある '%s' ゼロではありません\n" -#: src/elflint.c:2168 +#: src/elflint.c:2167 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " "least %ld)\n" msgstr "" -#: src/elflint.c:2177 +#: src/elflint.c:2176 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2211 +#: src/elflint.c:2210 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" msgstr "" -#: src/elflint.c:2232 +#: src/elflint.c:2231 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " "undefined\n" msgstr "" -#: src/elflint.c:2245 +#: src/elflint.c:2244 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" msgstr "" -#: src/elflint.c:2254 +#: src/elflint.c:2253 #, fuzzy, c-format msgid "" "section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:2284 +#: src/elflint.c:2283 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2289 +#: src/elflint.c:2288 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2295 +#: src/elflint.c:2294 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2308 +#: src/elflint.c:2307 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2326 +#: src/elflint.c:2325 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2330 +#: src/elflint.c:2329 #, fuzzy, c-format msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションインデックス\n" -#: src/elflint.c:2340 +#: src/elflint.c:2339 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2345 +#: src/elflint.c:2344 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2350 +#: src/elflint.c:2349 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " "entries\n" msgstr "" -#: src/elflint.c:2399 +#: src/elflint.c:2398 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523 +#: src/elflint.c:2422 src/elflint.c:2487 src/elflint.c:2522 #, fuzzy, c-format msgid "hash section [%2zu] '%s' does not contain enough data\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:2444 +#: src/elflint.c:2443 #, fuzzy, c-format msgid "hash section [%2zu] '%s' has zero bit mask words\n" msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536 +#: src/elflint.c:2454 src/elflint.c:2498 src/elflint.c:2535 #, fuzzy, c-format msgid "hash section [%2zu] '%s' uses too much data\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:2470 +#: src/elflint.c:2469 #, c-format msgid "" "hash section [%2zu] '%s' invalid symbol index % (max_nsyms: " "%, nentries: %\n" msgstr "" -#: src/elflint.c:2557 +#: src/elflint.c:2556 #, fuzzy, c-format msgid "hash section [%2zu] '%s' invalid sh_entsize\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションタイプ\n" -#: src/elflint.c:2567 src/elflint.c:2571 +#: src/elflint.c:2566 src/elflint.c:2570 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2578 +#: src/elflint.c:2577 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " "table in [%2zu] '%s'\n" msgstr "" -#: src/elflint.c:2590 +#: src/elflint.c:2589 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " "table in [%2zu] '%s'\n" msgstr "" -#: src/elflint.c:2606 +#: src/elflint.c:2605 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2626 +#: src/elflint.c:2625 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2637 +#: src/elflint.c:2636 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2642 +#: src/elflint.c:2641 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2648 +#: src/elflint.c:2647 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2653 +#: src/elflint.c:2652 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2660 +#: src/elflint.c:2659 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2664 +#: src/elflint.c:2663 #, fuzzy, c-format msgid "section [%2d] '%s': cannot get symbol name for signature\n" msgstr "セクション [%2d] '%s': シンボル %d を得られません: %s\n" -#: src/elflint.c:2669 +#: src/elflint.c:2668 #, fuzzy, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:2675 +#: src/elflint.c:2674 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2681 +#: src/elflint.c:2680 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2690 +#: src/elflint.c:2689 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2696 +#: src/elflint.c:2695 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2704 +#: src/elflint.c:2703 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2708 +#: src/elflint.c:2707 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2719 +#: src/elflint.c:2718 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2731 +#: src/elflint.c:2730 #, fuzzy, c-format msgid "section [%2d] '%s': section index %zu out of range\n" msgstr "セクション [%2d] '%s': リロケーション %zu: オフセット境界外\n" -#: src/elflint.c:2740 +#: src/elflint.c:2739 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2747 +#: src/elflint.c:2746 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2753 +#: src/elflint.c:2752 #, fuzzy, c-format msgid "" "section [%2d] '%s': element %zu references section [%2d] '%s' without " @@ -2794,818 +2761,819 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' は " "SHF_TLS フラグが設定されていません\n" -#: src/elflint.c:2760 +#: src/elflint.c:2759 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2957 +#: src/elflint.c:2956 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " "dynamic symbol table\n" msgstr "" -#: src/elflint.c:2969 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:2985 +#: src/elflint.c:2984 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:3001 +#: src/elflint.c:3000 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:3009 +#: src/elflint.c:3008 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:3023 +#: src/elflint.c:3022 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:3028 +#: src/elflint.c:3027 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:3038 +#: src/elflint.c:3037 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:3091 +#: src/elflint.c:3090 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:3099 src/elflint.c:3246 +#: src/elflint.c:3098 src/elflint.c:3245 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "" -#: src/elflint.c:3124 src/elflint.c:3300 +#: src/elflint.c:3123 src/elflint.c:3299 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "" -#: src/elflint.c:3131 src/elflint.c:3307 +#: src/elflint.c:3130 src/elflint.c:3306 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" -#: src/elflint.c:3141 +#: src/elflint.c:3140 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:3149 +#: src/elflint.c:3148 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:3161 +#: src/elflint.c:3160 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3169 +#: src/elflint.c:3168 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " "reference\n" msgstr "" -#: src/elflint.c:3178 +#: src/elflint.c:3177 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " "%#x, expected %#x\n" msgstr "" -#: src/elflint.c:3187 +#: src/elflint.c:3186 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " "name '%s'\n" msgstr "" -#: src/elflint.c:3198 +#: src/elflint.c:3197 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" -#: src/elflint.c:3215 src/elflint.c:3391 +#: src/elflint.c:3214 src/elflint.c:3390 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" -#: src/elflint.c:3223 src/elflint.c:3399 +#: src/elflint.c:3222 src/elflint.c:3398 #, c-format msgid "" "section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says " "there are more entries\n" msgstr "" -#: src/elflint.c:3238 +#: src/elflint.c:3237 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3285 +#: src/elflint.c:3284 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3289 +#: src/elflint.c:3288 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3295 +#: src/elflint.c:3294 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3322 +#: src/elflint.c:3321 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3329 +#: src/elflint.c:3328 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3337 +#: src/elflint.c:3336 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3357 +#: src/elflint.c:3356 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3374 +#: src/elflint.c:3373 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3407 +#: src/elflint.c:3406 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3423 +#: src/elflint.c:3422 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3448 +#: src/elflint.c:3447 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3464 +#: src/elflint.c:3463 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3475 +#: src/elflint.c:3474 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3484 +#: src/elflint.c:3483 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3496 +#: src/elflint.c:3495 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3513 +#: src/elflint.c:3512 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3522 +#: src/elflint.c:3521 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3531 +#: src/elflint.c:3530 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3546 +#: src/elflint.c:3545 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" #. Tag_File -#: src/elflint.c:3557 +#: src/elflint.c:3556 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3575 +#: src/elflint.c:3574 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3586 +#: src/elflint.c:3585 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3599 +#: src/elflint.c:3598 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3603 +#: src/elflint.c:3602 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" -#: src/elflint.c:3613 +#: src/elflint.c:3612 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3619 +#: src/elflint.c:3618 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3716 +#: src/elflint.c:3715 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3720 +#: src/elflint.c:3719 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3722 +#: src/elflint.c:3721 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3724 +#: src/elflint.c:3723 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3726 +#: src/elflint.c:3725 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3728 +#: src/elflint.c:3727 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3730 +#: src/elflint.c:3729 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3732 +#: src/elflint.c:3731 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3735 +#: src/elflint.c:3734 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" msgstr "" -#: src/elflint.c:3739 +#: src/elflint.c:3738 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" msgstr "" -#: src/elflint.c:3743 +#: src/elflint.c:3742 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" msgstr "" -#: src/elflint.c:3761 +#: src/elflint.c:3760 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3770 +#: src/elflint.c:3769 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3797 +#: src/elflint.c:3796 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3814 +#: src/elflint.c:3813 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3832 +#: src/elflint.c:3831 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" -#: src/elflint.c:3849 +#: src/elflint.c:3848 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3855 src/elflint.c:3887 +#: src/elflint.c:3854 src/elflint.c:3886 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" -#: src/elflint.c:3860 src/elflint.c:3892 +#: src/elflint.c:3859 src/elflint.c:3891 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " "segments\n" msgstr "" -#: src/elflint.c:3868 +#: src/elflint.c:3867 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3911 +#: src/elflint.c:3910 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3916 +#: src/elflint.c:3915 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3926 +#: src/elflint.c:3925 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3946 +#: src/elflint.c:3945 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" msgstr "" -#: src/elflint.c:3956 +#: src/elflint.c:3955 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "" -#: src/elflint.c:3964 +#: src/elflint.c:3963 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3974 +#: src/elflint.c:3973 #, fuzzy, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:3979 +#: src/elflint.c:3978 #, fuzzy, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:3985 +#: src/elflint.c:3984 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "" -#: src/elflint.c:3991 +#: src/elflint.c:3990 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3996 +#: src/elflint.c:3995 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:4003 +#: src/elflint.c:4002 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:4008 +#: src/elflint.c:4007 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:4027 +#: src/elflint.c:4026 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:4036 +#: src/elflint.c:4035 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "" -#: src/elflint.c:4043 +#: src/elflint.c:4042 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:4074 +#: src/elflint.c:4073 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " "%d\n" msgstr "" -#: src/elflint.c:4084 +#: src/elflint.c:4083 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d\n" msgstr "" -#: src/elflint.c:4110 +#: src/elflint.c:4109 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d and file contents is non-zero\n" msgstr "" -#: src/elflint.c:4121 +#: src/elflint.c:4120 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " "segment of program header entry %d\n" msgstr "" -#: src/elflint.c:4132 +#: src/elflint.c:4131 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:4142 +#: src/elflint.c:4141 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:4152 +#: src/elflint.c:4151 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" -#: src/elflint.c:4158 +#: src/elflint.c:4157 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " "but type is not SHT_TYPE\n" msgstr "" -#: src/elflint.c:4166 +#: src/elflint.c:4165 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:4217 +#: src/elflint.c:4216 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:4240 +#: src/elflint.c:4239 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:4251 +#: src/elflint.c:4250 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:4257 +#: src/elflint.c:4256 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:4268 +#: src/elflint.c:4267 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" msgstr "" -#: src/elflint.c:4281 +#: src/elflint.c:4280 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:4295 +#: src/elflint.c:4294 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:4344 +#: src/elflint.c:4343 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" -#: src/elflint.c:4348 +#: src/elflint.c:4347 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" msgstr "" -#: src/elflint.c:4397 +#: src/elflint.c:4403 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4402 +#: src/elflint.c:4408 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4421 +#: src/elflint.c:4427 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4441 +#: src/elflint.c:4447 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4444 +#: src/elflint.c:4450 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4465 +#: src/elflint.c:4471 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4472 +#: src/elflint.c:4478 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4475 +#: src/elflint.c:4481 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4493 +#: src/elflint.c:4499 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4508 +#: src/elflint.c:4514 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4518 +#: src/elflint.c:4524 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4529 +#: src/elflint.c:4535 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4537 +#: src/elflint.c:4543 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4544 +#: src/elflint.c:4550 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4558 +#: src/elflint.c:4564 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4561 +#: src/elflint.c:4567 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4571 +#: src/elflint.c:4577 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4592 +#: src/elflint.c:4598 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4603 +#: src/elflint.c:4609 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4610 +#: src/elflint.c:4616 #, 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:4625 src/elflint.c:4648 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4648 +#: src/elflint.c:4654 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4675 +#: src/elflint.c:4681 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4678 +#: src/elflint.c:4684 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4691 +#: src/elflint.c:4697 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4699 +#: src/elflint.c:4705 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4702 +#: src/elflint.c:4708 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4706 +#: src/elflint.c:4712 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4709 +#: src/elflint.c:4715 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4714 +#: src/elflint.c:4720 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4717 +#: src/elflint.c:4723 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4728 +#: src/elflint.c:4737 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4735 +#: src/elflint.c:4744 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4738 +#: src/elflint.c:4747 #, 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:4760 #, 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:4794 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4797 +#: src/elflint.c:4806 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "新しいファイルを生成できません" -#: src/elflint.c:4818 +#: src/elflint.c:4827 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" #: src/findtextrel.c:60 msgid "Input Selection:" -msgstr "" +msgstr "入力選択:" #: src/findtextrel.c:61 msgid "Prepend PATH to all file names" -msgstr "" +msgstr "全ての ファイル名に対して PATH を先頭に 付け加える" #: src/findtextrel.c:63 msgid "Use PATH as root of debuginfo hierarchy" -msgstr "" +msgstr "debuginfo 階層の ルートとして PATH を使用する" #. Short description of program. #: src/findtextrel.c:70 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/strings.c:87 src/strip.c:101 +#: src/findtextrel.c:74 src/nm.c:107 src/objdump.c:70 src/size.c:79 +#: src/strings.c:86 src/strip.c:100 msgid "[FILE...]" -msgstr "[ふぁいる...]" +msgstr "" -#: src/findtextrel.c:222 +#: src/findtextrel.c:223 #, c-format msgid "cannot get ELF header '%s': %s" -msgstr "" +msgstr "ELF ヘッダー '%s' を取得できません: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:234 #, c-format msgid "'%s' is not a DSO or PIE" -msgstr "" +msgstr "'%s' は DSO または PIE ではありません" -#: src/findtextrel.c:253 +#: src/findtextrel.c:254 #, c-format msgid "getting get section header of section %zu: %s" msgstr "" -#: src/findtextrel.c:277 +#: src/findtextrel.c:278 #, c-format msgid "cannot read dynamic section: %s" -msgstr "" +msgstr "dynamic セクションを読み込めません: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:299 #, c-format msgid "no text relocations reported in '%s'" msgstr "" @@ -3613,172 +3581,177 @@ msgstr "" #: src/findtextrel.c:310 #, c-format msgid "while reading ELF file" -msgstr "" +msgstr "ELF ファイルの読み込み中" #: src/findtextrel.c:314 -#, fuzzy, c-format +#, 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:325 src/findtextrel.c:340 +#, c-format msgid "cannot get program header index at offset %zd: %s" -msgstr "プログラムヘッダーを得られません: %s" +msgstr "オフセット %zd に位置するプログラムヘッダー索引を取得できません: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:396 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:417 src/findtextrel.c:440 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:516 +#: src/findtextrel.c:506 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" -msgstr "" +msgstr "%s は -fpic/-fPIC 付きでコンパイルされていません\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:560 #, 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:567 src/findtextrel.c:587 #, 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:575 #, 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:595 #, 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 +#: src/nm.c:65 src/strip.c:69 msgid "Output selection:" -msgstr "出力選択:" +msgstr "出力選択:" -#: src/nm.c:67 +#: src/nm.c:66 msgid "Display debugger-only symbols" -msgstr "デバッガー専用シンボルを表示" +msgstr "デバッガ専用シンボルを表示" -#: src/nm.c:68 +#: src/nm.c:67 msgid "Display only defined symbols" -msgstr "定義されたシンボルのみを表示" +msgstr "定義済みシンボルのみを表示" -#: src/nm.c:71 +#: src/nm.c:70 msgid "Display dynamic symbols instead of normal symbols" -msgstr "通常シンボルの代わりに動的シンボルを表示" +msgstr "通常シンボルの 代わりに 動的シンボルを 表示" -#: src/nm.c:72 +#: src/nm.c:71 msgid "Display only external symbols" msgstr "外部シンボルのみを表示" -#: src/nm.c:73 +#: src/nm.c:72 msgid "Display only undefined symbols" msgstr "未定義シンボルのみを表示" -#: src/nm.c:75 +#: src/nm.c:74 msgid "Include index for symbols from archive members" -msgstr "アーカイブメンバーからのシンボルの索引を含める" +msgstr "アーカイブメンバからの シンボルの 索引を 含める" -#: src/nm.c:77 src/size.c:54 +#: src/nm.c:76 src/size.c:53 msgid "Output format:" -msgstr "出力形式:" +msgstr "出力形式:" -#: src/nm.c:79 +#: src/nm.c:78 msgid "Print name of the input file before every symbol" -msgstr "全てのシンボルの前に入力ファイル名を印刷" +msgstr "各シンボルの 前に 入力ファイル名を 表示" -#: src/nm.c:82 +#: src/nm.c:81 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 +#: src/nm.c:83 msgid "Same as --format=bsd" msgstr "--format=bsd と同じ" -#: src/nm.c:85 +#: src/nm.c:84 msgid "Same as --format=posix" msgstr "--format=posix と同じ" -#: src/nm.c:86 src/size.c:60 +#: src/nm.c:85 src/size.c:59 msgid "Use RADIX for printing symbol values" -msgstr "シンボル値を印刷するために RADIX を使う" +msgstr "シンボル値の 表示に RADIX を使う" -#: src/nm.c:87 -#, fuzzy +#: src/nm.c:86 msgid "Mark special symbols" -msgstr "弱いシンボルに印を点ける" +msgstr "特別なシンボルに印を点ける" -#: src/nm.c:89 +#: src/nm.c:88 msgid "Print size of defined symbols" -msgstr "定義されたシンボルの印刷サイズ" +msgstr "定義済みシンボルのサイズを表示" -#: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 +#: src/nm.c:90 src/size.c:67 src/strip.c:74 src/unstrip.c:68 msgid "Output options:" -msgstr "出力オプション:" +msgstr "出力オプション:" -#: src/nm.c:92 +#: src/nm.c:91 msgid "Sort symbols numerically by address" -msgstr "シンボルをアドレスにより数値的に並べ替える" +msgstr "シンボルを アドレスにより 数値的に 並べ替える" -#: src/nm.c:94 +#: src/nm.c:93 msgid "Do not sort the symbols" msgstr "シンボルを並べ替えない" -#: src/nm.c:95 +#: src/nm.c:94 msgid "Reverse the sense of the sort" msgstr "並べ替えの意味を逆にする" -#: src/nm.c:98 +#: src/nm.c:97 msgid "Decode low-level symbol names into source code names" -msgstr "" +msgstr "低水準の シンボル名を ソースコード上の 名前に デコードする" #. Short description of program. -#: src/nm.c:105 +#: src/nm.c:104 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 +#: src/nm.c:115 src/objdump.c:78 msgid "Output formatting" -msgstr "出力形式:" +msgstr "出力形式:" -#: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 +#: src/nm.c:139 src/objdump.c:102 src/size.c:104 src/strip.c:132 #, fuzzy, c-format 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/nm.c:380 src/nm.c:392 src/size.c:287 src/size.c:296 src/size.c:307 +#: src/strip.c:2766 #, c-format msgid "while closing '%s'" msgstr "'%s' を閉じている最中" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:402 src/objdump.c:279 src/strip.c:827 #, c-format msgid "%s: File format not recognized" msgstr "%s: ファイル形式を認識できませんでした" #. Note: 0 is no valid offset. -#: src/nm.c:443 +#: src/nm.c:442 #, fuzzy msgid "" "\n" @@ -3787,44 +3760,43 @@ msgstr "" "\n" "アーカイブ索引:" -#: src/nm.c:452 +#: src/nm.c:451 #, c-format msgid "invalid offset %zu for symbol %s" msgstr "シンボル %2$sの不正なオフセット %1$zu " -#: src/nm.c:457 +#: src/nm.c:456 #, c-format msgid "%s in %s\n" msgstr "%2$s の中の %1$s\n" -#: src/nm.c:465 +#: src/nm.c:464 #, c-format msgid "cannot reset archive offset to beginning" msgstr "アーカイブのオフセットを最初にリセットできません" -#: src/nm.c:490 src/objdump.c:328 +#: src/nm.c:489 src/objdump.c:327 #, c-format msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: ファイル形式を認識できません" -#: src/nm.c:705 -#, c-format +#: src/nm.c:702 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:742 src/nm.c:1234 src/objdump.c:778 src/readelf.c:663 +#: src/readelf.c:1471 src/readelf.c:1620 src/readelf.c:1847 src/readelf.c:2084 +#: src/readelf.c:2273 src/readelf.c:2451 src/readelf.c:2526 src/readelf.c:2791 +#: src/readelf.c:2866 src/readelf.c:2952 src/readelf.c:3547 src/readelf.c:3595 +#: src/readelf.c:3664 src/readelf.c:11581 src/readelf.c:12771 +#: src/readelf.c:12981 src/readelf.c:13049 src/size.c:396 src/size.c:467 +#: src/strip.c:1093 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文字列テーブル索引が得られません" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:767 #, c-format msgid "" "\n" @@ -3838,7 +3810,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:770 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3847,103 +3819,102 @@ msgstr "" "%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" "\n" -#: src/nm.c:776 +#: src/nm.c:772 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:774 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:776 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:778 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1245 #, 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:1250 #, 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:1330 #, 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:1566 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: 不当な操作" -#: src/nm.c:1622 +#: src/nm.c:1616 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: シンボルがありません" -#: src/objdump.c:52 +#: src/objdump.c:51 msgid "Mode selection:" -msgstr "" +msgstr "モード選択:" -#: src/objdump.c:53 +#: src/objdump.c:52 msgid "Display relocation information." -msgstr "" +msgstr "リロケーション 情報の 表示" -#: src/objdump.c:55 +#: src/objdump.c:54 msgid "Display the full contents of all sections requested" -msgstr "" +msgstr "要求された 全ての セクションの 最大限の 内容を 表示" -#: src/objdump.c:57 +#: src/objdump.c:56 msgid "Display assembler code of executable sections" -msgstr "" +msgstr "実行可能 セクションの アセンブラコードを 表示" -#: src/objdump.c:59 -#, fuzzy +#: src/objdump.c:58 msgid "Output content selection:" -msgstr "出力選択:" +msgstr "出力内容選択:" -#: src/objdump.c:61 +#: src/objdump.c:60 msgid "Only display information for section NAME." -msgstr "" +msgstr "NAME セクションの情報のみを表示" #. Short description of program. -#: src/objdump.c:67 +#: src/objdump.c:66 msgid "Show information from FILEs (a.out by default)." -msgstr "" +msgstr "FILE から情報を表示する (デフォルトでは a.out)" -#: src/objdump.c:218 src/readelf.c:582 +#: src/objdump.c:217 src/readelf.c:608 msgid "No operation specified.\n" msgstr "操作が指定されていません。\n" -#: src/objdump.c:258 src/objdump.c:270 +#: src/objdump.c:257 src/objdump.c:269 #, c-format msgid "while close `%s'" msgstr "" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:362 src/readelf.c:2179 src/readelf.c:2370 msgid "INVALID SYMBOL" msgstr "不当なシンボル" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:377 src/readelf.c:2213 src/readelf.c:2406 msgid "INVALID SECTION" msgstr "不当なセクション" -#: src/objdump.c:498 +#: src/objdump.c:497 #, c-format msgid "" "\n" @@ -3951,137 +3922,127 @@ msgid "" "%-*s TYPE VALUE\n" msgstr "" -#: src/objdump.c:501 +#: src/objdump.c:500 msgid "OFFSET" msgstr "" -#: src/objdump.c:566 +#: src/objdump.c:565 #, c-format msgid "Contents of section %s:\n" msgstr "" -#: src/objdump.c:687 -#, c-format +#: src/objdump.c:686 msgid "cannot disassemble" -msgstr "" +msgstr "逆アセンブルできません" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:757 msgid "cannot create backend for elf file" -msgstr "新しいファイルを生成できません" +msgstr "elf ファイル用にバックエンドを作成できません" #. Short description of program. -#: src/ranlib.c:63 +#: src/ranlib.c:62 msgid "Generate an index to speed access to archives." -msgstr "" +msgstr "アーカイブへのアクセス加速のための索引生成" #. Strings for arguments in help texts. -#: src/ranlib.c:66 +#: src/ranlib.c:65 msgid "ARCHIVE" msgstr "" -#: src/ranlib.c:102 +#: src/ranlib.c:101 #, c-format msgid "Archive name required" -msgstr "" +msgstr "アーカイブ名が必要です" -#: src/ranlib.c:166 +#: src/ranlib.c:165 #, c-format msgid "'%s' is no archive" -msgstr "" +msgstr "'%s' はアーカイブではありません" -#: src/ranlib.c:201 +#: src/ranlib.c:200 #, c-format msgid "error while freeing sub-ELF descriptor: %s" msgstr "" -#: src/readelf.c:97 -#, fuzzy +#: src/readelf.c:96 msgid "ELF input selection:" -msgstr "出力選択:" +msgstr "ELF入力選択:" -#: src/readelf.c:99 +#: src/readelf.c:98 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" msgstr "" +"ELF 入力データとして SECTION (デフォルトでは .gnu_debugdata) を使用する" -#: src/readelf.c:102 +#: src/readelf.c:101 msgid "" "Used with -w to find the skeleton Compile Units in FILE associated with the " "Split Compile units in a .dwo input file" msgstr "" -#: src/readelf.c:104 -#, fuzzy +#: src/readelf.c:103 msgid "ELF output selection:" -msgstr "出力選択:" +msgstr "ELF出力選択:" -#: src/readelf.c:106 +#: src/readelf.c:105 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "" -#: src/readelf.c:107 +#: src/readelf.c:106 msgid "Display the dynamic segment" msgstr "動的セグメントを表示" -#: src/readelf.c:108 +#: src/readelf.c:107 msgid "Display the ELF file header" msgstr "ELF ファイルヘッダーを表示" -#: src/readelf.c:110 +#: src/readelf.c:109 msgid "Display histogram of bucket list lengths" -msgstr "バケットリスト長の柱状図を表示" +msgstr "バケットリスト長のヒストグラムを表示" -#: src/readelf.c:111 +#: src/readelf.c:110 msgid "Display the program headers" msgstr "プログラムヘッダーを表示" -#: src/readelf.c:113 +#: src/readelf.c:112 msgid "Display relocations" msgstr "リロケーションを表示" -#: src/readelf.c:114 -#, fuzzy +#: src/readelf.c:113 msgid "Display the section groups" -msgstr "セクションのヘッダーを表示" +msgstr "セクショングループを表示" -#: src/readelf.c:115 -#, fuzzy +#: src/readelf.c:114 msgid "Display the sections' headers" -msgstr "セクションのヘッダーを表示" +msgstr "セクションヘッダーを表示" -#: src/readelf.c:118 -#, fuzzy +#: src/readelf.c:117 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,191 +4056,195 @@ 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" msgstr "アーカイブのシンボル索引を表示" #: src/readelf.c:141 -msgid "Output control:" -msgstr "出力制御:" +msgid "Use the dynamic segment when possible for displaying info" +msgstr "" #: src/readelf.c:143 +msgid "Output control:" +msgstr "出力制御:" + +#: src/readelf.c:145 msgid "Do not find symbol names for addresses in DWARF data" msgstr "DWARFデータ中のアドレスのためのシンボル名を探さない" -#: src/readelf.c:145 +#: src/readelf.c:147 #, fuzzy msgid "" "Display just offsets instead of resolving values to addresses in DWARF data" msgstr "DWARFデータ中のアドレスのためのシンボル名を探さない" -#: src/readelf.c:147 +#: src/readelf.c:149 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:149 +#: src/readelf.c:151 msgid "" "Show compression information for compressed sections (when used with -S); " "decompress section before dumping data (when used with -p or -x)" msgstr "" #. Short description of program. -#: src/readelf.c:154 +#: src/readelf.c:156 msgid "Print information from ELF file in human-readable form." -msgstr "ELF ファイルから人間が読める形で情報を印刷する。" +msgstr "ELF ファイルから人間が読める形で情報を表示する。" #. Look up once. -#: src/readelf.c:350 +#: src/readelf.c:373 msgid "yes" msgstr "はい" -#: src/readelf.c:351 +#: src/readelf.c:374 msgid "no" msgstr "いいえ" -#: src/readelf.c:550 +#: src/readelf.c:576 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "不明な DWARF デバッグセクション `%s'.\n" -#: src/readelf.c:621 src/readelf.c:732 +#: src/readelf.c:647 src/readelf.c:758 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "Elf 記述子を生成できません: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:654 src/readelf.c:980 src/strip.c:1188 #, 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:672 src/readelf.c:1287 src/readelf.c:1495 #, 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/readelf.c:681 src/readelf.c:1294 src/readelf.c:1502 src/readelf.c:13001 +#: src/unstrip.c:396 src/unstrip.c:427 src/unstrip.c:490 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/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 #, c-format msgid "cannot get section header: %s" -msgstr "セクションヘッダーを得られません: %s" +msgstr "セクションヘッダーを取得できません: %s" -#: src/readelf.c:663 -#, fuzzy, c-format +#: src/readelf.c:689 +#, 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:698 src/readelf.c:6797 src/readelf.c:10854 src/readelf.c:10956 +#: src/readelf.c:11134 #, c-format msgid "cannot get %s content: %s" -msgstr "%s の内容を得られません: %s" +msgstr "%s の内容を取得できません: %s" -#: src/readelf.c:688 -#, fuzzy, c-format +#: src/readelf.c:714 +#, c-format msgid "cannot create temp file '%s'" -msgstr "新しいファイル '%s' を生成できません: %s" +msgstr "一時ファイル '%s' を作成できません" -#: src/readelf.c:697 -#, fuzzy, c-format +#: src/readelf.c:723 +#, c-format msgid "cannot write section data" -msgstr "セクションデータを割り当てられません: %s" +msgstr "セクションデータを書き込みできません" -#: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 +#: src/readelf.c:729 src/readelf.c:746 src/readelf.c:775 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "Elf 記述子を閉じている時にエラー: %s" -#: src/readelf.c:710 -#, fuzzy, c-format +#: src/readelf.c:736 +#, c-format msgid "error while rewinding file descriptor" -msgstr "Elf 記述子を閉じている時にエラー: %s" +msgstr "ファイル記述子を巻き戻している時にエラー" -#: src/readelf.c:744 +#: src/readelf.c:770 #, c-format msgid "'%s' is not an archive, cannot print archive index" -msgstr "'%s' はアーカイブではなく、アーカイブ索引を印刷できません" +msgstr "'%s' はアーカイブではなく、アーカイブ索引を表示できません" -#: src/readelf.c:848 +#: src/readelf.c:874 #, c-format msgid "cannot stat input file" msgstr "入力ファイルを stat できません" -#: src/readelf.c:850 +#: src/readelf.c:876 #, c-format msgid "input file is empty" msgstr "入力ファイルが空です" -#: src/readelf.c:852 +#: src/readelf.c:878 #, c-format msgid "failed reading '%s': %s" msgstr "'%s' の読込みに失敗: %s" -#: src/readelf.c:881 +#: src/readelf.c:907 #, fuzzy, c-format msgid "No such section '%s' in '%s'" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/readelf.c:940 +#: src/readelf.c:966 #, c-format msgid "cannot read ELF header: %s" -msgstr "ELF ヘッダーが読めません: %s" +msgstr "ELF ヘッダーを読み込めません: %s" -#: src/readelf.c:948 +#: src/readelf.c:974 #, c-format msgid "cannot create EBL handle" -msgstr "EBL ヘッダーを生成できません" +msgstr "EBL ハンドルを作成できません" -#: src/readelf.c:961 -#, fuzzy, c-format +#: src/readelf.c:985 +#, c-format msgid "cannot determine number of program headers: %s" -msgstr "セクション数を決定できません: %s" +msgstr "プログラムヘッダの数を決定できません: %s" -#: src/readelf.c:993 -#, fuzzy, c-format +#: src/readelf.c:1017 +#, c-format msgid "cannot read ELF: %s" -msgstr "%s を読みません: %s" +msgstr "ELFを読み込めません: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1078 msgid "NONE (None)" msgstr "なし (なし)" -#: src/readelf.c:1055 +#: src/readelf.c:1079 msgid "REL (Relocatable file)" msgstr "REL (リロケータブルファイル)" -#: src/readelf.c:1056 +#: src/readelf.c:1080 msgid "EXEC (Executable file)" msgstr "(EXEC (実行ファイル)" -#: src/readelf.c:1057 +#: src/readelf.c:1081 msgid "DYN (Shared object file)" msgstr "DYN (共用オブジェクトファイル)" -#: src/readelf.c:1058 +#: src/readelf.c:1082 msgid "CORE (Core file)" msgstr "CORE (コアファイル)" -#: src/readelf.c:1063 +#: src/readelf.c:1087 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS 固有: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1089 #, c-format msgid "Processor Specific: (%x)\n" msgstr "プロセッサー固有: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1099 msgid "" "ELF Header:\n" " Magic: " @@ -4287,7 +4252,7 @@ msgstr "" "ELF ヘッダー:\n" " マジック: " -#: src/readelf.c:1079 +#: src/readelf.c:1103 #, c-format msgid "" "\n" @@ -4296,123 +4261,123 @@ msgstr "" "\n" " クラス: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1108 #, c-format msgid " Data: %s\n" msgstr " データ: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1114 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " 識別バージョン: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1116 src/readelf.c:1138 msgid "(current)" msgstr "(現在)" -#: src/readelf.c:1096 +#: src/readelf.c:1120 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1123 #, c-format msgid " ABI Version: %hhd\n" msgstr " ABI バージョン: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1126 msgid " Type: " msgstr " タイプ: " -#: src/readelf.c:1107 +#: src/readelf.c:1131 #, c-format msgid " Machine: %s\n" msgstr " マシン : %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1133 #, fuzzy, c-format msgid " Machine: : 0x%x\n" msgstr " マシン : %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1136 #, c-format msgid " Version: %d %s\n" msgstr " バージョン: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1140 #, c-format msgid " Entry point address: %#\n" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1143 #, c-format msgid " Start of program headers: % %s\n" msgstr " プログラムヘッダーの開始: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1144 src/readelf.c:1147 msgid "(bytes into file)" msgstr "(ファイルへのバイト数)" -#: src/readelf.c:1122 +#: src/readelf.c:1146 #, c-format msgid " Start of section headers: % %s\n" msgstr " セクションヘッダーの開始: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1149 #, c-format msgid " Flags: %s\n" msgstr " フラグ: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1152 #, c-format msgid " Size of this header: % %s\n" msgstr " このヘッダーの大きさ: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1153 src/readelf.c:1156 src/readelf.c:1173 msgid "(bytes)" msgstr "(バイト)" -#: src/readelf.c:1131 +#: src/readelf.c:1155 #, c-format msgid " Size of program header entries: % %s\n" msgstr " プログラムヘッダー項目の大きさ:% %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1158 #, fuzzy, c-format msgid " Number of program headers entries: %" msgstr " プログラムヘッダー項目の数 : %\n" -#: src/readelf.c:1141 +#: src/readelf.c:1165 #, fuzzy, c-format msgid " (% in [0].sh_info)" msgstr "([0].sh_link の %)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1168 src/readelf.c:1185 src/readelf.c:1199 msgid " ([0] not available)" msgstr "([0]は使えません)" -#: src/readelf.c:1148 +#: src/readelf.c:1172 #, c-format msgid " Size of section header entries: % %s\n" msgstr " セクションヘッダー項目の大きさ:% %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1175 #, c-format msgid " Number of section headers entries: %" msgstr " セクションヘッダー項目の数 : %" -#: src/readelf.c:1158 +#: src/readelf.c:1182 #, c-format msgid " (% in [0].sh_size)" msgstr " ([0].sh_size の %)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1195 #, c-format msgid " (% in [0].sh_link)" msgstr "([0].sh_link の %)" -#: src/readelf.c:1179 +#: src/readelf.c:1203 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4421,7 +4386,7 @@ msgstr "" " セクションヘッダー文字列テーブル索引: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1207 #, c-format msgid "" " Section header string table index: %\n" @@ -4430,12 +4395,12 @@ msgstr "" " セクションヘッダー文字列テーブル索引: %\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1253 src/readelf.c:1461 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "セクション数を決定できません: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1256 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4444,16 +4409,16 @@ msgstr "" "オフセット %2$# から始まる %1$d 個のセクションヘッダーがあります:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1264 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "セクションヘッダー文字列テーブル索引が得られません" -#: src/readelf.c:1245 +#: src/readelf.c:1267 msgid "Section Headers:" msgstr "セクションヘッダー:" -#: src/readelf.c:1248 +#: src/readelf.c:1270 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4461,7 +4426,7 @@ msgstr "" "[番] 名前 タイプ アドレス オフセ 大きさ ES フラグLk " "Inf Al" -#: src/readelf.c:1250 +#: src/readelf.c:1272 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4469,35 +4434,35 @@ msgstr "" "[番] 名前 タイプ アドレス オフセ 大きさ ES " "フラグLk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1277 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1279 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1357 #, fuzzy, c-format msgid "bad compression header for section %zd: %s" msgstr "セクションヘッダー文字列セクションを生成できません: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1368 #, fuzzy, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "セクションからデータを得られません %d: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1386 msgid "Program Headers:" msgstr "プログラムヘッダー:" -#: src/readelf.c:1366 +#: src/readelf.c:1388 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " タイプ オフセ 仮アドレス 物アドレス ファイ量 メモ量 Flg 調整 " -#: src/readelf.c:1369 +#: src/readelf.c:1391 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4505,12 +4470,12 @@ msgstr "" " タイプ オフセ 仮想アドレス 物理アドレス ファイル量メモ" "量 Flg 調整 " -#: src/readelf.c:1426 +#: src/readelf.c:1448 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[プログラム割込みを要求: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1473 msgid "" "\n" " Section to Segment mapping:\n" @@ -4520,12 +4485,12 @@ msgstr "" " セクションからセグメントへのマッビング:\n" " セグメント セクション..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1484 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 #, c-format msgid "cannot get program header: %s" msgstr "プログラムヘッダーを得られません: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1628 #, c-format msgid "" "\n" @@ -4538,7 +4503,7 @@ msgstr[0] "" "署名 '%3$s' を持つ COMDAT セクショングループ [%1$2zu] '%2$s' には %4$zu 個の" "項目があります:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1633 #, c-format msgid "" "\n" @@ -4551,31 +4516,31 @@ msgstr[0] "" "署名 '%3$s' を持つセクショングループ [%1$2zu] '%2$s' には %4$zu 個の項目があ" "ります:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1641 msgid "" msgstr "<不当なシンボル>" -#: src/readelf.c:1637 +#: src/readelf.c:1655 msgid "" 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:1678 src/readelf.c:2461 src/readelf.c:3563 src/readelf.c:12873 +#: src/readelf.c:12880 src/readelf.c:12924 src/readelf.c:12931 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1682 src/readelf.c:2466 src/readelf.c:3567 #, 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:1851 src/readelf.c:2532 src/readelf.c:2797 src/readelf.c:2872 +#: src/readelf.c:3175 src/readelf.c:3249 src/readelf.c:5570 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "不当な .debug_line セクション" -#: src/readelf.c:1812 +#: src/readelf.c:1854 #, c-format msgid "" "\n" @@ -4591,36 +4556,66 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1867 +#, fuzzy, c-format +#| msgid "" +#| "\n" +#| "Dynamic segment contains %lu entry:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +#| msgid_plural "" +#| "\n" +#| "Dynamic segment contains %lu entries:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +msgid "" +"\n" +"Dynamic segment contains %lu entry:\n" +" Addr: %#0* Offset: %#08\n" +msgid_plural "" +"\n" +"Dynamic segment contains %lu entries:\n" +" Addr: %#0* Offset: %#08\n" +msgstr[0] "" +"\n" +"動的セグメントには %lu 個の項目があります:\n" +" アドレス: %#0* オフセット: %#08 セクションへのリンク: " +"[%2u] '%s'\n" + +#: src/readelf.c:1877 msgid " Type Value\n" msgstr " タイプ 値\n" -#: src/readelf.c:1846 +#: src/readelf.c:1886 +#, fuzzy +#| msgid "cannot get string section data: %s" +msgid "cannot get string table by using dynamic segment" +msgstr "文字列セクションデータを取得できません: %s" + +#: src/readelf.c:1925 #, c-format msgid "Shared library: [%s]\n" msgstr "共用ライブラリー: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1929 #, c-format msgid "Library soname: [%s]\n" msgstr "ライブラリー so 名: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1933 #, c-format msgid "Library rpath: [%s]\n" msgstr "ライブラリー rパス: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1937 #, c-format msgid "Library runpath: [%s]\n" msgstr "ライブラリー run パス: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1956 #, c-format msgid "% (bytes)\n" msgstr "% (バイト)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2070 src/readelf.c:2259 #, c-format msgid "" "\n" @@ -4629,7 +4624,7 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2087 src/readelf.c:2276 #, c-format msgid "" "\n" @@ -4650,7 +4645,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:2102 src/readelf.c:2291 #, c-format msgid "" "\n" @@ -4663,29 +4658,29 @@ msgstr[0] "" "オフセット %3$#0 のリロケーションセクション [%1$2u] '%2$s' には %4$d " "個の項目があります:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2112 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 名前\n" -#: src/readelf.c:2039 +#: src/readelf.c:2114 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:2167 src/readelf.c:2178 src/readelf.c:2191 src/readelf.c:2212 +#: src/readelf.c:2224 src/readelf.c:2357 src/readelf.c:2369 src/readelf.c:2383 +#: src/readelf.c:2405 src/readelf.c:2418 msgid "" msgstr "<不当なRELOC>" -#: src/readelf.c:2227 +#: src/readelf.c:2301 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:2229 +#: src/readelf.c:2303 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:2467 +#: src/readelf.c:2540 #, c-format msgid "" "\n" @@ -4697,39 +4692,39 @@ msgstr[0] "" "\n" "シンボルテーブル [%2u] '%s' には %u 個の項目があります:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2545 #, 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:2553 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2482 +#: src/readelf.c:2555 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2502 +#: src/readelf.c:2575 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2668 #, c-format msgid "bad dynamic symbol" msgstr "不正な動的シンボル" -#: src/readelf.c:2680 +#: src/readelf.c:2753 msgid "none" msgstr "なし" -#: src/readelf.c:2697 +#: src/readelf.c:2770 msgid "| " msgstr "| <不明>" -#: src/readelf.c:2728 +#: src/readelf.c:2800 #, c-format msgid "" "\n" @@ -4745,17 +4740,17 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2749 +#: src/readelf.c:2821 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: バージョン: %hu ファイル: %s 数: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2834 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: 名前: %s フラグ: %s バージョン: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2876 #, c-format msgid "" "\n" @@ -4771,18 +4766,18 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2833 +#: src/readelf.c:2904 #, 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:2919 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: 親 %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3179 #, c-format msgid "" "\n" @@ -4798,15 +4793,15 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'" -#: src/readelf.c:3137 +#: src/readelf.c:3207 msgid " 0 *local* " msgstr " 0 *ローカル* " -#: src/readelf.c:3142 +#: src/readelf.c:3212 msgid " 1 *global* " msgstr " 1 *グローバル* " -#: src/readelf.c:3184 +#: src/readelf.c:3254 #, c-format msgid "" "\n" @@ -4824,22 +4819,22 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:3206 +#: src/readelf.c:3276 #, fuzzy, no-c-format msgid " Length Number % of total Coverage\n" msgstr " 長さ 数 全体の% 範囲 \n" -#: src/readelf.c:3208 +#: src/readelf.c:3278 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3285 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3298 #, fuzzy, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4848,37 +4843,37 @@ msgstr "" " テストの平均数: 検索成功: %f\n" " 検索失敗: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3316 src/readelf.c:3380 src/readelf.c:3446 #, c-format msgid "cannot get data for section %d: %s" msgstr "セクションからデータを得られません %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3324 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3283 +#: src/readelf.c:3353 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3318 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3349 +#: src/readelf.c:3419 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3385 +#: src/readelf.c:3455 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3452 +#: src/readelf.c:3521 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4888,7 +4883,7 @@ msgstr "" " ビットマスクの大きさ: %zu バイト %%% ビット設定 第2ハッシュシフ" "ト: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3606 #, c-format msgid "" "\n" @@ -4901,7 +4896,7 @@ msgstr[0] "" "オフセット %3$#0 のライブラリー一覧セクション [%1$2zu] '%2$s' には " "%4$d 個の項目があります:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3620 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4909,7 +4904,7 @@ msgstr "" " ライブラリー タイムスタンプ チェックサム バー" "ジョン フラグ" -#: src/readelf.c:3614 +#: src/readelf.c:3680 #, c-format msgid "" "\n" @@ -4920,102 +4915,101 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのオブジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:3631 +#: src/readelf.c:3697 msgid " Owner Size\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:3655 +#: src/readelf.c:3721 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3760 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3765 #, c-format msgid " File: %11\n" msgstr " ファイル: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3814 #, c-format msgid " %s: %, %s\n" msgstr " %s: %、%s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3817 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3820 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3830 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3833 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, c-format +#: src/readelf.c:3903 msgid "sprintf failure" msgstr "" -#: src/readelf.c:4319 +#: src/readelf.c:4387 msgid "empty block" msgstr "空ブロック" -#: src/readelf.c:4322 +#: src/readelf.c:4390 #, c-format msgid "%zu byte block:" msgstr "%zu バイトのブロック:" -#: src/readelf.c:4800 +#: src/readelf.c:4868 #, fuzzy, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:4867 +#: src/readelf.c:5028 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:4874 +#: src/readelf.c:5035 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4881 +#: src/readelf.c:5042 #, c-format msgid "%s %# used with different base addresses" msgstr "" -#: src/readelf.c:4888 +#: src/readelf.c:5049 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:5149 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4996 +#: src/readelf.c:5157 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5260 #, c-format msgid "" "\n" @@ -5026,7 +5020,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5268 #, c-format msgid "" "\n" @@ -5035,20 +5029,20 @@ msgstr "" "\n" "オフセット % の略語セクション:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5281 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語を読んでいる間にエラー: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5297 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %、子: %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:5330 src/readelf.c:5639 src/readelf.c:5806 src/readelf.c:6191 +#: src/readelf.c:6807 src/readelf.c:8562 src/readelf.c:9308 src/readelf.c:9791 +#: src/readelf.c:10042 src/readelf.c:10208 src/readelf.c:10595 +#: src/readelf.c:10655 #, c-format msgid "" "\n" @@ -5057,52 +5051,52 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5182 +#: src/readelf.c:5343 #, 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:5443 src/readelf.c:5467 src/readelf.c:5851 src/readelf.c:9353 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5445 src/readelf.c:5482 src/readelf.c:5864 src/readelf.c:9366 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5446 src/readelf.c:5491 src/readelf.c:5873 src/readelf.c:9375 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5448 src/readelf.c:5501 src/readelf.c:5883 src/readelf.c:9385 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5486 src/readelf.c:5868 src/readelf.c:9370 src/readelf.c:10787 #, 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:5496 src/readelf.c:5709 src/readelf.c:5878 src/readelf.c:9380 #, 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:5507 src/readelf.c:5720 src/readelf.c:5888 src/readelf.c:9390 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5560 src/readelf.c:5634 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes の内容を得られません: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5575 #, c-format msgid "" "\n" @@ -5115,19 +5109,19 @@ msgstr[0] "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5606 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5608 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" " [%*zu] 開始: %0#*、長さ: %5、CU DIE オフセット: %6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5652 src/readelf.c:8589 #, fuzzy, c-format msgid "" "\n" @@ -5136,152 +5130,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:5656 src/readelf.c:5832 src/readelf.c:6831 src/readelf.c:8600 +#: src/readelf.c:9334 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:5511 +#: src/readelf.c:5672 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5523 +#: src/readelf.c:5684 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5527 +#: src/readelf.c:5688 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5699 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5544 +#: src/readelf.c:5705 #, fuzzy, c-format msgid " Address size: %6\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5555 +#: src/readelf.c:5716 #, fuzzy, c-format msgid "" " Segment size: %6\n" "\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5610 +#: src/readelf.c:5771 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5815 #, 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:5838 src/readelf.c:9340 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5893 src/readelf.c:9395 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5909 src/readelf.c:9411 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5911 src/readelf.c:9413 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5917 src/readelf.c:9419 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5928 src/readelf.c:9430 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5932 src/readelf.c:9434 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:5823 +#: src/readelf.c:5984 #, fuzzy, c-format msgid "invalid range list data" msgstr "不当なデータ" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6169 src/readelf.c:9769 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6186 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6222 src/readelf.c:9824 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6224 src/readelf.c:9826 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6233 src/readelf.c:9852 src/readelf.c:9878 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6258 src/readelf.c:9962 #, fuzzy msgid "base address" msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6268 src/readelf.c:9972 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:6367 +#: src/readelf.c:6528 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6785 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6803 #, c-format msgid "" "\n" @@ -5290,7 +5284,7 @@ msgstr "" "\n" "オフセット %3$# の フレーム情報呼出しセクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:6692 +#: src/readelf.c:6853 #, c-format msgid "" "\n" @@ -5299,65 +5293,65 @@ msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6954 src/readelf.c:7108 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "不当な拡大エンコード" -#: src/readelf.c:6808 +#: src/readelf.c:6969 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:6814 +#: src/readelf.c:6975 msgid "LSDA pointer encoding: " msgstr "LSDA ポインターエンコード:" -#: src/readelf.c:6924 +#: src/readelf.c:7085 #, c-format msgid " (offset: %#)" msgstr " (オフセット: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:7092 #, c-format msgid " (end offset: %#)" msgstr " (終了オフセット: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:7129 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sLSDA ポインター: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7214 #, fuzzy, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "属性コードを得られません: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7224 #, fuzzy, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "属性様式を得られません: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7246 #, fuzzy, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "属性値を得られません: %s" -#: src/readelf.c:7415 +#: src/readelf.c:7576 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "不当なファイル" -#: src/readelf.c:7419 +#: src/readelf.c:7580 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:7423 +#: src/readelf.c:7584 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7899 #, c-format msgid "" "\n" @@ -5368,12 +5362,12 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7949 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7969 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5385,7 +5379,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:7820 +#: src/readelf.c:7981 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5396,39 +5390,39 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7991 src/readelf.c:8152 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:8018 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:8047 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られません: %s" -#: src/readelf.c:7895 +#: src/readelf.c:8056 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "セクション '%2$s' 中のオフセット %1$ の DIE のタグを得られません: " "%3$s" -#: src/readelf.c:7933 +#: src/readelf.c:8092 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次の DIE を得られません: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:8100 #, c-format msgid "cannot get next DIE: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7985 +#: src/readelf.c:8144 #, fuzzy, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5439,7 +5433,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:8037 +#: src/readelf.c:8196 #, fuzzy, c-format msgid "" "\n" @@ -5449,18 +5443,18 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:8369 +#: src/readelf.c:8528 #, fuzzy, c-format msgid "unknown form: %s" msgstr "不明な様式 %" -#: src/readelf.c:8400 +#: src/readelf.c:8576 #, 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:8680 #, fuzzy, c-format msgid "" "\n" @@ -5490,33 +5484,33 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:8524 -#, fuzzy, c-format +#: src/readelf.c:8702 +#, 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:8710 +#, c-format msgid "cannot handle address size: %u\n" -msgstr "アドレス値ではありません" +msgstr "アドレスサイズを扱えません: %u\n" -#: src/readelf.c:8540 -#, fuzzy, c-format +#: src/readelf.c:8718 +#, c-format msgid "cannot handle segment selector size: %u\n" -msgstr "セクションを得られません: %s" +msgstr "セグメントセレクタサイズを扱えません: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8728 #, 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:8743 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] %hhu パラメーター\n" -#: src/readelf.c:8576 +#: src/readelf.c:8754 msgid "" "\n" "Directory table:" @@ -5524,12 +5518,12 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8760 src/readelf.c:8837 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8831 #, fuzzy msgid "" "\n" @@ -5538,7 +5532,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:8714 +#: src/readelf.c:8892 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5546,7 +5540,7 @@ msgstr "" "ファイル名テーブル:\n" " Entry Dir 時刻 大きさ 名前" -#: src/readelf.c:8753 +#: src/readelf.c:8938 #, fuzzy msgid "" "\n" @@ -5555,7 +5549,7 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:8757 +#: src/readelf.c:8942 msgid "" "\n" "Line number statements:" @@ -5563,119 +5557,129 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:8777 +#: src/readelf.c:8957 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8811 +#: src/readelf.c:8991 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:8815 +#: src/readelf.c:8995 #, 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:8998 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:9016 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:8841 +#: src/readelf.c:9021 #, fuzzy msgid " end of sequence" msgstr "列の終わり" -#: src/readelf.c:8859 +#: src/readelf.c:9039 #, fuzzy, c-format msgid " set address to " msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:8887 +#: src/readelf.c:9067 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "新ファイルを定義する: dir=%u、mtime=%、長さh=%、名前=%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:9081 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを % に設定する\n" +#: src/readelf.c:9108 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:9132 +#, 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:9139 msgid " unknown opcode" -msgstr "不明な命令コード" +msgstr "不明なオペコード" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:9151 msgid " copy" msgstr "複写" -#: src/readelf.c:8929 +#: src/readelf.c:9162 #, fuzzy, c-format msgid " advance address by %u to " msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9166 src/readelf.c:9227 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9178 #, c-format msgid " advance line by constant %d to %\n" msgstr "行を定数 %d だけ進めて % にする\n" -#: src/readelf.c:8955 +#: src/readelf.c:9188 #, c-format msgid " set file to %\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:8966 +#: src/readelf.c:9199 #, c-format msgid " set column to %\n" msgstr "カラムを % に設定する\n" -#: src/readelf.c:8973 +#: src/readelf.c:9206 #, c-format msgid " set '%s' to %\n" msgstr " '%s' を % に設定する\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9212 msgid " set basic block flag" msgstr "基本ブロックフラグを設定する" -#: src/readelf.c:8990 +#: src/readelf.c:9223 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:9010 +#: src/readelf.c:9243 #, 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:9253 msgid " set prologue end flag" msgstr "プロローグ終了フラグを設定する" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9258 msgid " set epilogue begin flag" msgstr "エピローグ開始フラグを設定する" -#: src/readelf.c:9035 +#: src/readelf.c:9268 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを % に設定する\n" @@ -5683,103 +5687,103 @@ msgstr " ファイルを % に設定する\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:9277 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:9084 -#, fuzzy, c-format +#: src/readelf.c:9317 +#, c-format msgid "cannot get .debug_loclists content: %s" -msgstr ".debug_loc の内容を得られません: %s" +msgstr ".debug_loclists の内容を取得できません: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9483 #, fuzzy, c-format msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9523 #, fuzzy, c-format msgid "invalid loclists data" msgstr "不当なデータ" -#: src/readelf.c:9543 +#: src/readelf.c:9786 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc の内容を得られません: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9999 src/readelf.c:11043 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:10054 src/readelf.c:10217 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクロ情報セクションのデータを得られません: %s" -#: src/readelf.c:9891 +#: src/readelf.c:10134 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:9914 +#: src/readelf.c:10157 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:10015 +#: src/readelf.c:10258 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:10027 +#: src/readelf.c:10270 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10276 src/readelf.c:11163 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10283 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:10069 +#: src/readelf.c:10312 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10077 +#: src/readelf.c:10320 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10102 +#: src/readelf.c:10345 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:10109 +#: src/readelf.c:10352 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10364 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] %hhu パラメーター\n" -#: src/readelf.c:10136 +#: src/readelf.c:10379 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10580 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" @@ -5787,7 +5791,7 @@ msgstr "" # # "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s 文字列\n" がエラーになるのは何故? 取り敢えず fuzzy扱い -#: src/readelf.c:10381 +#: src/readelf.c:10624 #, fuzzy, c-format msgid "" "\n" @@ -5799,42 +5803,42 @@ msgstr "" " %4$*s 文字列\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10629 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10639 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** 文字列の読込み中にエラー: %s\n" -#: src/readelf.c:10425 +#: src/readelf.c:10668 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10767 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10526 +#: src/readelf.c:10769 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10540 +#: src/readelf.c:10783 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10549 +#: src/readelf.c:10792 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10603 +#: src/readelf.c:10846 #, c-format msgid "" "\n" @@ -5843,7 +5847,7 @@ msgstr "" "\n" "呼出しフレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10948 #, c-format msgid "" "\n" @@ -5852,22 +5856,22 @@ msgstr "" "\n" "例外取扱いテーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10971 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10983 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10998 #, c-format msgid " Call site encoding: %#x " msgstr "呼出しサイトコード化: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:11011 msgid "" "\n" " Call site table:" @@ -5875,7 +5879,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:10782 +#: src/readelf.c:11025 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5888,12 +5892,12 @@ msgstr "" " 離着陸場: %#\n" " 行動: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:11098 #, c-format msgid "invalid TType encoding" msgstr "不当な TType コード化" -#: src/readelf.c:10882 +#: src/readelf.c:11125 #, fuzzy, c-format msgid "" "\n" @@ -5903,37 +5907,37 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:10911 +#: src/readelf.c:11154 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:11172 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10936 +#: src/readelf.c:11179 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10943 +#: src/readelf.c:11186 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10950 +#: src/readelf.c:11193 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10957 +#: src/readelf.c:11200 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10971 +#: src/readelf.c:11214 #, fuzzy, c-format msgid "" "\n" @@ -5943,7 +5947,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11239 #, fuzzy, c-format msgid "" "\n" @@ -5953,7 +5957,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11268 #, fuzzy, c-format msgid "" "\n" @@ -5963,7 +5967,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11300 #, fuzzy, c-format msgid "" "\n" @@ -5972,18 +5976,18 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:11195 +#: src/readelf.c:11438 #, 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:11804 src/readelf.c:12431 src/readelf.c:12541 +#: src/readelf.c:12598 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータの変換ができません: %s" -#: src/readelf.c:11926 +#: src/readelf.c:12168 #, c-format msgid "" "\n" @@ -5992,21 +5996,21 @@ msgstr "" "\n" "%*s... < %u 回の繰返し> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12677 msgid " Owner Data size Type\n" msgstr " 所有者 データ大きさタイプ\n" -#: src/readelf.c:12466 +#: src/readelf.c:12705 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 -#, fuzzy, c-format +#: src/readelf.c:12757 +#, c-format msgid "cannot get content of note: %s" -msgstr "ノートセクションの内容を得られません: %s" +msgstr "ノートセクションの内容を取得できません: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12790 #, c-format msgid "" "\n" @@ -6016,7 +6020,7 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのノートセクション [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:12575 +#: src/readelf.c:12813 #, c-format msgid "" "\n" @@ -6025,7 +6029,7 @@ msgstr "" "\n" "オフセット %2$#0 の %1$ バイトのノートセグメント:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12860 #, fuzzy, c-format msgid "" "\n" @@ -6034,12 +6038,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12887 src/readelf.c:12938 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12892 #, fuzzy, c-format msgid "" "\n" @@ -6049,7 +6053,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12897 #, fuzzy, c-format msgid "" "\n" @@ -6060,7 +6064,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12911 #, fuzzy, c-format msgid "" "\n" @@ -6069,7 +6073,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:12705 +#: src/readelf.c:12943 #, fuzzy, c-format msgid "" "\n" @@ -6079,7 +6083,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12948 #, fuzzy, c-format msgid "" "\n" @@ -6090,7 +6094,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12996 #, c-format msgid "" "\n" @@ -6099,7 +6103,7 @@ msgstr "" "\n" "セクション [%lu] がありません" -#: src/readelf.c:12789 +#: src/readelf.c:13026 #, c-format msgid "" "\n" @@ -6108,12 +6112,12 @@ msgstr "" "\n" "セクション '%s' がありません" -#: src/readelf.c:12846 +#: src/readelf.c:13081 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブのシンボル索引 '%s' を得られません: %s" -#: src/readelf.c:12849 +#: src/readelf.c:13084 #, c-format msgid "" "\n" @@ -6122,148 +6126,145 @@ msgstr "" "\n" "アーカイブ '%s' にはシンボル索引がありません\n" -#: src/readelf.c:12853 -#, fuzzy, c-format +#: src/readelf.c:13088 +#, 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:13106 +#, 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:13111 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンバー '%s' には以下があります:\n" -#: src/size.c:56 +#: src/size.c:55 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 +#: src/size.c:57 msgid "Same as `--format=sysv'" msgstr "`--format=sysv' と同じ" -#: src/size.c:59 +#: src/size.c:58 msgid "Same as `--format=bsd'" msgstr "`--format=bsd' と同じ" -#: src/size.c:62 +#: src/size.c:61 msgid "Same as `--radix=10'" msgstr "`--radix=10' と同じ" -#: src/size.c:63 +#: src/size.c:62 msgid "Same as `--radix=8'" msgstr "`--radix=8' と同じ" -#: src/size.c:64 +#: src/size.c:63 msgid "Same as `--radix=16'" msgstr "`--radix=16' と同じ" -#: src/size.c:66 +#: src/size.c:65 msgid "Similar to `--format=sysv' output but in one line" -msgstr "`--format=sysv' の出力と似ていますが、1行です" +msgstr "`--format=sysv' の出力と 似ていますが、 1行です" -#: src/size.c:70 +#: src/size.c:69 msgid "Print size and permission flags for loadable segments" -msgstr "ロード可能セグメントのための印刷の大きさと許可フラグ" +msgstr "ロード可能セグメント の大きさと 許可フラグの 表示" -#: src/size.c:71 +#: src/size.c:70 msgid "Display the total sizes (bsd only)" msgstr "合計の大きさを表示 (bsd のみ)" #. Short description of program. -#: src/size.c:76 +#: src/size.c:75 msgid "List section sizes of FILEs (a.out by default)." -msgstr "ふぁいる のセクションの大きさの一覧 (省略値は a.out)" +msgstr "FILE のセクションの 大きさの 一覧表示 (デフォルトでは a.out)" -#: src/size.c:240 +#: src/size.c:239 #, c-format msgid "Invalid format: %s" msgstr "不当な形式: %s" -#: src/size.c:251 +#: src/size.c:250 #, c-format msgid "Invalid radix: %s" msgstr "不当な基数: %s" -#: src/size.c:310 +#: src/size.c:309 #, c-format msgid "%s: file format not recognized" msgstr "%s: ファイル形式を認識できません" -#: src/size.c:328 +#: src/size.c:327 msgctxt "bsd" msgid "text" msgstr "" -#: src/size.c:329 +#: src/size.c:328 msgctxt "bsd" msgid "data" msgstr "" -#: src/size.c:330 +#: src/size.c:329 msgctxt "bsd" msgid "bss" msgstr "" -#: src/size.c:331 +#: src/size.c:330 msgctxt "bsd" msgid "dec" msgstr "" -#: src/size.c:332 +#: src/size.c:331 msgctxt "bsd" msgid "hex" msgstr "" -#: src/size.c:333 +#: src/size.c:332 msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:416 src/size.c:557 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 -#, fuzzy -#| msgid "invalid section" +#: src/size.c:418 msgctxt "sysv" msgid "section" -msgstr "不当なセクション" +msgstr "" -#: src/size.c:421 +#: src/size.c:419 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:420 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:449 src/size.c:452 src/size.c:455 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:479 msgid "cannot get section header" -msgstr "セクションヘッダーを得られません: %s" +msgstr "セクションヘッダーを取得できません" -#: src/size.c:585 +#: src/size.c:582 msgid "(TOTALS)\n" msgstr "(合計)\n" @@ -6273,9 +6274,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 +6299,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 +6368,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,105 +6386,103 @@ msgstr "" #: src/stack.c:760 #, c-format msgid "Couldn't show any frames." -msgstr "" +msgstr "フレームを表示できません" -#: src/strings.c:65 +#: src/strings.c:64 msgid "Output Selection:" -msgstr "" +msgstr "出力選択:" -#: src/strings.c:66 +#: src/strings.c:65 msgid "Scan entire file, not only loaded sections" -msgstr "" +msgstr "ロードされる セクションだけ でなく ファイル全体を スキャンする" -#: src/strings.c:68 +#: src/strings.c:67 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" -msgstr "" +msgstr "ヌル終端された MIN-LEN 文字以上の シーケンス のみを 表示" -#: src/strings.c:69 +#: src/strings.c:68 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 +#: src/strings.c:72 msgid "Print name of the file before each string." -msgstr "" +msgstr "各文字列の 前に ファイル名を表示" -#: src/strings.c:75 +#: src/strings.c:74 msgid "Print location of the string in base 8, 10, or 16 respectively." -msgstr "" +msgstr "文字列の 位置を 基数 8、 10、 16 で 各々表示" -#: src/strings.c:76 +#: src/strings.c:75 msgid "Alias for --radix=o" -msgstr "" +msgstr "--radix=o と同じ" #. Short description of program. -#: src/strings.c:83 +#: src/strings.c:82 msgid "Print the strings of printable characters in files." -msgstr "" +msgstr "ファイル中の表示可能文字からなる文字列を表示する。" -#: src/strings.c:256 src/strings.c:291 +#: src/strings.c:255 src/strings.c:290 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:302 -#, c-format +#: src/strings.c:300 msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:585 -#, c-format +#: src/strings.c:583 msgid "lseek failed" msgstr "" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:600 src/strings.c:664 msgid "re-mmap failed" msgstr "" -#: src/strings.c:639 -#, c-format +#: src/strings.c:637 msgid "mprotect failed" msgstr "" -#: src/strings.c:728 +#: src/strings.c:726 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" -#: src/strip.c:71 +#: src/strip.c:70 msgid "Place stripped output into FILE" -msgstr "はぎ取った出力を ふぁいる に置く" +msgstr "ストリップした 出力を FILE に置く" -#: src/strip.c:72 +#: src/strip.c:71 msgid "Extract the removed sections into FILE" -msgstr "抽出した取り除いたセクションを ふぁいる に置く" +msgstr "抽出して 取り除いた セクションを FILE に置く" -#: src/strip.c:73 +#: src/strip.c:72 msgid "Embed name FILE instead of -f argument" -msgstr "-f パラメーターの代わりに 名前 ふぁいる を有効にする" +msgstr "-f 引数の 代わりに 名前 FILE を有効にする" -#: src/strip.c:77 +#: src/strip.c:76 msgid "Remove all debugging symbols" -msgstr "デバッグ用のシンボルを全て取り除く" +msgstr "デバッグ用 シンボルを 全て 取り除く" -#: src/strip.c:81 +#: src/strip.c:80 msgid "Remove section headers (not recommended)" -msgstr "" +msgstr "セクションヘッダーを 取り除く (非推奨)" -#: src/strip.c:83 +#: src/strip.c:82 msgid "Copy modified/access timestamps to the output" -msgstr "修正/アクセスタイムスタンプを出力へ複写する" +msgstr "修正/アクセス タイムスタンプを 出力へ 複製する" -#: src/strip.c:85 +#: src/strip.c:84 msgid "" "Resolve all trivial relocations between debug sections if the removed " "sections are placed in a debug file (only relevant for ET_REL files, " "operation is not reversible, needs -f)" msgstr "" -#: src/strip.c:87 +#: src/strip.c:86 msgid "" "Similar to --reloc-debug-sections, but resolve all trivial relocations " "between debug sections in place. No other stripping is performed (operation " @@ -6490,75 +6490,76 @@ msgid "" "section)" msgstr "" -#: src/strip.c:89 +#: src/strip.c:88 msgid "Remove .comment section" msgstr ".comment セクションを取り除く" -#: src/strip.c:90 +#: src/strip.c:89 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 +#: src/strip.c:90 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 +#: src/strip.c:97 msgid "Discard symbols from object files." -msgstr "オブジェクトファイルからシンボルを破棄する" +msgstr "オブジェクトファイルからシンボルを捨て去る" -#: src/strip.c:247 -#, c-format +#: src/strip.c:245 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:251 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:265 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "'-o' と '-f' と一緒の場合は入力ファイルは 1 つしか認められません" -#: src/strip.c:290 +#: src/strip.c:287 #, c-format msgid "-f option specified twice" msgstr "-f オプションが 2 回指定されています" -#: src/strip.c:299 +#: src/strip.c:296 #, c-format msgid "-F option specified twice" msgstr "-F オプションが 2 回指定されています" -#: src/strip.c:362 -#, fuzzy, c-format +#: src/strip.c:359 +#, c-format msgid "cannot both keep and remove .comment section" -msgstr ".comment セクションを取り除く" +msgstr ".comment セクションを保持しつつ取り除くことはできません" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:478 msgid "bad relocation" -msgstr "リロケーションを表示" +msgstr "" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:756 src/strip.c:780 #, c-format msgid "cannot stat input file '%s'" msgstr "入力ファイル '%s' を stat できません" -#: src/strip.c:761 +#: src/strip.c:770 #, c-format msgid "while opening '%s'" msgstr "'%s' を開いている間" -#: src/strip.c:799 +#: src/strip.c:808 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" @@ -6569,298 +6570,309 @@ 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:820 +#, c-format msgid "%s: no support for stripping archive" -msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" +msgstr "%s: アーカイブのストリップには対応していません" -#: src/strip.c:1047 +#: src/strip.c:1057 #, c-format msgid "cannot open EBL backend" msgstr "EBL バックエンドを開けません" -#: src/strip.c:1092 -#, fuzzy, c-format +#: src/strip.c:1101 msgid "cannot get number of phdrs" -msgstr "セクション数を決定できません: %s" +msgstr "phdrs の数を取得できません" -#: src/strip.c:1106 src/strip.c:1149 -#, fuzzy, c-format +#: src/strip.c:1115 src/strip.c:1158 +#, 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:1125 src/strip.c:1168 +#, 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:1248 #, c-format msgid "illformed file '%s'" msgstr "不適格なファイル '%s'" -#: src/strip.c:1250 -#, fuzzy, c-format +#: src/strip.c:1258 +#, c-format msgid "Cannot remove allocated section '%s'" -msgstr "PLT セクションを割り当てられません: %s" +msgstr "割り当てされるセクション '%s' は取り除けません" -#: src/strip.c:1259 -#, fuzzy, c-format +#: src/strip.c:1267 +#, c-format msgid "Cannot both keep and remove section '%s'" -msgstr "0番目のセクションのヘッダーを得られません: %s" +msgstr "セクション '%s' を保持しつつ取り除くことはできません" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1631 src/strip.c:1746 #, c-format msgid "while generating output file: %s" msgstr "出力ファイルを生成している間: %s" -#: src/strip.c:1688 -#, fuzzy, c-format +#: src/strip.c:1695 +#, 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 +#: src/strip.c:1704 +#, 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:1712 src/strip.c:2553 +#, c-format msgid "%s: error updating shdrstrndx: %s" -msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" +msgstr "%s: shdrstrndx の更新中にエラー: %s" -#: src/strip.c:1722 +#: src/strip.c:1729 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' のための出力を準備している間" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1790 src/strip.c:1852 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生成している間: %s" -#: src/strip.c:1793 +#: src/strip.c:1799 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文字列テーブルを生成中: %s" -#: src/strip.c:1866 -#, fuzzy, c-format +#: src/strip.c:1869 msgid "no memory to create section header string table" -msgstr "セクションヘッダー文字列テーブルを生成中: %s" +msgstr "セクションヘッダー文字列テーブルを作成するメモリがありません" -#: src/strip.c:2079 +#: src/strip.c:2082 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2469 src/strip.c:2577 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込み中: %s" -#: src/strip.c:2477 +#: src/strip.c:2480 #, c-format msgid "while creating '%s'" msgstr "'%s' を生成中" -#: src/strip.c:2500 +#: src/strip.c:2503 #, c-format msgid "while computing checksum for debug information" msgstr "デバッグ情報のチェックサムを計算中" -#: src/strip.c:2541 +#: src/strip.c:2544 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" -#: src/strip.c:2559 +#: src/strip.c:2562 #, 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:2602 src/strip.c:2622 +#, c-format msgid "while writing '%s'" -msgstr "'%s' を書込み中: %s" +msgstr "書き込み中 '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2659 src/strip.c:2666 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' の終了中にエラー: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2683 src/strip.c:2759 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "'%s' のアクセスと変更日付を設定できません" -#: src/unstrip.c:66 +#: src/unstrip.c:65 msgid "Match MODULE against file names, not module names" -msgstr "" +msgstr "モジュール名ではなく ファイル名で MODULE を一致させる" -#: src/unstrip.c:67 +#: src/unstrip.c:66 msgid "Silently skip unfindable files" -msgstr "" +msgstr "見つからない ファイルを 静かに スキップ" -#: src/unstrip.c:70 +#: src/unstrip.c:69 msgid "Place output into FILE" -msgstr "" +msgstr "出力を FILE に置く" -#: src/unstrip.c:72 +#: src/unstrip.c:71 msgid "Create multiple output files under DIRECTORY" -msgstr "" +msgstr "複数の 出力ファイルを DIRECTORY の下に 作成" -#: src/unstrip.c:73 +#: src/unstrip.c:72 msgid "Use module rather than file names" -msgstr "" +msgstr "ファイル名ではなく モジュール名を 使用" -#: src/unstrip.c:75 +#: src/unstrip.c:74 msgid "Create output for modules that have no separate debug information" -msgstr "" +msgstr "分離された デバッグ情報を 持たない モジュール用に 出力を 作成" -#: src/unstrip.c:78 +#: src/unstrip.c:77 msgid "Apply relocations to section contents in ET_REL files" -msgstr "" +msgstr "ET_REL ファイルの セクション内容に リロケーションを 適用" -#: src/unstrip.c:80 +#: src/unstrip.c:79 msgid "Only list module and file names, build IDs" -msgstr "" +msgstr "モジュール名、 ファイル名、 ビルドIDの リスト表示のみ" -#: src/unstrip.c:82 +#: src/unstrip.c:81 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" +"いくつかの ELF ヘッダー が 一致しない ように 見えた としても ファイルの 結合" +"を 強制" -#: src/unstrip.c:126 +#: src/unstrip.c:125 #, c-format msgid "-d option specified twice" msgstr "" -#: src/unstrip.c:161 +#: src/unstrip.c:160 #, c-format msgid "only one of -o or -d allowed" msgstr "" -#: src/unstrip.c:170 +#: src/unstrip.c:169 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "" -#: src/unstrip.c:185 +#: src/unstrip.c:184 #, c-format msgid "output directory '%s'" -msgstr "" +msgstr "出力ディレクトリ '%s'" -#: src/unstrip.c:194 +#: src/unstrip.c:193 #, c-format msgid "exactly two file arguments are required" -msgstr "" +msgstr "ちょうど2つの引数が必要です" -#: src/unstrip.c:200 +#: src/unstrip.c:199 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" +"明示的なファイルを使用する際は -m, -a, -R, -i オプションは認められていません" -#: src/unstrip.c:213 +#: src/unstrip.c:212 #, c-format msgid "-o or -d is required when using implicit files" -msgstr "" +msgstr "暗黙的なファイルを使用する際は -o または -d が必要です" -#: src/unstrip.c:236 +#: src/unstrip.c:235 #, c-format msgid "cannot create ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを作成できません: %s" -#: src/unstrip.c:240 -#, fuzzy, c-format +#: src/unstrip.c:239 +#, c-format msgid "cannot get shdrstrndx:%s" -msgstr "セクションを得られません: %s" +msgstr "shdrstrndx を取得できません: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:243 src/unstrip.c:2085 #, c-format msgid "cannot get ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを取得できません: %s" -#: src/unstrip.c:254 -#, fuzzy, c-format +#: src/unstrip.c:253 +#, c-format msgid "cannot get new zero section: %s" -msgstr "セクションを得られません: %s" +msgstr "新しい zero セクションを取得できません: %s" -#: src/unstrip.c:257 -#, fuzzy, c-format +#: src/unstrip.c:256 +#, c-format msgid "cannot update new zero section: %s" -msgstr "セクション数を決定できません: %s" +msgstr "新しい zero セクションを更新できません: %s" -#: src/unstrip.c:261 +#: src/unstrip.c:260 #, 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 +#: src/unstrip.c:264 src/unstrip.c:2103 src/unstrip.c:2146 +#, c-format msgid "cannot get number of program headers: %s" -msgstr "セクション数を決定できません: %s" +msgstr "プログラムヘッダ数を取得できません: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:269 src/unstrip.c:2107 #, c-format msgid "cannot create program headers: %s" -msgstr "" +msgstr "プログラムヘッダーを作成できません: %s" -#: src/unstrip.c:276 +#: src/unstrip.c:275 #, c-format msgid "cannot copy program header: %s" -msgstr "" +msgstr "プログラムヘッダーを複製できません: %s" -#: src/unstrip.c:286 +#: src/unstrip.c:285 #, c-format msgid "cannot copy section header: %s" -msgstr "" +msgstr "セクションヘッダーを複製できません: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:288 src/unstrip.c:1707 #, c-format msgid "cannot get section data: %s" -msgstr "" +msgstr "セクションデータを取得できません: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:290 src/unstrip.c:1709 #, c-format msgid "cannot copy section data: %s" -msgstr "" +msgstr "セクションデータを複製できません: %s" -#: src/unstrip.c:319 +#: src/unstrip.c:318 #, 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:1750 +#: src/unstrip.c:392 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:1749 #, 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:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:408 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 #, c-format msgid "cannot update symbol table: %s" -msgstr "" +msgstr "シンボルテーブルを更新できません: %s" -#: src/unstrip.c:419 +#: src/unstrip.c:418 #, c-format msgid "cannot update section header: %s" +msgstr "セクションヘッダーを更新できません: %s" + +#: src/unstrip.c:464 +#, c-format +msgid "gelf_getrel failed: %s" msgstr "" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:467 src/unstrip.c:482 #, c-format msgid "cannot update relocation: %s" +msgstr "リロケーションを更新できません: %s" + +#: src/unstrip.c:479 +#, c-format +msgid "gelf_getrela failed: %s" msgstr "" #: src/unstrip.c:580 #, c-format msgid "cannot get symbol version: %s" -msgstr "" +msgstr "シンボルバージョンを取得できません: %s" #: src/unstrip.c:593 #, c-format @@ -6868,51 +6880,51 @@ msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" #: src/unstrip.c:848 -#, fuzzy, c-format +#, c-format msgid "cannot get symbol section data: %s" -msgstr "ラインデータセクションデータを得られません: %s" +msgstr "シンボルセクションデータを取得できません: %s" #: src/unstrip.c:850 -#, fuzzy, c-format +#, c-format msgid "cannot get string section data: %s" -msgstr "ラインデータセクションデータを得られません: %s" +msgstr "文字列セクションデータを取得できません: %s" #: src/unstrip.c:867 -#, fuzzy, c-format +#, 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 +#, c-format msgid "cannot read section [%zu] name: %s" -msgstr "セクションデータを割り当てられません: %s" +msgstr "セクション [%zu] の名前を読み込めません: %s" #: src/unstrip.c:1040 -#, fuzzy, c-format +#, c-format msgid "bad sh_link for group section: %s" -msgstr "不当な .debug_line セクション" +msgstr "グループセクションに対する誤った sh_link です: %s" #: src/unstrip.c:1046 -#, fuzzy, c-format +#, c-format msgid "couldn't get shdr for group section: %s" -msgstr "セクションからデータを得られません %d: %s" +msgstr "グループセクションに対する shdr を取得できませんでした: %s" #: src/unstrip.c:1051 -#, fuzzy, c-format +#, c-format msgid "bad data for group symbol section: %s" -msgstr "セクションからデータを得られません %d: %s" +msgstr "グループシンボルセクションに対する誤ったデータです: %s" #: src/unstrip.c:1057 -#, fuzzy, c-format +#, c-format msgid "couldn't get symbol for group section: %s" -msgstr "セクション数を決定できません: %s" +msgstr "グループセクションに対するシンボルを取得できませんでした: %s" #: src/unstrip.c:1062 -#, fuzzy, c-format +#, 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:1073 src/unstrip.c:1553 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" @@ -6932,7 +6944,7 @@ msgstr "" 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:1337 src/unstrip.c:1353 src/unstrip.c:1633 src/unstrip.c:1924 #, c-format msgid "cannot add section name to string table: %s" msgstr "" @@ -6947,148 +6959,144 @@ msgstr "" 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:1399 src/unstrip.c:1403 src/unstrip.c:1648 #, c-format msgid "cannot get section count: %s" msgstr "" #: src/unstrip.c:1406 -#, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" #: src/unstrip.c:1410 -#, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1458 src/unstrip.c:1568 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1628 +#: src/unstrip.c:1627 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1758 -#, fuzzy, c-format +#: src/unstrip.c:1757 +#, c-format msgid "symbol [%zu] has invalid section index" -msgstr "不当なセクション索引" +msgstr "シンボル [%zu] が不当なセクション索引を持っています" -#: src/unstrip.c:1790 -#, fuzzy, c-format +#: src/unstrip.c:1789 +#, c-format msgid "group has invalid section index [%zd]" -msgstr "不当なセクション索引" +msgstr "グループが不当なセクション索引 [%zd] を持っています" -#: src/unstrip.c:2065 -#, fuzzy, c-format +#: src/unstrip.c:2064 +#, c-format msgid "cannot read section data: %s" -msgstr "セクションデータを割り当てられません: %s" +msgstr "セクションデータを読み込めません: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2093 #, c-format msgid "cannot update ELF header: %s" msgstr "ELF ヘッダーを更新できません: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2117 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2122 src/unstrip.c:2205 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2174 +#: src/unstrip.c:2173 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2177 +#: src/unstrip.c:2176 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2196 src/unstrip.c:2248 src/unstrip.c:2260 src/unstrip.c:2350 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2235 +#: src/unstrip.c:2234 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2236 msgid ", use --force" msgstr "" -#: src/unstrip.c:2265 +#: src/unstrip.c:2264 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2268 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2273 +#: src/unstrip.c:2272 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2277 +#: src/unstrip.c:2276 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2308 +#: src/unstrip.c:2307 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2312 +#: src/unstrip.c:2311 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2327 +#: src/unstrip.c:2326 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2331 +#: src/unstrip.c:2330 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2344 +#: src/unstrip.c:2343 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2375 +#: src/unstrip.c:2374 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2502 msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2512 msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2560 +#: src/unstrip.c:2557 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2561 +#: src/unstrip.c:2558 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7130,20 +7138,24 @@ msgid "" "executable PATH\n" "source BUILDID /FILENAME\n" "source PATH /FILENAME\n" +"section BUILDID SECTION-NAME\n" +"section PATH SECTION-NAME\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..b32ecc21 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-11-02 13:30+0100\n" "PO-Revision-Date: 2021-02-22 16:25+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" @@ -19,14 +19,14 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: lib/color.c:53 +#: lib/color.c:51 msgid "" "colorize the output. WHEN defaults to 'always' or can be 'auto' or 'never'" msgstr "" "koloruje wyjście. WHEN domyślnie wynosi „always” lub może wynosić „auto” lub " "„never”" -#: lib/color.c:129 +#: lib/color.c:127 #, c-format msgid "" "%s: invalid argument '%s' for '--color'\n" @@ -41,12 +41,7 @@ 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 +#: lib/printversion.c:39 #, c-format msgid "" "Copyright (C) %s The elfutils developers <%s>.\n" @@ -59,70 +54,70 @@ 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:47 lib/xmalloc.c:60 lib/xmalloc.c:72 src/readelf.c:11754 +#: src/unstrip.c:311 #, c-format msgid "memory exhausted" msgstr "pamięć wyczerpana" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 -#: libelf/elf_error.c:60 +#: libasm/asm_error.c:64 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 +#: libelf/elf_error.c:59 msgid "no error" msgstr "brak błędu" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 -#: libelf/elf_error.c:91 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 +#: libelf/elf_error.c:90 msgid "out of memory" msgstr "brak pamięci" -#: libasm/asm_error.c:67 +#: libasm/asm_error.c:66 msgid "cannot create output file" msgstr "nie można utworzyć pliku wyjściowego" -#: libasm/asm_error.c:68 +#: libasm/asm_error.c:67 msgid "invalid parameter" msgstr "nieprawidłowy parametr" -#: libasm/asm_error.c:69 +#: libasm/asm_error.c:68 msgid "cannot change mode of output file" msgstr "nie można zmienić trybu pliku wyjściowego" -#: libasm/asm_error.c:70 +#: libasm/asm_error.c:69 msgid "cannot rename output file" msgstr "nie można zmienić nazwy pliku wyjściowego" -#: libasm/asm_error.c:71 +#: libasm/asm_error.c:70 msgid "duplicate symbol" msgstr "powtórzony symbol" -#: libasm/asm_error.c:72 +#: libasm/asm_error.c:71 msgid "invalid section type for operation" msgstr "nieprawidłowy typ sekcji dla działania" -#: libasm/asm_error.c:73 +#: libasm/asm_error.c:72 msgid "error during output of data" msgstr "błąd podczas wyprowadzania danych" -#: libasm/asm_error.c:74 +#: libasm/asm_error.c:73 msgid "no backend support available" msgstr "brak dostępnej obsługi zaplecza" -#: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 -#: libelf/elf_error.c:63 +#: libasm/asm_error.c:82 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 +#: libelf/elf_error.c:62 msgid "unknown error" msgstr "nieznany błąd" -#: libcpu/i386_lex.l:122 +#: libcpu/i386_lex.l:121 #, c-format msgid "invalid character '%c' at line %d; ignored" msgstr "nieprawidłowy znak „%c” w %d. wierszu; zignorowano" -#: libcpu/i386_lex.l:123 +#: libcpu/i386_lex.l:122 #, c-format msgid "invalid character '\\%o' at line %d; ignored" msgstr "nieprawidłowy znak „\\%o” w %d. wierszu; zignorowano" -#: libcpu/i386_parse.y:554 +#: libcpu/i386_parse.y:553 #, c-format msgid "while reading i386 CPU description: %s at line %d" msgstr "podczas odczytywania opisu procesora i386: %s w %d. wierszu" @@ -163,7 +158,7 @@ msgstr "nie można uzyskać nagłówka ELF" msgid "not implemented" msgstr "niezaimplementowane" -#: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159 +#: libdw/dwarf_error.c:69 libelf/elf_error.c:110 libelf/elf_error.c:158 msgid "invalid command" msgstr "nieprawidłowe polecenie" @@ -271,7 +266,7 @@ msgstr "brak pasującego zakresu adresów" msgid "no flag value" msgstr "brak wartości flagi" -#: libdw/dwarf_error.c:96 libelf/elf_error.c:236 +#: libdw/dwarf_error.c:96 libelf/elf_error.c:235 msgid "invalid offset" msgstr "nieprawidłowy offset" @@ -307,23 +302,23 @@ 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:45 src/stack.c:643 src/unstrip.c:2547 msgid "Input selection options:" msgstr "Opcje wyboru wejścia:" -#: libdwfl/argp-std.c:48 +#: libdwfl/argp-std.c:46 msgid "Find addresses in FILE" msgstr "Wyszukuje adresy w PLIKU" -#: libdwfl/argp-std.c:50 +#: libdwfl/argp-std.c:48 msgid "Find addresses from signatures found in COREFILE" msgstr "Wyszukuje adresy z podpisów odnalezionych w PLIKU-CORE" -#: libdwfl/argp-std.c:52 +#: libdwfl/argp-std.c:50 msgid "Find addresses in files mapped into process PID" msgstr "Wyszukuje adresy w plikach zmapowanych do PID procesów" -#: libdwfl/argp-std.c:54 +#: libdwfl/argp-std.c:52 msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" @@ -331,45 +326,45 @@ msgstr "" "Wyszukuje adresy w plikach zmapowanych jako odczyt z PLIKU w formacie /proc/" "PID/maps systemu Linux" -#: libdwfl/argp-std.c:56 +#: libdwfl/argp-std.c:54 msgid "Find addresses in the running kernel" msgstr "Wyszukuje adresy w uruchomionych jądrze" -#: libdwfl/argp-std.c:58 +#: libdwfl/argp-std.c:56 msgid "Kernel with all modules" msgstr "Jądro ze wszystkimi modułami" -#: libdwfl/argp-std.c:60 src/stack.c:650 +#: libdwfl/argp-std.c:58 src/stack.c:650 msgid "Search path for separate debuginfo files" msgstr "Wyszukuje ścieżkę dla oddzielnych plików debuginfo" -#: libdwfl/argp-std.c:161 +#: libdwfl/argp-std.c:159 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "dopuszczalna jest tylko jedna z opcji -e, -p, -k, -K lub --core" -#: libdwfl/argp-std.c:234 +#: libdwfl/argp-std.c:232 msgid "cannot load kernel symbols" msgstr "nie można wczytać symboli jądra" #. Non-fatal to have no modules since we do have the kernel. -#: libdwfl/argp-std.c:238 +#: libdwfl/argp-std.c:236 msgid "cannot find kernel modules" msgstr "nie można odnaleźć modułów jądra" -#: libdwfl/argp-std.c:255 +#: libdwfl/argp-std.c:253 msgid "cannot find kernel or modules" msgstr "nie można odnaleźć jądra lub modułów" -#: libdwfl/argp-std.c:294 +#: libdwfl/argp-std.c:292 #, c-format msgid "cannot read ELF core file: %s" msgstr "nie można odczytać pliku core ELF: %s" -#: libdwfl/argp-std.c:317 +#: libdwfl/argp-std.c:315 msgid "Not enough memory" msgstr "Za mało pamięci" -#: libdwfl/argp-std.c:327 +#: libdwfl/argp-std.c:325 msgid "No modules recognized in core file" msgstr "Nie rozpoznano żadnych modułów w pliku core" @@ -421,7 +416,7 @@ msgstr "Nieobsługiwany typ relokacji" msgid "r_offset is bogus" msgstr "r_offset jest fałszywe" -#: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175 +#: libdwfl/libdwflP.h:66 libelf/elf_error.c:114 libelf/elf_error.c:174 msgid "offset out of range" msgstr "offset spoza zakresu" @@ -486,46 +481,52 @@ msgid "Invalid register" msgstr "Nieprawidłowy rejestr" #: libdwfl/libdwflP.h:84 +#, fuzzy +#| msgid "no reference value" +msgid "Unknown register value" +msgstr "brak wartości odwołania" + +#: libdwfl/libdwflP.h:85 msgid "Error reading process memory" msgstr "Błąd podczas odczytywania pamięci procesu" -#: libdwfl/libdwflP.h:85 +#: libdwfl/libdwflP.h:86 msgid "Couldn't find architecture of any ELF" msgstr "Nie można odnaleźć architektury żadnego ELF" -#: libdwfl/libdwflP.h:86 +#: libdwfl/libdwflP.h:87 msgid "Error parsing /proc filesystem" msgstr "Błąd podczas przetwarzania systemu plików /proc" -#: libdwfl/libdwflP.h:87 +#: libdwfl/libdwflP.h:88 msgid "Invalid DWARF" msgstr "Nieprawidłowy DWARF" -#: libdwfl/libdwflP.h:88 +#: libdwfl/libdwflP.h:89 msgid "Unsupported DWARF" msgstr "Nieobsługiwany DWARF" -#: libdwfl/libdwflP.h:89 +#: libdwfl/libdwflP.h:90 msgid "Unable to find more threads" msgstr "Nie można odnaleźć więcej wątków" -#: libdwfl/libdwflP.h:90 +#: libdwfl/libdwflP.h:91 msgid "Dwfl already has attached state" msgstr "Dwfl już ma załączony stan" -#: libdwfl/libdwflP.h:91 +#: libdwfl/libdwflP.h:92 msgid "Dwfl has no attached state" msgstr "Dwfl nie ma załączonego stanu" -#: libdwfl/libdwflP.h:92 +#: libdwfl/libdwflP.h:93 msgid "Unwinding not supported for this architecture" msgstr "Odwijanie nie jest obsługiwane dla tej architektury" -#: libdwfl/libdwflP.h:93 +#: libdwfl/libdwflP.h:94 msgid "Invalid argument" msgstr "Nieprawidłowy parametr" -#: libdwfl/libdwflP.h:94 +#: libdwfl/libdwflP.h:95 msgid "Not an ET_CORE ELF file" msgstr "Nie jest plikiem ELF ET_CORE" @@ -534,7 +535,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 "" @@ -585,18 +586,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: " @@ -610,225 +611,227 @@ msgstr "Samodzielny" msgid ": %d" msgstr ": %d" -#: libelf/elf_error.c:67 +#: libelf/elf_error.c:66 msgid "unknown version" msgstr "nieznana wersja" -#: libelf/elf_error.c:71 +#: libelf/elf_error.c:70 msgid "unknown type" msgstr "nieznany typ" -#: libelf/elf_error.c:75 +#: libelf/elf_error.c:74 msgid "invalid `Elf' handle" msgstr "nieprawidłowa obsługa „Elf”" -#: libelf/elf_error.c:79 +#: libelf/elf_error.c:78 msgid "invalid size of source operand" msgstr "nieprawidłowy rozmiar operandu źródłowego" -#: libelf/elf_error.c:83 +#: libelf/elf_error.c:82 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:86 src/readelf.c:6378 #, c-format msgid "invalid encoding" msgstr "nieprawidłowe kodowanie" -#: libelf/elf_error.c:95 +#: libelf/elf_error.c:94 msgid "invalid file descriptor" msgstr "nieprawidłowy deskryptor pliku" -#: libelf/elf_error.c:99 +#: libelf/elf_error.c:98 msgid "invalid ELF file data" msgstr "nieprawidłowe dane pliku ELF" -#: libelf/elf_error.c:103 +#: libelf/elf_error.c:102 msgid "invalid operation" msgstr "nieprawidłowe działanie" -#: libelf/elf_error.c:107 +#: libelf/elf_error.c:106 msgid "ELF version not set" msgstr "wersja ELF nie została ustawiona" -#: libelf/elf_error.c:119 +#: libelf/elf_error.c:118 msgid "invalid fmag field in archive header" msgstr "nieprawidłowe pole fmag w nagłówku archiwum" -#: libelf/elf_error.c:123 +#: libelf/elf_error.c:122 msgid "invalid archive file" msgstr "nieprawidłowy plik archiwum" -#: libelf/elf_error.c:127 +#: libelf/elf_error.c:126 msgid "descriptor is not for an archive" msgstr "deskryptor nie jest dla archiwum" -#: libelf/elf_error.c:131 +#: libelf/elf_error.c:130 msgid "no index available" msgstr "brak dostępnego indeksu" -#: libelf/elf_error.c:135 +#: libelf/elf_error.c:134 msgid "cannot read data from file" msgstr "nie można odczytać danych z pliku" -#: libelf/elf_error.c:139 +#: libelf/elf_error.c:138 msgid "cannot write data to file" msgstr "nie można zapisać danych do pliku" -#: libelf/elf_error.c:143 +#: libelf/elf_error.c:142 msgid "invalid binary class" msgstr "nieprawidłowa klasa pliku binarnego" -#: libelf/elf_error.c:147 +#: libelf/elf_error.c:146 msgid "invalid section index" msgstr "nieprawidłowy indeks sekcji" -#: libelf/elf_error.c:151 +#: libelf/elf_error.c:150 msgid "invalid operand" msgstr "nieprawidłowy operand" -#: libelf/elf_error.c:155 +#: libelf/elf_error.c:154 msgid "invalid section" msgstr "nieprawidłowa sekcja" -#: libelf/elf_error.c:163 +#: libelf/elf_error.c:162 msgid "executable header not created first" msgstr "nie utworzono najpierw nagłówka pliku wykonywalnego" -#: libelf/elf_error.c:167 +#: libelf/elf_error.c:166 msgid "file descriptor disabled" msgstr "deskryptor pliku jest wyłączony" -#: libelf/elf_error.c:171 +#: libelf/elf_error.c:170 msgid "archive/member file descriptor mismatch" msgstr "deskryptory archiwum/elementu nie zgadzają się" -#: libelf/elf_error.c:179 +#: libelf/elf_error.c:178 msgid "cannot manipulate null section" msgstr "nie można zmieniać pustej sekcji" -#: libelf/elf_error.c:183 +#: libelf/elf_error.c:182 msgid "data/scn mismatch" msgstr "dane/scn nie zgadzają się" -#: libelf/elf_error.c:187 +#: libelf/elf_error.c:186 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:190 src/readelf.c:10266 src/readelf.c:10866 +#: src/readelf.c:10967 src/readelf.c:11149 #, c-format msgid "invalid data" msgstr "nieprawidłowe dane" -#: libelf/elf_error.c:195 +#: libelf/elf_error.c:194 msgid "unknown data encoding" msgstr "nieznane kodowanie danych" -#: libelf/elf_error.c:199 +#: libelf/elf_error.c:198 msgid "section `sh_size' too small for data" msgstr "sekcja „sh_size” jest za mała dla danych" -#: libelf/elf_error.c:203 +#: libelf/elf_error.c:202 msgid "invalid section alignment" msgstr "nieprawidłowe wyrównanie sekcji" -#: libelf/elf_error.c:207 +#: libelf/elf_error.c:206 msgid "invalid section entry size" msgstr "nieprawidłowy rozmiar wpisu sekcji" -#: libelf/elf_error.c:211 +#: libelf/elf_error.c:210 msgid "update() for write on read-only file" msgstr "update() dla zapisu pliku tylko do odczytu" -#: libelf/elf_error.c:215 +#: libelf/elf_error.c:214 msgid "no such file" msgstr "nie ma takiego pliku" -#: libelf/elf_error.c:219 +#: libelf/elf_error.c:218 msgid "only relocatable files can contain section groups" msgstr "tylko relokowalne pliki mogą zawierać grupy sekcji" -#: libelf/elf_error.c:224 +#: libelf/elf_error.c:223 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" "tylko pliki wykonywalne, obiektów współdzielone i pliki core mogą mieć " "nagłówki programu" -#: libelf/elf_error.c:231 +#: libelf/elf_error.c:230 msgid "file has no program header" msgstr "plik nie ma nagłówków programu" -#: libelf/elf_error.c:241 +#: libelf/elf_error.c:240 msgid "invalid section type" msgstr "nieprawidłowy typ sekcji" -#: libelf/elf_error.c:246 +#: libelf/elf_error.c:245 msgid "invalid section flags" msgstr "nieprawidłowe flagi sekcji" -#: libelf/elf_error.c:251 +#: libelf/elf_error.c:250 msgid "section does not contain compressed data" msgstr "sekcja nie zawiera skompresowanych danych" -#: libelf/elf_error.c:256 +#: libelf/elf_error.c:255 msgid "section contains compressed data" msgstr "sekcja zawiera skompresowane dane" -#: libelf/elf_error.c:261 +#: libelf/elf_error.c:260 msgid "unknown compression type" msgstr "nieznany typ kompresji" -#: libelf/elf_error.c:266 +#: libelf/elf_error.c:265 msgid "cannot compress data" msgstr "nie można kompresować danych" -#: libelf/elf_error.c:271 +#: libelf/elf_error.c:270 msgid "cannot decompress data" msgstr "nie można dekompresować danych" -#: src/addr2line.c:57 +#: src/addr2line.c:58 msgid "Input format options:" msgstr "Opcje formatowania wejścia:" -#: src/addr2line.c:59 +#: src/addr2line.c:60 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:62 msgid "Output format options:" msgstr "Opcje formatowania wyjścia:" -#: src/addr2line.c:62 +#: src/addr2line.c:63 msgid "Print address before each entry" msgstr "Wyświetla adres pliku przed każdym wpisem" -#: src/addr2line.c:63 +#: src/addr2line.c:64 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:66 +#, 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:67 msgid "Also show function names" msgstr "Wyświetla także nazwy funkcji" -#: src/addr2line.c:67 +#: src/addr2line.c:68 msgid "Also show symbol or section names" msgstr "Wyświetla także nazwy symboli lub sekcji" -#: src/addr2line.c:68 +#: src/addr2line.c:69 msgid "Also show symbol and the section names" msgstr "Wyświetla także nazwy symboli i sekcji" -#: src/addr2line.c:69 +#: src/addr2line.c:70 msgid "Also show line table flags" msgstr "Wyświetla także flagi tabeli wierszy" -#: src/addr2line.c:71 +#: src/addr2line.c:72 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -836,22 +839,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:75 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:77 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/strings.c:78 +#: src/addr2line.c:79 +#, 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:81 src/elfcmp.c:69 src/findtextrel.c:65 src/nm.c:99 +#: src/strings.c:77 msgid "Miscellaneous:" msgstr "Różne:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:89 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" @@ -859,395 +868,392 @@ msgstr "" "w a.out)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:93 msgid "[ADDR...]" msgstr "[ADRES…]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:526 msgid "Section syntax requires exactly one module" msgstr "Składnia sekcji wymaga dokładnie jednego modułu" -#: src/addr2line.c:542 +#: src/addr2line.c:548 #, c-format msgid "offset %# lies outside section '%s'" msgstr "offset %# leży poza sekcją „%s”" -#: src/addr2line.c:652 +#: src/addr2line.c:658 #, c-format msgid "cannot find symbol '%s'" msgstr "nie można odnaleźć symbolu „%s”" -#: src/addr2line.c:657 +#: src/addr2line.c:663 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "offset %# leży poza zawartością „%s”" -#: src/ar.c:67 +#: src/ar.c:66 msgid "Commands:" msgstr "Polecenia:" -#: src/ar.c:68 +#: src/ar.c:67 msgid "Delete files from archive." msgstr "Usuwa pliki z archiwum." -#: src/ar.c:69 +#: src/ar.c:68 msgid "Move files in archive." msgstr "Przenosi pliki w archiwum." -#: src/ar.c:70 +#: src/ar.c:69 msgid "Print files in archive." msgstr "Wyświetla pliki w archiwum." -#: src/ar.c:71 +#: src/ar.c:70 msgid "Quick append files to archive." msgstr "Szybko dodaje pliki do archiwum." -#: src/ar.c:73 +#: src/ar.c:72 msgid "Replace existing or insert new file into archive." msgstr "Zastępuje istniejący lub umieszcza nowy plik w archiwum." -#: src/ar.c:74 +#: src/ar.c:73 msgid "Display content of archive." msgstr "Wyświetla zawartość archiwum." -#: src/ar.c:75 +#: src/ar.c:74 msgid "Extract files from archive." msgstr "Wypakowuje pliki z archiwum." -#: src/ar.c:77 +#: src/ar.c:76 msgid "Command Modifiers:" msgstr "Modyfikatory poleceń:" -#: src/ar.c:78 +#: src/ar.c:77 msgid "Preserve original dates." msgstr "Zachowuje pierwotne daty." -#: src/ar.c:79 +#: src/ar.c:78 msgid "Use instance [COUNT] of name." msgstr "Używa wystąpienia [LICZNIK] nazwy." -#: src/ar.c:81 +#: src/ar.c:80 msgid "Do not replace existing files with extracted files." msgstr "Nie zastępuje istniejących plików wypakowanymi plikami." -#: src/ar.c:82 +#: src/ar.c:81 msgid "Allow filename to be truncated if necessary." msgstr "Zezwala na skrócenie nazwy pliku, jeśli jest to wymagane." -#: src/ar.c:84 +#: src/ar.c:83 msgid "Provide verbose output." msgstr "Wyświetla więcej informacji." -#: src/ar.c:85 +#: src/ar.c:84 msgid "Force regeneration of symbol table." msgstr "Wymusza ponowne utworzenie tabeli symboli." -#: src/ar.c:86 +#: src/ar.c:85 msgid "Insert file after [MEMBER]." msgstr "Umieszcza plik po [ELEMENCIE]." -#: src/ar.c:87 +#: src/ar.c:86 msgid "Insert file before [MEMBER]." msgstr "Umieszcza plik przed [ELEMENTEM]." -#: src/ar.c:88 +#: src/ar.c:87 msgid "Same as -b." msgstr "To samo, co -b." -#: src/ar.c:89 +#: src/ar.c:88 msgid "Suppress message when library has to be created." msgstr "Zmniejsza komunikat, jeśli biblioteka musi zostać utworzona." -#: src/ar.c:91 +#: src/ar.c:90 msgid "Use full path for file matching." msgstr "Używa pełnej ścieżki do dopasowywania plików." -#: src/ar.c:92 +#: src/ar.c:91 msgid "Update only older files in archive." msgstr "Aktualizuje tylko starsze pliki w archiwum." #. Short description of program. -#: src/ar.c:98 +#: src/ar.c:97 msgid "Create, modify, and extract from archives." msgstr "Tworzenie, modyfikowanie i wypakowywanie archiwów." #. Strings for arguments in help texts. -#: src/ar.c:101 +#: src/ar.c:100 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" msgstr "[ELEMENT] [LICZNIK] ARCHIWUM [PLIK…]" -#: src/ar.c:180 +#: src/ar.c:179 #, c-format msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" msgstr "„a”, „b” i „i” są dozwolone tylko z opcjami „m” i „r”" -#: src/ar.c:185 +#: src/ar.c:184 #, c-format msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" msgstr "parametr ELEMENT jest wymagany dla modyfikatorów „a”, „b” i „i”" -#: src/ar.c:201 +#: src/ar.c:200 #, c-format msgid "'N' is only meaningful with the 'x' and 'd' options" msgstr "„N” ma znaczenie tylko z opcjami „x” i „d”" -#: src/ar.c:206 +#: src/ar.c:205 #, c-format msgid "COUNT parameter required" msgstr "wymagany jest parametr LICZNIK" -#: src/ar.c:218 +#: src/ar.c:217 #, c-format msgid "invalid COUNT parameter %s" msgstr "nieprawidłowy parametr LICZNIK %s" -#: src/ar.c:225 +#: src/ar.c:224 #, c-format msgid "'%c' is only meaningful with the 'x' option" msgstr "„%c” ma znaczenie tylko z opcją „x”" -#: src/ar.c:231 +#: src/ar.c:230 #, c-format msgid "archive name required" msgstr "wymagana jest nazwa archiwum" -#: src/ar.c:244 +#: src/ar.c:243 #, c-format msgid "command option required" msgstr "wymagana jest opcja polecenia" -#: src/ar.c:295 +#: src/ar.c:294 #, c-format msgid "More than one operation specified" msgstr "Podano więcej niż jedno działanie" -#: src/ar.c:389 +#: src/ar.c:388 #, c-format msgid "cannot open archive '%s'" msgstr "nie można otworzyć archiwum „%s”" -#: src/ar.c:399 +#: src/ar.c:398 #, c-format msgid "cannot open archive '%s': %s" msgstr "nie można otworzyć archiwum „%s”: %s" -#: src/ar.c:403 +#: src/ar.c:402 #, c-format msgid "%s: not an archive file" msgstr "%s: nie jest plikiem archiwum" -#: src/ar.c:407 +#: src/ar.c:406 #, c-format msgid "cannot stat archive '%s'" msgstr "nie można wykonać stat na archiwum „%s”" -#: src/ar.c:419 +#: src/ar.c:418 #, c-format 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:471 src/ar.c:925 src/ar.c:1131 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:477 src/ar.c:931 src/ar.c:1139 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:485 src/ranlib.c:147 #, c-format msgid "cannot stat '%s'" msgstr "nie można wykonać stat na „%s”" -#: src/ar.c:589 +#: src/ar.c:587 #, 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:630 #, c-format msgid "cannot open %.*s" msgstr "nie można otworzyć %.*s" -#: src/ar.c:654 +#: src/ar.c:652 #, c-format msgid "failed to write %s" msgstr "zapisanie %s się nie powiodło" -#: src/ar.c:666 +#: src/ar.c:664 #, c-format msgid "cannot change mode of %s" msgstr "nie można zmienić trybu %s" -#: src/ar.c:682 +#: src/ar.c:680 #, c-format msgid "cannot change modification time of %s" msgstr "nie można zmienić czasu modyfikacji %s" -#: src/ar.c:728 +#: src/ar.c:726 #, 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:762 src/ar.c:1016 src/ar.c:1419 src/ranlib.c:221 #, c-format msgid "cannot create new file" msgstr "nie można utworzyć nowego pliku" -#: src/ar.c:1225 +#: src/ar.c:1221 #, c-format msgid "position member %s not found" msgstr "nie odnaleziono położenia elementu %s" -#: src/ar.c:1235 +#: src/ar.c:1231 #, 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:1260 src/objdump.c:240 #, c-format msgid "cannot open %s" msgstr "nie można otworzyć %s" -#: src/ar.c:1269 +#: src/ar.c:1265 #, c-format msgid "cannot stat %s" msgstr "nie można wykonać stat na %s" -#: src/ar.c:1275 +#: src/ar.c:1271 #, c-format msgid "%s is no regular file" msgstr "%s nie jest zwykłym plikiem" -#: src/ar.c:1288 +#: src/ar.c:1284 #, 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:1304 #, c-format msgid "cannot read %s: %s" msgstr "nie można odczytać %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1479 #, c-format msgid "cannot represent ar_date" msgstr "nie można przedstawić ar_date" -#: src/ar.c:1489 +#: src/ar.c:1485 #, c-format msgid "cannot represent ar_uid" msgstr "nie można przedstawić ar_uid" -#: src/ar.c:1495 +#: src/ar.c:1491 #, c-format msgid "cannot represent ar_gid" msgstr "nie można przedstawić ar_gid" -#: src/ar.c:1501 +#: src/ar.c:1497 #, c-format msgid "cannot represent ar_mode" msgstr "nie można przedstawić ar_mode" -#: src/ar.c:1507 +#: src/ar.c:1503 #, c-format msgid "cannot represent ar_size" msgstr "nie można przedstawić ar_size" -#: src/arlib-argp.c:32 +#: src/arlib-argp.c:31 msgid "Use zero for uid, gid, and date in archive members." msgstr "Używa zero jako UID, GID i datę w elementach archiwum." -#: src/arlib-argp.c:34 +#: src/arlib-argp.c:33 msgid "Use actual uid, gid, and date in archive members." msgstr "Używa prawdziwe UID, GID i datę w elementach archiwum." -#: src/arlib-argp.c:63 +#: src/arlib-argp.c:62 #, c-format msgid "%s (default)" msgstr "%s (domyślnie)" #. The archive is too big. -#: src/arlib.c:213 +#: src/arlib.c:212 #, c-format msgid "the archive '%s' is too large" msgstr "archiwum „%s” jest za duże" -#: src/arlib.c:226 +#: src/arlib.c:225 #, c-format 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 +1261,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 +1322,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/readelf.c:158 +#: src/elfclassify.c:979 src/elfcompress.c:1358 src/elflint.c:76 +#: src/readelf.c:160 msgid "FILE..." msgstr "PLIK…" -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1441,15 +1447,15 @@ msgstr "" "Opcje --quiet i -q zmniejszają wyjście błędów i ostrzeżeń, ale nie zmieniają " "stanów zakończenia." -#: src/elfcmp.c:60 +#: src/elfcmp.c:59 msgid "Control options:" msgstr "Opcje sterujące:" -#: src/elfcmp.c:62 +#: src/elfcmp.c:61 msgid "Output all differences, not just the first" msgstr "Wyświetlanie wszystkich różnic, nie tylko pierwszej" -#: src/elfcmp.c:63 +#: src/elfcmp.c:62 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" @@ -1457,215 +1463,215 @@ msgstr "" "Sterowanie traktowaniem luk w segmentach wczytywalnych [ignore|match] " "(domyślne: ignore)" -#: src/elfcmp.c:65 +#: src/elfcmp.c:64 msgid "Ignore permutation of buckets in SHT_HASH section" msgstr "Ignorowanie permutacji kubełków w sekcji SHT_HASH" -#: src/elfcmp.c:67 +#: src/elfcmp.c:66 msgid "Ignore differences in build ID" msgstr "Ignorowanie różnic w identyfikatorze kopii" -#: src/elfcmp.c:68 +#: src/elfcmp.c:67 msgid "Output nothing; yield exit status only" msgstr "Bez wypisywania; przekazanie tylko kodu wyjścia" #. Short description of program. -#: src/elfcmp.c:75 +#: src/elfcmp.c:74 msgid "Compare relevant parts of two ELF files for equality." msgstr "Porównywanie odpowiednich części dwóch plików ELF pod kątem równości." #. Strings for arguments in help texts. -#: src/elfcmp.c:79 +#: src/elfcmp.c:78 msgid "FILE1 FILE2" msgstr "PLIK1 PLIK2" -#: src/elfcmp.c:141 +#: src/elfcmp.c:140 msgid "Invalid number of parameters.\n" msgstr "Nieprawidłowa liczba parametrów.\n" -#: src/elfcmp.c:172 src/elfcmp.c:177 +#: src/elfcmp.c:171 src/elfcmp.c:176 #, c-format msgid "cannot get ELF header of '%s': %s" msgstr "nie można uzyskać nagłówka ELF „%s”: %s" -#: src/elfcmp.c:203 +#: src/elfcmp.c:202 #, c-format msgid "%s %s diff: ELF header" msgstr "%s %s różnią się: nagłówek ELF" -#: src/elfcmp.c:210 src/elfcmp.c:213 +#: src/elfcmp.c:209 src/elfcmp.c:212 #, c-format msgid "cannot get section count of '%s': %s" msgstr "nie można uzyskać licznika sekcji „%s”: %s" -#: src/elfcmp.c:218 +#: src/elfcmp.c:217 #, c-format msgid "%s %s diff: section count" msgstr "%s %s różnią się: licznik sekcji" -#: src/elfcmp.c:225 src/elfcmp.c:228 +#: src/elfcmp.c:224 src/elfcmp.c:227 #, c-format msgid "cannot get program header count of '%s': %s" msgstr "nie można uzyskać licznika nagłówka programu „%s”: %s" -#: src/elfcmp.c:233 +#: src/elfcmp.c:232 #, c-format msgid "%s %s diff: program header count" msgstr "%s %s różnią się: licznik nagłówka programu" -#: src/elfcmp.c:241 src/elfcmp.c:244 +#: src/elfcmp.c:240 src/elfcmp.c:243 #, c-format msgid "cannot get hdrstrndx of '%s': %s" msgstr "nie można uzyskać hdrstrndx „%s”: %s" -#: src/elfcmp.c:249 +#: src/elfcmp.c:248 #, c-format msgid "%s %s diff: shdr string index" msgstr "%s %s różnią się: indeks ciągu shdr" -#: src/elfcmp.c:307 +#: src/elfcmp.c:306 #, c-format msgid "%s %s differ: section [%zu], [%zu] name" msgstr "%s %s różnią się: nazwa sekcji [%zu], [%zu]" -#: src/elfcmp.c:330 +#: src/elfcmp.c:329 #, c-format msgid "%s %s differ: section [%zu] '%s' header" msgstr "%s %s różnią się: nagłówek sekcji [%zu] „%s”" -#: src/elfcmp.c:338 src/elfcmp.c:344 +#: src/elfcmp.c:337 src/elfcmp.c:343 #, c-format msgid "cannot get content of section %zu in '%s': %s" msgstr "nie można uzyskać zawartości sekcji %zu w „%s”: %s" -#: src/elfcmp.c:353 +#: src/elfcmp.c:352 #, c-format msgid "symbol table [%zu] in '%s' has zero sh_entsize" msgstr "tabela symboli [%zu] w „%s” ma zerowe sh_entsize" -#: src/elfcmp.c:365 src/elfcmp.c:371 +#: src/elfcmp.c:364 src/elfcmp.c:370 #, c-format msgid "cannot get symbol in '%s': %s" msgstr "nie można uzyskać symbolu w „%s”: %s" -#: src/elfcmp.c:393 +#: src/elfcmp.c:392 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "%s %s różnią się: tabela symboli [%zu]" -#: src/elfcmp.c:396 +#: src/elfcmp.c:395 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "%s %s różnią się: tabela symboli [%zu,%zu]" -#: src/elfcmp.c:443 src/elfcmp.c:513 +#: src/elfcmp.c:442 src/elfcmp.c:512 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "%s %s różnią się: liczba notatek sekcji [%zu] „%s”" -#: src/elfcmp.c:451 +#: src/elfcmp.c:450 #, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "nie można odczytać notatki sekcji [%zu] „%s” w „%s”: %s" -#: src/elfcmp.c:462 +#: src/elfcmp.c:461 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "%s %s różnią się: nazwa notatki sekcji [%zu] „%s”" -#: src/elfcmp.c:470 +#: src/elfcmp.c:469 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "%s %s różnią się: sekcja [%zu] „%s” notatka „%s” typ" -#: src/elfcmp.c:485 +#: src/elfcmp.c:484 #, c-format msgid "%s %s differ: build ID length" msgstr "%s %s różnią się: długość identyfikatora kopii" -#: src/elfcmp.c:493 +#: src/elfcmp.c:492 #, c-format msgid "%s %s differ: build ID content" msgstr "%s %s różnią się: zawartość identyfikatora kopii" -#: src/elfcmp.c:502 +#: src/elfcmp.c:501 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "%s %s różnią się: sekcja [%zu] „%s” notatka „%s” zawartość" -#: src/elfcmp.c:543 +#: src/elfcmp.c:542 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "%s %s różnią się: zawartość sekcji [%zu] „%s”" -#: src/elfcmp.c:547 +#: src/elfcmp.c:546 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "%s %s różnią się: zawartość sekcji [%zu,%zu] „%s”" -#: src/elfcmp.c:562 +#: src/elfcmp.c:561 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "%s %s różnią się: różna liczba ważnych sekcji" -#: src/elfcmp.c:595 src/elfcmp.c:600 +#: src/elfcmp.c:594 src/elfcmp.c:599 #, c-format msgid "cannot load data of '%s': %s" msgstr "nie można wczytać danych z „%s”: %s" -#: src/elfcmp.c:619 src/elfcmp.c:625 +#: src/elfcmp.c:618 src/elfcmp.c:624 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "nie można uzyskać wpisu nagłówka programu %d z „%s”: %s" -#: src/elfcmp.c:631 +#: src/elfcmp.c:630 #, c-format msgid "%s %s differ: program header %d" msgstr "%s %s różnią się: nagłówek programu %d" -#: src/elfcmp.c:655 +#: src/elfcmp.c:654 #, c-format msgid "%s %s differ: gap" msgstr "%s %s różnią się: luka" -#: src/elfcmp.c:706 +#: src/elfcmp.c:705 #, c-format 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/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:733 src/findtextrel.c:194 src/nm.c:363 src/ranlib.c:140 +#: src/size.c:271 src/strings.c:184 src/strip.c:1040 src/strip.c:1077 +#: src/unstrip.c:2194 src/unstrip.c:2223 #, 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:737 src/findtextrel.c:213 src/ranlib.c:157 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "nie można utworzyć deskryptora ELF dla „%s”: %s" -#: src/elfcmp.c:743 +#: src/elfcmp.c:742 #, c-format 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:760 src/findtextrel.c:384 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "nie można uzyskać nagłówka sekcji dla sekcji %zu: %s" -#: src/elfcmp.c:771 +#: src/elfcmp.c:770 #, c-format msgid "cannot get content of section %zu: %s" msgstr "nie można uzyskać zawartości sekcji %zu: %s" -#: src/elfcmp.c:781 src/elfcmp.c:795 +#: src/elfcmp.c:780 src/elfcmp.c:794 #, c-format 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:305 src/unstrip.c:116 #, c-format msgid "-o option specified twice" msgstr "Opcję -o podano dwukrotnie" @@ -1681,21 +1687,21 @@ msgid "unknown compression type '%s'" msgstr "nieznany typ kompresji „%s”" #. We need at least one input file. -#: src/elfcompress.c:145 src/elfcompress.c:1345 +#: src/elfcompress.c:145 src/elfcompress.c:1369 #, c-format 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:1373 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "Tylko jeden plik wejściowy jest dozwolony z „-o”" -#: src/elfcompress.c:1307 +#: src/elfcompress.c:1331 msgid "Place (de)compressed output into FILE" msgstr "Umieszcza zdekompresowane wyjście w PLIKU" -#: src/elfcompress.c:1310 +#: src/elfcompress.c:1334 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" @@ -1705,7 +1711,7 @@ msgstr "" "„zlib” (kompresja zlib ELF, domyślna, „zlib-gabi” to alias) lub „zlib-" "gnu” (kompresja .zdebug w stylu GNU, „gnu” to alias)" -#: src/elfcompress.c:1313 +#: src/elfcompress.c:1337 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" @@ -1713,11 +1719,11 @@ msgstr "" "Nazwa SEKCJI do (de)kompresowania, SEKCJA jest rozszerzonym wzorem " "(domyślnie „.?(z)debug*”)" -#: src/elfcompress.c:1316 +#: src/elfcompress.c:1340 msgid "Print a message for each section being (de)compressed" msgstr "Wyświetla komunikat dla każdej (de)kompresowanej sekcji" -#: src/elfcompress.c:1319 +#: src/elfcompress.c:1343 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" @@ -1726,31 +1732,31 @@ msgstr "" "zaktualizowanie/przepisanie pliku, nawet jeśli żadna sekcja nie zostałaby " "(zde)kompresowana" -#: src/elfcompress.c:1322 src/strip.c:93 +#: src/elfcompress.c:1346 src/strip.c:92 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "Łagodzi kilka reguł, aby obsłużyć lekko uszkodzone pliki ELF" -#: src/elfcompress.c:1325 +#: src/elfcompress.c:1349 msgid "Be silent when a section cannot be compressed" msgstr "Bez zgłaszania, kiedy nie można zdekompresować sekcji" -#: src/elfcompress.c:1335 +#: src/elfcompress.c:1359 msgid "Compress or decompress sections in an ELF file." msgstr "Kompresuje lub dekompresuje sekcje w pliku ELF." -#: src/elflint.c:63 +#: src/elflint.c:62 msgid "Be extremely strict, flag level 2 features." msgstr "Bardzo ścisłe sprawdzanie, cechy poziomu 2 flag." -#: src/elflint.c:64 +#: src/elflint.c:63 msgid "Do not print anything if successful" msgstr "Nie wypisywanie niczego w przypadku powodzenia" -#: src/elflint.c:65 +#: src/elflint.c:64 msgid "Binary is a separate debuginfo file" msgstr "Plik binarny jest oddzielnym plikiem debuginfo" -#: src/elflint.c:67 +#: src/elflint.c:66 msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" @@ -1759,172 +1765,172 @@ msgstr "" "w pewien sposób" #. Short description of program. -#: src/elflint.c:73 +#: src/elflint.c:72 msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" "Szczegółowe sprawdzanie zgodności plików ELF ze specyfikacją gABI/psABI." -#: src/elflint.c:154 src/readelf.c:368 +#: src/elflint.c:153 src/readelf.c:391 #, c-format msgid "cannot open input file '%s'" msgstr "nie można otworzyć pliku wejściowego „%s”" -#: src/elflint.c:161 +#: src/elflint.c:160 #, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" msgstr "nie można utworzyć deskryptora ELF dla „%s”: %s\n" -#: src/elflint.c:180 +#: src/elflint.c:179 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "błąd podczas zamykania deskryptora ELF: %s\n" -#: src/elflint.c:184 +#: src/elflint.c:183 msgid "No errors" msgstr "Brak błędów" -#: src/elflint.c:219 src/readelf.c:577 +#: src/elflint.c:218 src/readelf.c:603 msgid "Missing file name.\n" msgstr "Brak nazwy pliku.\n" -#: src/elflint.c:284 +#: src/elflint.c:283 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " błąd podczas zwalniania deskryptora pod-ELF: %s\n" #. We cannot do anything. -#: src/elflint.c:292 +#: src/elflint.c:291 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "To nie jest plik ELF — ma błędne bajty magiczne na początku\n" -#: src/elflint.c:357 +#: src/elflint.c:356 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d nie jest znaną klasą\n" -#: src/elflint.c:362 +#: src/elflint.c:361 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d nie jest znanym kodowaniem danych\n" -#: src/elflint.c:366 +#: src/elflint.c:365 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "nieznany numer wersji nagłówka ELF e_ident[%d] == %d\n" -#: src/elflint.c:374 +#: src/elflint.c:373 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "nieobsługiwane ABI systemu operacyjnego e_ident[%d] == „%s”\n" -#: src/elflint.c:380 +#: src/elflint.c:379 #, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "nieobsługiwana wersja ABI e_ident[%d] == %d\n" -#: src/elflint.c:385 +#: src/elflint.c:384 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] nie wynosi zero\n" -#: src/elflint.c:390 +#: src/elflint.c:389 #, c-format msgid "unknown object file type %d\n" msgstr "nieznany typ pliku obiektu %d\n" -#: src/elflint.c:397 +#: src/elflint.c:396 #, c-format msgid "unknown machine type %d\n" msgstr "nieznany typ komputera %d\n" -#: src/elflint.c:401 +#: src/elflint.c:400 #, c-format msgid "unknown object file version\n" msgstr "nieznana wersja pliku obiektu\n" -#: src/elflint.c:407 +#: src/elflint.c:406 #, c-format msgid "invalid program header offset\n" msgstr "nieprawidłowy offset nagłówka programu\n" -#: src/elflint.c:409 +#: src/elflint.c:408 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "pliki wykonywalne i DSO nie mogą mieć zerowego offsetu nagłówka programu\n" -#: src/elflint.c:413 +#: src/elflint.c:412 #, c-format msgid "invalid number of program header entries\n" msgstr "nieprawidłowa liczba wpisów nagłówka programu\n" -#: src/elflint.c:421 +#: src/elflint.c:420 #, c-format msgid "invalid section header table offset\n" msgstr "nieprawidłowy offset tabeli nagłówków sekcji\n" -#: src/elflint.c:424 +#: src/elflint.c:423 #, c-format msgid "section header table must be present\n" msgstr "tabela nagłówków sekcji musi istnieć\n" -#: src/elflint.c:438 +#: src/elflint.c:437 #, c-format msgid "invalid number of section header table entries\n" msgstr "nieprawidłowa liczba wpisów tabeli nagłówków sekcji\n" -#: src/elflint.c:455 +#: src/elflint.c:454 #, c-format msgid "invalid section header index\n" msgstr "nieprawidłowy indeks nagłówka sekcji\n" -#: src/elflint.c:473 +#: src/elflint.c:472 #, c-format msgid "Can only check %u headers, shnum was %u\n" msgstr "Można sprawdzić tylko nagłówki %u, shnum wynosiło %u\n" -#: src/elflint.c:487 +#: src/elflint.c:486 #, c-format msgid "invalid number of program header table entries\n" msgstr "nieprawidłowa liczba wpisów tabeli nagłówka programu\n" -#: src/elflint.c:504 +#: src/elflint.c:503 #, c-format msgid "Can only check %u headers, phnum was %u\n" msgstr "Można sprawdzić tylko nagłówki %u, phnum wynosiło %u\n" -#: src/elflint.c:509 +#: src/elflint.c:508 #, c-format msgid "invalid machine flags: %s\n" msgstr "nieprawidłowe flagi komputera: %s\n" -#: src/elflint.c:516 src/elflint.c:533 +#: src/elflint.c:515 src/elflint.c:532 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "nieprawidłowy rozmiar nagłówka ELF: %hd\n" -#: src/elflint.c:519 src/elflint.c:536 +#: src/elflint.c:518 src/elflint.c:535 #, c-format msgid "invalid program header size: %hd\n" msgstr "nieprawidłowa rozmiar nagłówka programu: %hd\n" -#: src/elflint.c:522 src/elflint.c:539 +#: src/elflint.c:521 src/elflint.c:538 #, c-format msgid "invalid program header position or size\n" msgstr "nieprawidłowe położenie lub rozmiar nagłówka programu\n" -#: src/elflint.c:525 src/elflint.c:542 +#: src/elflint.c:524 src/elflint.c:541 #, c-format msgid "invalid section header size: %hd\n" msgstr "nieprawidłowy rozmiar nagłówka sekcji: %hd\n" -#: src/elflint.c:528 src/elflint.c:545 +#: src/elflint.c:527 src/elflint.c:544 #, c-format msgid "invalid section header position or size\n" msgstr "nieprawidłowe położenie lub rozmiar nagłówka sekcji\n" -#: src/elflint.c:590 +#: src/elflint.c:589 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1932,21 +1938,21 @@ msgid "" msgstr "" "sekcja [%2d] „%s”: sekcja z flagą SHF_GROUP nie jest częścią grupy sekcji\n" -#: src/elflint.c:594 +#: src/elflint.c:593 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" "sekcja [%2d] „%s”: grupa sekcji [%2zu] „%s” nie poprzedza elementu grupy\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:609 src/elflint.c:1497 src/elflint.c:1548 src/elflint.c:1654 +#: src/elflint.c:1990 src/elflint.c:2316 src/elflint.c:2942 src/elflint.c:3105 +#: src/elflint.c:3253 src/elflint.c:3455 src/elflint.c:4464 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać danych sekcji\n" -#: src/elflint.c:623 src/elflint.c:1662 +#: src/elflint.c:622 src/elflint.c:1661 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1955,7 +1961,7 @@ msgstr "" "sekcja [%2d] „%s”: użyta jako tabela ciągów dla sekcji [%2d] „%s”, ale nie " "jest typu SHT_STRTAB\n" -#: src/elflint.c:646 +#: src/elflint.c:645 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1964,12 +1970,12 @@ msgstr "" "sekcja [%2d] „%s”: tabela symboli nie może mieć więcej niż jednej " "rozszerzonej sekcji indeksów\n" -#: src/elflint.c:658 +#: src/elflint.c:657 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "sekcja [%2u] „%s”: rozmiar wpisu nie zgadza się z ElfXX_Sym\n" -#: src/elflint.c:662 +#: src/elflint.c:661 #, c-format msgid "" "section [%2u] '%s': number of local entries in 'st_info' larger than table " @@ -1978,33 +1984,33 @@ msgstr "" "sekcja [%2u] „%s”: liczba lokalnych wpisów w „st_info” jest większa niż " "rozmiar tabeli\n" -#: src/elflint.c:671 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać symbolu %d: %s\n" -#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685 -#: src/elflint.c:688 src/elflint.c:691 +#: src/elflint.c:675 src/elflint.c:678 src/elflint.c:681 src/elflint.c:684 +#: src/elflint.c:687 src/elflint.c:690 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "sekcja [%2d] „%s”: „%s” w zerowym wpisie nie jest zerem\n" -#: src/elflint.c:694 +#: src/elflint.c:693 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "sekcja [%2d] „%s”: XINDEX dla zerowego wpisu nie jest zerem\n" -#: src/elflint.c:704 +#: src/elflint.c:703 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać symbolu %zu: %s\n" -#: src/elflint.c:713 +#: src/elflint.c:712 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "sekcja [%2d] „%s”: symbol %zu: nieprawidłowa wartość nazwy\n" -#: src/elflint.c:728 +#: src/elflint.c:727 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): too large section index but no extended " @@ -2013,7 +2019,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): za duży indeks sekcji, ale nie ma sekcji " "rozszerzonych indeksów sekcji\n" -#: src/elflint.c:734 +#: src/elflint.c:733 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): XINDEX used for index which would fit " @@ -2023,28 +2029,28 @@ msgstr "" "zmieściłby się w st_shndx (%)\n" #. || sym->st_shndx > SHN_HIRESERVE always false -#: src/elflint.c:746 +#: src/elflint.c:745 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): invalid section index\n" msgstr "sekcja [%2d] „%s”: symbol %zu (%s): nieprawidłowy indeks sekcji\n" -#: src/elflint.c:754 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown type\n" msgstr "sekcja [%2d] „%s”: symbol %zu (%s): nieznany typ\n" -#: src/elflint.c:760 +#: src/elflint.c:759 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown symbol binding\n" msgstr "sekcja [%2d] „%s”: symbol %zu (%s): nieznane dowiązanie symbolu\n" -#: src/elflint.c:765 +#: src/elflint.c:764 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): unique symbol not of object type\n" msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): unikalny symbol nie jest typem obiektu\n" -#: src/elflint.c:773 +#: src/elflint.c:772 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): COMMON only allowed in relocatable " @@ -2053,26 +2059,26 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): COMMON jest dozwolone tylko w plikach " "relokowalnych\n" -#: src/elflint.c:777 +#: src/elflint.c:776 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local COMMON symbols are nonsense\n" msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): lokalne symbole COMMON to nonsens\n" -#: src/elflint.c:781 +#: src/elflint.c:780 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): function in COMMON section is nonsense\n" msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): funkcja w sekcji COMMON to nonsens\n" -#: src/elflint.c:832 +#: src/elflint.c:831 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): st_value out of bounds\n" msgstr "sekcja [%2d] „%s”: symbol %zu (%s): st_value spoza zakresu\n" -#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912 +#: src/elflint.c:837 src/elflint.c:862 src/elflint.c:911 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s) does not fit completely in referenced " @@ -2081,7 +2087,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s) nie mieści się w całości we wskazywanej " "sekcji [%2d] „%s”\n" -#: src/elflint.c:847 +#: src/elflint.c:846 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): referenced section [%2d] '%s' does not " @@ -2090,7 +2096,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): wskazywana sekcja [%2d] „%s” nie ma " "ustawionej flagi SHF_TLS\n" -#: src/elflint.c:857 src/elflint.c:905 +#: src/elflint.c:856 src/elflint.c:904 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value out of bounds of referenced " @@ -2099,7 +2105,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): st_value spoza zakresu wskazywanej " "sekcji [%2d] „%s”\n" -#: src/elflint.c:884 +#: src/elflint.c:883 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but no TLS program header " @@ -2108,7 +2114,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): symbol TLS, ale brak wpisu TLS nagłówka " "programu\n" -#: src/elflint.c:890 +#: src/elflint.c:889 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but couldn't get TLS program " @@ -2117,7 +2123,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): symbol TLS, ale nie można uzyskać wpisu " "TLS nagłówka programu\n" -#: src/elflint.c:898 +#: src/elflint.c:897 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value short of referenced section " @@ -2126,7 +2132,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): st_value pomija wskazywaną sekcję [%2d] " "„%s”\n" -#: src/elflint.c:925 +#: src/elflint.c:924 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local symbol outside range described in " @@ -2135,7 +2141,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): lokalny symbol spoza zakresu określonego " "w sh_info\n" -#: src/elflint.c:932 +#: src/elflint.c:931 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): non-local symbol outside range " @@ -2144,12 +2150,12 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): nielokalny symbol spoza zakresu " "określonego w sh_info\n" -#: src/elflint.c:939 +#: src/elflint.c:938 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): non-local section symbol\n" msgstr "sekcja [%2d] „%s”: symbol %zu (%s): nielokalny symbol sekcji\n" -#: src/elflint.c:989 +#: src/elflint.c:988 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -2158,7 +2164,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol _GLOBAL_OFFSET_TABLE_ odnosi się do błędnej sekcji " "[%2d]\n" -#: src/elflint.c:996 +#: src/elflint.c:995 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -2170,7 +2176,7 @@ msgstr "" #. This test is more strict than the psABIs which #. usually allow the symbol to be in the middle of #. the .got section, allowing negative offsets. -#: src/elflint.c:1012 +#: src/elflint.c:1011 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -2179,7 +2185,7 @@ msgstr "" "sekcja [%2d] „%s”: wartość symbolu _GLOBAL_OFFSET_TABLE_ %# nie " "pasuje do adresu sekcji %s %#\n" -#: src/elflint.c:1019 +#: src/elflint.c:1018 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -2188,7 +2194,7 @@ msgstr "" "sekcja [%2d] „%s”: rozmiar symbolu _GLOBAL_OFFSET_TABLE_ % nie " "pasuje do rozmiaru sekcji %s %\n" -#: src/elflint.c:1027 +#: src/elflint.c:1026 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -2197,7 +2203,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol _GLOBAL_OFFSET_TABLE_ istnieje, ale brak sekcji ." "got\n" -#: src/elflint.c:1043 +#: src/elflint.c:1042 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -2206,7 +2212,7 @@ msgstr "" "sekcja [%2d] „%s”: wartość symbolu _DYNAMIC_ %# nie pasuje do adresu " "segmentu dynamicznego %#\n" -#: src/elflint.c:1050 +#: src/elflint.c:1049 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -2215,7 +2221,7 @@ msgstr "" "sekcja [%2d] „%s”: rozmiar symbolu _DYNAMIC_ % nie pasuje do " "rozmiaru segmentu dynamicznego %\n" -#: src/elflint.c:1063 +#: src/elflint.c:1062 #, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): symbol in dynamic symbol table with non-" @@ -2224,28 +2230,28 @@ msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): symbol w dynamicznej tabeli symboli " "z niedomyślną widocznością\n" -#: src/elflint.c:1067 +#: src/elflint.c:1066 #, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown bit set in st_other\n" msgstr "" "sekcja [%2d] „%s”: symbol %zu (%s): ustawiono nieznany bit w st_other\n" -#: src/elflint.c:1105 +#: src/elflint.c:1104 #, c-format msgid "section [%2d] '%s': cannot get section data.\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać danych sekcji.\n" -#: src/elflint.c:1121 +#: src/elflint.c:1120 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "sekcja [%2d] „%s”: DT_RELCOUNT użyte dla tej sekcji RELA\n" -#: src/elflint.c:1132 src/elflint.c:1185 +#: src/elflint.c:1131 src/elflint.c:1184 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "sekcja [%2d] „%s”: DT_RELCOUNT %d za duże dla tej sekcji\n" -#: src/elflint.c:1157 src/elflint.c:1210 +#: src/elflint.c:1156 src/elflint.c:1209 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -2254,7 +2260,7 @@ msgstr "" "sekcja [%2d] „%s”: relokacje względne po indeksie %d podanym przez " "DT_RELCOUNT\n" -#: src/elflint.c:1163 src/elflint.c:1216 +#: src/elflint.c:1162 src/elflint.c:1215 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -2263,50 +2269,50 @@ msgstr "" "sekcja [%2d] „%s”: relokacja bezwzględna pod indeksem %zu; DT_RELCOUNT podał " "%d relokacji względnych\n" -#: src/elflint.c:1175 +#: src/elflint.c:1174 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "sekcja [%2d] „%s”: DT_RELACOUNT użyte dla tej sekcji REL\n" -#: src/elflint.c:1258 +#: src/elflint.c:1257 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "sekcja [%2d] „%s”: nieprawidłowy indeks sekcji docelowej\n" -#: src/elflint.c:1270 +#: src/elflint.c:1269 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "sekcja [%2d] „%s”: nieprawidłowy typ sekcji docelowej\n" -#: src/elflint.c:1278 +#: src/elflint.c:1277 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "sekcja [%2d] „%s”: sh_info musi wynosić zero\n" -#: src/elflint.c:1286 +#: src/elflint.c:1285 #, c-format msgid "" "section [%2d] '%s': no relocations for merge-able string sections possible\n" msgstr "" "sekcja [%2d] „%s”: relokacje dla sekcji złączalnych ciągów są niemożliwe\n" -#: src/elflint.c:1294 +#: src/elflint.c:1293 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "sekcja [%2d] „%s”: rozmiar wpisu sekcji nie zgadza się z ElfXX_Rela\n" -#: src/elflint.c:1354 +#: src/elflint.c:1353 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "flaga relokacji tekstu jest ustawiona, ale nie ma segmentu tylko do odczytu\n" -#: src/elflint.c:1381 +#: src/elflint.c:1380 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "sekcja [%2d] „%s”: relokacja %zu: nieprawidłowy typ\n" -#: src/elflint.c:1389 +#: src/elflint.c:1388 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -2315,12 +2321,12 @@ msgstr "" "sekcja [%2d] „%s”: relokacja %zu: typ relokacji nieprawidłowy dla tego typu " "pliku\n" -#: src/elflint.c:1397 +#: src/elflint.c:1396 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "sekcja [%2d] „%s”: relokacja %zu: nieprawidłowy indeks symbolu\n" -#: src/elflint.c:1415 +#: src/elflint.c:1414 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -2329,12 +2335,12 @@ msgstr "" "sekcja [%2d] „%s”: relokacja %zu: z %s można użyć tylko symbolu " "„_GLOBAL_OFFSET_TABLE_”\n" -#: src/elflint.c:1432 +#: src/elflint.c:1431 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "sekcja [%2d] „%s”: relokacja %zu: offset spoza zakresu\n" -#: src/elflint.c:1447 +#: src/elflint.c:1446 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -2342,7 +2348,7 @@ msgid "" msgstr "" "sekcja [%2d] „%s”: relokacja %zu: relokacja kopii względem symbolu typu %s\n" -#: src/elflint.c:1468 +#: src/elflint.c:1467 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -2351,23 +2357,23 @@ msgstr "" "sekcja [%2d] „%s”: relokacja %zu: sekcja tylko do odczytu została " "zmodyfikowana, ale nie ustawiono flagi relokacji tekstu\n" -#: src/elflint.c:1483 +#: src/elflint.c:1482 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" "sekcja [%2d] „%s”: relokacje względem wczytanych i niewczytanych danych\n" -#: src/elflint.c:1523 src/elflint.c:1574 +#: src/elflint.c:1522 src/elflint.c:1573 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać relokacji %zu: %s\n" -#: src/elflint.c:1650 +#: src/elflint.c:1649 #, c-format msgid "more than one dynamic section present\n" msgstr "obecna jest więcej niż jedna sekcja dynamiczna\n" -#: src/elflint.c:1668 +#: src/elflint.c:1667 #, c-format msgid "" "section [%2d]: referenced as string table for section [%2d] '%s' but section " @@ -2376,43 +2382,43 @@ msgstr "" "sekcja [%2d]: wskazane jako tabela ciągów dla sekcji [%2d] „%s”, ale wartość " "dowiązania sekcji jest nieprawidłowa\n" -#: src/elflint.c:1676 +#: src/elflint.c:1675 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "sekcja [%2d] „%s”: rozmiar wpisu sekcji nie zgadza się z ElfXX_Dyn\n" -#: src/elflint.c:1681 src/elflint.c:1970 +#: src/elflint.c:1680 src/elflint.c:1969 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "sekcja [%2d] „%s”: sh_info nie wynosi zero\n" -#: src/elflint.c:1691 +#: src/elflint.c:1690 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" "sekcja [%2d] „%s”: nie można uzyskać wpisu %zu sekcji dynamicznej: %s\n" -#: src/elflint.c:1699 +#: src/elflint.c:1698 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "sekcja [%2d] „%s”: wpisy nie-DT_NULL występują po wpisie DT_NULL\n" -#: src/elflint.c:1706 +#: src/elflint.c:1705 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "sekcja [%2d] „%s”: wpis %zu: nieznany znacznik\n" -#: src/elflint.c:1717 +#: src/elflint.c:1716 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "sekcja [%2d] „%s”: wpis %zu: więcej niż jeden wpis ze znacznikiem %s\n" -#: src/elflint.c:1727 +#: src/elflint.c:1726 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "sekcja [%2d] „%s”: wpis %zu: użyto znacznika %s poziomu 2\n" -#: src/elflint.c:1745 +#: src/elflint.c:1744 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -2420,7 +2426,7 @@ msgstr "" "sekcja [%2d] „%s”: wpis %zu: wartość DT_PLTREL musi wynosić DT_REL lub " "DT_RELA\n" -#: src/elflint.c:1758 +#: src/elflint.c:1757 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -2429,14 +2435,14 @@ msgstr "" "sekcja [%2d] „%s”: wpis %zu: wskaźnik nie pasuje do adresu sekcji [%2d] „%s” " "wskazywanej przez sh_link\n" -#: src/elflint.c:1801 +#: src/elflint.c:1800 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" "sekcja [%2d] „%s”: wpis %zu: wartość %s musi wskazywać na wczytany segment\n" -#: src/elflint.c:1816 +#: src/elflint.c:1815 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -2445,48 +2451,48 @@ msgstr "" "sekcja [%2d] „%s”: wpis %zu: wartość %s musi być prawidłowym offsetem " "w sekcji [%2d] „%s”\n" -#: src/elflint.c:1836 src/elflint.c:1864 +#: src/elflint.c:1835 src/elflint.c:1863 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "sekcja [%2d] „%s”: zawiera wpis %s, ale nie %s\n" -#: src/elflint.c:1848 +#: src/elflint.c:1847 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "sekcja [%2d] „%s”: brak obowiązkowego znacznika %s\n" -#: src/elflint.c:1857 +#: src/elflint.c:1856 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "sekcja [%2d] „%s”: brak sekcji skrótów\n" -#: src/elflint.c:1872 src/elflint.c:1879 +#: src/elflint.c:1871 src/elflint.c:1878 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "sekcja [%2d] „%s”: nie wszystkie z %s, %s i %s są obecne\n" -#: src/elflint.c:1889 src/elflint.c:1893 +#: src/elflint.c:1888 src/elflint.c:1892 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" "sekcja [%2d] „%s”: brak znacznika %s w DSO oznaczonym podczas wstępnej " "konsolidacji\n" -#: src/elflint.c:1899 +#: src/elflint.c:1898 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" "sekcja [%2d] „%s”: plik nie-DSO oznaczony jako zależność podczas wstępnej " "konsolidacji\n" -#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922 +#: src/elflint.c:1909 src/elflint.c:1913 src/elflint.c:1917 src/elflint.c:1921 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" "sekcja [%2d] „%s”: brak znacznika %s we wstępnie konsolidowanym pliku " "wykonywalnym\n" -#: src/elflint.c:1934 +#: src/elflint.c:1933 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -2494,7 +2500,7 @@ msgstr "" "sekcja [%2d] „%s”: tylko pliki relokowalne mogą mieć rozszerzoną sekcję " "indeksów\n" -#: src/elflint.c:1944 +#: src/elflint.c:1943 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" @@ -2502,31 +2508,31 @@ msgstr "" "sekcja [%2d] „%s”: sekcja rozszerzonych indeksów sekcji nie dla tabeli " "symboli\n" -#: src/elflint.c:1948 +#: src/elflint.c:1947 #, c-format msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n" msgstr "" "sekcja [%2d] „%s”: rozszerzony indeks sekcji sh_link [%2d] jest " "nieprawidłowy\n" -#: src/elflint.c:1953 +#: src/elflint.c:1952 #, c-format msgid "cannot get data for symbol section\n" msgstr "nie można uzyskać danych dla sekcji symboli\n" -#: src/elflint.c:1956 +#: src/elflint.c:1955 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "sekcja [%2d] „%s”: rozmiar wpisu nie zgadza się z Elf32_Word\n" -#: src/elflint.c:1965 +#: src/elflint.c:1964 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" "sekcja [%2d] „%s”: tabela rozszerzonych indeksów jest za mała dla tabeli " "symboli\n" -#: src/elflint.c:1980 +#: src/elflint.c:1979 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -2535,24 +2541,24 @@ msgstr "" "sekcja [%2d] „%s”: rozszerzony indeks sekcji w sekcji [%2zu] „%s” odwołuje " "się do tej samej tabeli symboli\n" -#: src/elflint.c:1998 +#: src/elflint.c:1997 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "symbol 0 musi mieć zerowy rozszerzony indeks sekcji\n" -#: src/elflint.c:2010 +#: src/elflint.c:2009 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "nie można uzyskać danych dla symbolu %zu\n" -#: src/elflint.c:2015 +#: src/elflint.c:2014 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" "rozszerzony indeks sekcji wynosi %, ale indeks symbolu nie wynosi " "XINDEX\n" -#: src/elflint.c:2032 src/elflint.c:2089 +#: src/elflint.c:2031 src/elflint.c:2088 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" @@ -2560,43 +2566,43 @@ msgstr "" "sekcja [%2d] „%s”: sekcja tabeli mieszającej jest za mała (%ld, oczekiwano " "%ld)\n" -#: src/elflint.c:2046 src/elflint.c:2103 +#: src/elflint.c:2045 src/elflint.c:2102 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "sekcja [%2d] „%s”: tabela łańcuchowa jest za duża\n" -#: src/elflint.c:2060 src/elflint.c:2117 +#: src/elflint.c:2059 src/elflint.c:2116 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" "sekcja [%2d] „%s”: odwołanie do kubełka skrótu %zu jest spoza zakresu\n" -#: src/elflint.c:2070 +#: src/elflint.c:2069 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" "sekcja [%2d] „%s”: odwołanie do łańcucha skrótu %zu jest spoza zakresu\n" -#: src/elflint.c:2127 +#: src/elflint.c:2126 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" "sekcja [%2d] „%s”: odwołanie do łańcucha skrótu % jest spoza " "zakresu\n" -#: src/elflint.c:2140 +#: src/elflint.c:2139 #, c-format msgid "section [%2d] '%s': not enough data\n" msgstr "sekcja [%2d] „%s”: brak wystarczającej ilości danych\n" -#: src/elflint.c:2152 +#: src/elflint.c:2151 #, c-format msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n" msgstr "" "sekcja [%2d] „%s”: rozmiar maski bitowej wynosi zero lub nie jest potęgą 2: " "%u\n" -#: src/elflint.c:2168 +#: src/elflint.c:2167 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " @@ -2605,13 +2611,13 @@ msgstr "" "sekcja [%2d] „%s”: sekcja tabeli mieszającej jest za mała (wynosi %ld, " "oczekiwano co najmniej %ld)\n" -#: src/elflint.c:2177 +#: src/elflint.c:2176 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" "sekcja [%2d] „%s”: drugie przesunięcie funkcji mieszającej jest za duże: %u\n" -#: src/elflint.c:2211 +#: src/elflint.c:2210 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -2619,7 +2625,7 @@ msgstr "" "sekcja [%2d] „%s”: łańcuch mieszający dla kubełka %zu jest mniejszy niż " "przesunięcie indeksu symboli\n" -#: src/elflint.c:2232 +#: src/elflint.c:2231 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -2628,7 +2634,7 @@ msgstr "" "sekcja [%2d] „%s”: symbol %u wskazywany w łańcuchu dla kubełka %zu jest " "nieokreślony\n" -#: src/elflint.c:2245 +#: src/elflint.c:2244 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -2636,7 +2642,7 @@ msgstr "" "sekcja [%2d] „%s”: wartość skrótu dla symbolu %u w łańcuchu dla kubełka %zu " "jest błędna\n" -#: src/elflint.c:2254 +#: src/elflint.c:2253 #, c-format msgid "" "section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n" @@ -2644,12 +2650,12 @@ msgstr "" "sekcja [%2d] „%s”: indeks maski dla symbolu %u w łańcuchu dla kubełka %zu " "jest błędny\n" -#: src/elflint.c:2284 +#: src/elflint.c:2283 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "sekcja [%2d] „%s”: łańcuch skrótu dla kubełka %zu jest spoza zakresu\n" -#: src/elflint.c:2289 +#: src/elflint.c:2288 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2657,41 +2663,41 @@ msgstr "" "sekcja [%2d] „%s”: odwołanie do symbolu w łańcuchu dla kubełka %zu jest " "spoza zakresu\n" -#: src/elflint.c:2295 +#: src/elflint.c:2294 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" "sekcja [%2d] „%s”: maska bitowa nie pasuje do nazw w tabeli mieszającej\n" -#: src/elflint.c:2308 +#: src/elflint.c:2307 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "sekcja [%2d] „%s”: pliki relokowalne nie mogą mieć tabeli mieszających\n" -#: src/elflint.c:2326 +#: src/elflint.c:2325 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" "sekcja [%2d] „%s”: tabela mieszająca nie dla tabeli dynamicznych symboli\n" -#: src/elflint.c:2330 +#: src/elflint.c:2329 #, c-format msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n" msgstr "" "sekcja [%2d] „%s”: nieprawidłowy indeks sekcji tabeli symboli sh_link [%2d]\n" -#: src/elflint.c:2340 +#: src/elflint.c:2339 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "sekcja [%2d] „%s”: niepoprawny rozmiar wpisu tabeli mieszającej\n" -#: src/elflint.c:2345 +#: src/elflint.c:2344 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "sekcja [%2d] „%s”: nieoznaczona do przydzielenia\n" -#: src/elflint.c:2350 +#: src/elflint.c:2349 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2700,29 +2706,29 @@ msgstr "" "sekcja [%2d] „%s”: tabela mieszająca nie ma miejsca nawet na początkowe " "wpisy administracyjne\n" -#: src/elflint.c:2399 +#: src/elflint.c:2398 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" "sh_link w sekcjach skrótu [%2zu] „%s” i [%2zu] „%s” nie są identyczne\n" -#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523 +#: src/elflint.c:2422 src/elflint.c:2487 src/elflint.c:2522 #, c-format msgid "hash section [%2zu] '%s' does not contain enough data\n" msgstr "" "sekcja mieszania [%2zu] „%s” nie zawiera wystarczającej ilości danych\n" -#: src/elflint.c:2444 +#: src/elflint.c:2443 #, c-format msgid "hash section [%2zu] '%s' has zero bit mask words\n" msgstr "sekcja mieszania [%2zu] „%s” ma zerowe słowa maski bitów\n" -#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536 +#: src/elflint.c:2454 src/elflint.c:2498 src/elflint.c:2535 #, c-format msgid "hash section [%2zu] '%s' uses too much data\n" msgstr "sekcja mieszania [%2zu] „%s” używa za dużo danych\n" -#: src/elflint.c:2470 +#: src/elflint.c:2469 #, c-format msgid "" "hash section [%2zu] '%s' invalid symbol index % (max_nsyms: " @@ -2731,17 +2737,17 @@ msgstr "" "sekcja mieszająca [%2zu] „%s” nieprawidłowy indeks symboli % " "(max_nsyms: %, nentries: %\n" -#: src/elflint.c:2557 +#: src/elflint.c:2556 #, c-format msgid "hash section [%2zu] '%s' invalid sh_entsize\n" msgstr "sekcja mieszania [%2zu] „%s” nieprawidłowe sh_entsize\n" -#: src/elflint.c:2567 src/elflint.c:2571 +#: src/elflint.c:2566 src/elflint.c:2570 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "sekcja [%2zu] „%s”: odwołanie do symbolu o indeksie 0\n" -#: src/elflint.c:2578 +#: src/elflint.c:2577 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2750,7 +2756,7 @@ msgstr "" "symbol %d wymieniony w nowej tabeli mieszającej w [%2zu] „%s”, ale nie " "w poprzedniej tabeli mieszającej [%2zu] „%s”\n" -#: src/elflint.c:2590 +#: src/elflint.c:2589 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2759,12 +2765,12 @@ msgstr "" "symbol %d wymieniony w poprzedniej tabeli mieszającej w [%2zu] „%s”, ale nie " "w nowej tabeli mieszającej w [%2zu] „%s”\n" -#: src/elflint.c:2606 +#: src/elflint.c:2605 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "sekcja [%2d] „%s”: niezerowe sh_%s dla sekcji NULL\n" -#: src/elflint.c:2626 +#: src/elflint.c:2625 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2772,96 +2778,96 @@ msgstr "" "sekcja [%2d] „%s”: w plikach obiektów relokowalnych dozwolone są tylko grupy " "sekcji\n" -#: src/elflint.c:2637 +#: src/elflint.c:2636 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać tabeli symboli: %s\n" -#: src/elflint.c:2642 +#: src/elflint.c:2641 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" "sekcja [%2d] „%s”: odwołanie do sekcji w sh_link nie ma tabeli symboli\n" -#: src/elflint.c:2648 +#: src/elflint.c:2647 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "sekcja [%2d] „%s”: nieprawidłowy indeks symbolu w sh_info\n" -#: src/elflint.c:2653 +#: src/elflint.c:2652 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "sekcja [%2d] „%s”: niezerowe sh_flags\n" -#: src/elflint.c:2660 +#: src/elflint.c:2659 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać symbolu dla podpisu\n" -#: src/elflint.c:2664 +#: src/elflint.c:2663 #, c-format msgid "section [%2d] '%s': cannot get symbol name for signature\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać nazwy symbolu dla podpisu\n" -#: src/elflint.c:2669 +#: src/elflint.c:2668 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "sekcja [%2d] „%s”: symbol podpisu nie można być pustym ciągiem\n" -#: src/elflint.c:2675 +#: src/elflint.c:2674 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "sekcja [%2d] „%s”: sh_flags nie ustawione poprawnie\n" -#: src/elflint.c:2681 +#: src/elflint.c:2680 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać danych: %s\n" -#: src/elflint.c:2690 +#: src/elflint.c:2689 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" "sekcja [%2d] „%s”: rozmiar sekcji nie jest wielokrotnością " "sizeof(Elf32_Word)\n" -#: src/elflint.c:2696 +#: src/elflint.c:2695 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "sekcja [%2d] „%s”: grupa sekcji bez słowa flag\n" -#: src/elflint.c:2704 +#: src/elflint.c:2703 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "sekcja [%2d] „%s”: grupa sekcji bez elementów\n" -#: src/elflint.c:2708 +#: src/elflint.c:2707 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "sekcja [%2d] „%s”: grupa sekcji z tylko jednym elementem\n" -#: src/elflint.c:2719 +#: src/elflint.c:2718 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "sekcja [%2d] „%s”: nieznane flagi grupy sekcji\n" -#: src/elflint.c:2731 +#: src/elflint.c:2730 #, c-format msgid "section [%2d] '%s': section index %zu out of range\n" msgstr "sekcja [%2d] „%s”: indeks sekcji %zu jest spoza zakresu\n" -#: src/elflint.c:2740 +#: src/elflint.c:2739 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" "sekcja [%2d] „%s”: nie można uzyskać nagłówka sekcji dla elementu %zu: %s\n" -#: src/elflint.c:2747 +#: src/elflint.c:2746 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "sekcja [%2d] „%s”: grupa sekcji zawiera inną grupę [%2d] „%s”\n" -#: src/elflint.c:2753 +#: src/elflint.c:2752 #, c-format msgid "" "section [%2d] '%s': element %zu references section [%2d] '%s' without " @@ -2870,12 +2876,12 @@ msgstr "" "sekcja [%2d] „%s”: element %zu odwołuje się do sekcji [%2d] „%s” bez flagi " "SHF_GROUP\n" -#: src/elflint.c:2760 +#: src/elflint.c:2759 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "sekcja [%2d] „%s” jest zawarta w więcej niż jednej grupie sekcji\n" -#: src/elflint.c:2957 +#: src/elflint.c:2956 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2884,7 +2890,7 @@ msgstr "" "sekcja [%2d] „%s” odwołuje się w sh_link do sekcji [%2d] „%s”, która nie " "jest tabelą symboli dynamicznych\n" -#: src/elflint.c:2969 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2892,76 +2898,76 @@ msgid "" msgstr "" "sekcja [%2d] „%s” ma inną liczbę wpisów niż tabela symboli [%2d] „%s”\n" -#: src/elflint.c:2985 +#: src/elflint.c:2984 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "sekcja [%2d] „%s”: symbol %d: nie można odczytać danych wersji\n" -#: src/elflint.c:3001 +#: src/elflint.c:3000 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "sekcja [%2d] „%s”: symbol %d: symbol lokalny z zakresem globalnym\n" -#: src/elflint.c:3009 +#: src/elflint.c:3008 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "sekcja [%2d] „%s”: symbol %d: symbol lokalny z wersją\n" -#: src/elflint.c:3023 +#: src/elflint.c:3022 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "sekcja [%2d] „%s”: symbol %d: nieprawidłowy indeks wersji %d\n" -#: src/elflint.c:3028 +#: src/elflint.c:3027 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" "sekcja [%2d] „%s”: symbol %d: indeks wersji %d jest dla wersji określonej\n" -#: src/elflint.c:3038 +#: src/elflint.c:3037 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" "sekcja [%2d] „%s”: symbol %d: indeks wersji %d jest dla wersji żądanej\n" -#: src/elflint.c:3091 +#: src/elflint.c:3090 #, c-format msgid "more than one version reference section present\n" msgstr "obecna jest więcej niż jedna sekcja odniesienia wersji\n" -#: src/elflint.c:3099 src/elflint.c:3246 +#: src/elflint.c:3098 src/elflint.c:3245 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "sekcja [%2d] „%s”: sh_link nie łączy się z tabelą ciągów\n" -#: src/elflint.c:3124 src/elflint.c:3300 +#: src/elflint.c:3123 src/elflint.c:3299 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "sekcja [%2d] „%s”: wpis %d ma błędną wersję %d\n" -#: src/elflint.c:3131 src/elflint.c:3307 +#: src/elflint.c:3130 src/elflint.c:3306 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "sekcja [%2d] „%s”: wpis %d ma błędny offset dla danych dodatkowych\n" -#: src/elflint.c:3141 +#: src/elflint.c:3140 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "sekcja [%2d] „%s”: symbol %d ma błędne odniesienie do pliku\n" -#: src/elflint.c:3149 +#: src/elflint.c:3148 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "sekcja [%2d] „%s”: wpis %d odnosi się do nieznanej zależności\n" -#: src/elflint.c:3161 +#: src/elflint.c:3160 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "sekcja [%2d] „%s”: wpis dodatkowy %d do wpisu %d ma nieznaną flagę\n" -#: src/elflint.c:3169 +#: src/elflint.c:3168 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2970,7 +2976,7 @@ msgstr "" "sekcja [%2d] „%s”: wpis dodatkowy %d do wpisu %d ma nieprawidłowe " "odniesienie do nazwy\n" -#: src/elflint.c:3178 +#: src/elflint.c:3177 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2979,7 +2985,7 @@ msgstr "" "sekcja [%2d] „%s”: wpis dodatkowy %d do wpisu %d ma błędną wartość skrótu: " "%#x, oczekiwano %#x\n" -#: src/elflint.c:3187 +#: src/elflint.c:3186 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2988,19 +2994,19 @@ msgstr "" "sekcja [%2d] „%s”: wpis dodatkowy %d do wpisu %d ma powtórzoną nazwę wersji " "„%s”\n" -#: src/elflint.c:3198 +#: src/elflint.c:3197 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" "sekcja [%2d] „%s”: wpis dodatkowy %d do wpisu %d ma błędne następne pole\n" -#: src/elflint.c:3215 src/elflint.c:3391 +#: src/elflint.c:3214 src/elflint.c:3390 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "sekcja [%2d] „%s”: wpis %d ma błędny offset do następnego wpisu\n" -#: src/elflint.c:3223 src/elflint.c:3399 +#: src/elflint.c:3222 src/elflint.c:3398 #, c-format msgid "" "section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says " @@ -3009,43 +3015,43 @@ msgstr "" "sekcja [%2d] „%s”: wpis %d ma zerowy offset do następnego wpisu, ale sh_info " "zawiera informacje o większej liczbie wpisów\n" -#: src/elflint.c:3238 +#: src/elflint.c:3237 #, c-format msgid "more than one version definition section present\n" msgstr "obecna jest więcej niż jedna sekcja definicji wersji\n" -#: src/elflint.c:3285 +#: src/elflint.c:3284 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "sekcja [%2d] „%s”: jest więcej niż jedna definicja BASE\n" -#: src/elflint.c:3289 +#: src/elflint.c:3288 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "sekcja [%2d] „%s”: definicja BASE musi mieć indeks VER_NDX_GLOBAL\n" -#: src/elflint.c:3295 +#: src/elflint.c:3294 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "sekcja [%2d] „%s”: wpis %d ma nieznaną flagę\n" -#: src/elflint.c:3322 +#: src/elflint.c:3321 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "sekcja [%2d] „%s”: wpis %d ma nieprawidłowe odniesienie do nazwy\n" -#: src/elflint.c:3329 +#: src/elflint.c:3328 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" "sekcja [%2d] „%s”: wpis %d ma błędną wartość skrótu: %#x, oczekiwano %#x\n" -#: src/elflint.c:3337 +#: src/elflint.c:3336 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "sekcja [%2d] „%s”: wpis %d ma powtórzoną nazwę wersji „%s”\n" -#: src/elflint.c:3357 +#: src/elflint.c:3356 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -3053,51 +3059,51 @@ msgstr "" "sekcja [%2d] „%s”: wpis %d ma nieprawidłowe odniesienie do nazwy w danych " "dodatkowych\n" -#: src/elflint.c:3374 +#: src/elflint.c:3373 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" "sekcja [%2d] „%s”: wpis %d ma błędne następne pole w danych dodatkowych\n" -#: src/elflint.c:3407 +#: src/elflint.c:3406 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "sekcja [%2d] „%s”: brak definicji BASE\n" -#: src/elflint.c:3423 +#: src/elflint.c:3422 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "sekcja [%2d] „%s”: nieznana wersja rodzica „%s”\n" -#: src/elflint.c:3448 +#: src/elflint.c:3447 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "sekcja [%2d] „%s”: pusta sekcja atrybutów obiektu\n" -#: src/elflint.c:3464 +#: src/elflint.c:3463 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "sekcja [%2d] „%s”: nierozpoznany format atrybutu\n" -#: src/elflint.c:3475 +#: src/elflint.c:3474 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "sekcja [%2d] „%s”: offset %zu: pole o zerowej długości w sekcji atrybutów\n" -#: src/elflint.c:3484 +#: src/elflint.c:3483 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "sekcja [%2d] „%s”: offset %zu: nieprawidłowa długość w sekcji atrybutów\n" -#: src/elflint.c:3496 +#: src/elflint.c:3495 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "sekcja [%2d] „%s”: offset %zu: niezakończony ciąg nazwy producenta\n" -#: src/elflint.c:3513 +#: src/elflint.c:3512 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -3105,19 +3111,19 @@ msgstr "" "sekcja [%2d] „%s”: offset %zu: niekończące się ULEB128 w znaczniku podsekcji " "atrybutów\n" -#: src/elflint.c:3522 +#: src/elflint.c:3521 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "sekcja [%2d] „%s”: offset %zu: skrócona sekcja atrybutów\n" -#: src/elflint.c:3531 +#: src/elflint.c:3530 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" "sekcja [%2d] „%s”: offset %zu: zerowej długości pole w podsekcji atrybutów\n" -#: src/elflint.c:3546 +#: src/elflint.c:3545 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -3125,7 +3131,7 @@ msgstr "" "sekcja [%2d] „%s”: offset %zu: nieprawidłowa długość w podsekcji atrybutów\n" #. Tag_File -#: src/elflint.c:3557 +#: src/elflint.c:3556 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -3133,23 +3139,23 @@ msgstr "" "sekcja [%2d] „%s”: offset %zu: podsekcja atrybutów ma nieoczekiwany znacznik " "%u\n" -#: src/elflint.c:3575 +#: src/elflint.c:3574 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "sekcja [%2d] „%s”: offset %zu: niekończące się ULEB128 w znaczniku atrybutu\n" -#: src/elflint.c:3586 +#: src/elflint.c:3585 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "sekcja [%2d] „%s”: offset %zu: niezakończony ciąg w atrybucie\n" -#: src/elflint.c:3599 +#: src/elflint.c:3598 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "sekcja [%2d] „%s”: offset %zu: nierozpoznany znacznik atrybutu %u\n" -#: src/elflint.c:3603 +#: src/elflint.c:3602 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" @@ -3157,12 +3163,12 @@ msgstr "" "sekcja [%2d] „%s”: offset %zu: atrybut %s ma nierozpoznaną wartość " "%\n" -#: src/elflint.c:3613 +#: src/elflint.c:3612 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "sekcja [%2d] „%s”: offset %zu: producent „%s” jest nieznany\n" -#: src/elflint.c:3619 +#: src/elflint.c:3618 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -3170,47 +3176,47 @@ msgstr "" "sekcja [%2d] „%s”: offset %zu: dodatkowe bajty po ostatniej sekcji " "atrybutów\n" -#: src/elflint.c:3716 +#: src/elflint.c:3715 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "nie można uzyskać nagłówka sekcji zerowej\n" -#: src/elflint.c:3720 +#: src/elflint.c:3719 #, c-format msgid "zeroth section has nonzero name\n" msgstr "sekcja zerowa ma niezerową nazwę\n" -#: src/elflint.c:3722 +#: src/elflint.c:3721 #, c-format msgid "zeroth section has nonzero type\n" msgstr "sekcja zerowa ma niezerowy typ\n" -#: src/elflint.c:3724 +#: src/elflint.c:3723 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "sekcja zerowa ma niezerowe flagi\n" -#: src/elflint.c:3726 +#: src/elflint.c:3725 #, c-format msgid "zeroth section has nonzero address\n" msgstr "sekcja zerowa ma niezerowy adres\n" -#: src/elflint.c:3728 +#: src/elflint.c:3727 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "sekcja zerowa ma niezerowy offset\n" -#: src/elflint.c:3730 +#: src/elflint.c:3729 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "sekcja zerowa ma niezerową wartość wyrównania\n" -#: src/elflint.c:3732 +#: src/elflint.c:3731 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "sekcja zerowa ma niezerową wartość rozmiaru wpisu\n" -#: src/elflint.c:3735 +#: src/elflint.c:3734 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -3219,7 +3225,7 @@ msgstr "" "sekcja zerowa ma niezerową wartość rozmiaru, a nagłówek ELF ma niezerową " "wartość shnum\n" -#: src/elflint.c:3739 +#: src/elflint.c:3738 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3228,7 +3234,7 @@ msgstr "" "sekcja zerowa ma niezerową wartość dowiązań, a nagłówek ELF nie wskazuje " "przepełnienia w shstrndx\n" -#: src/elflint.c:3743 +#: src/elflint.c:3742 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3237,46 +3243,46 @@ msgstr "" "sekcja zerowa ma niezerową wartość dowiązań, a nagłówek ELF nie wskazuje " "przepełnienia w phnum\n" -#: src/elflint.c:3761 +#: src/elflint.c:3760 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "nie można uzyskać nagłówka sekcji dla sekcji [%2zu] „%s”: %s\n" -#: src/elflint.c:3770 +#: src/elflint.c:3769 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "sekcja [%2zu]: nieprawidłowa nazwa\n" -#: src/elflint.c:3797 +#: src/elflint.c:3796 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "sekcja [%2d] „%s” ma błędny typ: oczekiwano %s, jest %s\n" -#: src/elflint.c:3814 +#: src/elflint.c:3813 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "sekcja [%2zu] „%s” ma błędne flagi: oczekiwano %s, jest %s\n" -#: src/elflint.c:3832 +#: src/elflint.c:3831 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" "sekcja [%2zu] „%s” ma błędne flagi: oczekiwano %s i być może %s, jest %s\n" -#: src/elflint.c:3849 +#: src/elflint.c:3848 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "sekcja [%2zu] „%s” jest obecna w pliku obiektu\n" -#: src/elflint.c:3855 src/elflint.c:3887 +#: src/elflint.c:3854 src/elflint.c:3886 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" "sekcja [%2zu] „%s” ma flagę SHF_ALLOC, ale nie ma segmentu wczytywalnego\n" -#: src/elflint.c:3860 src/elflint.c:3892 +#: src/elflint.c:3859 src/elflint.c:3891 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -3284,7 +3290,7 @@ msgid "" msgstr "" "sekcja [%2zu] „%s” nie ma flagi SHF_ALLOC, ale są segmenty wczytywalne\n" -#: src/elflint.c:3868 +#: src/elflint.c:3867 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -3292,22 +3298,22 @@ msgstr "" "sekcja [%2zu] „%s” jest tabelą indeksów sekcji rozszerzeń w pliku " "nieobiektowym\n" -#: src/elflint.c:3911 +#: src/elflint.c:3910 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "sekcja [%2zu] „%s”: rozmiar nie jest wielokrotnością rozmiaru wpisu\n" -#: src/elflint.c:3916 +#: src/elflint.c:3915 #, c-format msgid "cannot get section header\n" msgstr "nie można uzyskać nagłówka sekcji\n" -#: src/elflint.c:3926 +#: src/elflint.c:3925 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "sekcja [%2zu] „%s” ma nieobsługiwany typ %d\n" -#: src/elflint.c:3946 +#: src/elflint.c:3945 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -3315,74 +3321,74 @@ msgstr "" "sekcja [%2zu] „%s” zawiera nieprawidłowe flagi dla konkretnego procesora " "%#\n" -#: src/elflint.c:3956 +#: src/elflint.c:3955 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "sekcja [%2zu] „%s” zawiera nieznane flagi %#\n" -#: src/elflint.c:3964 +#: src/elflint.c:3963 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "sekcja [%2zu] „%s”: adres sekcji danych lokalnych dla wątków nie jest zerem\n" -#: src/elflint.c:3974 +#: src/elflint.c:3973 #, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "sekcja [%2zu] „%s”: nie można skompresować przydzielonej sekcji\n" -#: src/elflint.c:3979 +#: src/elflint.c:3978 #, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "sekcja [%2zu] „%s”: nie można skompresować sekcji „nobits”\n" -#: src/elflint.c:3985 +#: src/elflint.c:3984 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "sekcja [%2zu] „%s”: skompresowana sekcja bez nagłówka kompresji: %s\n" -#: src/elflint.c:3991 +#: src/elflint.c:3990 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "sekcja [%2zu] „%s”: nieprawidłowe odwołanie do sekcji w wartości dowiązania\n" -#: src/elflint.c:3996 +#: src/elflint.c:3995 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "sekcja [%2zu] „%s”: nieprawidłowe odwołanie do sekcji w wartości " "informacyjnej\n" -#: src/elflint.c:4003 +#: src/elflint.c:4002 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "sekcja [%2zu] „%s”: flaga ciągów jest ustawiona bez flagi merge\n" -#: src/elflint.c:4008 +#: src/elflint.c:4007 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "sekcja [%2zu] „%s”: flaga merge jest ustawiona, ale rozmiar wpisu jest " "zerowy\n" -#: src/elflint.c:4027 +#: src/elflint.c:4026 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "sekcja [%2zu] „%s” ma nieoczekiwany typ %d dla sekcji wykonywalnej\n" -#: src/elflint.c:4036 +#: src/elflint.c:4035 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "sekcja [%2zu] „%s” musi być typu NOBITS w plikach debuginfo\n" -#: src/elflint.c:4043 +#: src/elflint.c:4042 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "sekcja [%2zu] „%s” jest wykonywalne i zapisywalne\n" -#: src/elflint.c:4074 +#: src/elflint.c:4073 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -3391,7 +3397,7 @@ msgstr "" "sekcja [%2zu] „%s” nie jest w całości zawarta w segmencie wpisu %d nagłówka " "programu\n" -#: src/elflint.c:4084 +#: src/elflint.c:4083 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3400,7 +3406,7 @@ msgstr "" "sekcja [%2zu] „%s” ma typ NOBITS, a jest odczytywana z pliku w segmencie " "wpisu %d nagłówka programu\n" -#: src/elflint.c:4110 +#: src/elflint.c:4109 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3409,7 +3415,7 @@ msgstr "" "sekcja [%2zu] „%s” ma typ NOBITS, ale jest odczytywana z pliku w segmencie " "wpisu %d nagłówka programu, a zawartość pliku jest niezerowa\n" -#: src/elflint.c:4121 +#: src/elflint.c:4120 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -3418,17 +3424,17 @@ msgstr "" "sekcja [%2zu] „%s” nie ma typu NOBITS, a nie jest odczytywana z pliku " "w segmencie wpisu %d nagłówka programu\n" -#: src/elflint.c:4132 +#: src/elflint.c:4131 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "sekcja [%2zu] „%s” jest wykonywalne w segmencie niewykonywalnym %d\n" -#: src/elflint.c:4142 +#: src/elflint.c:4141 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "sekcja [%2zu] „%s” jest zapisywalne w niezapisywalnym segmencie %d\n" -#: src/elflint.c:4152 +#: src/elflint.c:4151 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -3436,7 +3442,7 @@ msgstr "" "sekcja [%2zu] „%s”: ma flagę alloc, ale sekcja nie jest w żadnym segmencie " "wczytywalnym\n" -#: src/elflint.c:4158 +#: src/elflint.c:4157 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -3445,7 +3451,7 @@ msgstr "" "sekcja [%2zu] „%s”: według nagłówka ELF to jest tabela ciągów nagłówków " "sekcji, ale typ nie jest SHT_TYPE\n" -#: src/elflint.c:4166 +#: src/elflint.c:4165 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -3453,17 +3459,17 @@ msgstr "" "sekcja [%2zu] „%s”: pliki relokowalne nie mogą mieć tabeli symboli " "dynamicznych\n" -#: src/elflint.c:4217 +#: src/elflint.c:4216 #, c-format msgid "more than one version symbol table present\n" msgstr "obecna jest więcej niż jedna tabela symboli wersji\n" -#: src/elflint.c:4240 +#: src/elflint.c:4239 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "jest wpis nagłówka programu INTERP, ale nie ma sekcji .interp\n" -#: src/elflint.c:4251 +#: src/elflint.c:4250 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -3471,14 +3477,14 @@ msgstr "" "wczytywalny segment [%u] jest wykonywalny, ale nie zawiera wykonywalnych " "sekcji\n" -#: src/elflint.c:4257 +#: src/elflint.c:4256 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "wczytywalny segment [%u] jest zapisywalny, ale nie zawiera zapisywalnych " "sekcji\n" -#: src/elflint.c:4268 +#: src/elflint.c:4267 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -3487,23 +3493,23 @@ msgstr "" "brak sekcji .gnu.versym, ale istnieje sekcja .gnu.versym_d lub .gnu." "versym_r\n" -#: src/elflint.c:4281 +#: src/elflint.c:4280 #, c-format msgid "duplicate version index %d\n" msgstr "powtórzony indeks wersji %d\n" -#: src/elflint.c:4295 +#: src/elflint.c:4294 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "sekcja .gnu.versym istnieje bez .gnu.versym_d lub .gnu.versym_r\n" -#: src/elflint.c:4344 +#: src/elflint.c:4343 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" "phdr[%d]: nieznany typ notatki pliku core % pod offsetem %\n" -#: src/elflint.c:4348 +#: src/elflint.c:4347 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" @@ -3511,7 +3517,7 @@ msgstr "" "sekcja [%2d]: „%s”: nieznany typ notatki pliku core % pod offsetem " "%zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4403 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " @@ -3520,7 +3526,7 @@ msgstr "" "phdr[%d]: nieznany typ notatki pliku obiektu % o nazwie właściciela " "„%s” pod offsetem %zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4408 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " @@ -3529,37 +3535,37 @@ msgstr "" "sekcja [%2d] „%s”: nieznany typ notatki pliku obiektu % o nazwie " "właściciela „%s” pod offsetem %zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4427 #, 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:4447 #, 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:4450 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: dodatkowe % B po ostatniej notatce\n" -#: src/elflint.c:4465 +#: src/elflint.c:4471 #, 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:4478 #, 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:4481 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "sekcja [%2d] „%s”: dodatkowe % B po ostatniej notatce\n" -#: src/elflint.c:4493 +#: src/elflint.c:4499 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3567,135 +3573,135 @@ msgstr "" "tylko pliki wykonywalne, obiekty współdzielone i pliki core mogą mieć " "nagłówki programu\n" -#: src/elflint.c:4508 +#: src/elflint.c:4514 #, 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:4524 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "wpis nagłówka programu %d: nieznany typ wpisu nagłówka programu %#\n" -#: src/elflint.c:4529 +#: src/elflint.c:4535 #, 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:4543 #, 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:4550 #, 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:4564 #, 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:4567 #, 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:4577 #, 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:4598 #, 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:4609 #, 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:4616 #, 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:4625 src/elflint.c:4648 #, 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:4654 #, 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:4681 #, 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:4684 #, 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:4697 #, 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:4705 #, 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:4708 #, 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:4712 #, 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:4715 #, 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:4720 #, 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:4723 #, 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:4737 #, 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:4744 #, 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:4747 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3704,7 +3710,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:4760 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3713,17 +3719,17 @@ 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:4794 #, 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:4806 #, 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:4827 #, c-format msgid "text relocation flag set but not needed\n" msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n" @@ -3746,32 +3752,32 @@ 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/strings.c:87 src/strip.c:101 +#: src/findtextrel.c:74 src/nm.c:107 src/objdump.c:70 src/size.c:79 +#: src/strings.c:86 src/strip.c:100 msgid "[FILE...]" msgstr "[PLIK…]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:223 #, 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:234 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "„%s” nie jest DSO ani PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:254 #, 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:278 #, c-format msgid "cannot read dynamic section: %s" msgstr "nie można odczytać sekcji dynamicznej: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:299 #, c-format msgid "no text relocations reported in '%s'" msgstr "brak relokacji tekstu w „%s”" @@ -3786,33 +3792,33 @@ msgstr "podczas odczytywania pliku ELF" 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:325 src/findtextrel.c:340 #, 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:396 #, 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:417 src/findtextrel.c:440 #, 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:506 #, 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:560 #, 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:567 src/findtextrel.c:587 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3820,7 +3826,7 @@ msgid "" msgstr "" "plik zawierający funkcję „%s” mógł nie zostać skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:575 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3829,7 +3835,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:595 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3837,43 +3843,43 @@ msgstr "" "relokacja modyfikuje pamięć pod offsetem %llu w segmencie zabezpieczonym " "przed zapisem\n" -#: src/nm.c:66 src/strip.c:70 +#: src/nm.c:65 src/strip.c:69 msgid "Output selection:" msgstr "Wybór wyjścia:" -#: src/nm.c:67 +#: src/nm.c:66 msgid "Display debugger-only symbols" msgstr "Wyświetla symbole wyłącznie debugowania" -#: src/nm.c:68 +#: src/nm.c:67 msgid "Display only defined symbols" msgstr "Wyświetla tylko określone symbole" -#: src/nm.c:71 +#: src/nm.c:70 msgid "Display dynamic symbols instead of normal symbols" msgstr "Wyświetla symbole dynamiczne zamiast zwykłych" -#: src/nm.c:72 +#: src/nm.c:71 msgid "Display only external symbols" msgstr "Wyświetla tylko symbole zewnętrzne" -#: src/nm.c:73 +#: src/nm.c:72 msgid "Display only undefined symbols" msgstr "Wyświetla tylko nieokreślone symbole" -#: src/nm.c:75 +#: src/nm.c:74 msgid "Include index for symbols from archive members" msgstr "Dołącza indeks dla symboli z elementów archiwum" -#: src/nm.c:77 src/size.c:54 +#: src/nm.c:76 src/size.c:53 msgid "Output format:" msgstr "Format wyjścia:" -#: src/nm.c:79 +#: src/nm.c:78 msgid "Print name of the input file before every symbol" msgstr "Wyświetla nazwę pliku wejściowego przed każdym symbolem" -#: src/nm.c:82 +#: src/nm.c:81 msgid "" "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " "default is `sysv'" @@ -3881,73 +3887,73 @@ msgstr "" "Używa FORMATU wyjściowego. Może to być „bsd”, „sysv” lub „posix”. Domyślny " "jest format „sysv”" -#: src/nm.c:84 +#: src/nm.c:83 msgid "Same as --format=bsd" msgstr "To samo, co --format=bsd" -#: src/nm.c:85 +#: src/nm.c:84 msgid "Same as --format=posix" msgstr "To samo co, --format=posix" -#: src/nm.c:86 src/size.c:60 +#: src/nm.c:85 src/size.c:59 msgid "Use RADIX for printing symbol values" msgstr "Używa BAZY do wypisywania wartości symboli" -#: src/nm.c:87 +#: src/nm.c:86 msgid "Mark special symbols" msgstr "Oznacza specjalne symbole" -#: src/nm.c:89 +#: src/nm.c:88 msgid "Print size of defined symbols" msgstr "Wyświetla rozmiar określonych symboli" -#: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 +#: src/nm.c:90 src/size.c:67 src/strip.c:74 src/unstrip.c:68 msgid "Output options:" msgstr "Opcje wyjścia:" -#: src/nm.c:92 +#: src/nm.c:91 msgid "Sort symbols numerically by address" msgstr "Porządkuje symbole numerycznie według adresu" -#: src/nm.c:94 +#: src/nm.c:93 msgid "Do not sort the symbols" msgstr "Bez porządkowania symboli" -#: src/nm.c:95 +#: src/nm.c:94 msgid "Reverse the sense of the sort" msgstr "Odwraca kierunek porządkowania" -#: src/nm.c:98 +#: src/nm.c:97 msgid "Decode low-level symbol names into source code names" msgstr "Dekoduje niskopoziomowe nazwy symboli na nazwy kodu źródłowego" #. Short description of program. -#: src/nm.c:105 +#: src/nm.c:104 msgid "List symbols from FILEs (a.out by default)." msgstr "Wyświetla listę symboli z PLIKU (domyślnie a.out)." -#: src/nm.c:116 src/objdump.c:79 +#: src/nm.c:115 src/objdump.c:78 msgid "Output formatting" msgstr "Formatowanie wyjścia" -#: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 +#: src/nm.c:139 src/objdump.c:102 src/size.c:104 src/strip.c:132 #, c-format 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/nm.c:380 src/nm.c:392 src/size.c:287 src/size.c:296 src/size.c:307 +#: src/strip.c:2766 #, 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:402 src/objdump.c:279 src/strip.c:827 #, c-format msgid "%s: File format not recognized" msgstr "%s: nie rozpoznano formatu pliku" #. Note: 0 is no valid offset. -#: src/nm.c:443 +#: src/nm.c:442 msgid "" "\n" "Archive index:\n" @@ -3955,44 +3961,43 @@ msgstr "" "\n" "Indeks archiwum:\n" -#: src/nm.c:452 +#: src/nm.c:451 #, c-format msgid "invalid offset %zu for symbol %s" msgstr "nieprawidłowy offset %zu dla symbolu %s" -#: src/nm.c:457 +#: src/nm.c:456 #, c-format msgid "%s in %s\n" msgstr "%s w %s\n" -#: src/nm.c:465 +#: src/nm.c:464 #, c-format msgid "cannot reset archive offset to beginning" msgstr "nie można przywrócić offsetu w archiwum na początek" -#: src/nm.c:490 src/objdump.c:328 +#: src/nm.c:489 src/objdump.c:327 #, c-format 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:702 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:742 src/nm.c:1234 src/objdump.c:778 src/readelf.c:663 +#: src/readelf.c:1471 src/readelf.c:1620 src/readelf.c:1847 src/readelf.c:2084 +#: src/readelf.c:2273 src/readelf.c:2451 src/readelf.c:2526 src/readelf.c:2791 +#: src/readelf.c:2866 src/readelf.c:2952 src/readelf.c:3547 src/readelf.c:3595 +#: src/readelf.c:3664 src/readelf.c:11581 src/readelf.c:12771 +#: src/readelf.c:12981 src/readelf.c:13049 src/size.c:396 src/size.c:467 +#: src/strip.c:1093 #, 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:767 #, c-format msgid "" "\n" @@ -4006,7 +4011,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:770 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4015,7 +4020,7 @@ msgstr "" "%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n" "\n" -#: src/nm.c:776 +#: src/nm.c:772 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4023,96 +4028,96 @@ msgid "Name" msgstr " Nazwa: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:774 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:776 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:778 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1245 #, 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:1250 #, 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:1330 #, 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:1566 #, 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:1616 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: brak symboli" -#: src/objdump.c:52 +#: src/objdump.c:51 msgid "Mode selection:" msgstr "Wybór trybu:" -#: src/objdump.c:53 +#: src/objdump.c:52 msgid "Display relocation information." msgstr "Wyświetla informacje o relokacji." -#: src/objdump.c:55 +#: src/objdump.c:54 msgid "Display the full contents of all sections requested" msgstr "Wyświetla pełną zawartość żądanych sekcji" -#: src/objdump.c:57 +#: src/objdump.c:56 msgid "Display assembler code of executable sections" msgstr "Wyświetla kod asemblera sekcji wykonywalnych" -#: src/objdump.c:59 +#: src/objdump.c:58 msgid "Output content selection:" msgstr "Wybór zawartości wyjścia:" -#: src/objdump.c:61 +#: src/objdump.c:60 msgid "Only display information for section NAME." msgstr "Wyświetla tylko informacje o sekcji NAZWA." #. Short description of program. -#: src/objdump.c:67 +#: src/objdump.c:66 msgid "Show information from FILEs (a.out by default)." msgstr "Wyświetla informacje z PLIKÓW (domyślnie a.out)." -#: src/objdump.c:218 src/readelf.c:582 +#: src/objdump.c:217 src/readelf.c:608 msgid "No operation specified.\n" msgstr "Nie podano działania.\n" -#: src/objdump.c:258 src/objdump.c:270 +#: src/objdump.c:257 src/objdump.c:269 #, c-format msgid "while close `%s'" msgstr "podczas zamykania „%s”" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:362 src/readelf.c:2179 src/readelf.c:2370 msgid "INVALID SYMBOL" msgstr "NIEPRAWIDŁOWY SYMBOL" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:377 src/readelf.c:2213 src/readelf.c:2406 msgid "INVALID SECTION" msgstr "NIEPRAWIDŁOWA SEKCJA" -#: src/objdump.c:498 +#: src/objdump.c:497 #, c-format msgid "" "\n" @@ -4123,62 +4128,60 @@ msgstr "" "PISY RELOKACJI DLA [%s]:\n" "%-*s TYP WARTOŚĆ\n" -#: src/objdump.c:501 +#: src/objdump.c:500 msgid "OFFSET" msgstr "OFFSET" -#: src/objdump.c:566 +#: src/objdump.c:565 #, c-format msgid "Contents of section %s:\n" msgstr "Zawartość sekcji %s:\n" -#: src/objdump.c:687 -#, c-format +#: src/objdump.c:686 msgid "cannot disassemble" msgstr "nie można deasemblować" -#: src/objdump.c:760 -#, c-format +#: src/objdump.c:757 msgid "cannot create backend for elf file" msgstr "nie można utworzyć zaplecza dla pliku ELF" #. Short description of program. -#: src/ranlib.c:63 +#: src/ranlib.c:62 msgid "Generate an index to speed access to archives." msgstr "Tworzenie indeksu w celu przyspieszenia dostępu do archiwów." #. Strings for arguments in help texts. -#: src/ranlib.c:66 +#: src/ranlib.c:65 msgid "ARCHIVE" msgstr "ARCHIWUM" -#: src/ranlib.c:102 +#: src/ranlib.c:101 #, c-format msgid "Archive name required" msgstr "Wymagana jest nazwa archiwum" -#: src/ranlib.c:166 +#: src/ranlib.c:165 #, c-format msgid "'%s' is no archive" msgstr "„%s” nie jest archiwum" -#: src/ranlib.c:201 +#: src/ranlib.c:200 #, c-format msgid "error while freeing sub-ELF descriptor: %s" msgstr "błąd podczas zwalniania deskryptora pod-ELF: %s" -#: src/readelf.c:97 +#: src/readelf.c:96 msgid "ELF input selection:" msgstr "Wybór wyjścia ELF:" -#: src/readelf.c:99 +#: src/readelf.c:98 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" msgstr "" "Używa podanej SEKCJI (domyślnie .gnu_debugdata) jako (skompresowanych) " "danych wejściowych ELF" -#: src/readelf.c:102 +#: src/readelf.c:101 msgid "" "Used with -w to find the skeleton Compile Units in FILE associated with the " "Split Compile units in a .dwo input file" @@ -4186,43 +4189,43 @@ msgstr "" "Używane z opcją -w do wyszukiwania szkieletów jednostek kompilacji w PLIKU " "powiązanych z jednostkami podzielonej kompilacji w pliku wejściowym .dwo" -#: src/readelf.c:104 +#: src/readelf.c:103 msgid "ELF output selection:" msgstr "Wybór wyjścia ELF:" -#: src/readelf.c:106 +#: src/readelf.c:105 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "Wszystkie te plus -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:107 +#: src/readelf.c:106 msgid "Display the dynamic segment" msgstr "Wyświetla segment dynamiczny" -#: src/readelf.c:108 +#: src/readelf.c:107 msgid "Display the ELF file header" msgstr "Wyświetla nagłówek pliku ELF" -#: src/readelf.c:110 +#: src/readelf.c:109 msgid "Display histogram of bucket list lengths" msgstr "Wyświetla histogram długości list kubełków" -#: src/readelf.c:111 +#: src/readelf.c:110 msgid "Display the program headers" msgstr "Wyświetla nagłówki programu" -#: src/readelf.c:113 +#: src/readelf.c:112 msgid "Display relocations" msgstr "Wyświetla relokacje" -#: src/readelf.c:114 +#: src/readelf.c:113 msgid "Display the section groups" msgstr "Wyświetla grupy sekcji" -#: src/readelf.c:115 +#: src/readelf.c:114 msgid "Display the sections' headers" msgstr "Wyświetla nagłówki sekcji" -#: src/readelf.c:118 +#: src/readelf.c:117 msgid "Display the symbol table sections" msgstr "Wyświetla sekcje tabeli symboli" @@ -4273,25 +4276,29 @@ msgid "Display the symbol index of an archive" msgstr "Wyświetla indeks symboli archiwum" #: src/readelf.c:141 +msgid "Use the dynamic segment when possible for displaying info" +msgstr "" + +#: src/readelf.c:143 msgid "Output control:" msgstr "Kontrola wyjścia:" -#: src/readelf.c:143 +#: src/readelf.c:145 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Bez odnajdywania nazw symboli dla adresów w danych DWARF" -#: src/readelf.c:145 +#: src/readelf.c:147 msgid "" "Display just offsets instead of resolving values to addresses in DWARF data" msgstr "" "Wyświetla tylko offsety zamiast rozwiązywania wartości na adresy w danych " "DWARF" -#: src/readelf.c:147 +#: src/readelf.c:149 msgid "Ignored for compatibility (lines always wide)" msgstr "Ignorowane dla zgodności (wiersze są zawsze szerokie)" -#: src/readelf.c:149 +#: src/readelf.c:151 msgid "" "Show compression information for compressed sections (when used with -S); " "decompress section before dumping data (when used with -p or -x)" @@ -4301,156 +4308,156 @@ msgstr "" "używane z opcją -p lub -x)" #. Short description of program. -#: src/readelf.c:154 +#: src/readelf.c:156 msgid "Print information from ELF file in human-readable form." msgstr "Wyświetla informacje z pliku ELF w postaci czytelnej dla człowieka." #. Look up once. -#: src/readelf.c:350 +#: src/readelf.c:373 msgid "yes" msgstr "tak" -#: src/readelf.c:351 +#: src/readelf.c:374 msgid "no" msgstr "nie" -#: src/readelf.c:550 +#: src/readelf.c:576 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Nieznana sekcja debugowania DWARF „%s”.\n" -#: src/readelf.c:621 src/readelf.c:732 +#: src/readelf.c:647 src/readelf.c:758 #, c-format 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:654 src/readelf.c:980 src/strip.c:1188 #, 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:672 src/readelf.c:1287 src/readelf.c:1495 #, 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/readelf.c:681 src/readelf.c:1294 src/readelf.c:1502 src/readelf.c:13001 +#: src/unstrip.c:396 src/unstrip.c:427 src/unstrip.c:490 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/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 #, c-format msgid "cannot get section header: %s" msgstr "nie można uzyskać nagłówka sekcji: %s" -#: src/readelf.c:663 +#: src/readelf.c:689 #, c-format 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:698 src/readelf.c:6797 src/readelf.c:10854 src/readelf.c:10956 +#: src/readelf.c:11134 #, c-format msgid "cannot get %s content: %s" msgstr "nie można uzyskać zwartości %s: %s" -#: src/readelf.c:688 +#: src/readelf.c:714 #, c-format msgid "cannot create temp file '%s'" msgstr "nie można utworzyć pliku tymczasowego „%s”" -#: src/readelf.c:697 +#: src/readelf.c:723 #, c-format msgid "cannot write section data" msgstr "nie można zapisać danych sekcji" -#: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 +#: src/readelf.c:729 src/readelf.c:746 src/readelf.c:775 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "błąd podczas zamykania deskryptora ELF: %s" -#: src/readelf.c:710 +#: src/readelf.c:736 #, c-format msgid "error while rewinding file descriptor" msgstr "błąd podczas przewijania deskryptora pliku" -#: src/readelf.c:744 +#: src/readelf.c:770 #, c-format msgid "'%s' is not an archive, cannot print archive index" msgstr "„%s” nie jest archiwum, nie można wyświetlić indeksu archiwum" -#: src/readelf.c:848 +#: src/readelf.c:874 #, c-format msgid "cannot stat input file" msgstr "nie można wykonać stat na pliku wejściowym" -#: src/readelf.c:850 +#: src/readelf.c:876 #, c-format msgid "input file is empty" msgstr "plik wejściowy jest pusty" -#: src/readelf.c:852 +#: src/readelf.c:878 #, c-format msgid "failed reading '%s': %s" msgstr "odczytanie „%s” się nie powiodło: %s" -#: src/readelf.c:881 +#: src/readelf.c:907 #, c-format msgid "No such section '%s' in '%s'" msgstr "Brak sekcji „%s” w „%s”" -#: src/readelf.c:940 +#: src/readelf.c:966 #, c-format msgid "cannot read ELF header: %s" msgstr "nie można odczytać nagłówka ELF: %s" -#: src/readelf.c:948 +#: src/readelf.c:974 #, c-format msgid "cannot create EBL handle" msgstr "nie można utworzyć uchwytu EBL" -#: src/readelf.c:961 +#: src/readelf.c:985 #, 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:1017 #, c-format msgid "cannot read ELF: %s" msgstr "nie można odczytać danych ELF: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1078 msgid "NONE (None)" msgstr "NONE (żaden)" -#: src/readelf.c:1055 +#: src/readelf.c:1079 msgid "REL (Relocatable file)" msgstr "REL (plik relokowalny)" -#: src/readelf.c:1056 +#: src/readelf.c:1080 msgid "EXEC (Executable file)" msgstr "EXEC (plik wykonywalny)" -#: src/readelf.c:1057 +#: src/readelf.c:1081 msgid "DYN (Shared object file)" msgstr "DYN (plik obiektu współdzielonego)" -#: src/readelf.c:1058 +#: src/readelf.c:1082 msgid "CORE (Core file)" msgstr "CORE (plik core)" -#: src/readelf.c:1063 +#: src/readelf.c:1087 #, 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:1089 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Zależny od procesora: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1099 msgid "" "ELF Header:\n" " Magic: " @@ -4458,7 +4465,7 @@ msgstr "" "Nagłówek ELF:\n" " Magic: " -#: src/readelf.c:1079 +#: src/readelf.c:1103 #, c-format msgid "" "\n" @@ -4467,123 +4474,123 @@ msgstr "" "\n" " Klasa: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1108 #, c-format msgid " Data: %s\n" msgstr " Dane: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1114 #, 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:1116 src/readelf.c:1138 msgid "(current)" msgstr "(bieżąca)" -#: src/readelf.c:1096 +#: src/readelf.c:1120 #, c-format msgid " OS/ABI: %s\n" msgstr " System operacyjny/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1123 #, c-format msgid " ABI Version: %hhd\n" msgstr " Wersja ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1126 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:1107 +#: src/readelf.c:1131 #, c-format msgid " Machine: %s\n" msgstr " Komputer: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1133 #, c-format msgid " Machine: : 0x%x\n" msgstr " Komputer: : 0x%x\n" -#: src/readelf.c:1112 +#: src/readelf.c:1136 #, c-format msgid " Version: %d %s\n" msgstr " Wersja: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1140 #, c-format msgid " Entry point address: %#\n" msgstr " Adres punktu wejściowego: %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1143 #, c-format msgid " Start of program headers: % %s\n" msgstr " Początek nagłówków programu: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1144 src/readelf.c:1147 msgid "(bytes into file)" msgstr "(bajtów w pliku)" -#: src/readelf.c:1122 +#: src/readelf.c:1146 #, c-format msgid " Start of section headers: % %s\n" msgstr " Początek nagłówków sekcji: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1149 #, c-format msgid " Flags: %s\n" msgstr " Flagi: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1152 #, c-format msgid " Size of this header: % %s\n" msgstr " Rozmiar tego nagłówka: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1153 src/readelf.c:1156 src/readelf.c:1173 msgid "(bytes)" msgstr "(bajtów)" -#: src/readelf.c:1131 +#: src/readelf.c:1155 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Rozmiar wpisów nagłówka programu: % %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1158 #, c-format msgid " Number of program headers entries: %" msgstr " Liczba wpisów nagłówków programu: %" -#: src/readelf.c:1141 +#: src/readelf.c:1165 #, c-format msgid " (% in [0].sh_info)" msgstr " (% w [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1168 src/readelf.c:1185 src/readelf.c:1199 msgid " ([0] not available)" msgstr " ([0] niedostępny)" -#: src/readelf.c:1148 +#: src/readelf.c:1172 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Rozmiar wpisów nagłówka sekcji: % %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1175 #, c-format msgid " Number of section headers entries: %" msgstr " Liczba wpisów nagłówków sekcji: %" -#: src/readelf.c:1158 +#: src/readelf.c:1182 #, c-format msgid " (% in [0].sh_size)" msgstr " (% w [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1195 #, c-format msgid " (% in [0].sh_link)" msgstr " (% w [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1203 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4592,7 +4599,7 @@ msgstr "" " Indeks tabeli ciągów nagłówków sekcji: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1207 #, c-format msgid "" " Section header string table index: %\n" @@ -4601,12 +4608,12 @@ msgstr "" " Indeks tabeli ciągów nagłówków sekcji: %\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1253 src/readelf.c:1461 #, c-format msgid "cannot get number of sections: %s" msgstr "nie można uzyskać liczby sekcji: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1256 #, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4615,16 +4622,16 @@ msgstr "" "Liczba nagłówków sekcji: %zd, rozpoczynających się od offsetu %#:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1264 #, 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:1267 msgid "Section Headers:" msgstr "Nagłówki sekcji:" -#: src/readelf.c:1248 +#: src/readelf.c:1270 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4632,7 +4639,7 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozm. ES Flagi Lk " "Inf Al" -#: src/readelf.c:1250 +#: src/readelf.c:1272 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4640,36 +4647,36 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozmiar ES " "Flagi Lk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1277 msgid " [Compression Size Al]" msgstr " [Kompresja Rozmiar Al]" -#: src/readelf.c:1257 +#: src/readelf.c:1279 msgid " [Compression Size Al]" msgstr " [Kompresja Rozmiar Al]" -#: src/readelf.c:1335 +#: src/readelf.c:1357 #, 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:1368 #, 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:1386 msgid "Program Headers:" msgstr "Nagłówki programu:" -#: src/readelf.c:1366 +#: src/readelf.c:1388 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:1391 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4677,12 +4684,12 @@ msgstr "" " Typ Offset AdresWirtualny AdresFizyczny RozmPlik " "RozmPam Flg Wyrównanie" -#: src/readelf.c:1426 +#: src/readelf.c:1448 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Wywołanie interpretera programu: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1473 msgid "" "\n" " Section to Segment mapping:\n" @@ -4692,12 +4699,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:1484 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1628 #, c-format msgid "" "\n" @@ -4715,7 +4722,7 @@ msgstr[2] "" "\n" "Grupa sekcji COMDAT [%2zu] „%s” z podpisem „%s” zawiera %zu wpisów:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1633 #, c-format msgid "" "\n" @@ -4733,31 +4740,31 @@ msgstr[2] "" "\n" "Grupa sekcji [%2zu] „%s” z podpisem „%s” zawiera %zu wpisów:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1641 msgid "" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1655 msgid "" 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:1678 src/readelf.c:2461 src/readelf.c:3563 src/readelf.c:12873 +#: src/readelf.c:12880 src/readelf.c:12924 src/readelf.c:12931 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:1682 src/readelf.c:2466 src/readelf.c:3567 #, 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:1851 src/readelf.c:2532 src/readelf.c:2797 src/readelf.c:2872 +#: src/readelf.c:3175 src/readelf.c:3249 src/readelf.c:5570 #, 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:1854 #, c-format msgid "" "\n" @@ -4783,36 +4790,76 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "'%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1867 +#, fuzzy, c-format +#| msgid "" +#| "\n" +#| "Dynamic segment contains %lu entry:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +#| msgid_plural "" +#| "\n" +#| "Dynamic segment contains %lu entries:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +msgid "" +"\n" +"Dynamic segment contains %lu entry:\n" +" Addr: %#0* Offset: %#08\n" +msgid_plural "" +"\n" +"Dynamic segment contains %lu entries:\n" +" Addr: %#0* Offset: %#08\n" +msgstr[0] "" +"\n" +"Segment dynamiczny zawiera %lu wpis:\n" +" Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " +"'%s'\n" +msgstr[1] "" +"\n" +"Segment dynamiczny zawiera %lu wpisy:\n" +" Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " +"'%s'\n" +msgstr[2] "" +"\n" +"Segment dynamiczny zawiera %lu wpisów:\n" +" Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " +"'%s'\n" + +#: src/readelf.c:1877 msgid " Type Value\n" msgstr " Typ Wartość\n" -#: src/readelf.c:1846 +#: src/readelf.c:1886 +#, fuzzy +#| msgid "cannot get string section data: %s" +msgid "cannot get string table by using dynamic segment" +msgstr "nie można uzyskać danych sekcji ciągów: %s" + +#: src/readelf.c:1925 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteka współdzielona: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1929 #, c-format msgid "Library soname: [%s]\n" msgstr "soname biblioteki: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1933 #, c-format msgid "Library rpath: [%s]\n" msgstr "rpath biblioteki: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1937 #, c-format msgid "Library runpath: [%s]\n" msgstr "runpath biblioteki: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1956 #, c-format msgid "% (bytes)\n" msgstr "% (bajtów)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2070 src/readelf.c:2259 #, c-format msgid "" "\n" @@ -4821,7 +4868,7 @@ msgstr "" "\n" "Nieprawidłowa tabela symboli pod offsetem %#0\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2087 src/readelf.c:2276 #, c-format msgid "" "\n" @@ -4850,7 +4897,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:2102 src/readelf.c:2291 #, c-format msgid "" "\n" @@ -4868,30 +4915,30 @@ msgstr[2] "" "\n" "Sekcja relokacji [%2u] „%s” pod offsetem %#0 zawiera %d wpisów:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2112 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:2039 +#: src/readelf.c:2114 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:2167 src/readelf.c:2178 src/readelf.c:2191 src/readelf.c:2212 +#: src/readelf.c:2224 src/readelf.c:2357 src/readelf.c:2369 src/readelf.c:2383 +#: src/readelf.c:2405 src/readelf.c:2418 msgid "" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2301 msgid " Offset Type Value Addend Name\n" msgstr " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2229 +#: src/readelf.c:2303 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2467 +#: src/readelf.c:2540 #, c-format msgid "" "\n" @@ -4909,7 +4956,7 @@ msgstr[2] "" "\n" "Tabela symboli [%2u] „%s” zawiera %u wpisów:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2545 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4917,33 +4964,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:2553 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:2555 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:2575 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2668 #, c-format msgid "bad dynamic symbol" msgstr "błędny symbol dynamiczny" -#: src/readelf.c:2680 +#: src/readelf.c:2753 msgid "none" msgstr "brak" -#: src/readelf.c:2697 +#: src/readelf.c:2770 msgid "| " msgstr "| " -#: src/readelf.c:2728 +#: src/readelf.c:2800 #, c-format msgid "" "\n" @@ -4969,17 +5016,17 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "„%s”\n" -#: src/readelf.c:2749 +#: src/readelf.c:2821 #, 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:2834 #, 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:2876 #, c-format msgid "" "\n" @@ -5005,19 +5052,19 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "„%s”\n" -#: src/readelf.c:2833 +#: src/readelf.c:2904 #, 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:2919 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Rodzic %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3179 #, c-format msgid "" "\n" @@ -5040,15 +5087,15 @@ msgstr[2] "" "Sekcja symboli wersji [%2u] „%s” zawiera %d wpisów:\n" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] „%s”" -#: src/readelf.c:3137 +#: src/readelf.c:3207 msgid " 0 *local* " msgstr " 0 *lokalny* " -#: src/readelf.c:3142 +#: src/readelf.c:3212 msgid " 1 *global* " msgstr " 1 *globalny* " -#: src/readelf.c:3184 +#: src/readelf.c:3254 #, c-format msgid "" "\n" @@ -5079,22 +5126,22 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "„%s”\n" -#: src/readelf.c:3206 +#: src/readelf.c:3276 #, 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:3278 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3285 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3298 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5103,37 +5150,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:3316 src/readelf.c:3380 src/readelf.c:3446 #, 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:3324 #, 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:3353 #, 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:3388 #, 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:3419 #, 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:3455 #, 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:3521 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5143,7 +5190,7 @@ msgstr "" " Rozmiar maski bitowej: %zu B %%% b ustawionych drugie " "przesunięcie skrótu: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3606 #, c-format msgid "" "\n" @@ -5164,7 +5211,7 @@ msgstr[2] "" "Sekcja listy bibliotek [%2zu] „%s” pod offsetem %#0 zawiera %d " "wpisów:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3620 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5172,7 +5219,7 @@ msgstr "" " Biblioteka Czas Suma k. Wersja " "Flagi" -#: src/readelf.c:3614 +#: src/readelf.c:3680 #, c-format msgid "" "\n" @@ -5182,102 +5229,101 @@ msgstr "" "\n" "Sekcja atrybutów obiektu [%2zu] „%s” % B pod offsetem %#0:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3697 msgid " Owner Size\n" msgstr " Właściciel Rozmiar\n" -#: src/readelf.c:3655 +#: src/readelf.c:3721 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3760 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3765 #, c-format msgid " File: %11\n" msgstr " Plik: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3814 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3817 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3820 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3830 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3833 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, c-format +#: src/readelf.c:3903 msgid "sprintf failure" msgstr "sprintf się nie powiodło" -#: src/readelf.c:4319 +#: src/readelf.c:4387 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:4322 +#: src/readelf.c:4390 #, c-format msgid "%zu byte block:" msgstr "blok o %zu B:" -#: src/readelf.c:4800 +#: src/readelf.c:4868 #, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%2] %s \n" -#: src/readelf.c:4867 +#: src/readelf.c:5028 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami adresu" -#: src/readelf.c:4874 +#: src/readelf.c:5035 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami offsetu" -#: src/readelf.c:4881 +#: src/readelf.c:5042 #, c-format msgid "%s %# used with different base addresses" msgstr "%s %# zostało użyte z różnymi adresami podstawowymi" -#: src/readelf.c:4888 +#: src/readelf.c:5049 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# zostało użyte z różnymi atrybutami %s i %s" -#: src/readelf.c:4988 +#: src/readelf.c:5149 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4996 +#: src/readelf.c:5157 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] … % B…\n" -#: src/readelf.c:5099 +#: src/readelf.c:5260 #, c-format msgid "" "\n" @@ -5288,7 +5334,7 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" " [ Kod]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5268 #, c-format msgid "" "\n" @@ -5297,20 +5343,20 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5281 #, 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:5297 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] offset: %, 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:5330 src/readelf.c:5639 src/readelf.c:5806 src/readelf.c:6191 +#: src/readelf.c:6807 src/readelf.c:8562 src/readelf.c:9308 src/readelf.c:9791 +#: src/readelf.c:10042 src/readelf.c:10208 src/readelf.c:10595 +#: src/readelf.c:10655 #, c-format msgid "" "\n" @@ -5319,52 +5365,52 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5343 #, 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:5443 src/readelf.c:5467 src/readelf.c:5851 src/readelf.c:9353 #, c-format msgid " Length: %8\n" msgstr " Długość: %8\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5445 src/readelf.c:5482 src/readelf.c:5864 src/readelf.c:9366 #, c-format msgid " DWARF version: %8\n" msgstr " Wersja DWARF: %8\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5446 src/readelf.c:5491 src/readelf.c:5873 src/readelf.c:9375 #, c-format msgid " Address size: %8\n" msgstr " Rozmiar adresu: %8\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5448 src/readelf.c:5501 src/readelf.c:5883 src/readelf.c:9385 #, c-format msgid " Segment size: %8\n" msgstr " Rozmiar segmentu: %8\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5486 src/readelf.c:5868 src/readelf.c:9370 src/readelf.c:10787 #, 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:5496 src/readelf.c:5709 src/readelf.c:5878 src/readelf.c:9380 #, 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:5507 src/readelf.c:5720 src/readelf.c:5888 src/readelf.c:9390 #, c-format msgid "unsupported segment size" msgstr "nieobsługiwany rozmiar segmentu" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5560 src/readelf.c:5634 #, 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:5575 #, c-format msgid "" "\n" @@ -5382,12 +5428,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] „%s” pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5606 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5608 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5395,7 +5441,7 @@ msgstr "" " [%*zu] początek: %0#*, długość: %5, offset CU DIE: " "%6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5652 src/readelf.c:8589 #, c-format msgid "" "\n" @@ -5404,13 +5450,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:5656 src/readelf.c:5832 src/readelf.c:6831 src/readelf.c:8600 +#: src/readelf.c:9334 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "nieprawidłowe dane w sekcji [%zu] „%s”" -#: src/readelf.c:5511 +#: src/readelf.c:5672 #, c-format msgid "" "\n" @@ -5419,27 +5465,27 @@ msgstr "" "\n" " Długość: %6\n" -#: src/readelf.c:5523 +#: src/readelf.c:5684 #, c-format msgid " DWARF version: %6\n" msgstr " Wersja DWARF: %6\n" -#: src/readelf.c:5527 +#: src/readelf.c:5688 #, c-format msgid "unsupported aranges version" msgstr "nieobsługiwana wersja aranges" -#: src/readelf.c:5538 +#: src/readelf.c:5699 #, c-format msgid " CU offset: %6\n" msgstr " Offset CU: %6\n" -#: src/readelf.c:5544 +#: src/readelf.c:5705 #, c-format msgid " Address size: %6\n" msgstr " Offset adresu: %6\n" -#: src/readelf.c:5555 +#: src/readelf.c:5716 #, c-format msgid "" " Segment size: %6\n" @@ -5448,17 +5494,17 @@ msgstr "" " Rozmiar segmentu: %6\n" "\n" -#: src/readelf.c:5610 +#: src/readelf.c:5771 #, c-format msgid " %zu padding bytes\n" msgstr " %zu B wypełnienia\n" -#: src/readelf.c:5654 +#: src/readelf.c:5815 #, 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:5838 src/readelf.c:9340 #, c-format msgid "" "Table at Offset 0x%:\n" @@ -5467,42 +5513,42 @@ msgstr "" "Tabela pod offsetem 0x%:\n" "\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5893 src/readelf.c:9395 #, c-format msgid " Offset entries: %8\n" msgstr " Wpisy offsetu: %8\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5909 src/readelf.c:9411 #, c-format msgid " Unknown CU base: " msgstr " Nieznana podstawa CU: " -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5911 src/readelf.c:9413 #, c-format msgid " CU [%6] base: " msgstr " Podstawa CU [%6]: " -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5917 src/readelf.c:9419 #, 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:5928 src/readelf.c:9430 #, 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:5932 src/readelf.c:9434 #, c-format msgid " Offsets starting at 0x%:\n" msgstr " Offsety zaczynające się w 0x%:\n" -#: src/readelf.c:5823 +#: src/readelf.c:5984 #, 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:6169 src/readelf.c:9769 #, c-format msgid "" " %zu padding bytes\n" @@ -5511,12 +5557,12 @@ msgstr "" " %zu B wypełnienia\n" "\n" -#: src/readelf.c:6025 +#: src/readelf.c:6186 #, 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:6222 src/readelf.c:9824 #, c-format msgid "" "\n" @@ -5525,7 +5571,7 @@ msgstr "" "\n" " Nieznana podstawa CU: " -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6224 src/readelf.c:9826 #, c-format msgid "" "\n" @@ -5534,30 +5580,30 @@ msgstr "" "\n" " Podstawa CU [%6]: " -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6233 src/readelf.c:9852 src/readelf.c:9878 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6258 src/readelf.c:9962 msgid "base address" msgstr "adres podstawowy" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6268 src/readelf.c:9972 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:6367 +#: src/readelf.c:6528 msgid " \n" msgstr " \n" -#: src/readelf.c:6624 +#: src/readelf.c:6785 #, c-format msgid "cannot get ELF: %s" msgstr "nie można uzyskać ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6803 #, c-format msgid "" "\n" @@ -5566,7 +5612,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywołania [%2zu] „%s” pod offsetem %#:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6853 #, c-format msgid "" "\n" @@ -5575,65 +5621,65 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6954 src/readelf.c:7108 #, c-format msgid "invalid augmentation length" msgstr "nieprawidłowa długość powiększenia" -#: src/readelf.c:6808 +#: src/readelf.c:6969 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:6814 +#: src/readelf.c:6975 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:6924 +#: src/readelf.c:7085 #, c-format msgid " (offset: %#)" msgstr " (offset: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:7092 #, c-format msgid " (end offset: %#)" msgstr " (kończący offset: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:7129 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sWskaźnik LSDA: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7214 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "DIE [%] nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7224 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "DIE [%] nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7246 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%] nie można uzyskać wartości atrybutu „%s” (%s): %s" -#: src/readelf.c:7415 +#: src/readelf.c:7576 #, c-format msgid "invalid file (%): %s" msgstr "nieprawidłowy plik (%): %s" -#: src/readelf.c:7419 +#: src/readelf.c:7580 #, c-format msgid "no srcfiles for CU [%]" msgstr "brak plików źródłowych dla CU [%]" -#: src/readelf.c:7423 +#: src/readelf.c:7584 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "nie można uzyskać CU DWARF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7899 #, c-format msgid "" "\n" @@ -5644,12 +5690,12 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" " [Offset]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7949 #, c-format msgid "cannot get next unit: %s" msgstr "nie można uzyskać następnej jednostki: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7969 #, c-format msgid "" " Type unit at offset %:\n" @@ -5662,7 +5708,7 @@ msgstr "" "%, rozmiar offsetu: %\n" " Podpis typu: %#, offset typu: %# [%]\n" -#: src/readelf.c:7820 +#: src/readelf.c:7981 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5673,38 +5719,38 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7991 src/readelf.c:8152 #, c-format msgid " Unit type: %s (%)" msgstr " Typ jednostki: %s (%)" -#: src/readelf.c:7857 +#: src/readelf.c:8018 #, 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:8047 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:7895 +#: src/readelf.c:8056 #, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "nie można uzyskać znacznika DIE pod offsetem [%] w sekcji „%s”: %s" -#: src/readelf.c:7933 +#: src/readelf.c:8092 #, 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:8100 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać następnego DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:8144 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5715,7 +5761,7 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:8037 +#: src/readelf.c:8196 #, c-format msgid "" "\n" @@ -5726,18 +5772,18 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" "\n" -#: src/readelf.c:8369 +#: src/readelf.c:8528 #, c-format msgid "unknown form: %s" msgstr "nieznana forma: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8576 #, 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:8680 #, c-format msgid "" "\n" @@ -5770,27 +5816,27 @@ msgstr "" "\n" "Instrukcje:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8702 #, 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:8710 #, 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:8718 #, 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:8728 #, 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:8743 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5798,7 +5844,7 @@ msgstr[0] " [%*] %hhu parametr\n" msgstr[1] " [%*] %hhu parametry\n" msgstr[2] " [%*] %hhu parametrów\n" -#: src/readelf.c:8576 +#: src/readelf.c:8754 msgid "" "\n" "Directory table:" @@ -5806,12 +5852,12 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8760 src/readelf.c:8837 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8653 +#: src/readelf.c:8831 msgid "" "\n" "File name table:" @@ -5819,11 +5865,11 @@ msgstr "" "\n" "Tabela nazw plików:" -#: src/readelf.c:8714 +#: src/readelf.c:8892 msgid " Entry Dir Time Size Name" msgstr " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:8753 +#: src/readelf.c:8938 msgid "" "\n" "No line number statements." @@ -5831,7 +5877,7 @@ msgstr "" "\n" "Brak instrukcji numerów wierszy." -#: src/readelf.c:8757 +#: src/readelf.c:8942 msgid "" "\n" "Line number statements:" @@ -5839,118 +5885,129 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:8777 +#: src/readelf.c:8957 #, 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:8991 #, c-format msgid " special opcode %u: address+%u = " msgstr " instrukcja specjalna %u: adres+%u = " -#: src/readelf.c:8815 +#: src/readelf.c:8995 #, 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:8998 #, c-format msgid ", line%+d = %zu\n" msgstr ", wiersz%+d = %zu\n" -#: src/readelf.c:8836 +#: src/readelf.c:9016 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:8841 +#: src/readelf.c:9021 msgid " end of sequence" msgstr " koniec sekwencji" -#: src/readelf.c:8859 +#: src/readelf.c:9039 #, c-format msgid " set address to " msgstr " ustawienie adresu na " -#: src/readelf.c:8887 +#: src/readelf.c:9067 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -" definicja nowego pliku: dir=%u, mtime=%, długość=%, nazwa=" -"%s\n" +" definicja nowego pliku: dir=%u, mtime=%, długość=%, " +"nazwa=%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:9081 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" +#: src/readelf.c:9108 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:9132 +#, 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:9139 msgid " unknown opcode" msgstr " nieznana instrukcja" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:9151 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:8929 +#: src/readelf.c:9162 #, 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:9166 src/readelf.c:9227 #, c-format msgid ", op_index to %u" msgstr ", op_index do %u" -#: src/readelf.c:8945 +#: src/readelf.c:9178 #, c-format msgid " advance line by constant %d to %\n" msgstr " zwiększenie wiersza o stałą %d do %\n" -#: src/readelf.c:8955 +#: src/readelf.c:9188 #, c-format msgid " set file to %\n" msgstr " ustawienie pliku na %\n" -#: src/readelf.c:8966 +#: src/readelf.c:9199 #, c-format msgid " set column to %\n" msgstr " ustawienie kolumny na %\n" -#: src/readelf.c:8973 +#: src/readelf.c:9206 #, c-format msgid " set '%s' to %\n" msgstr " ustawienie „%s” na %\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9212 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:8990 +#: src/readelf.c:9223 #, c-format msgid " advance address by constant %u to " msgstr " zwiększenie adresu o stałą %u do " -#: src/readelf.c:9010 +#: src/readelf.c:9243 #, 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:9253 msgid " set prologue end flag" msgstr " ustawienie flagi końca prologu" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9258 msgid " set epilogue begin flag" msgstr " ustawienie flagi początku epilogu" -#: src/readelf.c:9035 +#: src/readelf.c:9268 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" @@ -5958,7 +6015,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:9277 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5966,101 +6023,101 @@ msgstr[0] " nieznana instrukcja z % parametrem:" msgstr[1] " nieznana instrukcja z % parametrami:" msgstr[2] " nieznana instrukcja z % parametrami:" -#: src/readelf.c:9084 +#: src/readelf.c:9317 #, 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:9483 #, c-format msgid " \n" msgstr " \n" -#: src/readelf.c:9290 +#: src/readelf.c:9523 #, c-format msgid "invalid loclists data" msgstr "nieprawidłowe dane loclists" -#: src/readelf.c:9543 +#: src/readelf.c:9786 #, 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:9999 src/readelf.c:11043 msgid " \n" msgstr " \n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:10054 src/readelf.c:10217 #, 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:10134 #, 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:10157 #, 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:10258 #, c-format msgid " Offset: 0x%\n" msgstr " Offset: 0x%\n" -#: src/readelf.c:10027 +#: src/readelf.c:10270 #, c-format msgid " Version: %\n" msgstr " Wersja: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10276 src/readelf.c:11163 #, 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:10283 #, c-format msgid " Flag: 0x%" msgstr " Flaga: 0x%" -#: src/readelf.c:10069 +#: src/readelf.c:10312 #, c-format msgid " Offset length: %\n" msgstr " Długość offsetu: %\n" -#: src/readelf.c:10077 +#: src/readelf.c:10320 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " Offset .debug_line: 0x%\n" -#: src/readelf.c:10102 +#: src/readelf.c:10345 #, c-format msgid " extension opcode table, % items:\n" msgstr " tabela instrukcji rozszerzenia, % elementów:\n" -#: src/readelf.c:10109 +#: src/readelf.c:10352 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:10121 +#: src/readelf.c:10364 #, c-format msgid " % arguments:" msgstr " Parametry %:" -#: src/readelf.c:10136 +#: src/readelf.c:10379 #, c-format msgid " no arguments." msgstr " brak parametrów." -#: src/readelf.c:10337 +#: src/readelf.c:10580 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr " [%5d] offset DIE: %6, offset CU DIE: %6, nazwa: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10624 #, c-format msgid "" "\n" @@ -6072,42 +6129,42 @@ msgstr "" " %*s Ciąg\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10629 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10639 #, 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:10668 #, 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:10767 #, c-format msgid " Length: %8\n" msgstr " Długość: %8\n" -#: src/readelf.c:10526 +#: src/readelf.c:10769 #, c-format msgid " Offset size: %8\n" msgstr " Rozmiar offsetu: %8\n" -#: src/readelf.c:10540 +#: src/readelf.c:10783 #, c-format msgid " DWARF version: %8\n" msgstr " Wersja DWARF: %8\n" -#: src/readelf.c:10549 +#: src/readelf.c:10792 #, c-format msgid " Padding: %8\n" msgstr " Wypełnienie: %8\n" -#: src/readelf.c:10603 +#: src/readelf.c:10846 #, c-format msgid "" "\n" @@ -6116,7 +6173,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywołania [%2zu] „.eh_frame_hdr”:\n" -#: src/readelf.c:10705 +#: src/readelf.c:10948 #, c-format msgid "" "\n" @@ -6125,22 +6182,22 @@ msgstr "" "\n" "Sekcja tabeli obsługiwania wyjątków [%2zu] „.gcc_except_table”:\n" -#: src/readelf.c:10728 +#: src/readelf.c:10971 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10983 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10998 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywołania: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:11011 msgid "" "\n" " Call site table:" @@ -6148,7 +6205,7 @@ msgstr "" "\n" " Tabela strony wywołania:" -#: src/readelf.c:10782 +#: src/readelf.c:11025 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6161,12 +6218,12 @@ msgstr "" " Lądowisko: %#\n" " Działanie: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:11098 #, c-format msgid "invalid TType encoding" msgstr "nieprawidłowe kodowanie TType" -#: src/readelf.c:10882 +#: src/readelf.c:11125 #, c-format msgid "" "\n" @@ -6175,37 +6232,37 @@ msgstr "" "\n" "Sekcja GDB [%2zu] „%s” pod offsetem %# zawiera % B:\n" -#: src/readelf.c:10911 +#: src/readelf.c:11154 #, c-format msgid " Version: %\n" msgstr " Wersja: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:11172 #, c-format msgid " CU offset: %#\n" msgstr " offset CU: %#\n" -#: src/readelf.c:10936 +#: src/readelf.c:11179 #, c-format msgid " TU offset: %#\n" msgstr " offset TU: %#\n" -#: src/readelf.c:10943 +#: src/readelf.c:11186 #, c-format msgid " address offset: %#\n" msgstr " offset adresu: %#\n" -#: src/readelf.c:10950 +#: src/readelf.c:11193 #, c-format msgid " symbol offset: %#\n" msgstr " offset symbolu: %#\n" -#: src/readelf.c:10957 +#: src/readelf.c:11200 #, c-format msgid " constant offset: %#\n" msgstr " offset stałej: %#\n" -#: src/readelf.c:10971 +#: src/readelf.c:11214 #, c-format msgid "" "\n" @@ -6214,7 +6271,7 @@ msgstr "" "\n" " Lista CU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11239 #, c-format msgid "" "\n" @@ -6223,7 +6280,7 @@ msgstr "" "\n" " Lista TU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11268 #, c-format msgid "" "\n" @@ -6232,7 +6289,7 @@ msgstr "" "\n" " Lista adresów pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11300 #, c-format msgid "" "\n" @@ -6241,18 +6298,18 @@ msgstr "" "\n" " Tabela symboli pod offsetem %# zawiera %zu gniazd:\n" -#: src/readelf.c:11195 +#: src/readelf.c:11438 #, 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:11804 src/readelf.c:12431 src/readelf.c:12541 +#: src/readelf.c:12598 #, 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:12168 #, c-format msgid "" "\n" @@ -6261,21 +6318,21 @@ msgstr "" "\n" "%*s… …" -#: src/readelf.c:12438 +#: src/readelf.c:12677 msgid " Owner Data size Type\n" msgstr " Właściciel Rozmiar danych Typ\n" -#: src/readelf.c:12466 +#: src/readelf.c:12705 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12757 #, 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:12790 #, c-format msgid "" "\n" @@ -6285,7 +6342,7 @@ msgstr "" "Segment notatki [%2zu] „%s” o długości % B pod offsetem " "%#0:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12813 #, c-format msgid "" "\n" @@ -6294,7 +6351,7 @@ msgstr "" "\n" "Segment notatki o długości % B pod offsetem %#0:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12860 #, c-format msgid "" "\n" @@ -6303,12 +6360,12 @@ msgstr "" "\n" "Sekcja [%zu] „%s” nie ma danych do zrzucenia.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12887 src/readelf.c:12938 #, 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:12892 #, c-format msgid "" "\n" @@ -6318,7 +6375,7 @@ msgstr "" "Segment zrzutu szesnastkowego [%zu] „%s”, % B pod offsetem " "%#0:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12897 #, c-format msgid "" "\n" @@ -6329,7 +6386,7 @@ msgstr "" "Zrzut szesnastkowy sekcji [%zu] „%s”, % B (%zd nieskompresowanych) " "pod offsetem %#0:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12911 #, c-format msgid "" "\n" @@ -6338,7 +6395,7 @@ msgstr "" "\n" "Sekcja [%zu] „%s” nie ma ciągów do zrzucenia.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12943 #, c-format msgid "" "\n" @@ -6347,7 +6404,7 @@ msgstr "" "\n" "Sekcja ciągów [%zu] „%s” zawiera % B pod offsetem %#0:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12948 #, c-format msgid "" "\n" @@ -6358,7 +6415,7 @@ msgstr "" "Sekcja ciągów [%zu] „%s” zawiera % B (%zd nieskompresowanych) pod " "offsetem %#0:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12996 #, c-format msgid "" "\n" @@ -6367,7 +6424,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:12789 +#: src/readelf.c:13026 #, c-format msgid "" "\n" @@ -6376,12 +6433,12 @@ msgstr "" "\n" "sekcja „%s” nie istnieje" -#: src/readelf.c:12846 +#: src/readelf.c:13081 #, 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:13084 #, c-format msgid "" "\n" @@ -6390,7 +6447,7 @@ msgstr "" "\n" "Archiwum „%s” nie ma indeksu symboli\n" -#: src/readelf.c:12853 +#: src/readelf.c:13088 #, c-format msgid "" "\n" @@ -6399,138 +6456,137 @@ msgstr "" "\n" "Indeks archiwum „%s” ma %zu wpisów:\n" -#: src/readelf.c:12871 +#: src/readelf.c:13106 #, 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:13111 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum „%s” zawiera:\n" -#: src/size.c:56 +#: src/size.c:55 msgid "" "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " "is `bsd'" msgstr "" "Używa FORMATU wyjścia. Może to być „bsd” lub „sysv”. Domyślny jest „bsd”" -#: src/size.c:58 +#: src/size.c:57 msgid "Same as `--format=sysv'" msgstr "To samo, co „--format=sysv”" -#: src/size.c:59 +#: src/size.c:58 msgid "Same as `--format=bsd'" msgstr "To samo, co „--format=bsd”" -#: src/size.c:62 +#: src/size.c:61 msgid "Same as `--radix=10'" msgstr "To samo, co „--radix=10”" -#: src/size.c:63 +#: src/size.c:62 msgid "Same as `--radix=8'" msgstr "To samo, co „--radix=8”" -#: src/size.c:64 +#: src/size.c:63 msgid "Same as `--radix=16'" msgstr "To samo, co „--radix=16”" -#: src/size.c:66 +#: src/size.c:65 msgid "Similar to `--format=sysv' output but in one line" msgstr "Podobne do wyjścia „--format=sysv”, ale w jednym wierszu" -#: src/size.c:70 +#: src/size.c:69 msgid "Print size and permission flags for loadable segments" msgstr "Wyświetla rozmiar i flagi uprawnień dla segmentów wczytywalnych" -#: src/size.c:71 +#: src/size.c:70 msgid "Display the total sizes (bsd only)" msgstr "Wyświetla całkowite rozmiary (tylko bsd)" #. Short description of program. -#: src/size.c:76 +#: src/size.c:75 msgid "List section sizes of FILEs (a.out by default)." msgstr "Wyświetla listę rozmiarów sekcji PLIKU (domyślnie a.out)." -#: src/size.c:240 +#: src/size.c:239 #, c-format msgid "Invalid format: %s" msgstr "Nieprawidłowy format: %s" -#: src/size.c:251 +#: src/size.c:250 #, c-format msgid "Invalid radix: %s" msgstr "Nieprawidłowa baza: %s" -#: src/size.c:310 +#: src/size.c:309 #, c-format msgid "%s: file format not recognized" msgstr "%s: nie rozpoznano formatu pliku" -#: src/size.c:328 +#: src/size.c:327 msgctxt "bsd" msgid "text" msgstr "" -#: src/size.c:329 +#: src/size.c:328 msgctxt "bsd" msgid "data" msgstr "" -#: src/size.c:330 +#: src/size.c:329 msgctxt "bsd" msgid "bss" msgstr "" -#: src/size.c:331 +#: src/size.c:330 msgctxt "bsd" msgid "dec" msgstr "" -#: src/size.c:332 +#: src/size.c:331 msgctxt "bsd" msgid "hex" msgstr "" -#: src/size.c:333 +#: src/size.c:332 msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:416 src/size.c:557 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:418 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "nieprawidłowa sekcja" -#: src/size.c:421 +#: src/size.c:419 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:420 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:449 src/size.c:452 src/size.c:455 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:479 msgid "cannot get section header" msgstr "nie można uzyskać nagłówka sekcji" -#: src/size.c:585 +#: src/size.c:582 msgid "(TOTALS)\n" msgstr "(CAŁKOWITE)\n" @@ -6667,21 +6723,21 @@ msgstr "" msgid "Couldn't show any frames." msgstr "Nie można wyświetlić żadnych ramek." -#: src/strings.c:65 +#: src/strings.c:64 msgid "Output Selection:" msgstr "Wybór wyjścia:" -#: src/strings.c:66 +#: src/strings.c:65 msgid "Scan entire file, not only loaded sections" msgstr "Przeszukuje cały plik, nie tylko wczytane sekcje" -#: src/strings.c:68 +#: src/strings.c:67 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" msgstr "" "Wyświetlane są tylko zakończone NUL sekwencje o MIN-LEN lub większej liczbie " "znaków" -#: src/strings.c:69 +#: src/strings.c:68 msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" @@ -6689,78 +6745,74 @@ msgstr "" "Wybór rozmiaru i kolejności znaków: s = 7 bitów, S = 8 bitów, {b,l} = 16 " "bitów, {B,L} = 32 bity" -#: src/strings.c:73 +#: src/strings.c:72 msgid "Print name of the file before each string." msgstr "Wyświetla nazwę pliku przed każdym ciągiem." -#: src/strings.c:75 +#: src/strings.c:74 msgid "Print location of the string in base 8, 10, or 16 respectively." msgstr "Wyświetla położenie ciągu z podstawą odpowiednio 8, 10 lub 16." -#: src/strings.c:76 +#: src/strings.c:75 msgid "Alias for --radix=o" msgstr "Alias dla --radix=o" #. Short description of program. -#: src/strings.c:83 +#: src/strings.c:82 msgid "Print the strings of printable characters in files." msgstr "Wyświetla ciągi znaków drukowalnych w plikach." -#: src/strings.c:256 src/strings.c:291 +#: src/strings.c:255 src/strings.c:290 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "nieprawidłowa wartość „%s” dla parametru %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:300 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:583 msgid "lseek failed" msgstr "lseek się nie powiodło" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:600 src/strings.c:664 msgid "re-mmap failed" msgstr "ponowne mmap się nie powiodło" -#: src/strings.c:639 -#, c-format +#: src/strings.c:637 msgid "mprotect failed" msgstr "mprotect się nie powiodło" -#: src/strings.c:728 +#: src/strings.c:726 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "Pomijanie sekcji %zd „%s” dane poza plikiem" -#: src/strip.c:71 +#: src/strip.c:70 msgid "Place stripped output into FILE" msgstr "Umieszcza okrojone wyjście w PLIKU" -#: src/strip.c:72 +#: src/strip.c:71 msgid "Extract the removed sections into FILE" msgstr "Wydobywa usunięte sekcje do PLIKU" -#: src/strip.c:73 +#: src/strip.c:72 msgid "Embed name FILE instead of -f argument" msgstr "Osadza nazwę PLIKU zamiast parametru -f" -#: src/strip.c:77 +#: src/strip.c:76 msgid "Remove all debugging symbols" msgstr "Usuwa wszystkie symbole debugowania" -#: src/strip.c:81 +#: src/strip.c:80 msgid "Remove section headers (not recommended)" msgstr "Usuwa nagłówki sekcji (niezalecane)" -#: src/strip.c:83 +#: src/strip.c:82 msgid "Copy modified/access timestamps to the output" msgstr "Kopiuje czasy modyfikacji/dostępu do wyjścia" -#: src/strip.c:85 +#: src/strip.c:84 msgid "" "Resolve all trivial relocations between debug sections if the removed " "sections are placed in a debug file (only relevant for ET_REL files, " @@ -6770,7 +6822,7 @@ msgstr "" "usunięte sekcje zostały umieszczone w pliku debugowania (ma znaczenie tylko " "dla plików ET_REL, działanie jest nieodwracalne, wymaga użycia opcji -f)" -#: src/strip.c:87 +#: src/strip.c:86 msgid "" "Similar to --reloc-debug-sections, but resolve all trivial relocations " "between debug sections in place. No other stripping is performed (operation " @@ -6782,11 +6834,11 @@ msgstr "" "jest wykonywane (działania nie jest odwracalne, nie jest zgodne z opcjami -" "f, -g, --remove-comment i --remove-section)" -#: src/strip.c:89 +#: src/strip.c:88 msgid "Remove .comment section" msgstr "Usuwa sekcję .comment" -#: src/strip.c:90 +#: src/strip.c:89 msgid "" "Remove the named section. SECTION is an extended wildcard pattern. May be " "given more than once. Only non-allocated sections can be removed." @@ -6794,7 +6846,7 @@ msgstr "" "Usuwa podaną sekcję. SEKCJA jest rozszerzonym wzorem. Może być podane więcej " "niż raz. Można usuwać tylko nieprzydzielone sekcje." -#: src/strip.c:91 +#: src/strip.c:90 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." @@ -6803,17 +6855,15 @@ msgstr "" "więcej niż raz." #. Short description of program. -#: src/strip.c:98 +#: src/strip.c:97 msgid "Discard symbols from object files." msgstr "Odrzuca symbole z plików obiektów." -#: src/strip.c:247 -#, c-format +#: src/strip.c:245 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:251 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" @@ -6821,42 +6871,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:265 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:287 #, c-format msgid "-f option specified twice" msgstr "Opcję -f podano dwukrotnie" -#: src/strip.c:299 +#: src/strip.c:296 #, c-format msgid "-F option specified twice" msgstr "Opcję -F podano dwukrotnie" -#: src/strip.c:362 +#: src/strip.c:359 #, 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:478 msgid "bad relocation" msgstr "błędna relokacja" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:756 src/strip.c:780 #, 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:770 #, c-format msgid "while opening '%s'" msgstr "podczas otwierania „%s”" -#: src/strip.c:799 +#: src/strip.c:808 #, 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,296 +6915,304 @@ 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:820 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: brak obsługi okrajania archiwum" -#: src/strip.c:1047 +#: src/strip.c:1057 #, c-format msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:1092 -#, c-format +#: src/strip.c:1101 msgid "cannot get number of phdrs" msgstr "nie można uzyskać liczby phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1115 src/strip.c:1158 #, 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:1125 src/strip.c:1168 #, 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:1248 #, c-format msgid "illformed file '%s'" msgstr "plik „%s” ma błędny format" -#: src/strip.c:1250 +#: src/strip.c:1258 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Nie można usunąć przydzielonej sekcji „%s”" -#: src/strip.c:1259 +#: src/strip.c:1267 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Nie można jednocześnie zachować i usunąć sekcji „%s”" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1631 src/strip.c:1746 #, c-format msgid "while generating output file: %s" msgstr "podczas tworzenia pliku wyjściowego: %s" -#: src/strip.c:1688 +#: src/strip.c:1695 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: błąd podczas aktualizowania nagłówka ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1704 #, c-format 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:1712 src/strip.c:2553 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: błąd podczas aktualizowania shdrstrndx: %s" -#: src/strip.c:1722 +#: src/strip.c:1729 #, c-format msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjścia dla „%s”" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1790 src/strip.c:1852 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1793 +#: src/strip.c:1799 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, 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:1869 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:2082 #, 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:2469 src/strip.c:2577 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania „%s”: %s" -#: src/strip.c:2477 +#: src/strip.c:2480 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia „%s”" -#: src/strip.c:2500 +#: src/strip.c:2503 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:2541 +#: src/strip.c:2544 #, 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:2562 #, 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:2602 src/strip.c:2622 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania „%s”" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2659 src/strip.c:2666 #, 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:2683 src/strip.c:2759 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostępu i modyfikacji „%s”" -#: src/unstrip.c:66 +#: src/unstrip.c:65 msgid "Match MODULE against file names, not module names" msgstr "Dopasowuje MODUŁY do nazw plików, a nie nazwy modułów" -#: src/unstrip.c:67 +#: src/unstrip.c:66 msgid "Silently skip unfindable files" msgstr "Pomija nieodnalezione pliki bez zgłaszania tego" -#: src/unstrip.c:70 +#: src/unstrip.c:69 msgid "Place output into FILE" msgstr "Umieszcza wyjście w PLIKU" -#: src/unstrip.c:72 +#: src/unstrip.c:71 msgid "Create multiple output files under DIRECTORY" msgstr "Tworzy wiele plików wyjściowych w KATALOGU" -#: src/unstrip.c:73 +#: src/unstrip.c:72 msgid "Use module rather than file names" msgstr "Używa nazw modułów zamiast nazw plików" -#: src/unstrip.c:75 +#: src/unstrip.c:74 msgid "Create output for modules that have no separate debug information" msgstr "" "Tworzy wyjście dla modułów niemających oddzielnych informacji debugowania" -#: src/unstrip.c:78 +#: src/unstrip.c:77 msgid "Apply relocations to section contents in ET_REL files" msgstr "Zastosowuje relokacje do zawartości sekcji w plikach ET_REL" -#: src/unstrip.c:80 +#: src/unstrip.c:79 msgid "Only list module and file names, build IDs" msgstr "Wyświetla tylko nazwy modułów i plików, identyfikatory kopii" -#: src/unstrip.c:82 +#: src/unstrip.c:81 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" "Wymusza łączenie plików, nawet jeśli niektóre nagłówki ELF się nie zgadzają" -#: src/unstrip.c:126 +#: src/unstrip.c:125 #, c-format msgid "-d option specified twice" msgstr "opcję -d podano dwukrotnie" -#: src/unstrip.c:161 +#: src/unstrip.c:160 #, c-format msgid "only one of -o or -d allowed" msgstr "dozwolona jest tylko jedna z opcji -o lub -d" -#: src/unstrip.c:170 +#: src/unstrip.c:169 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "opcja -n nie może być używana z jawnymi plikami albo z opcją -o lub -d" -#: src/unstrip.c:185 +#: src/unstrip.c:184 #, c-format msgid "output directory '%s'" msgstr "katalog wyjściowy „%s”" -#: src/unstrip.c:194 +#: src/unstrip.c:193 #, c-format msgid "exactly two file arguments are required" msgstr "wymagane są dokładnie dwa parametry plików" -#: src/unstrip.c:200 +#: src/unstrip.c:199 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "opcje -m, -a, -R oraz -i nie są dozwolone z jawnymi plikami" -#: src/unstrip.c:213 +#: src/unstrip.c:212 #, c-format msgid "-o or -d is required when using implicit files" msgstr "opcja -o lub -d jest wymagana podczas używania ukrytych plików" -#: src/unstrip.c:236 +#: src/unstrip.c:235 #, c-format msgid "cannot create ELF header: %s" msgstr "nie można utworzyć nagłówka ELF: %s" -#: src/unstrip.c:240 +#: src/unstrip.c:239 #, c-format msgid "cannot get shdrstrndx:%s" msgstr "nie można uzyskać shdrstrndx: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:243 src/unstrip.c:2085 #, c-format msgid "cannot get ELF header: %s" msgstr "nie można uzyskać nagłówka ELF: %s" -#: src/unstrip.c:254 +#: src/unstrip.c:253 #, c-format msgid "cannot get new zero section: %s" msgstr "nie można uzyskać nowej sekcji zerowej: %s" -#: src/unstrip.c:257 +#: src/unstrip.c:256 #, c-format msgid "cannot update new zero section: %s" msgstr "nie można zaktualizować nowej sekcji zerowej: %s" -#: src/unstrip.c:261 +#: src/unstrip.c:260 #, c-format msgid "cannot copy ELF header: %s" msgstr "nie można skopiować nagłówka ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:264 src/unstrip.c:2103 src/unstrip.c:2146 #, c-format msgid "cannot get number of program headers: %s" msgstr "nie można uzyskać liczby nagłówków programu: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:269 src/unstrip.c:2107 #, c-format msgid "cannot create program headers: %s" msgstr "nie można utworzyć nagłówków programu: %s" -#: src/unstrip.c:276 +#: src/unstrip.c:275 #, c-format msgid "cannot copy program header: %s" msgstr "nie można skopiować nagłówka programu: %s" -#: src/unstrip.c:286 +#: src/unstrip.c:285 #, c-format msgid "cannot copy section header: %s" msgstr "nie można skopiować nagłówka sekcji: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:288 src/unstrip.c:1707 #, c-format msgid "cannot get section data: %s" msgstr "nie można uzyskać danych sekcji: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:290 src/unstrip.c:1709 #, c-format msgid "cannot copy section data: %s" msgstr "nie można skopiować danych sekcji: %s" -#: src/unstrip.c:319 +#: src/unstrip.c:318 #, c-format 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:1750 +#: src/unstrip.c:392 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:1749 #, 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:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:408 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 #, c-format msgid "cannot update symbol table: %s" msgstr "nie można zaktualizować tabeli symboli: %s" -#: src/unstrip.c:419 +#: src/unstrip.c:418 #, c-format 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:464 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:467 src/unstrip.c:482 #, c-format msgid "cannot update relocation: %s" msgstr "nie można zaktualizować relokacji: %s" +#: src/unstrip.c:479 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + #: src/unstrip.c:580 #, c-format msgid "cannot get symbol version: %s" @@ -7212,7 +7268,7 @@ msgstr "nie można uzyskać symbolu dla sekcji grupy: %s" 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:1073 src/unstrip.c:1553 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "nie można odnaleźć pasującej sekcji dla [%zu] „%s”" @@ -7232,7 +7288,7 @@ msgstr "przepełnienie z shnum = %zu w sekcji „%s”" 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:1337 src/unstrip.c:1353 src/unstrip.c:1633 src/unstrip.c:1924 #, c-format msgid "cannot add section name to string table: %s" msgstr "nie można nazwy sekcji do tabeli ciągów: %s" @@ -7247,71 +7303,69 @@ msgstr "nie można zaktualizować danych tabeli ciągów nagłówków sekcji: %s 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:1399 src/unstrip.c:1403 src/unstrip.c:1648 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" #: src/unstrip.c:1406 -#, c-format 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 msgid "no sections in stripped file" msgstr "brak sekcji w okrojonym pliku" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1458 src/unstrip.c:1568 #, c-format msgid "cannot read section header string table: %s" msgstr "nie można odczytać tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1628 +#: src/unstrip.c:1627 #, c-format msgid "cannot add new section: %s" msgstr "nie można dodać nowej sekcji: %s" -#: src/unstrip.c:1758 +#: src/unstrip.c:1757 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "symbol [%zu] ma nieprawidłowy indeks sekcji" -#: src/unstrip.c:1790 +#: src/unstrip.c:1789 #, c-format msgid "group has invalid section index [%zd]" msgstr "grupa ma nieprawidłowy indeks sekcji [%zd]" -#: src/unstrip.c:2065 +#: src/unstrip.c:2064 #, c-format msgid "cannot read section data: %s" msgstr "nie można odczytać danych sekcji: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2093 #, c-format msgid "cannot update ELF header: %s" msgstr "nie można zaktualizować nagłówka ELF: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2117 #, c-format msgid "cannot update program header: %s" msgstr "nie można zaktualizować nagłówka programu: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2122 src/unstrip.c:2205 #, c-format msgid "cannot write output file: %s" msgstr "nie można zapisać pliku wyjściowego: %s" -#: src/unstrip.c:2174 +#: src/unstrip.c:2173 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Dane DWARF nie zostały dostosowane do przesunięcia wczesnego konsolidowania; " "proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:2177 +#: src/unstrip.c:2176 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7319,77 +7373,75 @@ msgstr "" "Dane DWARF w „%s” nie zostały dostosowane do przesunięcia wczesnego " "konsolidowania; proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2196 src/unstrip.c:2248 src/unstrip.c:2260 src/unstrip.c:2350 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/unstrip.c:2235 +#: src/unstrip.c:2234 msgid "WARNING: " msgstr "OSTRZEŻENIE: " -#: src/unstrip.c:2237 +#: src/unstrip.c:2236 msgid ", use --force" msgstr ", należy użyć opcji --force" -#: src/unstrip.c:2265 +#: src/unstrip.c:2264 msgid "ELF header identification (e_ident) different" msgstr "Różna identyfikacja nagłówka ELF (e_ident)" -#: src/unstrip.c:2269 +#: src/unstrip.c:2268 msgid "ELF header type (e_type) different" msgstr "Różne typy nagłówka ELF (e_type)" -#: src/unstrip.c:2273 +#: src/unstrip.c:2272 msgid "ELF header machine type (e_machine) different" msgstr "Różne typy maszyny nagłówka ELF (e_machine)" -#: src/unstrip.c:2277 +#: src/unstrip.c:2276 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "okrojony nagłówek programu (e_phnum) jest mniejszy niż nieokrojony" -#: src/unstrip.c:2308 +#: src/unstrip.c:2307 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "nie można odnaleźć okrojonego pliku dla modułu „%s”: %s" -#: src/unstrip.c:2312 +#: src/unstrip.c:2311 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "nie można otworzyć okrojonego pliku „%s” dla modułu „%s”: %s" -#: src/unstrip.c:2327 +#: src/unstrip.c:2326 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "nie można odnaleźć pliku debugowania dla modułu „%s”: %s" -#: src/unstrip.c:2331 +#: src/unstrip.c:2330 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "nie można otworzyć pliku debugowania „%s” dla modułu „%s”: %s" -#: src/unstrip.c:2344 +#: src/unstrip.c:2343 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "moduł „%s” pliku „%s” nie został okrojony" -#: src/unstrip.c:2375 +#: src/unstrip.c:2374 #, c-format 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:2502 msgid "no matching modules found" msgstr "nie odnaleziono pasujących modułów" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2512 msgid "matched more than one module" msgstr "pasuje więcej niż jeden moduł" -#: src/unstrip.c:2560 +#: src/unstrip.c:2557 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7397,7 +7449,7 @@ msgstr "" "OKROJONY-PLIK PLIK-DEBUGOWANIA\n" "[MODUŁ…]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2558 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7459,6 +7511,14 @@ msgstr "Żąda zawartość powiązaną z debuginfo z debuginfod wymienionych w #. Strings for arguments in help texts. #: debuginfod/debuginfod-find.c:46 +#, fuzzy +#| msgid "" +#| "debuginfo BUILDID\n" +#| "debuginfo PATH\n" +#| "executable BUILDID\n" +#| "executable PATH\n" +#| "source BUILDID /FILENAME\n" +#| "source PATH /FILENAME\n" msgid "" "debuginfo BUILDID\n" "debuginfo PATH\n" @@ -7466,6 +7526,8 @@ msgid "" "executable PATH\n" "source BUILDID /FILENAME\n" "source PATH /FILENAME\n" +"section BUILDID SECTION-NAME\n" +"section PATH SECTION-NAME\n" msgstr "" "debuginfo IDENTYFIKATOR-KOPII\n" "debuginfo ŚCIEŻKA\n" @@ -7474,7 +7536,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 +7547,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..199041a4 100644 --- a/po/uk.po +++ b/po/uk.po @@ -5,9 +5,9 @@ # Yuri Chornoivan , 2010, 2011, 2012, 2013, 2014, 2015, 2020. msgid "" msgstr "" -"Project-Id-Version: \n" +"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-11-02 13:30+0100\n" "PO-Revision-Date: 2020-03-28 14:59+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" @@ -15,18 +15,18 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 20.03.70\n" -#: lib/color.c:53 +#: lib/color.c:51 msgid "" "colorize the output. WHEN defaults to 'always' or can be 'auto' or 'never'" msgstr "" "розфарбовувати виведене. Типові значення «always» (завжди), «auto» (авто) " "або «never» (ніколи)" -#: lib/color.c:129 +#: lib/color.c:127 #, c-format msgid "" "%s: invalid argument '%s' for '--color'\n" @@ -41,12 +41,7 @@ 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 +#: lib/printversion.c:39 #, c-format msgid "" "Copyright (C) %s The elfutils developers <%s>.\n" @@ -58,72 +53,72 @@ 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:47 lib/xmalloc.c:60 lib/xmalloc.c:72 src/readelf.c:11754 +#: src/unstrip.c:311 #, c-format msgid "memory exhausted" msgstr "пам’ять вичерпано" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 -#: libelf/elf_error.c:60 +#: libasm/asm_error.c:64 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 +#: libelf/elf_error.c:59 msgid "no error" msgstr "без помилок" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 -#: libelf/elf_error.c:91 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 +#: libelf/elf_error.c:90 msgid "out of memory" msgstr "нестача пам'яті" -#: libasm/asm_error.c:67 +#: libasm/asm_error.c:66 msgid "cannot create output file" msgstr "не вдалося створити файл виводу даних" -#: libasm/asm_error.c:68 +#: libasm/asm_error.c:67 msgid "invalid parameter" msgstr "некоректний параметр" -#: libasm/asm_error.c:69 +#: libasm/asm_error.c:68 msgid "cannot change mode of output file" msgstr "не вдалося змінити права доступу до файла виводу даних" -#: libasm/asm_error.c:70 +#: libasm/asm_error.c:69 msgid "cannot rename output file" msgstr "не вдалося перейменувати файл виводу даних" -#: libasm/asm_error.c:71 +#: libasm/asm_error.c:70 msgid "duplicate symbol" msgstr "дублювання символів" -#: libasm/asm_error.c:72 +#: libasm/asm_error.c:71 msgid "invalid section type for operation" msgstr "некоректний тип розділу для дії" -#: libasm/asm_error.c:73 +#: libasm/asm_error.c:72 msgid "error during output of data" msgstr "помилка під час спроби виведення даних" -#: libasm/asm_error.c:74 +#: libasm/asm_error.c:73 msgid "no backend support available" msgstr "підтримки серверів не передбачено" -#: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 -#: libelf/elf_error.c:63 +#: libasm/asm_error.c:82 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 +#: libelf/elf_error.c:62 msgid "unknown error" msgstr "невідома помилка" -#: libcpu/i386_lex.l:122 +#: libcpu/i386_lex.l:121 #, fuzzy, c-format #| msgid "invalid page size value '%s': ignored" msgid "invalid character '%c' at line %d; ignored" msgstr "некоректне значення розміру сторінки «%s»: проігноровано" -#: libcpu/i386_lex.l:123 +#: libcpu/i386_lex.l:122 #, fuzzy, c-format #| msgid "invalid page size value '%s': ignored" msgid "invalid character '\\%o' at line %d; ignored" msgstr "некоректне значення розміру сторінки «%s»: проігноровано" -#: libcpu/i386_parse.y:554 +#: libcpu/i386_parse.y:553 #, fuzzy, c-format #| msgid "while reading linker script '%s': %s at line %d" msgid "while reading i386 CPU description: %s at line %d" @@ -165,7 +160,7 @@ msgstr "не вдалося отримати заголовок ELF" msgid "not implemented" msgstr "не реалізовано" -#: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159 +#: libdw/dwarf_error.c:69 libelf/elf_error.c:110 libelf/elf_error.c:158 msgid "invalid command" msgstr "некоректна команда" @@ -273,7 +268,7 @@ msgstr "не виявлено відповідного діапазону адр msgid "no flag value" msgstr "немає значення прапорця" -#: libdw/dwarf_error.c:96 libelf/elf_error.c:236 +#: libdw/dwarf_error.c:96 libelf/elf_error.c:235 msgid "invalid offset" msgstr "некоректне значення зміщення" @@ -309,23 +304,23 @@ 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:45 src/stack.c:643 src/unstrip.c:2547 msgid "Input selection options:" msgstr "Вибір параметрів виведення даних:" -#: libdwfl/argp-std.c:48 +#: libdwfl/argp-std.c:46 msgid "Find addresses in FILE" msgstr "Знайти адреси у ФАЙЛІ" -#: libdwfl/argp-std.c:50 +#: libdwfl/argp-std.c:48 msgid "Find addresses from signatures found in COREFILE" msgstr "Знайти адреси за сигнатурами з файла COREFILE" -#: libdwfl/argp-std.c:52 +#: libdwfl/argp-std.c:50 msgid "Find addresses in files mapped into process PID" msgstr "Знайти адреси у файлах, відображених на процес з PID" -#: libdwfl/argp-std.c:54 +#: libdwfl/argp-std.c:52 msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" @@ -333,46 +328,46 @@ msgstr "" "Знайти адреси у файлах, відображених як read за ФАЙЛОМ у форматі /proc/PID/" "maps Linux" -#: libdwfl/argp-std.c:56 +#: libdwfl/argp-std.c:54 msgid "Find addresses in the running kernel" msgstr "Знайти адреси у запущеному ядрі" -#: libdwfl/argp-std.c:58 +#: libdwfl/argp-std.c:56 msgid "Kernel with all modules" msgstr "Ядро з усіма модулями" -#: libdwfl/argp-std.c:60 src/stack.c:650 +#: libdwfl/argp-std.c:58 src/stack.c:650 msgid "Search path for separate debuginfo files" msgstr "Шукати у вказаному каталозі окремі файли debuginfo" -#: libdwfl/argp-std.c:161 +#: libdwfl/argp-std.c:159 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "" "можна використовувати лише один за параметрів: -e, -p, -k, -K або --core" -#: libdwfl/argp-std.c:234 +#: libdwfl/argp-std.c:232 msgid "cannot load kernel symbols" msgstr "не вдалося завантажити символи ядра" #. Non-fatal to have no modules since we do have the kernel. -#: libdwfl/argp-std.c:238 +#: libdwfl/argp-std.c:236 msgid "cannot find kernel modules" msgstr "не вдалося виявити модулі ядра" -#: libdwfl/argp-std.c:255 +#: libdwfl/argp-std.c:253 msgid "cannot find kernel or modules" msgstr "не вдалося виявити ядро або модулі" -#: libdwfl/argp-std.c:294 +#: libdwfl/argp-std.c:292 #, c-format msgid "cannot read ELF core file: %s" msgstr "не вдалося прочитати файл core ELF: %s" -#: libdwfl/argp-std.c:317 +#: libdwfl/argp-std.c:315 msgid "Not enough memory" msgstr "Бракує пам'яті" -#: libdwfl/argp-std.c:327 +#: libdwfl/argp-std.c:325 msgid "No modules recognized in core file" msgstr "Не вдалося виявити модулі у файлі core" @@ -425,7 +420,7 @@ msgstr "Непідтримуваний тип пересування" msgid "r_offset is bogus" msgstr "r_offset є фіктивним" -#: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175 +#: libdwfl/libdwflP.h:66 libelf/elf_error.c:114 libelf/elf_error.c:174 msgid "offset out of range" msgstr "перевищення можливого зміщення" @@ -490,46 +485,52 @@ msgid "Invalid register" msgstr "Некоректний регістр" #: libdwfl/libdwflP.h:84 +#, fuzzy +#| msgid "no reference value" +msgid "Unknown register value" +msgstr "немає значення для порівняння" + +#: libdwfl/libdwflP.h:85 msgid "Error reading process memory" msgstr "Помилка під час спроби читання пам’яті процесу" -#: libdwfl/libdwflP.h:85 +#: libdwfl/libdwflP.h:86 msgid "Couldn't find architecture of any ELF" msgstr "Не вдалося знайти хоч якусь архітектуру ELF" -#: libdwfl/libdwflP.h:86 +#: libdwfl/libdwflP.h:87 msgid "Error parsing /proc filesystem" msgstr "Помилка під час спроби обробки файлової системи /proc" -#: libdwfl/libdwflP.h:87 +#: libdwfl/libdwflP.h:88 msgid "Invalid DWARF" msgstr "Некоректний запис DWARF" -#: libdwfl/libdwflP.h:88 +#: libdwfl/libdwflP.h:89 msgid "Unsupported DWARF" msgstr "Непідтримуваний запис DWARF" -#: libdwfl/libdwflP.h:89 +#: libdwfl/libdwflP.h:90 msgid "Unable to find more threads" msgstr "Не вдалося знайти додаткові потоки" -#: libdwfl/libdwflP.h:90 +#: libdwfl/libdwflP.h:91 msgid "Dwfl already has attached state" msgstr "Dwfl уже перебуває у стані долучення до процесу" -#: libdwfl/libdwflP.h:91 +#: libdwfl/libdwflP.h:92 msgid "Dwfl has no attached state" msgstr "Dwfl не перебуває у стані долучення до процесу" -#: libdwfl/libdwflP.h:92 +#: libdwfl/libdwflP.h:93 msgid "Unwinding not supported for this architecture" msgstr "Для цієї архітектури розгортання не передбачено" -#: libdwfl/libdwflP.h:93 +#: libdwfl/libdwflP.h:94 msgid "Invalid argument" msgstr "Некоректний аргумент" -#: libdwfl/libdwflP.h:94 +#: libdwfl/libdwflP.h:95 msgid "Not an ET_CORE ELF file" msgstr "Не є файлом ET_CORE ELF" @@ -538,7 +539,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 "" @@ -589,18 +590,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: " @@ -614,225 +615,227 @@ msgstr "Окремий" msgid ": %d" msgstr "<невідомий>: %d" -#: libelf/elf_error.c:67 +#: libelf/elf_error.c:66 msgid "unknown version" msgstr "невідома версія" -#: libelf/elf_error.c:71 +#: libelf/elf_error.c:70 msgid "unknown type" msgstr "невизначений тип" -#: libelf/elf_error.c:75 +#: libelf/elf_error.c:74 msgid "invalid `Elf' handle" msgstr "некоректний дескриптор «Elf»" -#: libelf/elf_error.c:79 +#: libelf/elf_error.c:78 msgid "invalid size of source operand" msgstr "некоректна розмірність вхідного параметра" -#: libelf/elf_error.c:83 +#: libelf/elf_error.c:82 msgid "invalid size of destination operand" msgstr "некоректна розмірність вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:86 src/readelf.c:6378 #, c-format msgid "invalid encoding" msgstr "некоректне кодування" -#: libelf/elf_error.c:95 +#: libelf/elf_error.c:94 msgid "invalid file descriptor" msgstr "некоректний дескриптор файла" -#: libelf/elf_error.c:99 +#: libelf/elf_error.c:98 msgid "invalid ELF file data" msgstr "некоректні дані щодо файла ELF" -#: libelf/elf_error.c:103 +#: libelf/elf_error.c:102 msgid "invalid operation" msgstr "недійсна дія" -#: libelf/elf_error.c:107 +#: libelf/elf_error.c:106 msgid "ELF version not set" msgstr "версію ELF не вказано" -#: libelf/elf_error.c:119 +#: libelf/elf_error.c:118 msgid "invalid fmag field in archive header" msgstr "некоректне поле fmag у заголовку архіву" -#: libelf/elf_error.c:123 +#: libelf/elf_error.c:122 msgid "invalid archive file" msgstr "некоректний файл архіву" -#: libelf/elf_error.c:127 +#: libelf/elf_error.c:126 msgid "descriptor is not for an archive" msgstr "дескриптор не належить архіву" -#: libelf/elf_error.c:131 +#: libelf/elf_error.c:130 msgid "no index available" msgstr "такого номера немає" -#: libelf/elf_error.c:135 +#: libelf/elf_error.c:134 msgid "cannot read data from file" msgstr "не вдалося прочитати дані з файла" -#: libelf/elf_error.c:139 +#: libelf/elf_error.c:138 msgid "cannot write data to file" msgstr "не вдалося записати дані до файла" -#: libelf/elf_error.c:143 +#: libelf/elf_error.c:142 msgid "invalid binary class" msgstr "некоректний бінарний клас" -#: libelf/elf_error.c:147 +#: libelf/elf_error.c:146 msgid "invalid section index" msgstr "некоректний номер розділу" -#: libelf/elf_error.c:151 +#: libelf/elf_error.c:150 msgid "invalid operand" msgstr "некоректний параметр" -#: libelf/elf_error.c:155 +#: libelf/elf_error.c:154 msgid "invalid section" msgstr "некоректний розділ" -#: libelf/elf_error.c:163 +#: libelf/elf_error.c:162 msgid "executable header not created first" msgstr "заголовок виконуваного файла не було створено першим" -#: libelf/elf_error.c:167 +#: libelf/elf_error.c:166 msgid "file descriptor disabled" msgstr "дескриптор файла вимкнено" -#: libelf/elf_error.c:171 +#: libelf/elf_error.c:170 msgid "archive/member file descriptor mismatch" msgstr "невідповідність дескрипторів файлів архіву/елемента" -#: libelf/elf_error.c:179 +#: libelf/elf_error.c:178 msgid "cannot manipulate null section" msgstr "не можна оперувати нульовим розділом" -#: libelf/elf_error.c:183 +#: libelf/elf_error.c:182 msgid "data/scn mismatch" msgstr "невідповідність полів data/scn" -#: libelf/elf_error.c:187 +#: libelf/elf_error.c:186 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:190 src/readelf.c:10266 src/readelf.c:10866 +#: src/readelf.c:10967 src/readelf.c:11149 #, c-format msgid "invalid data" msgstr "некоректні дані" -#: libelf/elf_error.c:195 +#: libelf/elf_error.c:194 msgid "unknown data encoding" msgstr "невідоме кодування даних" -#: libelf/elf_error.c:199 +#: libelf/elf_error.c:198 msgid "section `sh_size' too small for data" msgstr "розділ «sh_size» є замалим для даних" -#: libelf/elf_error.c:203 +#: libelf/elf_error.c:202 msgid "invalid section alignment" msgstr "некоректне вирівнювання розділу" -#: libelf/elf_error.c:207 +#: libelf/elf_error.c:206 msgid "invalid section entry size" msgstr "некоректна розмірність запису розділу" -#: libelf/elf_error.c:211 +#: libelf/elf_error.c:210 msgid "update() for write on read-only file" msgstr "update() для запису придатного лише для читання файла" -#: libelf/elf_error.c:215 +#: libelf/elf_error.c:214 msgid "no such file" msgstr "такого файла не виявлено" -#: libelf/elf_error.c:219 +#: libelf/elf_error.c:218 msgid "only relocatable files can contain section groups" msgstr "містити групи розділів можуть лише придатні до пересування файли" -#: libelf/elf_error.c:224 +#: libelf/elf_error.c:223 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" "заголовок програми можна використовувати лише у виконуваних файлах, об’єктах " "спільного використання та файлах ядра" -#: libelf/elf_error.c:231 +#: libelf/elf_error.c:230 msgid "file has no program header" msgstr "у файлі немає заголовка програми" -#: libelf/elf_error.c:241 +#: libelf/elf_error.c:240 msgid "invalid section type" msgstr "некоректний тип розділу" -#: libelf/elf_error.c:246 +#: libelf/elf_error.c:245 msgid "invalid section flags" msgstr "некоректні прапорці розділу" -#: libelf/elf_error.c:251 +#: libelf/elf_error.c:250 msgid "section does not contain compressed data" msgstr "розділ не містить стиснутих даних" -#: libelf/elf_error.c:256 +#: libelf/elf_error.c:255 msgid "section contains compressed data" msgstr "розділ містить стиснені дані" -#: libelf/elf_error.c:261 +#: libelf/elf_error.c:260 msgid "unknown compression type" msgstr "невідомий тип стиснення" -#: libelf/elf_error.c:266 +#: libelf/elf_error.c:265 msgid "cannot compress data" msgstr "неможливо стиснути дані" -#: libelf/elf_error.c:271 +#: libelf/elf_error.c:270 msgid "cannot decompress data" msgstr "неможливо розпакувати дані" -#: src/addr2line.c:57 +#: src/addr2line.c:58 msgid "Input format options:" msgstr "Параметри форматування вхідних даних:" -#: src/addr2line.c:59 +#: src/addr2line.c:60 msgid "Treat addresses as offsets relative to NAME section." msgstr "Вважати адреси зміщеннями відносно розділу НАЗВА." -#: src/addr2line.c:61 +#: src/addr2line.c:62 msgid "Output format options:" msgstr "Параметри форматування результатів:" -#: src/addr2line.c:62 +#: src/addr2line.c:63 msgid "Print address before each entry" msgstr "Виводити адресу перед кожним записом" -#: src/addr2line.c:63 +#: src/addr2line.c:64 msgid "Show only base names of source files" msgstr "Показувати лише базові назви файлів коду програми" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:66 +#, 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:67 msgid "Also show function names" msgstr "Показувати також назви функцій" -#: src/addr2line.c:67 +#: src/addr2line.c:68 msgid "Also show symbol or section names" msgstr "Показувати також назви символів та розділів" -#: src/addr2line.c:68 +#: src/addr2line.c:69 msgid "Also show symbol and the section names" msgstr "Показувати також назви символів та розділів" -#: src/addr2line.c:69 +#: src/addr2line.c:70 msgid "Also show line table flags" msgstr "Показувати також прапорці рядків таблиці" -#: src/addr2line.c:71 +#: src/addr2line.c:72 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -840,544 +843,547 @@ msgstr "" "Показати усі місця у початковому коді, у яких було виявлено вбудоване " "розгортання підпрограм за вказаною адресою." -#: src/addr2line.c:74 +#: src/addr2line.c:75 msgid "Show demangled symbols (ARG is always ignored)" msgstr "Виводити розшифровані символи (АРГ завжди ігнорується)" -#: src/addr2line.c:76 +#: src/addr2line.c:77 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/strings.c:78 +#: src/addr2line.c:79 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "Показувати абсолютні назви файлів з використанням каталогу збирання" + +#: src/addr2line.c:81 src/elfcmp.c:69 src/findtextrel.c:65 src/nm.c:99 +#: src/strings.c:77 msgid "Miscellaneous:" msgstr "Інше:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:89 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:93 msgid "[ADDR...]" msgstr "[АДРЕСА...]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:526 msgid "Section syntax requires exactly one module" msgstr "Синтаксис розділів вимагає точного одного модуля" -#: src/addr2line.c:542 +#: src/addr2line.c:548 #, c-format msgid "offset %# lies outside section '%s'" msgstr "зміщення %# розташовано поза межами розділу «%s»" -#: src/addr2line.c:652 +#: src/addr2line.c:658 #, c-format msgid "cannot find symbol '%s'" msgstr "не вдалося знайти символ «%s»" -#: src/addr2line.c:657 +#: src/addr2line.c:663 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "зміщення %# розташовано поза межами вмісту «%s»" -#: src/ar.c:67 +#: src/ar.c:66 msgid "Commands:" msgstr "Команди:" -#: src/ar.c:68 +#: src/ar.c:67 msgid "Delete files from archive." msgstr "Вилучити файли з архіву." -#: src/ar.c:69 +#: src/ar.c:68 msgid "Move files in archive." msgstr "Пересунути файли до архіву." -#: src/ar.c:70 +#: src/ar.c:69 msgid "Print files in archive." msgstr "Надрукувати список файлів у архіві." -#: src/ar.c:71 +#: src/ar.c:70 msgid "Quick append files to archive." msgstr "Швидко додати файли до архіву." -#: src/ar.c:73 +#: src/ar.c:72 msgid "Replace existing or insert new file into archive." msgstr "Замінити поточний або вставити новий файл до архіву." -#: src/ar.c:74 +#: src/ar.c:73 msgid "Display content of archive." msgstr "Показати вміст архіву." -#: src/ar.c:75 +#: src/ar.c:74 msgid "Extract files from archive." msgstr "Видобути файли з архіву." -#: src/ar.c:77 +#: src/ar.c:76 msgid "Command Modifiers:" msgstr "Модифікатори команд:" -#: src/ar.c:78 +#: src/ar.c:77 msgid "Preserve original dates." msgstr "Зберігати початкові часові мітки." -#: src/ar.c:79 +#: src/ar.c:78 msgid "Use instance [COUNT] of name." msgstr "Використовувати екземпляр [НОМЕР] назви." -#: src/ar.c:81 +#: src/ar.c:80 msgid "Do not replace existing files with extracted files." msgstr "Не замінювати поточні файли видобутими." -#: src/ar.c:82 +#: src/ar.c:81 msgid "Allow filename to be truncated if necessary." msgstr "Уможливити, за потреби, обрізання назв файлів." -#: src/ar.c:84 +#: src/ar.c:83 msgid "Provide verbose output." msgstr "Докладний вивід даних." -#: src/ar.c:85 +#: src/ar.c:84 msgid "Force regeneration of symbol table." msgstr "Примусове повторне створення таблиці символів." -#: src/ar.c:86 +#: src/ar.c:85 msgid "Insert file after [MEMBER]." msgstr "Вставити файл після [ЕЛЕМЕНТ]." -#: src/ar.c:87 +#: src/ar.c:86 msgid "Insert file before [MEMBER]." msgstr "Вставити файл перед [ЕЛЕМЕНТ]." -#: src/ar.c:88 +#: src/ar.c:87 msgid "Same as -b." msgstr "Те саме, що і -b." -#: src/ar.c:89 +#: src/ar.c:88 msgid "Suppress message when library has to be created." msgstr "Придушити повідомлення, якщо має бути створено бібліотеку." -#: src/ar.c:91 +#: src/ar.c:90 msgid "Use full path for file matching." msgstr "Використовувати для порівняння повний шлях до файла." -#: src/ar.c:92 +#: src/ar.c:91 msgid "Update only older files in archive." msgstr "Оновлювати у архіві лише старіші файли." #. Short description of program. -#: src/ar.c:98 +#: src/ar.c:97 msgid "Create, modify, and extract from archives." msgstr "Створення, зміна архівів і видобування даних з архівів." #. Strings for arguments in help texts. -#: src/ar.c:101 +#: src/ar.c:100 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" msgstr "[ЕЛЕМЕНТ] [НОМЕР] АРХІВ [ФАЙЛ...]" -#: src/ar.c:180 +#: src/ar.c:179 #, c-format msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" msgstr "" "модифікатори «a», «b» і «i» можна використовувати лише разом з параметрами " "«m» і «r»" -#: src/ar.c:185 +#: src/ar.c:184 #, c-format msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" msgstr "" "Для модифікаторів «a», «b» та «i» слід використовувати параметр ЕЛЕМЕНТ" -#: src/ar.c:201 +#: src/ar.c:200 #, c-format msgid "'N' is only meaningful with the 'x' and 'd' options" msgstr "«N» має значення лише разом з параметрами «x» і «d»" -#: src/ar.c:206 +#: src/ar.c:205 #, c-format msgid "COUNT parameter required" msgstr "потрібен параметр НОМЕР" -#: src/ar.c:218 +#: src/ar.c:217 #, c-format msgid "invalid COUNT parameter %s" msgstr "некоректний параметр НОМЕР %s" -#: src/ar.c:225 +#: src/ar.c:224 #, c-format msgid "'%c' is only meaningful with the 'x' option" msgstr "«%c» має сенс лише у разі використання параметра «x»" -#: src/ar.c:231 +#: src/ar.c:230 #, c-format msgid "archive name required" msgstr "слід вказати назву архіву" -#: src/ar.c:244 +#: src/ar.c:243 #, c-format msgid "command option required" msgstr "має бути вказано параметр команди" -#: src/ar.c:295 +#: src/ar.c:294 #, c-format msgid "More than one operation specified" msgstr "Вказано більше за одну дію" -#: src/ar.c:389 +#: src/ar.c:388 #, c-format msgid "cannot open archive '%s'" msgstr "не вдалося відкрити архів «%s»" -#: src/ar.c:399 +#: src/ar.c:398 #, c-format msgid "cannot open archive '%s': %s" msgstr "не вдалося відкрити архів «%s»: %s" -#: src/ar.c:403 +#: src/ar.c:402 #, c-format msgid "%s: not an archive file" msgstr "%s: не є файлом архіву" -#: src/ar.c:407 +#: src/ar.c:406 #, c-format msgid "cannot stat archive '%s'" msgstr "не вдалося отримати дані архіву «%s» за допомогою stat" -#: src/ar.c:419 +#: src/ar.c:418 #, 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:471 src/ar.c:925 src/ar.c:1131 msgid "cannot create hash table" msgstr "не вдалося створити таблицю хешів" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:477 src/ar.c:931 src/ar.c:1139 msgid "cannot insert into hash table" msgstr "не вдалося вставити запис до таблиці хешів" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:485 src/ranlib.c:147 #, c-format msgid "cannot stat '%s'" msgstr "не вдалося отримати дані з «%s» за допомогою stat" -#: src/ar.c:589 +#: src/ar.c:587 #, c-format msgid "cannot read content of %s: %s" msgstr "не вдалося прочитати вміст з %s: %s" -#: src/ar.c:632 +#: src/ar.c:630 #, c-format msgid "cannot open %.*s" msgstr "не вдалося відкрити %.*s" -#: src/ar.c:654 +#: src/ar.c:652 #, c-format msgid "failed to write %s" msgstr "не вдалося записати %s" -#: src/ar.c:666 +#: src/ar.c:664 #, c-format msgid "cannot change mode of %s" msgstr "не вдалося змінити права доступу до %s" -#: src/ar.c:682 +#: src/ar.c:680 #, c-format msgid "cannot change modification time of %s" msgstr "не вдалося змінити часову мітку зміни %s" -#: src/ar.c:728 +#: src/ar.c:726 #, 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:762 src/ar.c:1016 src/ar.c:1419 src/ranlib.c:221 #, c-format msgid "cannot create new file" msgstr "не вдалося створити файл" -#: src/ar.c:1225 +#: src/ar.c:1221 #, c-format msgid "position member %s not found" msgstr "не виявлено елемента позиції %s" -#: src/ar.c:1235 +#: src/ar.c:1231 #, 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:1260 src/objdump.c:240 #, c-format msgid "cannot open %s" msgstr "не вдалося відкрити %s" -#: src/ar.c:1269 +#: src/ar.c:1265 #, c-format msgid "cannot stat %s" msgstr "не вдалося отримати дані %s за допомогою stat" -#: src/ar.c:1275 +#: src/ar.c:1271 #, c-format msgid "%s is no regular file" msgstr "%s не є звичайним файлом" -#: src/ar.c:1288 +#: src/ar.c:1284 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "не вдалося отримати дескриптор ELF для %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1304 #, c-format msgid "cannot read %s: %s" msgstr "не вдалося прочитати %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1479 #, c-format msgid "cannot represent ar_date" msgstr "неможливо представити ar_date" -#: src/ar.c:1489 +#: src/ar.c:1485 #, c-format msgid "cannot represent ar_uid" msgstr "неможливо представити ar_uid" -#: src/ar.c:1495 +#: src/ar.c:1491 #, c-format msgid "cannot represent ar_gid" msgstr "неможливо представити ar_gid" -#: src/ar.c:1501 +#: src/ar.c:1497 #, c-format msgid "cannot represent ar_mode" msgstr "неможливо представити ar_mode" -#: src/ar.c:1507 +#: src/ar.c:1503 #, c-format msgid "cannot represent ar_size" msgstr "неможливо представити ar_size" -#: src/arlib-argp.c:32 +#: src/arlib-argp.c:31 msgid "Use zero for uid, gid, and date in archive members." msgstr "" "Використовувати нульове значення для uid, gid, та дати у елементах архіву." -#: src/arlib-argp.c:34 +#: src/arlib-argp.c:33 msgid "Use actual uid, gid, and date in archive members." msgstr "" "Використовувати поточні значення для uid, gid, та дати у елементах архіву." -#: src/arlib-argp.c:63 +#: src/arlib-argp.c:62 #, c-format msgid "%s (default)" msgstr "%s (типово)" #. The archive is too big. -#: src/arlib.c:213 +#: src/arlib.c:212 #, c-format msgid "the archive '%s' is too large" msgstr "розмір архіву «%s» є занадто великим" -#: src/arlib.c:226 +#: src/arlib.c:225 #, c-format 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/readelf.c:158 +#: src/elfclassify.c:979 src/elfcompress.c:1358 src/elflint.c:76 +#: src/readelf.c:160 msgid "FILE..." msgstr "ФАЙЛ..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1416,15 +1422,15 @@ msgid "" "change the exit status." msgstr "" -#: src/elfcmp.c:60 +#: src/elfcmp.c:59 msgid "Control options:" msgstr "Параметри керування:" -#: src/elfcmp.c:62 +#: src/elfcmp.c:61 msgid "Output all differences, not just the first" msgstr "Показати всі відмінності, не лише першу з них" -#: src/elfcmp.c:63 +#: src/elfcmp.c:62 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" @@ -1432,216 +1438,216 @@ msgstr "" "Керування обробкою проміжків у придатних до завантаження сегментах [ignore|" "match] (типово, ignore)" -#: src/elfcmp.c:65 +#: src/elfcmp.c:64 msgid "Ignore permutation of buckets in SHT_HASH section" msgstr "Ігнорувати переставляння блоків у розділі SHT_HASH" -#: src/elfcmp.c:67 +#: src/elfcmp.c:66 msgid "Ignore differences in build ID" msgstr "Ігнорувати відмінності у ідентифікаторі збирання" -#: src/elfcmp.c:68 +#: src/elfcmp.c:67 msgid "Output nothing; yield exit status only" msgstr "Нічого не виводити; визначити лише стан виходу" #. Short description of program. -#: src/elfcmp.c:75 +#: src/elfcmp.c:74 msgid "Compare relevant parts of two ELF files for equality." msgstr "Порівнює відповідні частини двох файлів ELF." #. Strings for arguments in help texts. -#: src/elfcmp.c:79 +#: src/elfcmp.c:78 msgid "FILE1 FILE2" msgstr "ФАЙЛ1 ФАЙЛ2" -#: src/elfcmp.c:141 +#: src/elfcmp.c:140 msgid "Invalid number of parameters.\n" msgstr "Некоректна кількість параметрів.\n" -#: src/elfcmp.c:172 src/elfcmp.c:177 +#: src/elfcmp.c:171 src/elfcmp.c:176 #, c-format msgid "cannot get ELF header of '%s': %s" msgstr "не вдалося отримати заголовок ELF «%s»: %s" -#: src/elfcmp.c:203 +#: src/elfcmp.c:202 #, c-format msgid "%s %s diff: ELF header" msgstr "%s %s diff: заголовок ELF" -#: src/elfcmp.c:210 src/elfcmp.c:213 +#: src/elfcmp.c:209 src/elfcmp.c:212 #, c-format msgid "cannot get section count of '%s': %s" msgstr "не вдалося отримати даних щодо кількості розділів «%s»: %s" -#: src/elfcmp.c:218 +#: src/elfcmp.c:217 #, c-format msgid "%s %s diff: section count" msgstr "%s %s diff: кількість розділів" -#: src/elfcmp.c:225 src/elfcmp.c:228 +#: src/elfcmp.c:224 src/elfcmp.c:227 #, c-format msgid "cannot get program header count of '%s': %s" msgstr "" "не вдалося отримати даних щодо кількості заголовків програми у «%s»: %s" -#: src/elfcmp.c:233 +#: src/elfcmp.c:232 #, c-format msgid "%s %s diff: program header count" msgstr "%s %s diff: кількість заголовків програми" -#: src/elfcmp.c:241 src/elfcmp.c:244 +#: src/elfcmp.c:240 src/elfcmp.c:243 #, c-format msgid "cannot get hdrstrndx of '%s': %s" msgstr "не вдалося отримати hdrstrndx «%s»: %s" -#: src/elfcmp.c:249 +#: src/elfcmp.c:248 #, c-format msgid "%s %s diff: shdr string index" msgstr "різниця між %s і %s: індекс рядків shdr" -#: src/elfcmp.c:307 +#: src/elfcmp.c:306 #, c-format msgid "%s %s differ: section [%zu], [%zu] name" msgstr "%s %s diff: розділ [%zu], назва [%zu]" -#: src/elfcmp.c:330 +#: src/elfcmp.c:329 #, c-format msgid "%s %s differ: section [%zu] '%s' header" msgstr "%s %s diff: розділ [%zu] заголовок «%s»" -#: src/elfcmp.c:338 src/elfcmp.c:344 +#: src/elfcmp.c:337 src/elfcmp.c:343 #, c-format msgid "cannot get content of section %zu in '%s': %s" msgstr "не вдалося отримати вміст розділу %zu у «%s»: %s" -#: src/elfcmp.c:353 +#: src/elfcmp.c:352 #, c-format msgid "symbol table [%zu] in '%s' has zero sh_entsize" msgstr "таблиця символів [%zu] у «%s» містить нульове значення sh_entsize" -#: src/elfcmp.c:365 src/elfcmp.c:371 +#: src/elfcmp.c:364 src/elfcmp.c:370 #, c-format msgid "cannot get symbol in '%s': %s" msgstr "не вдалося отримати символ у «%s»: %s" -#: src/elfcmp.c:393 +#: src/elfcmp.c:392 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "%s %s diff: таблиця символів [%zu]" -#: src/elfcmp.c:396 +#: src/elfcmp.c:395 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "%s %s diff: таблиця символів [%zu,%zu]" -#: src/elfcmp.c:443 src/elfcmp.c:513 +#: src/elfcmp.c:442 src/elfcmp.c:512 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "%s %s diff: розділ [%zu] кількість нотаток «%s»" -#: src/elfcmp.c:451 +#: src/elfcmp.c:450 #, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "не вдалося прочитати розділ нотаток [%zu] «%s» у «%s»: %s" -#: src/elfcmp.c:462 +#: src/elfcmp.c:461 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "%s %s diff: розділ [%zu] назва нотатки «%s»" -#: src/elfcmp.c:470 +#: src/elfcmp.c:469 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "%s %s diff: розділ [%zu] нотатка «%s» тип «%s»" -#: src/elfcmp.c:485 +#: src/elfcmp.c:484 #, c-format msgid "%s %s differ: build ID length" msgstr "%s %s diff: довжина ідентифікатора збирання" -#: src/elfcmp.c:493 +#: src/elfcmp.c:492 #, c-format msgid "%s %s differ: build ID content" msgstr "%s %s diff: вміст ідентифікатора збирання" -#: src/elfcmp.c:502 +#: src/elfcmp.c:501 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "%s %s diff: розділ [%zu] нотатка «%s» вміст «%s»" -#: src/elfcmp.c:543 +#: src/elfcmp.c:542 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "%s %s diff: розділ [%zu] «%s», вміст" -#: src/elfcmp.c:547 +#: src/elfcmp.c:546 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "%s %s diff: розділ [%zu,%zu] «%s», вміст" -#: src/elfcmp.c:562 +#: src/elfcmp.c:561 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "%s %s diff: невідповідність об’ємів важливих розділів" -#: src/elfcmp.c:595 src/elfcmp.c:600 +#: src/elfcmp.c:594 src/elfcmp.c:599 #, c-format msgid "cannot load data of '%s': %s" msgstr "не вдалося завантажити дані «%s»: %s" -#: src/elfcmp.c:619 src/elfcmp.c:625 +#: src/elfcmp.c:618 src/elfcmp.c:624 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "не вдалося отримати запис заголовка програми %d «%s»: %s" -#: src/elfcmp.c:631 +#: src/elfcmp.c:630 #, c-format msgid "%s %s differ: program header %d" msgstr "%s %s diff: заголовок програми %d" -#: src/elfcmp.c:655 +#: src/elfcmp.c:654 #, c-format msgid "%s %s differ: gap" msgstr "%s %s diff: проміжок" -#: src/elfcmp.c:706 +#: src/elfcmp.c:705 #, c-format 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/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:733 src/findtextrel.c:194 src/nm.c:363 src/ranlib.c:140 +#: src/size.c:271 src/strings.c:184 src/strip.c:1040 src/strip.c:1077 +#: src/unstrip.c:2194 src/unstrip.c:2223 #, c-format msgid "cannot open '%s'" msgstr "не вдалося відкрити «%s»" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:737 src/findtextrel.c:213 src/ranlib.c:157 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "не вдалося створити дескриптор ELF для «%s»: %s" -#: src/elfcmp.c:743 +#: src/elfcmp.c:742 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "не вдалося створити дескриптор EBL для «%s»" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:760 src/findtextrel.c:384 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "не вдалося отримати заголовок розділу %zu: %s" -#: src/elfcmp.c:771 +#: src/elfcmp.c:770 #, c-format msgid "cannot get content of section %zu: %s" msgstr "не вдалося отримати вміст розділу %zu: %s" -#: src/elfcmp.c:781 src/elfcmp.c:795 +#: src/elfcmp.c:780 src/elfcmp.c:794 #, c-format 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:305 src/unstrip.c:116 #, c-format msgid "-o option specified twice" msgstr "параметр -o вказано двічі" @@ -1657,21 +1663,21 @@ msgid "unknown compression type '%s'" msgstr "невідомий тип стиснення «%s»" #. We need at least one input file. -#: src/elfcompress.c:145 src/elfcompress.c:1345 +#: src/elfcompress.c:145 src/elfcompress.c:1369 #, c-format msgid "No input file given" msgstr "Не надано файла вхідних даних" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1373 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "З параметром «-o» можна використовувати лише один файл вхідних даних" -#: src/elfcompress.c:1307 +#: src/elfcompress.c:1331 msgid "Place (de)compressed output into FILE" msgstr "Помістити результати розпакування або стискання до ФАЙЛа" -#: src/elfcompress.c:1310 +#: src/elfcompress.c:1334 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" @@ -1682,7 +1688,7 @@ msgstr "" "назва — «zlib-gabi») або «zlib-gnu» (стискання у стилі GNU .zdebug, інша " "назва — «gnu»)" -#: src/elfcompress.c:1313 +#: src/elfcompress.c:1337 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" @@ -1690,12 +1696,12 @@ msgstr "" "назва РОЗДІЛу для розпакування або стискання, РОЗДІЛ є розширеним взірцем із " "замінниками (типове значення -- «.?(z)debug*»)" -#: src/elfcompress.c:1316 +#: src/elfcompress.c:1340 msgid "Print a message for each section being (de)compressed" msgstr "" "Вивести повідомлення для кожного розділу, який розпаковується чи стискається" -#: src/elfcompress.c:1319 +#: src/elfcompress.c:1343 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" @@ -1703,32 +1709,32 @@ msgstr "" "Примусове стискання розділу, навіть якщо він стане більшим, або оновлення чи " "перезапис файла, навіть якщо жодного розділу не буде розпаковано або стиснено" -#: src/elfcompress.c:1322 src/strip.c:93 +#: src/elfcompress.c:1346 src/strip.c:92 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "" "Знехтувати декількома правилами для обробки трохи пошкоджених файлів ELF" -#: src/elfcompress.c:1325 +#: src/elfcompress.c:1349 msgid "Be silent when a section cannot be compressed" msgstr "Не сповіщати, якщо розділ неможливо стиснути" -#: src/elfcompress.c:1335 +#: src/elfcompress.c:1359 msgid "Compress or decompress sections in an ELF file." msgstr "Стиснути або розпакувати розділи у файлі ELF." -#: src/elflint.c:63 +#: src/elflint.c:62 msgid "Be extremely strict, flag level 2 features." msgstr "Висока строгість, увімкнути можливості рівня 2." -#: src/elflint.c:64 +#: src/elflint.c:63 msgid "Do not print anything if successful" msgstr "Не виводити ніяких даних у разі успіху" -#: src/elflint.c:65 +#: src/elflint.c:64 msgid "Binary is a separate debuginfo file" msgstr "Бінарний файл є окремим файлом debuginfo" -#: src/elflint.c:67 +#: src/elflint.c:66 msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" @@ -1737,173 +1743,173 @@ msgstr "" "певної міри неправильним" #. Short description of program. -#: src/elflint.c:73 +#: src/elflint.c:72 msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" "Педантична перевірка файлів ELF на сумісність зі специфікаціями gABI/psABI." -#: src/elflint.c:154 src/readelf.c:368 +#: src/elflint.c:153 src/readelf.c:391 #, c-format msgid "cannot open input file '%s'" msgstr "не вдалося відкрити вхідний файл «%s»" -#: src/elflint.c:161 +#: src/elflint.c:160 #, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" msgstr "не вдалося створити дескриптор Elf для «%s»: %s\n" -#: src/elflint.c:180 +#: src/elflint.c:179 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "помилка під час спроби закриття дескриптора Elf: %s\n" -#: src/elflint.c:184 +#: src/elflint.c:183 msgid "No errors" msgstr "Без помилок" -#: src/elflint.c:219 src/readelf.c:577 +#: src/elflint.c:218 src/readelf.c:603 msgid "Missing file name.\n" msgstr "Не вказано назви файла.\n" -#: src/elflint.c:284 +#: src/elflint.c:283 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " помилка під час спроби вивільнення дескриптора суб-ELF: %s\n" #. We cannot do anything. -#: src/elflint.c:292 +#: src/elflint.c:291 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Не є файлом ELF. Виявлено помилкові магічні байти на початку файла\n" -#: src/elflint.c:357 +#: src/elflint.c:356 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d не є відомим класом\n" -#: src/elflint.c:362 +#: src/elflint.c:361 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d не є відомим кодуванням даних\n" -#: src/elflint.c:366 +#: src/elflint.c:365 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "невідомий номер версії заголовка ELF e_ident[%d] == %d\n" -#: src/elflint.c:374 +#: src/elflint.c:373 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "непідтримуване ABI ОС e_ident[%d] == «%s»\n" -#: src/elflint.c:380 +#: src/elflint.c:379 #, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "непідтримувана версія ABI e_ident[%d] == %d\n" -#: src/elflint.c:385 +#: src/elflint.c:384 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] не дорівнює нулеві\n" -#: src/elflint.c:390 +#: src/elflint.c:389 #, c-format msgid "unknown object file type %d\n" msgstr "невідомий тип об’єктних файлів %d\n" -#: src/elflint.c:397 +#: src/elflint.c:396 #, c-format msgid "unknown machine type %d\n" msgstr "невідомий тип архітектури %d\n" -#: src/elflint.c:401 +#: src/elflint.c:400 #, c-format msgid "unknown object file version\n" msgstr "невідома версія об’єктних файлів\n" -#: src/elflint.c:407 +#: src/elflint.c:406 #, c-format msgid "invalid program header offset\n" msgstr "некоректне зміщення заголовка програми\n" -#: src/elflint.c:409 +#: src/elflint.c:408 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "виконувані файли і DSO не можуть містити заголовка програми з нульовим " "зміщенням\n" -#: src/elflint.c:413 +#: src/elflint.c:412 #, c-format msgid "invalid number of program header entries\n" msgstr "некоректна кількість записів заголовків програми\n" -#: src/elflint.c:421 +#: src/elflint.c:420 #, c-format msgid "invalid section header table offset\n" msgstr "некоректне зміщення таблиці заголовків розділів\n" -#: src/elflint.c:424 +#: src/elflint.c:423 #, c-format msgid "section header table must be present\n" msgstr "має бути вказано таблицю заголовків розділів\n" -#: src/elflint.c:438 +#: src/elflint.c:437 #, c-format msgid "invalid number of section header table entries\n" msgstr "некоректна кількість записів таблиці заголовків розділів\n" -#: src/elflint.c:455 +#: src/elflint.c:454 #, c-format msgid "invalid section header index\n" msgstr "некоректний індекс заголовка розділу\n" -#: src/elflint.c:473 +#: src/elflint.c:472 #, c-format msgid "Can only check %u headers, shnum was %u\n" msgstr "Можна перевірити лише %u заголовків, значенням же shnum було %u\n" -#: src/elflint.c:487 +#: src/elflint.c:486 #, c-format msgid "invalid number of program header table entries\n" msgstr "некоректна кількість записів таблиці заголовків програми\n" -#: src/elflint.c:504 +#: src/elflint.c:503 #, c-format msgid "Can only check %u headers, phnum was %u\n" msgstr "Можна перевірити лише %u заголовків, значенням же phnum було %u\n" -#: src/elflint.c:509 +#: src/elflint.c:508 #, c-format msgid "invalid machine flags: %s\n" msgstr "некоректні прапорці архітектури: %s\n" -#: src/elflint.c:516 src/elflint.c:533 +#: src/elflint.c:515 src/elflint.c:532 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "некоректний розмір заголовка ELF: %hd\n" -#: src/elflint.c:519 src/elflint.c:536 +#: src/elflint.c:518 src/elflint.c:535 #, c-format msgid "invalid program header size: %hd\n" msgstr "некоректний розмір заголовка програми: %hd\n" -#: src/elflint.c:522 src/elflint.c:539 +#: src/elflint.c:521 src/elflint.c:538 #, c-format msgid "invalid program header position or size\n" msgstr "некоректне розташування або розмір заголовка програми\n" -#: src/elflint.c:525 src/elflint.c:542 +#: src/elflint.c:524 src/elflint.c:541 #, c-format msgid "invalid section header size: %hd\n" msgstr "некоректний розмір заголовка розділу: %hd\n" -#: src/elflint.c:528 src/elflint.c:545 +#: src/elflint.c:527 src/elflint.c:544 #, c-format msgid "invalid section header position or size\n" msgstr "некоректне розташування або розмір заголовка розділу\n" -#: src/elflint.c:590 +#: src/elflint.c:589 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1912,7 +1918,7 @@ msgstr "" "розділ [%2d] «%s»: розділ з встановленим прапорцем SHF_GROUP не є частиною " "групи розділів\n" -#: src/elflint.c:594 +#: src/elflint.c:593 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1920,14 +1926,14 @@ msgstr "" "розділ [%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:609 src/elflint.c:1497 src/elflint.c:1548 src/elflint.c:1654 +#: src/elflint.c:1990 src/elflint.c:2316 src/elflint.c:2942 src/elflint.c:3105 +#: src/elflint.c:3253 src/elflint.c:3455 src/elflint.c:4464 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані розділу\n" -#: src/elflint.c:623 src/elflint.c:1662 +#: src/elflint.c:622 src/elflint.c:1661 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1936,7 +1942,7 @@ msgstr "" "розділ [%2d] «%s»: надано посилання на таблицю рядків розділу [%2d] «%s», " "але типом даних не є SHT_STRTAB\n" -#: src/elflint.c:646 +#: src/elflint.c:645 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1945,12 +1951,12 @@ msgstr "" "розділ [%2d] «%s»: у таблиці символів не може бути більше одного розширеного " "розділу покажчика\n" -#: src/elflint.c:658 +#: src/elflint.c:657 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "розділ [%2u] «%s»: розмірність запису не відповідає ElfXX_Sym\n" -#: src/elflint.c:662 +#: src/elflint.c:661 #, c-format msgid "" "section [%2u] '%s': number of local entries in 'st_info' larger than table " @@ -1959,33 +1965,33 @@ msgstr "" "розділ [%2u] «%s»: кількість локальних записів у «st_info» перевищує розмір " "таблиці\n" -#: src/elflint.c:671 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ %d: %s\n" -#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685 -#: src/elflint.c:688 src/elflint.c:691 +#: src/elflint.c:675 src/elflint.c:678 src/elflint.c:681 src/elflint.c:684 +#: src/elflint.c:687 src/elflint.c:690 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "розділ [%2d] «%s»: «%s» у нульовому записі не є нулем\n" -#: src/elflint.c:694 +#: src/elflint.c:693 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "розділ [%2d] «%s»: XINDEX для нульового запису не є нулем\n" -#: src/elflint.c:704 +#: src/elflint.c:703 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ %zu: %s\n" -#: src/elflint.c:713 +#: src/elflint.c:712 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "розділ [%2d] «%s»: символ %zu: некоректне значення назви\n" -#: src/elflint.c:728 +#: src/elflint.c:727 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): too large section index but no extended " @@ -1994,7 +2000,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: занадто великий покажчик розділу за умови, що " "не визначено розділу розширеного покажчика розділів\n" -#: src/elflint.c:734 +#: src/elflint.c:733 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): XINDEX used for index which would fit " @@ -2004,29 +2010,29 @@ msgstr "" "відповідає st_shndx (%)\n" #. || sym->st_shndx > SHN_HIRESERVE always false -#: src/elflint.c:746 +#: src/elflint.c:745 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): invalid section index\n" msgstr "розділ [%2d] «%s»: символ %zu: некоректний індекс розділу\n" -#: src/elflint.c:754 +#: src/elflint.c:753 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown type\n" msgstr "розділ [%2d] «%s»: символ %zu: невідомий тип\n" -#: src/elflint.c:760 +#: src/elflint.c:759 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown symbol binding\n" msgstr "розділ [%2d] «%s»: символ %zu: невідома прив’язка символу\n" -#: src/elflint.c:765 +#: src/elflint.c:764 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unique symbol not of object type\n" msgstr "" "розділ [%2d] «%s»: символ %zu: унікальний символ, що не належить до типу " "об’єктів\n" -#: src/elflint.c:773 +#: src/elflint.c:772 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): COMMON only allowed in relocatable " @@ -2035,7 +2041,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: COMMON можна використовувати лише у файлах, " "придатних до пересування\n" -#: src/elflint.c:777 +#: src/elflint.c:776 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local COMMON symbols are nonsense\n" @@ -2043,7 +2049,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: використання локальних символів COMMON " "позбавлене сенсу\n" -#: src/elflint.c:781 +#: src/elflint.c:780 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): function in COMMON section is nonsense\n" @@ -2051,13 +2057,13 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: використання функції у розділі COMMON " "позбавлене сенсу\n" -#: src/elflint.c:832 +#: src/elflint.c:831 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): st_value out of bounds\n" msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value поза можливим діапазоном\n" -#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912 +#: src/elflint.c:837 src/elflint.c:862 src/elflint.c:911 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s) does not fit completely in referenced " @@ -2066,7 +2072,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu не повністю відповідає розділу, на який " "посилається, [%2d] «%s»\n" -#: src/elflint.c:847 +#: src/elflint.c:846 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): referenced section [%2d] '%s' does not " @@ -2075,7 +2081,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: для розділу посилання [%2d] «%s» не " "встановлено прапорець SHF_TLS\n" -#: src/elflint.c:857 src/elflint.c:905 +#: src/elflint.c:856 src/elflint.c:904 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value out of bounds of referenced " @@ -2084,7 +2090,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value поза межами розділу " "посилання, [%2d] «%s»\n" -#: src/elflint.c:884 +#: src/elflint.c:883 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but no TLS program header " @@ -2092,7 +2098,7 @@ msgid "" msgstr "" "розділ [%2d] «%s»: символ %zu: символ TLS без запису заголовка програми TLS\n" -#: src/elflint.c:890 +#: src/elflint.c:889 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but couldn't get TLS program " @@ -2101,7 +2107,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: маємо символ TLS, але не вдалося отримати " "запис заголовка програми TLS\n" -#: src/elflint.c:898 +#: src/elflint.c:897 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value short of referenced section " @@ -2110,7 +2116,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value перед розділом посилання, " "[%2d] «%s»\n" -#: src/elflint.c:925 +#: src/elflint.c:924 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local symbol outside range described in " @@ -2119,7 +2125,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: у sh_info описано локальний символ поза " "діапазоном\n" -#: src/elflint.c:932 +#: src/elflint.c:931 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): non-local symbol outside range " @@ -2128,12 +2134,12 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: у sh_info описано нелокальний символ поза " "діапазоном\n" -#: src/elflint.c:939 +#: src/elflint.c:938 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): non-local section symbol\n" msgstr "розділ [%2d] «%s»: символ %zu: нелокальний символ розділу\n" -#: src/elflint.c:989 +#: src/elflint.c:988 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -2142,7 +2148,7 @@ msgstr "" "розділ [%2d] «%s»: символ _GLOBAL_OFFSET_TABLE_ посилається на помилковий " "розділ, [%2d]\n" -#: src/elflint.c:996 +#: src/elflint.c:995 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -2154,7 +2160,7 @@ msgstr "" #. This test is more strict than the psABIs which #. usually allow the symbol to be in the middle of #. the .got section, allowing negative offsets. -#: src/elflint.c:1012 +#: src/elflint.c:1011 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -2163,7 +2169,7 @@ msgstr "" "розділ [%2d] «%s»: значення символу _GLOBAL_OFFSET_TABLE_ %# не " "відповідає адресі розділу %s %#\n" -#: src/elflint.c:1019 +#: src/elflint.c:1018 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -2172,7 +2178,7 @@ msgstr "" "розділ [%2d] «%s»: розмір символу _GLOBAL_OFFSET_TABLE_ % не " "відповідає розміру розділу %s %\n" -#: src/elflint.c:1027 +#: src/elflint.c:1026 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -2181,7 +2187,7 @@ msgstr "" "розділ [%2d] «%s»: виявлено символ _GLOBAL_OFFSET_TABLE_, але не виявлено " "розділу .got\n" -#: src/elflint.c:1043 +#: src/elflint.c:1042 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -2190,7 +2196,7 @@ msgstr "" "розділ [%2d] «%s»: значення символу _DYNAMIC_ %# не відповідає " "адресі динамічного сегмента %#\n" -#: src/elflint.c:1050 +#: src/elflint.c:1049 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -2199,7 +2205,7 @@ msgstr "" "розділ [%2d] «%s»: розмір символу _DYNAMIC % не відповідає розміру " "динамічного сегмента %\n" -#: src/elflint.c:1063 +#: src/elflint.c:1062 #, fuzzy, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): symbol in dynamic symbol table with non-" @@ -2208,29 +2214,29 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: символ у динамічній таблиці символів з " "нетиповою видимістю\n" -#: src/elflint.c:1067 +#: src/elflint.c:1066 #, fuzzy, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown bit set in st_other\n" msgstr "розділ [%2d] «%s»: символ %zu: невідомий набір бітів у st_other\n" -#: src/elflint.c:1105 +#: src/elflint.c:1104 #, c-format msgid "section [%2d] '%s': cannot get section data.\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані розділу.\n" -#: src/elflint.c:1121 +#: src/elflint.c:1120 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "розділ [%2d] «%s»: для цього розділу RELA використано DT_RELCOUNT\n" -#: src/elflint.c:1132 src/elflint.c:1185 +#: src/elflint.c:1131 src/elflint.c:1184 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" "розділ [%2d] «%s»: значення DT_RELCOUNT %d є занадто високим для цього " "розділу\n" -#: src/elflint.c:1157 src/elflint.c:1210 +#: src/elflint.c:1156 src/elflint.c:1209 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -2239,7 +2245,7 @@ msgstr "" "розділ [%2d] «%s»: відносні пересування після позиції %d, вказаної за " "допомогою DT_RELCOUNT\n" -#: src/elflint.c:1163 src/elflint.c:1216 +#: src/elflint.c:1162 src/elflint.c:1215 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -2248,27 +2254,27 @@ msgstr "" "розділ [%2d] «%s»: безвідносне пересування на позиції %zu; DT_RELCOUNT " "визначено %d відносних пересування\n" -#: src/elflint.c:1175 +#: src/elflint.c:1174 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "розділ [%2d] «%s»: для цього розділу REL використано DT_RELACOUNT\n" -#: src/elflint.c:1258 +#: src/elflint.c:1257 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "розділ [%2d] «%s»: некоректний індекс розділу призначення\n" -#: src/elflint.c:1270 +#: src/elflint.c:1269 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "розділ [%2d] «%s»: некоректний тип розділу призначення\n" -#: src/elflint.c:1278 +#: src/elflint.c:1277 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "розділ [%2d] «%s»: sh_info має бути нульовим\n" -#: src/elflint.c:1286 +#: src/elflint.c:1285 #, c-format msgid "" "section [%2d] '%s': no relocations for merge-able string sections possible\n" @@ -2276,25 +2282,25 @@ msgstr "" "розділ [%2d] «%s»: неможливі пересування для розділів рядків, які непридатні " "до об'єднання\n" -#: src/elflint.c:1294 +#: src/elflint.c:1293 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "розділ [%2d] «%s»: розмірність запису розділу не відповідає ElfXX_Rela\n" -#: src/elflint.c:1354 +#: src/elflint.c:1353 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "встановлено прапорець пересування тексту, але сегмент придатний лише до " "читання\n" -#: src/elflint.c:1381 +#: src/elflint.c:1380 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "розділ [%2d] «%s»: пересування %zu: некоректний тип\n" -#: src/elflint.c:1389 +#: src/elflint.c:1388 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -2303,12 +2309,12 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: некоректний тип пересування для типу " "файла\n" -#: src/elflint.c:1397 +#: src/elflint.c:1396 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "розділ [%2d] «%s»: пересування %zu: некоректний індекс символу\n" -#: src/elflint.c:1415 +#: src/elflint.c:1414 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -2317,12 +2323,12 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: з %s можна використовувати лише символ " "«_GLOBAL_OFFSET_TABLE_»\n" -#: src/elflint.c:1432 +#: src/elflint.c:1431 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "розділ [%2d] «%s»: пересування %zu: зміщення за межі діапазону\n" -#: src/elflint.c:1447 +#: src/elflint.c:1446 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -2331,7 +2337,7 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: пересування копіювання для символу типу " "%s\n" -#: src/elflint.c:1468 +#: src/elflint.c:1467 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -2340,22 +2346,22 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: змінено придатний лише для читання " "розділ, але не встановлено прапорець пересування тексту\n" -#: src/elflint.c:1483 +#: src/elflint.c:1482 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "розділ [%2d] «%s»: пересування завантажених і незавантажених даних\n" -#: src/elflint.c:1523 src/elflint.c:1574 +#: src/elflint.c:1522 src/elflint.c:1573 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати зміщення %zu: %s\n" -#: src/elflint.c:1650 +#: src/elflint.c:1649 #, c-format msgid "more than one dynamic section present\n" msgstr "вказано більше одного динамічного розділу\n" -#: src/elflint.c:1668 +#: src/elflint.c:1667 #, c-format msgid "" "section [%2d]: referenced as string table for section [%2d] '%s' but section " @@ -2364,46 +2370,46 @@ msgstr "" "розділ [%2d]: надано посилання на таблицю рядків розділу [%2d] «%s», але " "значення посилання на розділ є некоректним\n" -#: src/elflint.c:1676 +#: src/elflint.c:1675 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" "розділ [%2d] «%s»: розмірність запису розділу не відповідає ElfXX_Dyn\n" -#: src/elflint.c:1681 src/elflint.c:1970 +#: src/elflint.c:1680 src/elflint.c:1969 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "розділ [%2d] «%s»: sh_info не є нульовим\n" -#: src/elflint.c:1691 +#: src/elflint.c:1690 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" "розділ [%2d] «%s»: не вдалося отримати запис динамічного розділу %zu: %s\n" -#: src/elflint.c:1699 +#: src/elflint.c:1698 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" "розділ [%2d] «%s»: за записом DT_NULL вказано записи, що не належать до " "DT_NULL\n" -#: src/elflint.c:1706 +#: src/elflint.c:1705 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "розділ [%2d] «%s»: запис %zu: невідома мітка\n" -#: src/elflint.c:1717 +#: src/elflint.c:1716 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "розділ [%2d] «%s»: запис %zu: декілька записів з міткою %s\n" -#: src/elflint.c:1727 +#: src/elflint.c:1726 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "розділ [%2d] «%s»: запис %zu: використано мітку рівня 2 %s\n" -#: src/elflint.c:1745 +#: src/elflint.c:1744 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -2411,7 +2417,7 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значенням DT_PLTREL має бути DT_REL або " "DT_RELA\n" -#: src/elflint.c:1758 +#: src/elflint.c:1757 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -2420,7 +2426,7 @@ msgstr "" "розділ [%2d] «%s»: розділ %zu: вказівник не відповідає адресі розділу [%2d] " "«%s», на яку посилається sh_link\n" -#: src/elflint.c:1801 +#: src/elflint.c:1800 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" @@ -2428,7 +2434,7 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значення %s має вказувати на завантажений " "сегмент\n" -#: src/elflint.c:1816 +#: src/elflint.c:1815 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -2437,48 +2443,48 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значенням %s має бути коректне зміщення у " "розділі [%2d] «%s»\n" -#: src/elflint.c:1836 src/elflint.c:1864 +#: src/elflint.c:1835 src/elflint.c:1863 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "розділ [%2d] «%s»: містить запис %s, але не %s\n" -#: src/elflint.c:1848 +#: src/elflint.c:1847 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "розділ [%2d] «%s»: немає обов’язкової мітки %s\n" -#: src/elflint.c:1857 +#: src/elflint.c:1856 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "розділ [%2d] «%s»: не виявлено розділу хешів\n" -#: src/elflint.c:1872 src/elflint.c:1879 +#: src/elflint.c:1871 src/elflint.c:1878 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "розділ [%2d] «%s»: вказано не всі зі значень %s, %s і %s\n" -#: src/elflint.c:1889 src/elflint.c:1893 +#: src/elflint.c:1888 src/elflint.c:1892 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" "розділ [%2d] «%s»: у DSO, позначеному на кроці попереднього компонування, " "немає мітки %s\n" -#: src/elflint.c:1899 +#: src/elflint.c:1898 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" "розділ [%2d] «%s»: під час попереднього компонування як залежність позначено " "файл, який не є файлом DSO\n" -#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922 +#: src/elflint.c:1909 src/elflint.c:1913 src/elflint.c:1917 src/elflint.c:1921 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" "розділ [%2d] «%s»: у попередньо скомпонованому виконуваному файлі не " "міститься мітки %s\n" -#: src/elflint.c:1934 +#: src/elflint.c:1933 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -2486,7 +2492,7 @@ msgstr "" "розділ [%2d] «%s»: розширений розділ покажчика можуть мати лише файли, " "придатні до пересування\n" -#: src/elflint.c:1944 +#: src/elflint.c:1943 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" @@ -2494,29 +2500,29 @@ msgstr "" "розділ [%2d] «%s»: розділ розширеного покажчика розділів не призначено для " "таблиць символів\n" -#: src/elflint.c:1948 +#: src/elflint.c:1947 #, c-format msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n" msgstr "" "розділ [%2d] «%s»: індекс розширеного розділу sh_link [%2d] є некоректним\n" -#: src/elflint.c:1953 +#: src/elflint.c:1952 #, c-format msgid "cannot get data for symbol section\n" msgstr "не вдалося отримати дані для розділу символів\n" -#: src/elflint.c:1956 +#: src/elflint.c:1955 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "розділ [%2d] «%s»: розмірність запису не відповідає Elf32_Word\n" -#: src/elflint.c:1965 +#: src/elflint.c:1964 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" "розділ [%2d] «%s»: розширена таблиця покажчика замала для таблиці символів\n" -#: src/elflint.c:1980 +#: src/elflint.c:1979 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -2525,24 +2531,24 @@ msgstr "" "розділ [%2d] «%s»: розширений покажчик розділів у розділі [%2zu] «%s» " "посилається на ту саму таблицю розділів\n" -#: src/elflint.c:1998 +#: src/elflint.c:1997 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "символу 0 має відповідати нульовий індекс розширеного розділу\n" -#: src/elflint.c:2010 +#: src/elflint.c:2009 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "не вдалося отримати дані для символу %zu\n" -#: src/elflint.c:2015 +#: src/elflint.c:2014 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" "індекс розширеного розділу дорівнює %, але індекс символу не є " "XINDEX\n" -#: src/elflint.c:2032 src/elflint.c:2089 +#: src/elflint.c:2031 src/elflint.c:2088 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" @@ -2550,43 +2556,43 @@ msgstr "" "розділ [%2d] «%s»: розділ таблиці хешів занадто малий (розмір %ld, мало бути " "— %ld)\n" -#: src/elflint.c:2046 src/elflint.c:2103 +#: src/elflint.c:2045 src/elflint.c:2102 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "розділ [%2d] «%s»: масив ланцюжка занадто великий\n" -#: src/elflint.c:2060 src/elflint.c:2117 +#: src/elflint.c:2059 src/elflint.c:2116 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання на хеш блоку %zu лежить поза межами діапазону\n" -#: src/elflint.c:2070 +#: src/elflint.c:2069 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання ланцюжка хешів %zu лежить поза межами " "діапазону\n" -#: src/elflint.c:2127 +#: src/elflint.c:2126 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання ланцюжка хешів % лежить поза межами " "діапазону\n" -#: src/elflint.c:2140 +#: src/elflint.c:2139 #, c-format msgid "section [%2d] '%s': not enough data\n" msgstr "розділ [%2d] «%s»: недостатньо даних\n" -#: src/elflint.c:2152 +#: src/elflint.c:2151 #, c-format msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n" msgstr "" "розділ [%2d] «%s»: розмір бітової маски є нульовим або не є степенем 2: %u\n" -#: src/elflint.c:2168 +#: src/elflint.c:2167 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " @@ -2595,12 +2601,12 @@ msgstr "" "розділ [%2d] «%s»: розділ таблиці хешів є надто малим (маємо %ld, мало бути " "принаймні %ld)\n" -#: src/elflint.c:2177 +#: src/elflint.c:2176 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "розділ [%2d] «%s»: зсув 2-ої функції хешування занадто великий: %u\n" -#: src/elflint.c:2211 +#: src/elflint.c:2210 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -2608,7 +2614,7 @@ msgstr "" "розділ [%2d] '%s': ланцюжок хешів для блоку %zu розташовано нижче за позицію " "відхилення індексу символу\n" -#: src/elflint.c:2232 +#: src/elflint.c:2231 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -2617,7 +2623,7 @@ msgstr "" "розділ [%2d] «%s»: символ %u, на який посилається ланцюжок у блоці %zu не " "визначено\n" -#: src/elflint.c:2245 +#: src/elflint.c:2244 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -2625,7 +2631,7 @@ msgstr "" "розділ [%2d] «%s»: значення хешу для символу %u у ланцюжку для блоку %zu є " "помилковим\n" -#: src/elflint.c:2254 +#: src/elflint.c:2253 #, c-format msgid "" "section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n" @@ -2633,14 +2639,14 @@ msgstr "" "розділ [%2d] «%s»: індекс маски для символу %u у ланцюжку для блоку %zu є " "помилковим\n" -#: src/elflint.c:2284 +#: src/elflint.c:2283 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" "розділ [%2d] «%s»: ланцюжок хешів для блоку %zu лежить поза межами " "діапазону\n" -#: src/elflint.c:2289 +#: src/elflint.c:2288 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2648,43 +2654,43 @@ msgstr "" "розділ [%2d] «%s»: посилання на символ у ланцюжку для блоку %zu лежить поза " "межами діапазону\n" -#: src/elflint.c:2295 +#: src/elflint.c:2294 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "розділ [%2d] «%s»: бітова маска не відповідає назвам у таблиці хешів\n" -#: src/elflint.c:2308 +#: src/elflint.c:2307 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "розділ [%2d] «%s»: придатні до пересування файли не можуть містити таблиць " "хешів\n" -#: src/elflint.c:2326 +#: src/elflint.c:2325 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" "розділ [%2d] «%s»: таблицю хешів не призначено для зберігання таблиці " "динамічних символів\n" -#: src/elflint.c:2330 +#: src/elflint.c:2329 #, c-format msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n" msgstr "" "розділ [%2d] «%s»: некоректний індекс розділу таблиці символів sh_link " "[%2d]\n" -#: src/elflint.c:2340 +#: src/elflint.c:2339 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "розділ [%2d] «%s»: розмірність запису таблиці хешів є некоректною\n" -#: src/elflint.c:2345 +#: src/elflint.c:2344 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "розділ [%2d] «%s»: не позначено для пересування\n" -#: src/elflint.c:2350 +#: src/elflint.c:2349 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2693,27 +2699,27 @@ msgstr "" "розділ [%2d] «%s»: у таблиці хешів виявлено незвичайне розташування " "початкових адміністративних записів\n" -#: src/elflint.c:2399 +#: src/elflint.c:2398 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "sh_link у розділах хешів [%2zu] «%s» і [%2zu] «%s» не збігаються\n" -#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523 +#: src/elflint.c:2422 src/elflint.c:2487 src/elflint.c:2522 #, c-format msgid "hash section [%2zu] '%s' does not contain enough data\n" msgstr "розділ хешу [%2zu] «%s» містить недостатньо даних\n" -#: src/elflint.c:2444 +#: src/elflint.c:2443 #, c-format msgid "hash section [%2zu] '%s' has zero bit mask words\n" msgstr "розділ хешу [%2zu] «%s» містить нульові слова бітової маски\n" -#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536 +#: src/elflint.c:2454 src/elflint.c:2498 src/elflint.c:2535 #, c-format msgid "hash section [%2zu] '%s' uses too much data\n" msgstr "розділ хешу [%2zu] «%s» використовує надто багато даних\n" -#: src/elflint.c:2470 +#: src/elflint.c:2469 #, c-format msgid "" "hash section [%2zu] '%s' invalid symbol index % (max_nsyms: " @@ -2722,17 +2728,17 @@ msgstr "" "розділ хешу [%2zu] «%s» некоректний індекс символу % (макс. к-ть " "символів: %, кількість записів: %\n" -#: src/elflint.c:2557 +#: src/elflint.c:2556 #, c-format msgid "hash section [%2zu] '%s' invalid sh_entsize\n" msgstr "розділ хешу [%2zu] «%s» некоректне значення sh_entsize\n" -#: src/elflint.c:2567 src/elflint.c:2571 +#: src/elflint.c:2566 src/elflint.c:2570 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "розділ [%2zu] «%s»: посилання на індекс символів 0\n" -#: src/elflint.c:2578 +#: src/elflint.c:2577 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2741,7 +2747,7 @@ msgstr "" "виявлено посилання на символ %d у новій таблиці хешів у [%2zu] «%s», але " "його немає у старій таблиці хешів у [%2zu] «%s»\n" -#: src/elflint.c:2590 +#: src/elflint.c:2589 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2750,12 +2756,12 @@ msgstr "" "виявлено посилання на символ %d у старій таблиці хешів у [%2zu] «%s», але " "його немає у новій таблиці хешів у [%2zu] «%s»\n" -#: src/elflint.c:2606 +#: src/elflint.c:2605 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "розділ [%2d] «%s»: ненульове значення sh_%s для розділу NULL\n" -#: src/elflint.c:2626 +#: src/elflint.c:2625 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2763,95 +2769,95 @@ msgstr "" "розділ [%2d] «%s»: групи розділів передбачено лише для придатних до " "пересування об’єктних файлах\n" -#: src/elflint.c:2637 +#: src/elflint.c:2636 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати таблицю символів: %s\n" -#: src/elflint.c:2642 +#: src/elflint.c:2641 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" "розділ [%2d] «%s»: посилання на розділ у sh_link не має таблиці символів\n" -#: src/elflint.c:2648 +#: src/elflint.c:2647 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "розділ [%2d] «%s»: некоректний індекс символу у sh_info\n" -#: src/elflint.c:2653 +#: src/elflint.c:2652 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "розділ [%2d] «%s»: sh_flags не є нульовим\n" -#: src/elflint.c:2660 +#: src/elflint.c:2659 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ для підпису\n" -#: src/elflint.c:2664 +#: src/elflint.c:2663 #, c-format msgid "section [%2d] '%s': cannot get symbol name for signature\n" msgstr "розділ [%2d] «%s»: не вдалося отримати назву символу для підпису\n" -#: src/elflint.c:2669 +#: src/elflint.c:2668 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "розділ [%2d] «%s»: символ підпису не може бути порожнім рядком\n" -#: src/elflint.c:2675 +#: src/elflint.c:2674 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "розділ [%2d] «%s»: для sh_flags встановлено помилкове значення\n" -#: src/elflint.c:2681 +#: src/elflint.c:2680 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані: %s\n" -#: src/elflint.c:2690 +#: src/elflint.c:2689 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "розділ [%2d] «%s»: розмір розділу не є кратним до sizeof(Elf32_Word)\n" -#: src/elflint.c:2696 +#: src/elflint.c:2695 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "розділ [%2d] «%s»: група розділів без значення типу word прапорців\n" -#: src/elflint.c:2704 +#: src/elflint.c:2703 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "розділ [%2d] «%s»: група розділів без елементів\n" -#: src/elflint.c:2708 +#: src/elflint.c:2707 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "розділ [%2d] «%s»: група розділів, що містить лише один елемент\n" -#: src/elflint.c:2719 +#: src/elflint.c:2718 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "розділ [%2d] «%s»: невідомі прапорці групи розділів\n" -#: src/elflint.c:2731 +#: src/elflint.c:2730 #, c-format msgid "section [%2d] '%s': section index %zu out of range\n" msgstr "розділ [%2d] «%s»: індекс розділу %zu поза межами діапазону\n" -#: src/elflint.c:2740 +#: src/elflint.c:2739 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" "розділ [%2d] «%s»: не вдалося отримати заголовок розділу для елемента %zu: " "%s\n" -#: src/elflint.c:2747 +#: src/elflint.c:2746 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "розділ [%2d] «%s»: група розділів містить іншу групу [%2d] «%s»\n" -#: src/elflint.c:2753 +#: src/elflint.c:2752 #, c-format msgid "" "section [%2d] '%s': element %zu references section [%2d] '%s' without " @@ -2860,12 +2866,12 @@ msgstr "" "розділ [%2d] «%s»: елемент %zu посилається на розділ [%2d] «%s» без " "встановленого прапорця SHF_GROUP\n" -#: src/elflint.c:2760 +#: src/elflint.c:2759 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "розділ [%2d] «%s» міститься у більше ніж одній групі розділів\n" -#: src/elflint.c:2957 +#: src/elflint.c:2956 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2874,7 +2880,7 @@ msgstr "" "розділ [%2d] «%s» посилається у sh_link на розділ [%2d] «%s», який не має " "динамічної таблиці символів\n" -#: src/elflint.c:2969 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2883,28 +2889,28 @@ msgstr "" "кількість записів у розділі [%2d] «%s» відрізняється від кількості у таблиці " "символів [%2d] «%s»\n" -#: src/elflint.c:2985 +#: src/elflint.c:2984 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "розділ [%2d] «%s»: символ %d: не вдалося прочитати дані щодо версії\n" -#: src/elflint.c:3001 +#: src/elflint.c:3000 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" "розділ [%2d] «%s»: символ %d: локальний символ у загальному контексті\n" -#: src/elflint.c:3009 +#: src/elflint.c:3008 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "розділ [%2d] «%s»: символ %d: локальний символ з версією\n" -#: src/elflint.c:3023 +#: src/elflint.c:3022 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "розділ [%2d] «%s»: символ %d: некоректний індекс версії %d\n" -#: src/elflint.c:3028 +#: src/elflint.c:3027 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" @@ -2912,7 +2918,7 @@ msgstr "" "розділ [%2d] «%s»: символ %d: індекси версії %d призначено до визначеної " "версії\n" -#: src/elflint.c:3038 +#: src/elflint.c:3037 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" @@ -2920,45 +2926,45 @@ msgstr "" "розділ [%2d] «%s»: символ %d: індекс версії %d призначено для версії, на яку " "надійшов запит\n" -#: src/elflint.c:3091 +#: src/elflint.c:3090 #, c-format msgid "more than one version reference section present\n" msgstr "виявлено більше за один розділ посилань на версії\n" -#: src/elflint.c:3099 src/elflint.c:3246 +#: src/elflint.c:3098 src/elflint.c:3245 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "розділ [%2d] «%s»: sh_link не посилається на таблицю рядків\n" -#: src/elflint.c:3124 src/elflint.c:3300 +#: src/elflint.c:3123 src/elflint.c:3299 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "розділ [%2d] «%s»: запис %d має помилкову версію %d\n" -#: src/elflint.c:3131 src/elflint.c:3307 +#: src/elflint.c:3130 src/elflint.c:3306 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" "розділ [%2d] «%s»: запис %d містить помилкове зміщення у допоміжних даних\n" -#: src/elflint.c:3141 +#: src/elflint.c:3140 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "розділ [%2d] «%s»: запис %d містить некоректне посилання на файл\n" -#: src/elflint.c:3149 +#: src/elflint.c:3148 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "розділ [%2d] «%s»: запис %d посилається на невідому залежність\n" -#: src/elflint.c:3161 +#: src/elflint.c:3160 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d позначено невідомим " "прапорцем\n" -#: src/elflint.c:3169 +#: src/elflint.c:3168 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2967,7 +2973,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d містить некоректне " "посилання на назву\n" -#: src/elflint.c:3178 +#: src/elflint.c:3177 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2976,7 +2982,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d має помилкове значення " "хешу: %#x, мало бути %#x\n" -#: src/elflint.c:3187 +#: src/elflint.c:3186 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2985,7 +2991,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d містить дублікати назви " "версії «%s»\n" -#: src/elflint.c:3198 +#: src/elflint.c:3197 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2993,13 +2999,13 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d має помилкове наступне " "поле\n" -#: src/elflint.c:3215 src/elflint.c:3391 +#: src/elflint.c:3214 src/elflint.c:3390 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" "розділ [%2d] «%s»: запис %d має некоректне зміщення щодо наступного запису\n" -#: src/elflint.c:3223 src/elflint.c:3399 +#: src/elflint.c:3222 src/elflint.c:3398 #, c-format msgid "" "section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says " @@ -3008,44 +3014,44 @@ msgstr "" "розділ [%2d] «%s»: запис %d має нульове зміщення щодо наступного запису, але " "за sh_info можна зрозуміти, що записів більше\n" -#: src/elflint.c:3238 +#: src/elflint.c:3237 #, c-format msgid "more than one version definition section present\n" msgstr "виявлено більше за один розділ визначення версій\n" -#: src/elflint.c:3285 +#: src/elflint.c:3284 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "розділ [%2d] «%s»: повторне визначення BASE\n" -#: src/elflint.c:3289 +#: src/elflint.c:3288 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" "розділ [%2d] «%s»: визначення BASE повинно мати індекс VER_NDX_GLOBAL\n" -#: src/elflint.c:3295 +#: src/elflint.c:3294 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "розділ [%2d] «%s»: невідомий прапорець запису %d\n" -#: src/elflint.c:3322 +#: src/elflint.c:3321 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "розділ [%2d] «%s»: запис %d містить некоректне посилання на назву\n" -#: src/elflint.c:3329 +#: src/elflint.c:3328 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" "розділ [%2d] «%s»: запис %d має помилкове значення хешу: %#x, мало бути %#x\n" -#: src/elflint.c:3337 +#: src/elflint.c:3336 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "розділ [%2d] «%s»: запис %d містить дублікати назви версії «%s»\n" -#: src/elflint.c:3357 +#: src/elflint.c:3356 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -3053,53 +3059,53 @@ msgstr "" "розділ [%2d] «%s»: запис %d містить некоректне посилання на назву у " "допоміжних даних\n" -#: src/elflint.c:3374 +#: src/elflint.c:3373 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" "розділ [%2d] «%s»: у допоміжних даних запису %d міститься помилкове поле " "наступного запису\n" -#: src/elflint.c:3407 +#: src/elflint.c:3406 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "розділ [%2d] «%s»: немає визначення BASE\n" -#: src/elflint.c:3423 +#: src/elflint.c:3422 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "розділ [%2d] «%s»: невідома основна версія «%s»\n" -#: src/elflint.c:3448 +#: src/elflint.c:3447 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "розділ [%2d] «%s»: порожній розділ атрибутів об’єкта\n" -#: src/elflint.c:3464 +#: src/elflint.c:3463 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "розділ [%2d] «%s»: не вдалося визначити формат атрибутів\n" -#: src/elflint.c:3475 +#: src/elflint.c:3474 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: поле нульового розміру у розділі атрибутів\n" -#: src/elflint.c:3484 +#: src/elflint.c:3483 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: некоректна довжина у розділі атрибутів\n" -#: src/elflint.c:3496 +#: src/elflint.c:3495 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершений рядок назви постачальника\n" -#: src/elflint.c:3513 +#: src/elflint.c:3512 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -3107,12 +3113,12 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершене поле ULEB128 у тезі підрозділу " "атрибутів\n" -#: src/elflint.c:3522 +#: src/elflint.c:3521 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "розділ [%2d] «%s»: зміщення %zu: обрізаний розділ атрибутів\n" -#: src/elflint.c:3531 +#: src/elflint.c:3530 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -3120,7 +3126,7 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: поле нульового розміру у підрозділі " "атрибутів\n" -#: src/elflint.c:3546 +#: src/elflint.c:3545 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -3128,7 +3134,7 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: некоректна довжина у підрозділі атрибутів\n" #. Tag_File -#: src/elflint.c:3557 +#: src/elflint.c:3556 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -3136,35 +3142,35 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: підрозділ атрибутів містить неочікуваний " "теґ %u\n" -#: src/elflint.c:3575 +#: src/elflint.c:3574 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершене поле ULEB128 у тезі атрибуту\n" -#: src/elflint.c:3586 +#: src/elflint.c:3585 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "розділ [%2d] «%s»: зміщення %zu: незавершений рядок у атрибуті\n" -#: src/elflint.c:3599 +#: src/elflint.c:3598 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "розділ [%2d] «%s»: зміщення %zu: незавершений теґ атрибуту %u\n" -#: src/elflint.c:3603 +#: src/elflint.c:3602 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: невідоме значення %s атрибуту %\n" -#: src/elflint.c:3613 +#: src/elflint.c:3612 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "розділ [%2d] «%s»: зміщення %zu: невідомий постачальник «%s»\n" -#: src/elflint.c:3619 +#: src/elflint.c:3618 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -3172,47 +3178,47 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: зайві байти після останнього розділу " "атрибутів\n" -#: src/elflint.c:3716 +#: src/elflint.c:3715 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "не вдалося отримати заголовок нульового розділу\n" -#: src/elflint.c:3720 +#: src/elflint.c:3719 #, c-format msgid "zeroth section has nonzero name\n" msgstr "нульовий розділ має ненульову назву\n" -#: src/elflint.c:3722 +#: src/elflint.c:3721 #, c-format msgid "zeroth section has nonzero type\n" msgstr "нульовий розділ має ненульовий тип\n" -#: src/elflint.c:3724 +#: src/elflint.c:3723 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "нульовий розділ має ненульові прапорці\n" -#: src/elflint.c:3726 +#: src/elflint.c:3725 #, c-format msgid "zeroth section has nonzero address\n" msgstr "нульовий розділ має ненульову адресу\n" -#: src/elflint.c:3728 +#: src/elflint.c:3727 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "нульовий розділ має ненульове зміщення\n" -#: src/elflint.c:3730 +#: src/elflint.c:3729 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "нульовий розділ має ненульове значення вирівнювання\n" -#: src/elflint.c:3732 +#: src/elflint.c:3731 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "нульовий розділ має ненульове значення розміру запису\n" -#: src/elflint.c:3735 +#: src/elflint.c:3734 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -3221,7 +3227,7 @@ msgstr "" "нульовий розділ має ненульове значення розміру, хоча заголовок ELF ман " "ненульове значення shnum\n" -#: src/elflint.c:3739 +#: src/elflint.c:3738 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3230,7 +3236,7 @@ msgstr "" "нульовий розділ має ненульове значення компонування, хоча у заголовку ELF " "немає сигналу переповнення у shstrndx\n" -#: src/elflint.c:3743 +#: src/elflint.c:3742 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3239,28 +3245,28 @@ msgstr "" "нульовий розділ має ненульове значення компонування, хоча у заголовку ELF " "немає сигналу переповнення у phnum\n" -#: src/elflint.c:3761 +#: src/elflint.c:3760 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "не вдалося отримати заголовок розділу [%2zu] «%s»: %s\n" -#: src/elflint.c:3770 +#: src/elflint.c:3769 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "розділ [%2zu]: некоректна назва\n" -#: src/elflint.c:3797 +#: src/elflint.c:3796 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" "розділ [%2d] «%s» належить до помилкового типу: мав бути %s, маємо %s\n" -#: src/elflint.c:3814 +#: src/elflint.c:3813 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, маємо %s\n" -#: src/elflint.c:3832 +#: src/elflint.c:3831 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -3268,12 +3274,12 @@ msgstr "" "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, можливо, %s, але " "маємо %s\n" -#: src/elflint.c:3849 +#: src/elflint.c:3848 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "у об’єктному файлі виявлено розділ [%2zu] «%s»\n" -#: src/elflint.c:3855 src/elflint.c:3887 +#: src/elflint.c:3854 src/elflint.c:3886 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -3281,7 +3287,7 @@ msgstr "" "у розділ [%2zu] «%s» встановлено прапорець SHF_ALLOC, але немає придатного " "до завантаження сегмента\n" -#: src/elflint.c:3860 src/elflint.c:3892 +#: src/elflint.c:3859 src/elflint.c:3891 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -3290,7 +3296,7 @@ msgstr "" "у розділі [%2zu] «%s» не встановлено прапорець SHF_ALLOC, але є придатні до " "завантаження сегменти\n" -#: src/elflint.c:3868 +#: src/elflint.c:3867 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -3298,22 +3304,22 @@ msgstr "" "розділ [%2zu] «%s» є таблицею-покажчиком розділу розширень у файлі, який не " "є об’єктним\n" -#: src/elflint.c:3911 +#: src/elflint.c:3910 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "розділ [%2zu] «%s»: розмір не є кратним до розміру запису\n" -#: src/elflint.c:3916 +#: src/elflint.c:3915 #, c-format msgid "cannot get section header\n" msgstr "не вдалося отримати заголовок розділу\n" -#: src/elflint.c:3926 +#: src/elflint.c:3925 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "розділ [%2zu] «%s» належить до непідтримуваного типу %d\n" -#: src/elflint.c:3946 +#: src/elflint.c:3945 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -3321,74 +3327,74 @@ msgstr "" "розділ [%2zu] «%s» містить некоректні специфічні для процесора прапорці " "%#\n" -#: src/elflint.c:3956 +#: src/elflint.c:3955 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "розділ [%2zu] «%s» містить невідомі прапорці %#\n" -#: src/elflint.c:3964 +#: src/elflint.c:3963 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "розділ [%2zu] «%s»: адреса розділів локальних даних потоків не є нульовою\n" -#: src/elflint.c:3974 +#: src/elflint.c:3973 #, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "" "розділ [%2zu] «%s»: розміщений у пам'яті розділ не може бути стиснений\n" -#: src/elflint.c:3979 +#: src/elflint.c:3978 #, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "розділ [%2zu] «%s»: розділ nobits не може бути стиснений\n" -#: src/elflint.c:3985 +#: src/elflint.c:3984 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "розділ [%2zu] «%s»: стиснений розділ без заголовка стиснення: %s\n" -#: src/elflint.c:3991 +#: src/elflint.c:3990 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "розділ [%2zu] «%s»: некоректне посилання на розділ у значенні компонування\n" -#: src/elflint.c:3996 +#: src/elflint.c:3995 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "розділ [%2zu] «%s»: некоректне посилання на розділ у значенні відомостей\n" -#: src/elflint.c:4003 +#: src/elflint.c:4002 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "розділ [%2zu] «%s»: встановлено прапорець strings без прапорця merge\n" -#: src/elflint.c:4008 +#: src/elflint.c:4007 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "розділ [%2zu] «%s»: встановлено прапорець merge, але розмір запису є " "нульовим\n" -#: src/elflint.c:4027 +#: src/elflint.c:4026 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "розділ [%2zu] «%s» має неочікуваний тип %d для виконуваного розділу\n" -#: src/elflint.c:4036 +#: src/elflint.c:4035 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "розділ [%2zu] «%s» у файлах debuginfo має належати до типу NOBITS\n" -#: src/elflint.c:4043 +#: src/elflint.c:4042 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "розділ [%2zu] «%s» є одночасно виконуваним і придатним до запису\n" -#: src/elflint.c:4074 +#: src/elflint.c:4073 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -3397,7 +3403,7 @@ msgstr "" "розділ [%2zu] «%s» не повністю міститься у сегменті запису заголовка " "програми %d\n" -#: src/elflint.c:4084 +#: src/elflint.c:4083 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3406,7 +3412,7 @@ msgstr "" "розділ [%2zu] «%s» належить до типу NOBITS, але його читання виконується з " "файла у сегментів запису заголовка програми %d\n" -#: src/elflint.c:4110 +#: src/elflint.c:4109 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3415,7 +3421,7 @@ msgstr "" "розділ [%2zu] «%s» належить до типу NOBITS, але його читання виконується з " "файла у сегментів запису заголовка програми %d, а вміст файла є ненульовим\n" -#: src/elflint.c:4121 +#: src/elflint.c:4120 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -3424,19 +3430,19 @@ msgstr "" "розділ [%2zu] «%s» не належить до типу NOBITS, але його читання не " "виконується з файла у сегментів запису заголовка програми %d\n" -#: src/elflint.c:4132 +#: src/elflint.c:4131 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "розділ [%2zu] «%s» є виконуваним у невиконуваному сегменті %d\n" -#: src/elflint.c:4142 +#: src/elflint.c:4141 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" "розділ [%2zu] «%s» є придатним до запису у непридатному до запису сегменті " "%d\n" -#: src/elflint.c:4152 +#: src/elflint.c:4151 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -3444,7 +3450,7 @@ msgstr "" "розділ [%2zu] «%s»: встановлено прапорець alloc, але розділ не перебуває у " "жодному завантаженому сегменті\n" -#: src/elflint.c:4158 +#: src/elflint.c:4157 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -3453,7 +3459,7 @@ msgstr "" "розділ [%2zu] «%s»: заголовок ELF повідомляє про те, що це таблиця рядків " "заголовка розділу, але ця таблиця не належить до типу SHT_TYPE\n" -#: src/elflint.c:4166 +#: src/elflint.c:4165 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -3461,17 +3467,17 @@ msgstr "" "розділ [%2zu] «%s»: придатні до пересування файли не можуть містити " "динамічних таблиць символів\n" -#: src/elflint.c:4217 +#: src/elflint.c:4216 #, c-format msgid "more than one version symbol table present\n" msgstr "виявлено більше за одну таблицю символів версій\n" -#: src/elflint.c:4240 +#: src/elflint.c:4239 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "існує запис заголовка програми INTERP, але не розділ .interp\n" -#: src/elflint.c:4251 +#: src/elflint.c:4250 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -3479,14 +3485,14 @@ msgstr "" "придатний до завантаження сегмент [%u] є виконуваним, але не містить " "виконуваних розділів\n" -#: src/elflint.c:4257 +#: src/elflint.c:4256 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "придатний до завантаження розділ [%u] є придатним до запису, але не містить " "придатних до запису розділів\n" -#: src/elflint.c:4268 +#: src/elflint.c:4267 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -3495,24 +3501,24 @@ msgstr "" "немає розділу .gnu.versym, хоча існує розділ .gnu.versym_d або .gnu." "versym_r\n" -#: src/elflint.c:4281 +#: src/elflint.c:4280 #, c-format msgid "duplicate version index %d\n" msgstr "дублікат індексу версії %d\n" -#: src/elflint.c:4295 +#: src/elflint.c:4294 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" "існує розділ .gnu.versym, але немає розділу .gnu.versym_d або .gnu.versym_r\n" -#: src/elflint.c:4344 +#: src/elflint.c:4343 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" "phdr[%d]: невідомий тип нотатки файла core % за зміщенням %\n" -#: src/elflint.c:4348 +#: src/elflint.c:4347 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" @@ -3520,7 +3526,7 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки файла core % за зміщенням " "%zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4403 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " @@ -3529,7 +3535,7 @@ msgstr "" "phdr[%d]: невідомий тип нотатки у файлі об'єктів, %, із іменем " "власника «%s» за зміщенням %zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4408 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " @@ -3538,39 +3544,39 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки у файлі об'єктів, %, із " "іменем власника «%s» за зміщенням %zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4427 #, 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:4447 #, 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:4450 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: зайві % байтів після останнього запису нотатки\n" -#: src/elflint.c:4465 +#: src/elflint.c:4471 #, 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:4478 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "розділ [%2d] «%s»: не вдалося отримати вміст розділу нотаток\n" -#: src/elflint.c:4475 +#: src/elflint.c:4481 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" "розділ [%2d] «%s»: додаткові % байтів після останньої нотатки\n" -#: src/elflint.c:4493 +#: src/elflint.c:4499 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3578,66 +3584,66 @@ msgstr "" "заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів " "спільного використання або файлів core\n" -#: src/elflint.c:4508 +#: src/elflint.c:4514 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "не вдалося отримати запис заголовка програми %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4524 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "запис заголовка програми %d: невідомий тип запису заголовка програми " "%#\n" -#: src/elflint.c:4529 +#: src/elflint.c:4535 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "більше за один запис INTERP у заголовку програми\n" -#: src/elflint.c:4537 +#: src/elflint.c:4543 #, c-format msgid "more than one TLS entry in program header\n" msgstr "більше за один запис TLS у заголовку програми\n" -#: src/elflint.c:4544 +#: src/elflint.c:4550 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "у статичному виконуваному файлі не може бути динамічних розділів\n" -#: src/elflint.c:4558 +#: src/elflint.c:4564 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "посилання на динамічний розділ у заголовку програми має помилкове зміщення\n" -#: src/elflint.c:4561 +#: src/elflint.c:4567 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "розміри динамічного розділу у заголовку програми та у заголовку розділу не " "збігаються\n" -#: src/elflint.c:4571 +#: src/elflint.c:4577 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "більше за один запис GNU_RELRO у заголовку програми\n" -#: src/elflint.c:4592 +#: src/elflint.c:4598 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" "придатний до завантаження сегмент, до якого звертається GNU_RELRO, " "непридатний до запису\n" -#: src/elflint.c:4603 +#: src/elflint.c:4609 #, 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:4616 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" @@ -3645,76 +3651,76 @@ msgstr "" "прапорці GNU_RELRO [%u] не є підмножиною прапорців завантажуваного сегмента " "[%u]\n" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4625 src/elflint.c:4648 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "сегмент %s не міститься у завантаженому сегменті\n" -#: src/elflint.c:4648 +#: src/elflint.c:4654 #, 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:4681 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "посилання на таблицю вікон викликів у заголовку програми має помилкове " "зміщення\n" -#: src/elflint.c:4678 +#: src/elflint.c:4684 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку " "розділу не збігаються\n" -#: src/elflint.c:4691 +#: src/elflint.c:4697 #, 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:4705 #, c-format msgid "call frame search table must be allocated\n" msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’яті\n" -#: src/elflint.c:4702 +#: src/elflint.c:4708 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "розділ [%2zu] «%s» має бути розміщено у пам’яті\n" -#: src/elflint.c:4706 +#: src/elflint.c:4712 #, c-format msgid "call frame search table must not be writable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до запису\n" -#: src/elflint.c:4709 +#: src/elflint.c:4715 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до запису\n" -#: src/elflint.c:4714 +#: src/elflint.c:4720 #, c-format msgid "call frame search table must not be executable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до виконання\n" -#: src/elflint.c:4717 +#: src/elflint.c:4723 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконання\n" -#: src/elflint.c:4728 +#: src/elflint.c:4737 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "запис заголовка програми %d: розмір файла перевищує об’єм пам’яті\n" -#: src/elflint.c:4735 +#: src/elflint.c:4744 #, 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:4747 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3723,7 +3729,7 @@ msgstr "" "запис заголовка програми %d: зміщення у файлі і віртуальна адреса не " "співвідносяться з вирівнюванням\n" -#: src/elflint.c:4751 +#: src/elflint.c:4760 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3732,17 +3738,17 @@ msgstr "" "виконуваний модуль/DSO з розділом .eh_frame_hdr не містить запису заголовка " "програми PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4794 #, c-format msgid "cannot read ELF header: %s\n" msgstr "не вдалося прочитати заголовок ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4806 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "не вдалося створити файл" -#: src/elflint.c:4818 +#: src/elflint.c:4827 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3766,32 +3772,32 @@ 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/strings.c:87 src/strip.c:101 +#: src/findtextrel.c:74 src/nm.c:107 src/objdump.c:70 src/size.c:79 +#: src/strings.c:86 src/strip.c:100 msgid "[FILE...]" msgstr "[ФАЙЛ...]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:223 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "не вдалося отримати заголовок ELF «%s»: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:234 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "«%s» не є DSO або PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:254 #, c-format msgid "getting get section header of section %zu: %s" msgstr "отримання заголовка розділу get розділу %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:278 #, c-format msgid "cannot read dynamic section: %s" msgstr "не вдалося прочитати динамічний розділ: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:299 #, c-format msgid "no text relocations reported in '%s'" msgstr "у «%s» не виявлено пересувань тексту" @@ -3806,35 +3812,35 @@ msgstr "під час спроби читання файла ELF" msgid "cannot get program header count: %s" msgstr "не вдалося отримати кількість заголовків програми: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:325 src/findtextrel.c:340 #, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "не вдалося отримати індекс заголовка програми за зміщенням %zd: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:396 #, 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:417 src/findtextrel.c:440 #, 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:506 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s не зібрано з -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:560 #, 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:567 src/findtextrel.c:587 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3843,7 +3849,7 @@ msgstr "" "файл, що містить функцію «%s», ймовірно, не було зібрано з параметрами -" "fpic/-fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:575 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3852,7 +3858,7 @@ msgstr "" "файл, що містить функцію «%s», або файл, що містить функцію «%s», зібрано " "без параметрів -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:595 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3860,43 +3866,43 @@ msgstr "" "пересування призводить до зміни запису пам’яті за зміщенням %llu у " "захищеному від запису сегменті\n" -#: src/nm.c:66 src/strip.c:70 +#: src/nm.c:65 src/strip.c:69 msgid "Output selection:" msgstr "Вибір виводу:" -#: src/nm.c:67 +#: src/nm.c:66 msgid "Display debugger-only symbols" msgstr "Показувати лише діагностичні символи" -#: src/nm.c:68 +#: src/nm.c:67 msgid "Display only defined symbols" msgstr "Показувати лише визначені символи" -#: src/nm.c:71 +#: src/nm.c:70 msgid "Display dynamic symbols instead of normal symbols" msgstr "Показувати динамічні символи замість звичайних символів" -#: src/nm.c:72 +#: src/nm.c:71 msgid "Display only external symbols" msgstr "Показувати лише зовнішні символи" -#: src/nm.c:73 +#: src/nm.c:72 msgid "Display only undefined symbols" msgstr "Показувати лише невизначені символи" -#: src/nm.c:75 +#: src/nm.c:74 msgid "Include index for symbols from archive members" msgstr "Включити покажчик для символів з елементів архіву" -#: src/nm.c:77 src/size.c:54 +#: src/nm.c:76 src/size.c:53 msgid "Output format:" msgstr "Формат виводу:" -#: src/nm.c:79 +#: src/nm.c:78 msgid "Print name of the input file before every symbol" msgstr "Виводити перед кожним символом назву вхідного файла" -#: src/nm.c:82 +#: src/nm.c:81 msgid "" "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " "default is `sysv'" @@ -3904,73 +3910,73 @@ msgstr "" "Використовувати формат виводу ФОРМАТ. ФОРМАТом може бути «bsd», «sysv» або " "«posix». Типовим форматом є «sysv»" -#: src/nm.c:84 +#: src/nm.c:83 msgid "Same as --format=bsd" msgstr "Те саме, що і --format=bsd" -#: src/nm.c:85 +#: src/nm.c:84 msgid "Same as --format=posix" msgstr "Те саме, що і --format=posix" -#: src/nm.c:86 src/size.c:60 +#: src/nm.c:85 src/size.c:59 msgid "Use RADIX for printing symbol values" msgstr "Використовувати ОСНОВУ числення для виводу символьних значень" -#: src/nm.c:87 +#: src/nm.c:86 msgid "Mark special symbols" msgstr "Позначати спеціальні символи" -#: src/nm.c:89 +#: src/nm.c:88 msgid "Print size of defined symbols" msgstr "Вивести розмір визначених символів" -#: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 +#: src/nm.c:90 src/size.c:67 src/strip.c:74 src/unstrip.c:68 msgid "Output options:" msgstr "Параметри виводу:" -#: src/nm.c:92 +#: src/nm.c:91 msgid "Sort symbols numerically by address" msgstr "Числове впорядкування символів за адресою" -#: src/nm.c:94 +#: src/nm.c:93 msgid "Do not sort the symbols" msgstr "Не впорядковувати символи" -#: src/nm.c:95 +#: src/nm.c:94 msgid "Reverse the sense of the sort" msgstr "Змінити порядок на протилежний" -#: src/nm.c:98 +#: src/nm.c:97 msgid "Decode low-level symbol names into source code names" msgstr "Визначати за низькорівневими назвами символів назви у початковому коді" #. Short description of program. -#: src/nm.c:105 +#: src/nm.c:104 msgid "List symbols from FILEs (a.out by default)." msgstr "Показати список символів з ФАЙЛів (типово з a.out)." -#: src/nm.c:116 src/objdump.c:79 +#: src/nm.c:115 src/objdump.c:78 msgid "Output formatting" msgstr "Форматування виводу" -#: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 +#: src/nm.c:139 src/objdump.c:102 src/size.c:104 src/strip.c:132 #, c-format 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/nm.c:380 src/nm.c:392 src/size.c:287 src/size.c:296 src/size.c:307 +#: src/strip.c:2766 #, c-format msgid "while closing '%s'" msgstr "під час закриття «%s»" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:402 src/objdump.c:279 src/strip.c:827 #, c-format msgid "%s: File format not recognized" msgstr "%s: не вдалося розпізнати формат файла" #. Note: 0 is no valid offset. -#: src/nm.c:443 +#: src/nm.c:442 msgid "" "\n" "Archive index:\n" @@ -3978,44 +3984,43 @@ msgstr "" "\n" "Покажчик архіву:\n" -#: src/nm.c:452 +#: src/nm.c:451 #, c-format msgid "invalid offset %zu for symbol %s" msgstr "некоректне зміщення %zu для символу %s" -#: src/nm.c:457 +#: src/nm.c:456 #, c-format msgid "%s in %s\n" msgstr "%s у %s\n" -#: src/nm.c:465 +#: src/nm.c:464 #, c-format msgid "cannot reset archive offset to beginning" msgstr "не вдалося відновити зміщення початку архіву" -#: src/nm.c:490 src/objdump.c:328 +#: src/nm.c:489 src/objdump.c:327 #, c-format msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: не вдалося розпізнати формат файла" -#: src/nm.c:705 -#, c-format +#: src/nm.c:702 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:742 src/nm.c:1234 src/objdump.c:778 src/readelf.c:663 +#: src/readelf.c:1471 src/readelf.c:1620 src/readelf.c:1847 src/readelf.c:2084 +#: src/readelf.c:2273 src/readelf.c:2451 src/readelf.c:2526 src/readelf.c:2791 +#: src/readelf.c:2866 src/readelf.c:2952 src/readelf.c:3547 src/readelf.c:3595 +#: src/readelf.c:3664 src/readelf.c:11581 src/readelf.c:12771 +#: src/readelf.c:12981 src/readelf.c:13049 src/size.c:396 src/size.c:467 +#: src/strip.c:1093 #, c-format msgid "cannot get section header string table index" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:767 #, c-format msgid "" "\n" @@ -4029,7 +4034,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:770 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4038,7 +4043,7 @@ msgstr "" "%*s%-*s %-*s Клас Тип %-*s %*s Розділ\n" "\n" -#: src/nm.c:776 +#: src/nm.c:772 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4046,96 +4051,96 @@ msgid "Name" msgstr "Назва: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:774 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:776 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:778 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1245 #, 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:1250 #, 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:1330 #, 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:1566 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: некоректна дія" -#: src/nm.c:1622 +#: src/nm.c:1616 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: немає символів" -#: src/objdump.c:52 +#: src/objdump.c:51 msgid "Mode selection:" msgstr "Вибір режиму:" -#: src/objdump.c:53 +#: src/objdump.c:52 msgid "Display relocation information." msgstr "Показати інформацію про пересування." -#: src/objdump.c:55 +#: src/objdump.c:54 msgid "Display the full contents of all sections requested" msgstr "Показати весь вміст всіх вказаних розділів" -#: src/objdump.c:57 +#: src/objdump.c:56 msgid "Display assembler code of executable sections" msgstr "Показати код асемблера виконуваних розділів" -#: src/objdump.c:59 +#: src/objdump.c:58 msgid "Output content selection:" msgstr "Вибір виведених даних:" -#: src/objdump.c:61 +#: src/objdump.c:60 msgid "Only display information for section NAME." msgstr "Показати інформацію лише з розділу НАЗВА." #. Short description of program. -#: src/objdump.c:67 +#: src/objdump.c:66 msgid "Show information from FILEs (a.out by default)." msgstr "Показати інформацію з ФАЙЛів (типово a.out)." -#: src/objdump.c:218 src/readelf.c:582 +#: src/objdump.c:217 src/readelf.c:608 msgid "No operation specified.\n" msgstr "Не вказано дії.\n" -#: src/objdump.c:258 src/objdump.c:270 +#: src/objdump.c:257 src/objdump.c:269 #, c-format msgid "while close `%s'" msgstr "під час закриття «%s»" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:362 src/readelf.c:2179 src/readelf.c:2370 msgid "INVALID SYMBOL" msgstr "НЕКОРЕКТНИЙ СИМВОЛ" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:377 src/readelf.c:2213 src/readelf.c:2406 msgid "INVALID SECTION" msgstr "НЕКОРЕКТНИЙ РОЗДІЛ" -#: src/objdump.c:498 +#: src/objdump.c:497 #, c-format msgid "" "\n" @@ -4146,62 +4151,61 @@ msgstr "" "ЗАПИСИ ПЕРЕМІЩЕННЯ ДЛЯ [%s]:\n" "%-*s ТИП ЗНАЧЕННЯ\n" -#: src/objdump.c:501 +#: src/objdump.c:500 msgid "OFFSET" msgstr "ЗМІЩЕННЯ" -#: src/objdump.c:566 +#: src/objdump.c:565 #, c-format msgid "Contents of section %s:\n" msgstr "Вміст розділу %s:\n" -#: src/objdump.c:687 -#, c-format +#: src/objdump.c:686 msgid "cannot disassemble" msgstr "не вдалося дизасемблювати" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:757 +#, fuzzy msgid "cannot create backend for elf file" msgstr "не вдалося створити файл" #. Short description of program. -#: src/ranlib.c:63 +#: src/ranlib.c:62 msgid "Generate an index to speed access to archives." msgstr "Створювати покажчик для пришвидшення доступу до архівів." #. Strings for arguments in help texts. -#: src/ranlib.c:66 +#: src/ranlib.c:65 msgid "ARCHIVE" msgstr "АРХІВ" -#: src/ranlib.c:102 +#: src/ranlib.c:101 #, c-format msgid "Archive name required" msgstr "Слід вказати назву архіву" -#: src/ranlib.c:166 +#: src/ranlib.c:165 #, c-format msgid "'%s' is no archive" msgstr "«%s» не є архівом" -#: src/ranlib.c:201 +#: src/ranlib.c:200 #, c-format msgid "error while freeing sub-ELF descriptor: %s" msgstr "помилка під час спроби вивільнення дескриптора під-ELF: %s" -#: src/readelf.c:97 +#: src/readelf.c:96 msgid "ELF input selection:" msgstr "Вибір вихідних даних ELF:" -#: src/readelf.c:99 +#: src/readelf.c:98 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" msgstr "" "Використовувати вказаний за іменем РОЗДІЛ (типово .gnu_debugdata) як " "(стиснені) вхідні дані ELF" -#: src/readelf.c:102 +#: src/readelf.c:101 msgid "" "Used with -w to find the skeleton Compile Units in FILE associated with the " "Split Compile units in a .dwo input file" @@ -4209,43 +4213,43 @@ msgstr "" "Використовується з -w для пошуку основи компільованих модулів у ФАЙЛі, " "пов'язаному із модулями розділеної компіляції у вхідному файлі .dwo" -#: src/readelf.c:104 +#: src/readelf.c:103 msgid "ELF output selection:" msgstr "Вибір виводу ELF:" -#: src/readelf.c:106 +#: src/readelf.c:105 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "Все це плюс -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:107 +#: src/readelf.c:106 msgid "Display the dynamic segment" msgstr "Показувати динамічний сегмент" -#: src/readelf.c:108 +#: src/readelf.c:107 msgid "Display the ELF file header" msgstr "Показувати заголовок файла ELF" -#: src/readelf.c:110 +#: src/readelf.c:109 msgid "Display histogram of bucket list lengths" msgstr "Показати гістограму довжин списку блоків" -#: src/readelf.c:111 +#: src/readelf.c:110 msgid "Display the program headers" msgstr "Показувати заголовки програми" -#: src/readelf.c:113 +#: src/readelf.c:112 msgid "Display relocations" msgstr "Показувати пересування" -#: src/readelf.c:114 +#: src/readelf.c:113 msgid "Display the section groups" msgstr "Показувати групи розділів" -#: src/readelf.c:115 +#: src/readelf.c:114 msgid "Display the sections' headers" msgstr "Показувати заголовки розділів" -#: src/readelf.c:118 +#: src/readelf.c:117 msgid "Display the symbol table sections" msgstr "Показати розділи таблиці символів" @@ -4298,23 +4302,27 @@ msgid "Display the symbol index of an archive" msgstr "Показувати покажчик символів архіву" #: src/readelf.c:141 +msgid "Use the dynamic segment when possible for displaying info" +msgstr "" + +#: src/readelf.c:143 msgid "Output control:" msgstr "Керування виводом:" -#: src/readelf.c:143 +#: src/readelf.c:145 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Не шукати назви символів для адрес у даних DWARF" -#: src/readelf.c:145 +#: src/readelf.c:147 msgid "" "Display just offsets instead of resolving values to addresses in DWARF data" msgstr "Показати лише зміщення, а не визначені значення адреси у даних DWARF" -#: src/readelf.c:147 +#: src/readelf.c:149 msgid "Ignored for compatibility (lines always wide)" msgstr "Ігнорується з міркувань сумісності (рядки завжди широкі)" -#: src/readelf.c:149 +#: src/readelf.c:151 msgid "" "Show compression information for compressed sections (when used with -S); " "decompress section before dumping data (when used with -p or -x)" @@ -4323,156 +4331,156 @@ msgstr "" "розпакувати розділ до створення дампу даних (якщо використано з -p або -x)" #. Short description of program. -#: src/readelf.c:154 +#: src/readelf.c:156 msgid "Print information from ELF file in human-readable form." msgstr "Виводити відомості з файла ELF у придатному для читання форматі." #. Look up once. -#: src/readelf.c:350 +#: src/readelf.c:373 msgid "yes" msgstr "так" -#: src/readelf.c:351 +#: src/readelf.c:374 msgid "no" msgstr "ні" -#: src/readelf.c:550 +#: src/readelf.c:576 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Невідомий діагностичний розділ DWARF «%s».\n" -#: src/readelf.c:621 src/readelf.c:732 +#: src/readelf.c:647 src/readelf.c:758 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "не вдалося створити дескриптор Elf: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:654 src/readelf.c:980 src/strip.c:1188 #, 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:672 src/readelf.c:1287 src/readelf.c:1495 #, 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/readelf.c:681 src/readelf.c:1294 src/readelf.c:1502 src/readelf.c:13001 +#: src/unstrip.c:396 src/unstrip.c:427 src/unstrip.c:490 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/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 #, c-format msgid "cannot get section header: %s" msgstr "не вдалося отримати заголовок розділу: %s" -#: src/readelf.c:663 +#: src/readelf.c:689 #, c-format 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:698 src/readelf.c:6797 src/readelf.c:10854 src/readelf.c:10956 +#: src/readelf.c:11134 #, c-format msgid "cannot get %s content: %s" msgstr "не вдалося отримати дані %s: %s" -#: src/readelf.c:688 +#: src/readelf.c:714 #, c-format msgid "cannot create temp file '%s'" msgstr "не вдалося створити файл тимчасових даних «%s»" -#: src/readelf.c:697 +#: src/readelf.c:723 #, c-format msgid "cannot write section data" msgstr "не вдалося записати дані розділу" -#: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 +#: src/readelf.c:729 src/readelf.c:746 src/readelf.c:775 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "помилка під час спроби закриття дескриптора Elf: %s" -#: src/readelf.c:710 +#: src/readelf.c:736 #, c-format msgid "error while rewinding file descriptor" msgstr "помилка під час повернення до початкового значення дескриптора файла" -#: src/readelf.c:744 +#: src/readelf.c:770 #, c-format msgid "'%s' is not an archive, cannot print archive index" msgstr "«%s» не є архівом, виведення покажчика архіву неможливе" -#: src/readelf.c:848 +#: src/readelf.c:874 #, c-format msgid "cannot stat input file" msgstr "не вдалося отримати дані з вхідного файла за допомогою stat" -#: src/readelf.c:850 +#: src/readelf.c:876 #, c-format msgid "input file is empty" msgstr "вхідний файл є порожнім" -#: src/readelf.c:852 +#: src/readelf.c:878 #, c-format msgid "failed reading '%s': %s" msgstr "не вдалося прочитати «%s»: %s" -#: src/readelf.c:881 +#: src/readelf.c:907 #, c-format msgid "No such section '%s' in '%s'" msgstr "У «%2$s» немає розділу «%1$s»" -#: src/readelf.c:940 +#: src/readelf.c:966 #, c-format msgid "cannot read ELF header: %s" msgstr "не вдалося прочитати заголовок ELF: %s" -#: src/readelf.c:948 +#: src/readelf.c:974 #, c-format msgid "cannot create EBL handle" msgstr "не вдалося створити дескриптор EBL" -#: src/readelf.c:961 +#: src/readelf.c:985 #, c-format msgid "cannot determine number of program headers: %s" msgstr "не вдалося визначити кількість заголовків програми: %s" -#: src/readelf.c:993 +#: src/readelf.c:1017 #, c-format msgid "cannot read ELF: %s" msgstr "не вдалося прочитати ELF: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1078 msgid "NONE (None)" msgstr "NONE (Немає)" -#: src/readelf.c:1055 +#: src/readelf.c:1079 msgid "REL (Relocatable file)" msgstr "REL (Придатний до пересування файл)" -#: src/readelf.c:1056 +#: src/readelf.c:1080 msgid "EXEC (Executable file)" msgstr "EXEC (Виконуваний файл)" -#: src/readelf.c:1057 +#: src/readelf.c:1081 msgid "DYN (Shared object file)" msgstr "DYN (Файл об’єктів спільного використання)" -#: src/readelf.c:1058 +#: src/readelf.c:1082 msgid "CORE (Core file)" msgstr "CORE (Файл ядра)" -#: src/readelf.c:1063 +#: src/readelf.c:1087 #, c-format msgid "OS Specific: (%x)\n" msgstr "ОС-специфічне: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1089 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Специфічне для процесора: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1099 msgid "" "ELF Header:\n" " Magic: " @@ -4480,7 +4488,7 @@ msgstr "" "Заголовок ELF:\n" " Magic: " -#: src/readelf.c:1079 +#: src/readelf.c:1103 #, c-format msgid "" "\n" @@ -4489,123 +4497,123 @@ msgstr "" "\n" " Клас: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1108 #, c-format msgid " Data: %s\n" msgstr " Дані: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1114 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Версія Ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1116 src/readelf.c:1138 msgid "(current)" msgstr "(поточний)" -#: src/readelf.c:1096 +#: src/readelf.c:1120 #, c-format msgid " OS/ABI: %s\n" msgstr " ОС/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1123 #, c-format msgid " ABI Version: %hhd\n" msgstr " Версія ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1126 msgid " Type: " msgstr " Тип: " -#: src/readelf.c:1107 +#: src/readelf.c:1131 #, c-format msgid " Machine: %s\n" msgstr " Архітектура: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1133 #, c-format msgid " Machine: : 0x%x\n" msgstr " Архітектура: <невідома>: 0x%x\n" -#: src/readelf.c:1112 +#: src/readelf.c:1136 #, c-format msgid " Version: %d %s\n" msgstr " Версія: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1140 #, c-format msgid " Entry point address: %#\n" msgstr " Адреса вхідної точки: %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1143 #, c-format msgid " Start of program headers: % %s\n" msgstr " Початок заголовків програм: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1144 src/readelf.c:1147 msgid "(bytes into file)" msgstr "(байтів у файл)" -#: src/readelf.c:1122 +#: src/readelf.c:1146 #, c-format msgid " Start of section headers: % %s\n" msgstr " Початок заголовків розділів: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1149 #, c-format msgid " Flags: %s\n" msgstr " Прапорці: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1152 #, c-format msgid " Size of this header: % %s\n" msgstr " Розмір цього заголовка: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1153 src/readelf.c:1156 src/readelf.c:1173 msgid "(bytes)" msgstr "(байтів)" -#: src/readelf.c:1131 +#: src/readelf.c:1155 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Розмір записів заголовка програми: % %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1158 #, c-format msgid " Number of program headers entries: %" msgstr " Кількість записів заголовків програми: %" -#: src/readelf.c:1141 +#: src/readelf.c:1165 #, c-format msgid " (% in [0].sh_info)" msgstr " (% у [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1168 src/readelf.c:1185 src/readelf.c:1199 msgid " ([0] not available)" msgstr " ([0] недоступний)" -#: src/readelf.c:1148 +#: src/readelf.c:1172 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Розмір записів заголовків розділів: % %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1175 #, c-format msgid " Number of section headers entries: %" msgstr " Кількість записів заголовків розділів: %" -#: src/readelf.c:1158 +#: src/readelf.c:1182 #, c-format msgid " (% in [0].sh_size)" msgstr " (% у [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1195 #, c-format msgid " (% in [0].sh_link)" msgstr " (% у [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1203 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4614,7 +4622,7 @@ msgstr "" " Індекс заголовка розділу у таблиці рядків: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1207 #, c-format msgid "" " Section header string table index: %\n" @@ -4623,12 +4631,12 @@ msgstr "" " Індекс заголовка розділу у таблиці рядків: %\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1253 src/readelf.c:1461 #, c-format msgid "cannot get number of sections: %s" msgstr "не вдалося отримати кількість розділів: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1256 #, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4637,16 +4645,16 @@ msgstr "" "Виявлено %zd заголовків розділів, зміщення початку — %#:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1264 #, c-format msgid "cannot get section header string table index: %s" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1267 msgid "Section Headers:" msgstr "Заголовки розділів:" -#: src/readelf.c:1248 +#: src/readelf.c:1270 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4654,7 +4662,7 @@ msgstr "" "[№ ] Назва Тип Адр Змі Розмір ES Прап Lk " "Інф Al" -#: src/readelf.c:1250 +#: src/readelf.c:1272 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4662,35 +4670,35 @@ msgstr "" "[№ ] Назва Тип Адр Змі Розмір ES " "Прап Lk Інф Al" -#: src/readelf.c:1255 +#: src/readelf.c:1277 msgid " [Compression Size Al]" msgstr " [Стискання Розмір Ал]" -#: src/readelf.c:1257 +#: src/readelf.c:1279 msgid " [Compression Size Al]" msgstr " [Стискання Розмір Ал]" -#: src/readelf.c:1335 +#: src/readelf.c:1357 #, c-format msgid "bad compression header for section %zd: %s" msgstr "помилковий заголовок стиснення для розділу %zd: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1368 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "помилкове значення стисненого розміру gnu для розділу %zd: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1386 msgid "Program Headers:" msgstr "Заголовки програми:" -#: src/readelf.c:1366 +#: src/readelf.c:1388 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Тип Зміщен ВіртАдр ФізАдр РозмФайл РозмПам Пра Вирів" -#: src/readelf.c:1369 +#: src/readelf.c:1391 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4698,12 +4706,12 @@ msgstr "" " Тип Зміщен ВіртАдр ФізАдр " "РозмФайлРозмПам Пра Вирів" -#: src/readelf.c:1426 +#: src/readelf.c:1448 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Запит щодо інтерпретатора програми: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1473 msgid "" "\n" " Section to Segment mapping:\n" @@ -4713,12 +4721,12 @@ msgstr "" " Відображення розділів на сегмент:\n" " Розділи сегмента..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1484 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 #, c-format msgid "cannot get program header: %s" msgstr "не вдалося отримати заголовок програми: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1628 #, c-format msgid "" "\n" @@ -4736,7 +4744,7 @@ msgstr[2] "" "\n" "Група розділів COMDAT [%2zu] «%s» з підписом «%s» містить %zu записів:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1633 #, c-format msgid "" "\n" @@ -4754,31 +4762,31 @@ msgstr[2] "" "\n" "Група розділів [%2zu] «%s» з підписом «%s» містить %zu записів:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1641 msgid "" msgstr "<НЕКОРЕКТНИЙ СИМВОЛ>" -#: src/readelf.c:1637 +#: src/readelf.c:1655 msgid "" 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:1678 src/readelf.c:2461 src/readelf.c:3563 src/readelf.c:12873 +#: src/readelf.c:12880 src/readelf.c:12924 src/readelf.c:12931 msgid "Couldn't uncompress section" msgstr "Не вдалося розпакувати розділ" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1682 src/readelf.c:2466 src/readelf.c:3567 #, 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:1851 src/readelf.c:2532 src/readelf.c:2797 src/readelf.c:2872 +#: src/readelf.c:3175 src/readelf.c:3249 src/readelf.c:5570 #, c-format msgid "invalid sh_link value in section %zu" msgstr "некоректне значення sh_link у розділі %zu" -#: src/readelf.c:1812 +#: src/readelf.c:1854 #, c-format msgid "" "\n" @@ -4801,36 +4809,73 @@ msgstr[2] "" "Динамічний сегмент містить %lu записів:\n" " Адр: %#0* Зміщення: %#08 Пос. на розділ: [%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1867 +#, fuzzy, c-format +#| msgid "" +#| "\n" +#| "Dynamic segment contains %lu entry:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +#| msgid_plural "" +#| "\n" +#| "Dynamic segment contains %lu entries:\n" +#| " Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" +msgid "" +"\n" +"Dynamic segment contains %lu entry:\n" +" Addr: %#0* Offset: %#08\n" +msgid_plural "" +"\n" +"Dynamic segment contains %lu entries:\n" +" Addr: %#0* Offset: %#08\n" +msgstr[0] "" +"\n" +"Динамічний сегмент містить %lu запис:\n" +" Адр: %#0* Зміщення: %#08 Пос. на розділ: [%2u] '%s'\n" +msgstr[1] "" +"\n" +"Динамічний сегмент містить %lu записи:\n" +" Адр: %#0* Зміщення: %#08 Пос. на розділ: [%2u] '%s'\n" +msgstr[2] "" +"\n" +"Динамічний сегмент містить %lu записів:\n" +" Адр: %#0* Зміщення: %#08 Пос. на розділ: [%2u] '%s'\n" + +#: src/readelf.c:1877 msgid " Type Value\n" msgstr " Тип Значення\n" -#: src/readelf.c:1846 +#: src/readelf.c:1886 +#, fuzzy +#| msgid "cannot get string section data: %s" +msgid "cannot get string table by using dynamic segment" +msgstr "не вдалося отримати дані розділу рядків: %s" + +#: src/readelf.c:1925 #, c-format msgid "Shared library: [%s]\n" msgstr "Спільна бібліотека: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1929 #, c-format msgid "Library soname: [%s]\n" msgstr "Назва so бібліотеки: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1933 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath бібліотеки: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1937 #, c-format msgid "Library runpath: [%s]\n" msgstr "Runpath бібліотеки: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1956 #, c-format msgid "% (bytes)\n" msgstr "% (байт)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2070 src/readelf.c:2259 #, c-format msgid "" "\n" @@ -4839,7 +4884,7 @@ msgstr "" "\n" "Некоректна таблиця символів за зміщенням %#0\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2087 src/readelf.c:2276 #, c-format msgid "" "\n" @@ -4868,7 +4913,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:2102 src/readelf.c:2291 #, c-format msgid "" "\n" @@ -4886,30 +4931,30 @@ msgstr[2] "" "\n" "Розділ пересування [%2u] «%s» за зміщенням %#0 містить %d записів:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2112 msgid " Offset Type Value Name\n" msgstr " Зміщення Тип Значення Назва\n" -#: src/readelf.c:2039 +#: src/readelf.c:2114 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:2167 src/readelf.c:2178 src/readelf.c:2191 src/readelf.c:2212 +#: src/readelf.c:2224 src/readelf.c:2357 src/readelf.c:2369 src/readelf.c:2383 +#: src/readelf.c:2405 src/readelf.c:2418 msgid "" msgstr "<НЕКОРЕКТНЕ ПЕРЕМІЩЕННЯ>" -#: src/readelf.c:2227 +#: src/readelf.c:2301 msgid " Offset Type Value Addend Name\n" msgstr " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:2229 +#: src/readelf.c:2303 msgid " Offset Type Value Addend Name\n" msgstr "" " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:2467 +#: src/readelf.c:2540 #, c-format msgid "" "\n" @@ -4927,7 +4972,7 @@ msgstr[2] "" "\n" "Таблиця символів [%2u] «%s» містить %u записів:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2545 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4935,33 +4980,33 @@ msgstr[0] " %lu лок. символ Таблиця символів: [%2u] « msgstr[1] " %lu лок. символи Таблиця символів: [%2u] «%s»\n" msgstr[2] " %lu лок. символів Таблиця символів: [%2u] «%s»\n" -#: src/readelf.c:2480 +#: src/readelf.c:2553 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2482 +#: src/readelf.c:2555 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2502 +#: src/readelf.c:2575 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2668 #, c-format msgid "bad dynamic symbol" msgstr "помилковий динамічний символ" -#: src/readelf.c:2680 +#: src/readelf.c:2753 msgid "none" msgstr "немає" -#: src/readelf.c:2697 +#: src/readelf.c:2770 msgid "| " msgstr "| <невідомо>" -#: src/readelf.c:2728 +#: src/readelf.c:2800 #, c-format msgid "" "\n" @@ -4984,17 +5029,17 @@ msgstr[2] "" "Розділ потреби у версіях [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2749 +#: src/readelf.c:2821 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Версія: %hu Файл: %s Кть: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2834 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Назва: %s Прап: %s Версія: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2876 #, c-format msgid "" "\n" @@ -5017,18 +5062,18 @@ msgstr[2] "" "Розділ визначення версії [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2833 +#: src/readelf.c:2904 #, 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:2919 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: батьківський %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3179 #, c-format msgid "" "\n" @@ -5051,15 +5096,15 @@ msgstr[2] "" "Розділ символів версій [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»" -#: src/readelf.c:3137 +#: src/readelf.c:3207 msgid " 0 *local* " msgstr " 0 *локальний* " -#: src/readelf.c:3142 +#: src/readelf.c:3212 msgid " 1 *global* " msgstr " 1 *загальний* " -#: src/readelf.c:3184 +#: src/readelf.c:3254 #, c-format msgid "" "\n" @@ -5087,22 +5132,22 @@ msgstr[2] "" "блоками):\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:3206 +#: src/readelf.c:3276 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Довжина Номер % від загал. Покриття\n" -#: src/readelf.c:3208 +#: src/readelf.c:3278 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3285 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3298 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5111,37 +5156,37 @@ msgstr "" " Середня кількість тестів: успішний пошук: %f\n" "\t\t\t неуспішний пошук: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3316 src/readelf.c:3380 src/readelf.c:3446 #, c-format msgid "cannot get data for section %d: %s" msgstr "не вдалося отримати дані для розділу %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3324 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "некоректні дані у розділі sysv.hash %d" -#: src/readelf.c:3283 +#: src/readelf.c:3353 #, c-format msgid "invalid chain in sysv.hash section %d" msgstr "некоректний ланцюжок у розділі sysv.hash %d" -#: src/readelf.c:3318 +#: src/readelf.c:3388 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "некоректні дані у розділі sysv.hash64 %d" -#: src/readelf.c:3349 +#: src/readelf.c:3419 #, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "некоректний ланцюжок у розділі sysv.hash64 %d" -#: src/readelf.c:3385 +#: src/readelf.c:3455 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "некоректні дані у розділі gnu.hash %d" -#: src/readelf.c:3452 +#: src/readelf.c:3521 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5151,7 +5196,7 @@ msgstr "" " Розмір бітової маски: %zu байтів %%% встановлених бітів зсув " "2-го хешу: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3606 #, c-format msgid "" "\n" @@ -5172,7 +5217,7 @@ msgstr[2] "" "Розділ списку бібліотек [%2zu] «%s» за зміщенням %#0 містить %d " "записів:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3620 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5180,7 +5225,7 @@ msgstr "" " Бібліотека Часовий штамп Версія суми " "Прапорці" -#: src/readelf.c:3614 +#: src/readelf.c:3680 #, c-format msgid "" "\n" @@ -5191,102 +5236,101 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3697 msgid " Owner Size\n" msgstr " Власник Розмір\n" -#: src/readelf.c:3655 +#: src/readelf.c:3721 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3760 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3765 #, c-format msgid " File: %11\n" msgstr " Файл: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3814 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3817 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3820 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3830 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3833 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, c-format +#: src/readelf.c:3903 msgid "sprintf failure" msgstr "помилка sprintf" -#: src/readelf.c:4319 +#: src/readelf.c:4387 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:4322 +#: src/readelf.c:4390 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:4800 +#: src/readelf.c:4868 #, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%2] %s <ОБРІЗАНО>\n" -#: src/readelf.c:4867 +#: src/readelf.c:5028 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# використано з різними розмірами адрес" -#: src/readelf.c:4874 +#: src/readelf.c:5035 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# використано з різними розмірами зміщень" -#: src/readelf.c:4881 +#: src/readelf.c:5042 #, c-format msgid "%s %# used with different base addresses" msgstr "%s %# використано з різними базовими адресами" -#: src/readelf.c:4888 +#: src/readelf.c:5049 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# використано з різними атрибутами, %s і %s" -#: src/readelf.c:4988 +#: src/readelf.c:5149 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4996 +#: src/readelf.c:5157 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ> ... % байтів ...\n" -#: src/readelf.c:5099 +#: src/readelf.c:5260 #, c-format msgid "" "\n" @@ -5297,7 +5341,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" " [ Код]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5268 #, c-format msgid "" "\n" @@ -5306,20 +5350,20 @@ msgstr "" "\n" "Розділ скорочень за зміщенням %:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5281 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під час читання скорочення: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5297 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] зміщення: %, дочірній: %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:5330 src/readelf.c:5639 src/readelf.c:5806 src/readelf.c:6191 +#: src/readelf.c:6807 src/readelf.c:8562 src/readelf.c:9308 src/readelf.c:9791 +#: src/readelf.c:10042 src/readelf.c:10208 src/readelf.c:10595 +#: src/readelf.c:10655 #, c-format msgid "" "\n" @@ -5328,54 +5372,54 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5343 #, 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:5443 src/readelf.c:5467 src/readelf.c:5851 src/readelf.c:9353 #, c-format msgid " Length: %8\n" msgstr " Довжина: %8\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5445 src/readelf.c:5482 src/readelf.c:5864 src/readelf.c:9366 #, c-format msgid " DWARF version: %8\n" msgstr " версія DWARF: %8\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5446 src/readelf.c:5491 src/readelf.c:5873 src/readelf.c:9375 #, c-format msgid " Address size: %8\n" msgstr " Розмір адреси: %8\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5448 src/readelf.c:5501 src/readelf.c:5883 src/readelf.c:9385 #, c-format msgid " Segment size: %8\n" msgstr "" " Розмір сегмента: %8\n" "\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5486 src/readelf.c:5868 src/readelf.c:9370 src/readelf.c:10787 #, 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:5496 src/readelf.c:5709 src/readelf.c:5878 src/readelf.c:9380 #, 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:5507 src/readelf.c:5720 src/readelf.c:5888 src/readelf.c:9390 #, c-format msgid "unsupported segment size" msgstr "непідтримуваний розмір сегмента" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5560 src/readelf.c:5634 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалося отримати дані get .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5575 #, c-format msgid "" "\n" @@ -5393,12 +5437,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщенням %# містить %zu записів:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5606 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5608 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5406,7 +5450,7 @@ msgstr "" " [%*zu] початок: %0#*, довжина: %5, зміщення CU DIE: " "%6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5652 src/readelf.c:8589 #, c-format msgid "" "\n" @@ -5415,13 +5459,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:5656 src/readelf.c:5832 src/readelf.c:6831 src/readelf.c:8600 +#: src/readelf.c:9334 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "некоректні дані у розділі [%zu] «%s»" -#: src/readelf.c:5511 +#: src/readelf.c:5672 #, c-format msgid "" "\n" @@ -5430,27 +5474,27 @@ msgstr "" "\n" " Довжина: %6\n" -#: src/readelf.c:5523 +#: src/readelf.c:5684 #, c-format msgid " DWARF version: %6\n" msgstr " версія DWARF: %6\n" -#: src/readelf.c:5527 +#: src/readelf.c:5688 #, c-format msgid "unsupported aranges version" msgstr "непідтримувана версія aranges" -#: src/readelf.c:5538 +#: src/readelf.c:5699 #, c-format msgid " CU offset: %6\n" msgstr " зміщення CU: %6\n" -#: src/readelf.c:5544 +#: src/readelf.c:5705 #, c-format msgid " Address size: %6\n" msgstr " Розмір адреси: %6\n" -#: src/readelf.c:5555 +#: src/readelf.c:5716 #, c-format msgid "" " Segment size: %6\n" @@ -5459,17 +5503,17 @@ msgstr "" " Розмір сегмента: %6\n" "\n" -#: src/readelf.c:5610 +#: src/readelf.c:5771 #, c-format msgid " %zu padding bytes\n" msgstr " %zu байтів доповнення\n" -#: src/readelf.c:5654 +#: src/readelf.c:5815 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "не вдалося отримати вміст .debug_rnglists: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5838 src/readelf.c:9340 #, c-format msgid "" "Table at Offset 0x%:\n" @@ -5478,42 +5522,42 @@ msgstr "" "Таблиця за зміщенням 0x%:\n" "\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5893 src/readelf.c:9395 #, c-format msgid " Offset entries: %8\n" msgstr " Записи зміщення: %8\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5909 src/readelf.c:9411 #, c-format msgid " Unknown CU base: " msgstr " Невідома основа CU: " -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5911 src/readelf.c:9413 #, c-format msgid " CU [%6] base: " msgstr " Основа CU [%6]: " -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5917 src/readelf.c:9419 #, c-format msgid " Not associated with a CU.\n" msgstr " Не пов'язано із CU.\n" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5928 src/readelf.c:9430 #, c-format msgid "too many offset entries for unit length" msgstr "забагато записів зсуву для довжини модуля" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5932 src/readelf.c:9434 #, c-format msgid " Offsets starting at 0x%:\n" msgstr " Зміщення, що починаються з 0x%:\n" -#: src/readelf.c:5823 +#: src/readelf.c:5984 #, c-format msgid "invalid range list data" msgstr "некоректні дані списку діапазонів" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6169 src/readelf.c:9769 #, c-format msgid "" " %zu padding bytes\n" @@ -5522,12 +5566,12 @@ msgstr "" " %zu байтів доповнення\n" "\n" -#: src/readelf.c:6025 +#: src/readelf.c:6186 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "не вдалося отримати дані .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6222 src/readelf.c:9824 #, c-format msgid "" "\n" @@ -5536,7 +5580,7 @@ msgstr "" "\n" " Невідома основа CU: " -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6224 src/readelf.c:9826 #, c-format msgid "" "\n" @@ -5545,31 +5589,31 @@ msgstr "" "\n" " Основа CU [%6]: " -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6233 src/readelf.c:9852 src/readelf.c:9878 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6258 src/readelf.c:9962 #, fuzzy msgid "base address" msgstr " встановити адресу у значення " -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6268 src/readelf.c:9972 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній список\n" -#: src/readelf.c:6367 +#: src/readelf.c:6528 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6785 #, c-format msgid "cannot get ELF: %s" msgstr "не вдалося отримати ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6803 #, c-format msgid "" "\n" @@ -5578,7 +5622,7 @@ msgstr "" "\n" "Розділ відомостей щодо вікна викликів [%2zu] «%s» за зміщенням %#:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6853 #, c-format msgid "" "\n" @@ -5587,65 +5631,65 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6954 src/readelf.c:7108 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшення" -#: src/readelf.c:6808 +#: src/readelf.c:6969 msgid "FDE address encoding: " msgstr "Кодування адреси FDE: " -#: src/readelf.c:6814 +#: src/readelf.c:6975 msgid "LSDA pointer encoding: " msgstr "Кодування вказівника LSDA: " -#: src/readelf.c:6924 +#: src/readelf.c:7085 #, c-format msgid " (offset: %#)" msgstr " (зміщення: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:7092 #, c-format msgid " (end offset: %#)" msgstr " (зміщення від кінця: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:7129 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sвказівник LSDA: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7214 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "DIE [%] не вдалося отримати код атрибута: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7224 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "DIE [%] не вдалося отримати форму атрибута: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7246 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%] не вдалося отримати значення атрибута «%s» (%s): %s" -#: src/readelf.c:7415 +#: src/readelf.c:7576 #, c-format msgid "invalid file (%): %s" msgstr "некоректний файл (%): %s" -#: src/readelf.c:7419 +#: src/readelf.c:7580 #, c-format msgid "no srcfiles for CU [%]" msgstr "немає srcfiles для CU [%]" -#: src/readelf.c:7423 +#: src/readelf.c:7584 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "не вдалося отримати CU DWARF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7899 #, c-format msgid "" "\n" @@ -5656,12 +5700,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщенням %#:\n" " [Зміщення]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7949 #, c-format msgid "cannot get next unit: %s" msgstr "не вдалося отримати наступний модуль: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7969 #, c-format msgid "" " Type unit at offset %:\n" @@ -5674,7 +5718,7 @@ msgstr "" "%, Розмір зміщення: %\n" " Підпис типу: %#, Зміщення типу: %# [%]\n" -#: src/readelf.c:7820 +#: src/readelf.c:7981 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5685,38 +5729,38 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7991 src/readelf.c:8152 #, c-format msgid " Unit type: %s (%)" msgstr " Тип модуля: %s (%)" -#: src/readelf.c:7857 +#: src/readelf.c:8018 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "невідома версія (%d) або тип модуля (%d)" -#: src/readelf.c:7886 +#: src/readelf.c:8047 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалося отримати зміщення DIE: %s" -#: src/readelf.c:7895 +#: src/readelf.c:8056 #, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "не вдалося отримати мітку DIE за зміщенням [%] у розділі «%s»: %s" -#: src/readelf.c:7933 +#: src/readelf.c:8092 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалося визначити наступний DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:8100 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалося визначити наступний DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:8144 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5727,7 +5771,7 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:8037 +#: src/readelf.c:8196 #, c-format msgid "" "\n" @@ -5738,18 +5782,18 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" "\n" -#: src/readelf.c:8369 +#: src/readelf.c:8528 #, c-format msgid "unknown form: %s" msgstr "невідома форма: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8576 #, 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:8680 #, c-format msgid "" "\n" @@ -5782,27 +5826,27 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8702 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "не вдалося обробити версію .debug_line: %u\n" -#: src/readelf.c:8532 +#: src/readelf.c:8710 #, c-format msgid "cannot handle address size: %u\n" msgstr "не вдалося обробити розмір адреси: %u\n" -#: src/readelf.c:8540 +#: src/readelf.c:8718 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "не вдалося обробити розмір селектора сегментів: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8728 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщенням %tu у розділі [%zu] «%s»" -#: src/readelf.c:8565 +#: src/readelf.c:8743 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5810,7 +5854,7 @@ msgstr[0] " [%*] %hhu аргумент\n" msgstr[1] " [%*] %hhu аргументи\n" msgstr[2] " [%*] %hhu аргументів\n" -#: src/readelf.c:8576 +#: src/readelf.c:8754 msgid "" "\n" "Directory table:" @@ -5818,12 +5862,12 @@ msgstr "" "\n" "Таблиця каталогу:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8760 src/readelf.c:8837 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8653 +#: src/readelf.c:8831 msgid "" "\n" "File name table:" @@ -5831,11 +5875,11 @@ msgstr "" "\n" " Таблиця назв файлів:" -#: src/readelf.c:8714 +#: src/readelf.c:8892 msgid " Entry Dir Time Size Name" msgstr " Запис Кат Час Розмір Назва" -#: src/readelf.c:8753 +#: src/readelf.c:8938 #, fuzzy msgid "" "\n" @@ -5844,7 +5888,7 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:8757 +#: src/readelf.c:8942 msgid "" "\n" "Line number statements:" @@ -5852,118 +5896,129 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:8777 +#: src/readelf.c:8957 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "некоректну кількість операцій на інструкцію прирівняно до нуля" -#: src/readelf.c:8811 +#: src/readelf.c:8991 #, c-format msgid " special opcode %u: address+%u = " msgstr " спеціальний код операції %u: адреса+%u = " -#: src/readelf.c:8815 +#: src/readelf.c:8995 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", індекс_оп = %u, рядок%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8998 #, c-format msgid ", line%+d = %zu\n" msgstr ", рядок%+d = %zu\n" -#: src/readelf.c:8836 +#: src/readelf.c:9016 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:8841 +#: src/readelf.c:9021 msgid " end of sequence" msgstr " кінець послідовності" -#: src/readelf.c:8859 +#: src/readelf.c:9039 #, c-format msgid " set address to " msgstr " встановити адресу у значення " -#: src/readelf.c:8887 +#: src/readelf.c:9067 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -" визначення нового файла: dir=%u, mtime=%, довжина=%, назва=" -"%s\n" +" визначення нового файла: dir=%u, mtime=%, довжина=%, " +"назва=%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:9081 #, c-format msgid " set discriminator to %u\n" msgstr " встановити розрізнення для %u\n" +#: src/readelf.c:9108 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:9132 +#, 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:9139 msgid " unknown opcode" msgstr " невідомий код операції" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:9151 msgid " copy" msgstr " копія" -#: src/readelf.c:8929 +#: src/readelf.c:9162 #, c-format msgid " advance address by %u to " msgstr " збільшення адреси на %u до " -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9166 src/readelf.c:9227 #, c-format msgid ", op_index to %u" msgstr ", op_index до %u" -#: src/readelf.c:8945 +#: src/readelf.c:9178 #, c-format msgid " advance line by constant %d to %\n" msgstr " просувати рядок на сталу %d до %\n" -#: src/readelf.c:8955 +#: src/readelf.c:9188 #, c-format msgid " set file to %\n" msgstr " встановити файл у %\n" -#: src/readelf.c:8966 +#: src/readelf.c:9199 #, c-format msgid " set column to %\n" msgstr " встановити значення стовпчика %\n" -#: src/readelf.c:8973 +#: src/readelf.c:9206 #, c-format msgid " set '%s' to %\n" msgstr " встановити «%s» у %\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9212 msgid " set basic block flag" msgstr " встановити прапорець базового блоку" -#: src/readelf.c:8990 +#: src/readelf.c:9223 #, c-format msgid " advance address by constant %u to " msgstr " збільшити адресу на сталу величину %u до " -#: src/readelf.c:9010 +#: src/readelf.c:9243 #, c-format msgid " advance address by fixed value %u to \n" msgstr " збільшити адресу на фіксовану величину %u до \n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9253 msgid " set prologue end flag" msgstr " встановити прапорець кінця вступу" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9258 msgid " set epilogue begin flag" msgstr " встановити прапорець початку епілогу" -#: src/readelf.c:9035 +#: src/readelf.c:9268 #, c-format msgid " set isa to %u\n" msgstr " встановити isa у %u\n" @@ -5971,7 +6026,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:9277 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5979,102 +6034,102 @@ msgstr[0] " невідомий код операції з % параме msgstr[1] " невідомий код операції з % параметрами:" msgstr[2] " невідомий код операції з % параметрами:" -#: src/readelf.c:9084 +#: src/readelf.c:9317 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "не вдалося отримати вміст .debug_loclists: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9483 #, fuzzy, c-format msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9523 #, c-format msgid "invalid loclists data" msgstr "некоректні дані loclists" -#: src/readelf.c:9543 +#: src/readelf.c:9786 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалося отримати вміст .debug_loc: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9999 src/readelf.c:11043 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:10054 src/readelf.c:10217 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалося отримати дані розділу відомостей щодо макросів: %s" -#: src/readelf.c:9891 +#: src/readelf.c:10134 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений рядок наприкінці розділу" -#: src/readelf.c:9914 +#: src/readelf.c:10157 #, 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:10258 #, c-format msgid " Offset: 0x%\n" msgstr " Зміщення: 0x%\n" -#: src/readelf.c:10027 +#: src/readelf.c:10270 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10276 src/readelf.c:11163 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома версія, не вдалося обробити розділ\n" -#: src/readelf.c:10040 +#: src/readelf.c:10283 #, c-format msgid " Flag: 0x%" msgstr " Прапорець: 0x%" -#: src/readelf.c:10069 +#: src/readelf.c:10312 #, c-format msgid " Offset length: %\n" msgstr " Довжина зміщення: %\n" -#: src/readelf.c:10077 +#: src/readelf.c:10320 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " зміщення .debug_line: 0x%\n" -#: src/readelf.c:10102 +#: src/readelf.c:10345 #, c-format msgid " extension opcode table, % items:\n" msgstr " таблиця кодів операцій розширень, записів — %:\n" -#: src/readelf.c:10109 +#: src/readelf.c:10352 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:10121 +#: src/readelf.c:10364 #, c-format msgid " % arguments:" msgstr " % аргументів:" -#: src/readelf.c:10136 +#: src/readelf.c:10379 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:10337 +#: src/readelf.c:10580 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " [%5d] зміщення DIE: %6, зміщення CU DIE: %6, назва: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10624 #, c-format msgid "" "\n" @@ -6086,42 +6141,42 @@ msgstr "" " %*s Рядок\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10629 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10639 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** помилка, пропущено роздільник рядків\n" -#: src/readelf.c:10425 +#: src/readelf.c:10668 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "не вдалося отримати дані розділу .debug_str_offsets: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10767 #, c-format msgid " Length: %8\n" msgstr " Довжина: %8\n" -#: src/readelf.c:10526 +#: src/readelf.c:10769 #, c-format msgid " Offset size: %8\n" msgstr " Розмір зсуву: %8\n" -#: src/readelf.c:10540 +#: src/readelf.c:10783 #, c-format msgid " DWARF version: %8\n" msgstr " версія DWARF: %8\n" -#: src/readelf.c:10549 +#: src/readelf.c:10792 #, c-format msgid " Padding: %8\n" msgstr " Заповнення: %8\n" -#: src/readelf.c:10603 +#: src/readelf.c:10846 #, c-format msgid "" "\n" @@ -6130,7 +6185,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10948 #, c-format msgid "" "\n" @@ -6139,22 +6194,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10971 #, c-format msgid " LPStart encoding: %#x " msgstr " Кодування LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10983 #, c-format msgid " TType encoding: %#x " msgstr " Кодування TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10998 #, c-format msgid " Call site encoding: %#x " msgstr " Кодування місця виклику:%#x " -#: src/readelf.c:10768 +#: src/readelf.c:11011 msgid "" "\n" " Call site table:" @@ -6162,7 +6217,7 @@ msgstr "" "\n" " Таблиця місця виклику:" -#: src/readelf.c:10782 +#: src/readelf.c:11025 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6175,12 +6230,12 @@ msgstr "" " Місце застосування: %#\n" " Дія: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:11098 #, c-format msgid "invalid TType encoding" msgstr "некоректне кодування TType" -#: src/readelf.c:10882 +#: src/readelf.c:11125 #, c-format msgid "" "\n" @@ -6189,37 +6244,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщенням %# містить % байтів:\n" -#: src/readelf.c:10911 +#: src/readelf.c:11154 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:11172 #, c-format msgid " CU offset: %#\n" msgstr " зміщення CU: %#\n" -#: src/readelf.c:10936 +#: src/readelf.c:11179 #, c-format msgid " TU offset: %#\n" msgstr " зміщення TU: %#\n" -#: src/readelf.c:10943 +#: src/readelf.c:11186 #, c-format msgid " address offset: %#\n" msgstr " зміщення адреси: %#\n" -#: src/readelf.c:10950 +#: src/readelf.c:11193 #, c-format msgid " symbol offset: %#\n" msgstr " зміщення символу: %#\n" -#: src/readelf.c:10957 +#: src/readelf.c:11200 #, c-format msgid " constant offset: %#\n" msgstr " стале зміщення: %#\n" -#: src/readelf.c:10971 +#: src/readelf.c:11214 #, c-format msgid "" "\n" @@ -6228,7 +6283,7 @@ msgstr "" "\n" " Список CU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11239 #, c-format msgid "" "\n" @@ -6237,7 +6292,7 @@ msgstr "" "\n" " Список TU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11268 #, c-format msgid "" "\n" @@ -6246,7 +6301,7 @@ msgstr "" "\n" " Список адрес зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11300 #, c-format msgid "" "\n" @@ -6255,18 +6310,18 @@ msgstr "" "\n" " Таблиця символів за зміщенням %# містить %zu позицій:\n" -#: src/readelf.c:11195 +#: src/readelf.c:11438 #, 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:11804 src/readelf.c:12431 src/readelf.c:12541 +#: src/readelf.c:12598 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалося перетворити дані запису ядра: %s" -#: src/readelf.c:11926 +#: src/readelf.c:12168 #, c-format msgid "" "\n" @@ -6275,21 +6330,21 @@ msgstr "" "\n" "%*s... <повторюється %u разів> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12677 msgid " Owner Data size Type\n" msgstr " Власник Розм. даних Тип\n" -#: src/readelf.c:12466 +#: src/readelf.c:12705 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12757 #, c-format msgid "cannot get content of note: %s" msgstr "не вдалося отримати вміст нотатки: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12790 #, c-format msgid "" "\n" @@ -6299,7 +6354,7 @@ msgstr "" "Розділ записів (note) [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12813 #, c-format msgid "" "\n" @@ -6308,7 +6363,7 @@ msgstr "" "\n" "Сегмент записів з % байтів за зміщенням %#0:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12860 #, c-format msgid "" "\n" @@ -6317,12 +6372,12 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міститься даних для створення дампу.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12887 src/readelf.c:12938 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "не вдалося отримати дані для розділу [%zu] «%s»: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12892 #, c-format msgid "" "\n" @@ -6331,7 +6386,7 @@ msgstr "" "\n" "Шіст. дамп розділу [%zu] «%s», % байтів за зміщенням %#0:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12897 #, c-format msgid "" "\n" @@ -6342,7 +6397,7 @@ msgstr "" "Шіст. дамп розділу [%zu] «%s», % байтів (%zd нестиснено) за " "зміщенням %#0:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12911 #, c-format msgid "" "\n" @@ -6351,7 +6406,7 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міститься рядків для створення дампу.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12943 #, c-format msgid "" "\n" @@ -6360,7 +6415,7 @@ msgstr "" "\n" "Розділ рядків [%zu] «%s» містить % байтів за зміщенням %#0:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12948 #, c-format msgid "" "\n" @@ -6371,7 +6426,7 @@ msgstr "" "Рядок розділу [%zu] «%s» містить % байти (%zd нестиснено) на " "зміщенні %#0:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12996 #, c-format msgid "" "\n" @@ -6380,7 +6435,7 @@ msgstr "" "\n" "розділу [%lu] не існує" -#: src/readelf.c:12789 +#: src/readelf.c:13026 #, c-format msgid "" "\n" @@ -6389,12 +6444,12 @@ msgstr "" "\n" "розділу «%s» не існує" -#: src/readelf.c:12846 +#: src/readelf.c:13081 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалося отримати покажчик символів архіву «%s»: %s" -#: src/readelf.c:12849 +#: src/readelf.c:13084 #, c-format msgid "" "\n" @@ -6403,7 +6458,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика символів\n" -#: src/readelf.c:12853 +#: src/readelf.c:13088 #, c-format msgid "" "\n" @@ -6412,17 +6467,17 @@ msgstr "" "\n" "Покажчик архіву «%s» містить %zu записів:\n" -#: src/readelf.c:12871 +#: src/readelf.c:13106 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "не вдалося видобути елемент за зміщенням %zu у «%s»: %s" -#: src/readelf.c:12876 +#: src/readelf.c:13111 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» містить:\n" -#: src/size.c:56 +#: src/size.c:55 msgid "" "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " "is `bsd'" @@ -6430,123 +6485,122 @@ msgstr "" "Використовувати формат виводу ФОРМАТ. ФОРМАТом може бути «bsd» або «sysv». " "Типовим є значення «bsd»" -#: src/size.c:58 +#: src/size.c:57 msgid "Same as `--format=sysv'" msgstr "Те саме, що і «--format=sysv»" -#: src/size.c:59 +#: src/size.c:58 msgid "Same as `--format=bsd'" msgstr "Те саме, що і «--format=bsd»" -#: src/size.c:62 +#: src/size.c:61 msgid "Same as `--radix=10'" msgstr "Те саме, що і «--radix=10»" -#: src/size.c:63 +#: src/size.c:62 msgid "Same as `--radix=8'" msgstr "Те саме, що і «--radix=8»" -#: src/size.c:64 +#: src/size.c:63 msgid "Same as `--radix=16'" msgstr "Те саме, що і «--radix=16»" -#: src/size.c:66 +#: src/size.c:65 msgid "Similar to `--format=sysv' output but in one line" msgstr "Вивід даних у форматі, подібному до «--format=sysv», але у один рядок" -#: src/size.c:70 +#: src/size.c:69 msgid "Print size and permission flags for loadable segments" msgstr "" "Вивести розмір і прапорці прав доступу для придатних до завантаження " "сегментів" -#: src/size.c:71 +#: src/size.c:70 msgid "Display the total sizes (bsd only)" msgstr "Показувати загальні розміри (лише bsd)" #. Short description of program. -#: src/size.c:76 +#: src/size.c:75 msgid "List section sizes of FILEs (a.out by default)." msgstr "Показати розміри розділів ФАЙЛів (типово a.out)." -#: src/size.c:240 +#: src/size.c:239 #, c-format msgid "Invalid format: %s" msgstr "Некоректний формат: %s" -#: src/size.c:251 +#: src/size.c:250 #, c-format msgid "Invalid radix: %s" msgstr "Некоректна основа числення: %s" -#: src/size.c:310 +#: src/size.c:309 #, c-format msgid "%s: file format not recognized" msgstr "%s: не вдалося розпізнати формат файла" -#: src/size.c:328 +#: src/size.c:327 msgctxt "bsd" msgid "text" msgstr "" -#: src/size.c:329 +#: src/size.c:328 msgctxt "bsd" msgid "data" msgstr "" -#: src/size.c:330 +#: src/size.c:329 msgctxt "bsd" msgid "bss" msgstr "" -#: src/size.c:331 +#: src/size.c:330 msgctxt "bsd" msgid "dec" msgstr "" -#: src/size.c:332 +#: src/size.c:331 msgctxt "bsd" msgid "hex" msgstr "" -#: src/size.c:333 +#: src/size.c:332 msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:416 src/size.c:557 #, c-format msgid " (ex %s)" msgstr " (прикл. %s)" -#: src/size.c:420 +#: src/size.c:418 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "некоректний розділ" -#: src/size.c:421 +#: src/size.c:419 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:420 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:449 src/size.c:452 src/size.c:455 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:479 msgid "cannot get section header" msgstr "не вдалося отримати заголовок розділу" -#: src/size.c:585 +#: src/size.c:582 msgid "(TOTALS)\n" msgstr "(ЗАГАЛОМ)\n" @@ -6685,21 +6739,21 @@ msgstr "" msgid "Couldn't show any frames." msgstr "Не вдалося вивести жодного вікна." -#: src/strings.c:65 +#: src/strings.c:64 msgid "Output Selection:" msgstr "Вибір виводу:" -#: src/strings.c:66 +#: src/strings.c:65 msgid "Scan entire file, not only loaded sections" msgstr "Шукати у всьому файлі, а не лише у завантажених розділах" -#: src/strings.c:68 +#: src/strings.c:67 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" msgstr "" "Буде виведено лише послідовності з не менше, ніж MIN-LEN символів, що " "завершуються на NUL" -#: src/strings.c:69 +#: src/strings.c:68 msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" @@ -6707,78 +6761,74 @@ msgstr "" "Визначення розмірності та порядку бітів символів: s = 7-бітові, S = 8-" "бітові, {b,l} = 16-бітові, {B,L} = 32-бітові" -#: src/strings.c:73 +#: src/strings.c:72 msgid "Print name of the file before each string." msgstr "Виводити назву файла перед кожним рядком." -#: src/strings.c:75 +#: src/strings.c:74 msgid "Print location of the string in base 8, 10, or 16 respectively." msgstr "Виводити адресу рядка за основами 8, 10 та 16, відповідно." -#: src/strings.c:76 +#: src/strings.c:75 msgid "Alias for --radix=o" msgstr "Замінник --radix=o" #. Short description of program. -#: src/strings.c:83 +#: src/strings.c:82 msgid "Print the strings of printable characters in files." msgstr "Вивести рядки файлів з символів, придатних для друку." -#: src/strings.c:256 src/strings.c:291 +#: src/strings.c:255 src/strings.c:290 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "некоректне значення «%s» параметра %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:300 msgid "invalid minimum length of matched string size" msgstr "некоректна мінімальна довжина розмірності рядка для порівняння" -#: src/strings.c:585 -#, c-format +#: src/strings.c:583 msgid "lseek failed" msgstr "помилка lseek" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:600 src/strings.c:664 msgid "re-mmap failed" msgstr "помилка повторного використання mmap" -#: src/strings.c:639 -#, c-format +#: src/strings.c:637 msgid "mprotect failed" msgstr "помилка mprotect" -#: src/strings.c:728 +#: src/strings.c:726 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "Пропускаємо дані %zd «%s» поза файлом" -#: src/strip.c:71 +#: src/strip.c:70 msgid "Place stripped output into FILE" msgstr "Вивести дані після вилучення до ФАЙЛа" -#: src/strip.c:72 +#: src/strip.c:71 msgid "Extract the removed sections into FILE" msgstr "Видобути вилучені розділи до ФАЙЛа" -#: src/strip.c:73 +#: src/strip.c:72 msgid "Embed name FILE instead of -f argument" msgstr "Вбудувати назву ФАЙЛа замість аргументу -f" -#: src/strip.c:77 +#: src/strip.c:76 msgid "Remove all debugging symbols" msgstr "Вилучити всі символи зневаджування" -#: src/strip.c:81 +#: src/strip.c:80 msgid "Remove section headers (not recommended)" msgstr "Вилучити заголовки розділів (не рекомендовано)" -#: src/strip.c:83 +#: src/strip.c:82 msgid "Copy modified/access timestamps to the output" msgstr "Скопіювати часові позначки зміни/доступу до виведених даних" -#: src/strip.c:85 +#: src/strip.c:84 msgid "" "Resolve all trivial relocations between debug sections if the removed " "sections are placed in a debug file (only relevant for ET_REL files, " @@ -6788,7 +6838,7 @@ msgstr "" "вилучені розділи було розташовано у діагностичному файлі (стосується лише " "файлів ET_REL, скасувати дію неможливо, потребує параметра -f)" -#: src/strip.c:87 +#: src/strip.c:86 msgid "" "Similar to --reloc-debug-sections, but resolve all trivial relocations " "between debug sections in place. No other stripping is performed (operation " @@ -6800,11 +6850,11 @@ msgstr "" "виконується (дію неможливо скасувати, параметр несумісний із -f, -g, --" "remove-comment та --remove-section)" -#: src/strip.c:89 +#: src/strip.c:88 msgid "Remove .comment section" msgstr "Вилучити розділ .comment" -#: src/strip.c:90 +#: src/strip.c:89 msgid "" "Remove the named section. SECTION is an extended wildcard pattern. May be " "given more than once. Only non-allocated sections can be removed." @@ -6813,7 +6863,7 @@ msgstr "" "замінниками. Можна вказувати декілька розділів. Може бути вилучено лише " "нерозміщені у пам'яті розділи." -#: src/strip.c:91 +#: src/strip.c:90 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." @@ -6822,17 +6872,15 @@ msgstr "" "замінниками. Можна вказувати декілька розділів." #. Short description of program. -#: src/strip.c:98 +#: src/strip.c:97 msgid "Discard symbols from object files." msgstr "Відкинути символи з об’єктних файлів" -#: src/strip.c:247 -#, c-format +#: src/strip.c:245 msgid "--reloc-debug-sections used without -f" msgstr "--reloc-debug-sections використано без -f" -#: src/strip.c:253 -#, c-format +#: src/strip.c:251 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" @@ -6840,43 +6888,41 @@ msgstr "" "--reloc-debug-sections-only є несумісним із -f, -g, --remove-comment та --" "remove-section" -#: src/strip.c:267 -#, c-format +#: src/strip.c:265 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "" "Разом з «-o» або «-f» можна використовувати лише один файл вхідних даних" -#: src/strip.c:290 +#: src/strip.c:287 #, c-format msgid "-f option specified twice" msgstr "параметр -f вказано двічі" -#: src/strip.c:299 +#: src/strip.c:296 #, c-format msgid "-F option specified twice" msgstr "параметр -F вказано двічі" -#: src/strip.c:362 +#: src/strip.c:359 #, c-format msgid "cannot both keep and remove .comment section" msgstr "неможливо одночасно зберегти і вилучити розділ .comment" -#: src/strip.c:481 -#, c-format +#: src/strip.c:478 msgid "bad relocation" msgstr "помилкове пересування" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:756 src/strip.c:780 #, c-format msgid "cannot stat input file '%s'" msgstr "не вдалося отримати дані з вхідного файла «%s» за допомогою stat" -#: src/strip.c:761 +#: src/strip.c:770 #, c-format msgid "while opening '%s'" msgstr "під час спроби відкриття «%s»" -#: src/strip.c:799 +#: src/strip.c:808 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6889,302 +6935,310 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:820 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: підтримки вилучення додаткового вмісту з архіву не передбачено" -#: src/strip.c:1047 +#: src/strip.c:1057 #, c-format msgid "cannot open EBL backend" msgstr "не вдалося відкрити канал сервера EBL" -#: src/strip.c:1092 -#, c-format +#: src/strip.c:1101 msgid "cannot get number of phdrs" msgstr "не вдалося отримати кількість phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1115 src/strip.c:1158 #, 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:1125 src/strip.c:1168 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "не вдалося створити phdr для файла «%s»: %s" -#: src/strip.c:1240 +#: src/strip.c:1248 #, c-format msgid "illformed file '%s'" msgstr "помилкове форматування файла «%s»" -#: src/strip.c:1250 +#: src/strip.c:1258 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Неможливо вилучити розміщений у пам'яті розділ «%s»" -#: src/strip.c:1259 +#: src/strip.c:1267 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Неможливо одночасно зберегти та вилучити розділ «%s»" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1631 src/strip.c:1746 #, c-format msgid "while generating output file: %s" msgstr "під час спроби створення файла з виведеними даними: %s" -#: src/strip.c:1688 +#: src/strip.c:1695 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: помилка під час оновлення заголовка ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1704 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: помилка під час отримання shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1712 src/strip.c:2553 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: помилка під час оновлення shdrstrndx: %s" -#: src/strip.c:1722 +#: src/strip.c:1729 #, c-format msgid "while preparing output for '%s'" msgstr "під час приготування виведених даних для «%s»" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1790 src/strip.c:1852 #, c-format msgid "while create section header section: %s" msgstr "під час створення розділу заголовка розділу: %s" -#: src/strip.c:1793 +#: src/strip.c:1799 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалося розмістити дані розділу: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "під час створення таблиці рядків заголовка розділу: %s" -#: src/strip.c:1866 -#, c-format +#: src/strip.c:1869 msgid "no memory to create section header string table" msgstr "недостатньо пам'яті для створення таблиці рядків заголовка розділу" -#: src/strip.c:2079 +#: src/strip.c:2082 #, 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:2469 src/strip.c:2577 #, c-format msgid "while writing '%s': %s" msgstr "під час запису «%s»: %s" -#: src/strip.c:2477 +#: src/strip.c:2480 #, c-format msgid "while creating '%s'" msgstr "під час спроби створення «%s»" -#: src/strip.c:2500 +#: src/strip.c:2503 #, c-format msgid "while computing checksum for debug information" msgstr "під час обчислення контрольної суми для діагностичних даних" -#: src/strip.c:2541 +#: src/strip.c:2544 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під час створення заголовка ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2562 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під час читання файла: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2602 src/strip.c:2622 #, c-format msgid "while writing '%s'" msgstr "під час спроби запису «%s»" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2659 src/strip.c:2666 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під час завершення «%s»: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2683 src/strip.c:2759 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалося встановити права доступу та дату зміни «%s»" -#: src/unstrip.c:66 +#: src/unstrip.c:65 msgid "Match MODULE against file names, not module names" msgstr "" "Встановити відповідність МОДУЛЯ назвам файлів, а не назвам модулів names" -#: src/unstrip.c:67 +#: src/unstrip.c:66 msgid "Silently skip unfindable files" msgstr "Пропустити незнайдені файли без додаткових повідомлень" -#: src/unstrip.c:70 +#: src/unstrip.c:69 msgid "Place output into FILE" msgstr "Вивести дані у ФАЙЛ" -#: src/unstrip.c:72 +#: src/unstrip.c:71 msgid "Create multiple output files under DIRECTORY" msgstr "Створити декілька файлів виведених даних у КАТАЛОЗІ" -#: src/unstrip.c:73 +#: src/unstrip.c:72 msgid "Use module rather than file names" msgstr "Використовувати назви модулів, а не файлів" -#: src/unstrip.c:75 +#: src/unstrip.c:74 msgid "Create output for modules that have no separate debug information" msgstr "" "Вивести дані для модулів, які не містять окремих діагностичних відомостей" -#: src/unstrip.c:78 +#: src/unstrip.c:77 msgid "Apply relocations to section contents in ET_REL files" msgstr "Застосувати пересування до вмісту розділів у файлах ET_REL" -#: src/unstrip.c:80 +#: src/unstrip.c:79 msgid "Only list module and file names, build IDs" msgstr "Вивести лише список назв модулів, файлів, побудувати ідентифікатори" -#: src/unstrip.c:82 +#: src/unstrip.c:81 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" "Примусово поєднати файли, навіть якщо буде встановлено невідповідність " "якихось із заголовків ELF" -#: src/unstrip.c:126 +#: src/unstrip.c:125 #, c-format msgid "-d option specified twice" msgstr "параметр -d вказано двічі" -#: src/unstrip.c:161 +#: src/unstrip.c:160 #, c-format msgid "only one of -o or -d allowed" msgstr "можна використовувати лише один з параметрів: -o або -d" -#: src/unstrip.c:170 +#: src/unstrip.c:169 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "" "-n не можна використовувати з файлами, заданими явно, або параметрами -o і -d" -#: src/unstrip.c:185 +#: src/unstrip.c:184 #, c-format msgid "output directory '%s'" msgstr "каталог виведення даних «%s»" -#: src/unstrip.c:194 +#: src/unstrip.c:193 #, c-format msgid "exactly two file arguments are required" msgstr "як аргументи має бути вказано точно два файла" -#: src/unstrip.c:200 +#: src/unstrip.c:199 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" "для файлів, заданих явно, не можна використовувати параметри -m, -a, -R і -i" -#: src/unstrip.c:213 +#: src/unstrip.c:212 #, c-format msgid "-o or -d is required when using implicit files" msgstr "" "якщо використовуються файли, задані неявно, слід додавати параметр -o або -d" -#: src/unstrip.c:236 +#: src/unstrip.c:235 #, c-format msgid "cannot create ELF header: %s" msgstr "не вдалося створити заголовок ELF: %s" -#: src/unstrip.c:240 +#: src/unstrip.c:239 #, c-format msgid "cannot get shdrstrndx:%s" msgstr "не вдалося отримати shdrstrndx:%s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:243 src/unstrip.c:2085 #, c-format msgid "cannot get ELF header: %s" msgstr "не вдалося отримати заголовок ELF: %s" -#: src/unstrip.c:254 +#: src/unstrip.c:253 #, c-format msgid "cannot get new zero section: %s" msgstr "не вдалося отримати новий нульовий розділ: %s" -#: src/unstrip.c:257 +#: src/unstrip.c:256 #, c-format msgid "cannot update new zero section: %s" msgstr "неможливо оновити новий нульовий розділ: %s" -#: src/unstrip.c:261 +#: src/unstrip.c:260 #, c-format msgid "cannot copy ELF header: %s" msgstr "не вдалося скопіювати заголовок ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:264 src/unstrip.c:2103 src/unstrip.c:2146 #, c-format msgid "cannot get number of program headers: %s" msgstr "не вдалося отримати кількість заголовків програми: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:269 src/unstrip.c:2107 #, c-format msgid "cannot create program headers: %s" msgstr "не вдалося створити заголовки програми: %s" -#: src/unstrip.c:276 +#: src/unstrip.c:275 #, c-format msgid "cannot copy program header: %s" msgstr "не вдалося скопіювати заголовок програми: %s" -#: src/unstrip.c:286 +#: src/unstrip.c:285 #, c-format msgid "cannot copy section header: %s" msgstr "не вдалося скопіювати заголовок розділу: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:288 src/unstrip.c:1707 #, c-format msgid "cannot get section data: %s" msgstr "не вдалося отримати дані розділу: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:290 src/unstrip.c:1709 #, c-format msgid "cannot copy section data: %s" msgstr "не вдалося скопіювати дані розділу: %s" -#: src/unstrip.c:319 +#: src/unstrip.c:318 #, c-format 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:1750 +#: src/unstrip.c:392 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:1749 #, 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:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:408 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 #, c-format msgid "cannot update symbol table: %s" msgstr "не вдалося оновити таблицю символів: %s" -#: src/unstrip.c:419 +#: src/unstrip.c:418 #, c-format msgid "cannot update section header: %s" msgstr "не вдалося оновити заголовок розділу: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:464 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:467 src/unstrip.c:482 #, c-format msgid "cannot update relocation: %s" msgstr "не вдалося оновити пересування: %s" +#: src/unstrip.c:479 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + #: src/unstrip.c:580 #, c-format msgid "cannot get symbol version: %s" @@ -7240,7 +7294,7 @@ msgstr "не вдалося отримати символ для розділу msgid "bad symbol name for group section: %s" msgstr "помилкова назва символу для розділу груп: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1073 src/unstrip.c:1553 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "не вдалося знайти відповідний розділ для [%zu] «%s»" @@ -7260,7 +7314,7 @@ msgstr "переповнення з shnum = %zu у розділі «%s»" 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:1337 src/unstrip.c:1353 src/unstrip.c:1633 src/unstrip.c:1924 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалося додати назву розділу до таблиці рядків: %s" @@ -7276,71 +7330,69 @@ 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:1399 src/unstrip.c:1403 src/unstrip.c:1648 #, c-format msgid "cannot get section count: %s" msgstr "не вдалося отримати кількість розділів: %s" #: src/unstrip.c:1406 -#, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "у очищеному файлі більше розділів ніж у файлі з даними для зневаджування — " "помилковий порядок параметрів?" #: src/unstrip.c:1410 -#, c-format msgid "no sections in stripped file" msgstr "у очищеному файлі немає розділів" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1458 src/unstrip.c:1568 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалося прочитати таблицю рядків заголовка розділу: %s" -#: src/unstrip.c:1628 +#: src/unstrip.c:1627 #, c-format msgid "cannot add new section: %s" msgstr "не вдалося додати новий розділ: %s" -#: src/unstrip.c:1758 +#: src/unstrip.c:1757 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "символ [%zu] має некоректний індекс розділу" -#: src/unstrip.c:1790 +#: src/unstrip.c:1789 #, c-format msgid "group has invalid section index [%zd]" msgstr "група містить некоректний індекс розділу [%zd]" -#: src/unstrip.c:2065 +#: src/unstrip.c:2064 #, c-format msgid "cannot read section data: %s" msgstr "не вдалося прочитати дані розділу: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2093 #, c-format msgid "cannot update ELF header: %s" msgstr "не вдалося оновити заголовок ELF: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2117 #, c-format msgid "cannot update program header: %s" msgstr "не вдалося оновити заголовок програми: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2122 src/unstrip.c:2205 #, c-format msgid "cannot write output file: %s" msgstr "не вдалося записати файл виведених даних: %s" -#: src/unstrip.c:2174 +#: src/unstrip.c:2173 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Дані DWARF не скориговано відповідно до відхилення перед компонуванням; " "спробуйте виправити це командою prelink -u" -#: src/unstrip.c:2177 +#: src/unstrip.c:2176 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7348,76 +7400,74 @@ msgstr "" "Дані DWARF у «%s» не скориговано відповідно до відхилення перед " "компонуванням; спробуйте виправити це командою prelink -u" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2196 src/unstrip.c:2248 src/unstrip.c:2260 src/unstrip.c:2350 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "не вдалося створити дескриптор ELF: %s" -#: src/unstrip.c:2235 +#: src/unstrip.c:2234 msgid "WARNING: " msgstr "УВАГА: " -#: src/unstrip.c:2237 +#: src/unstrip.c:2236 msgid ", use --force" msgstr ", скористайтеся --force" -#: src/unstrip.c:2265 +#: src/unstrip.c:2264 msgid "ELF header identification (e_ident) different" msgstr "Різні ідентифікатори заголовків ELF (e_ident)" -#: src/unstrip.c:2269 +#: src/unstrip.c:2268 msgid "ELF header type (e_type) different" msgstr "Різні типи заголовків ELF (e_type)" -#: src/unstrip.c:2273 +#: src/unstrip.c:2272 msgid "ELF header machine type (e_machine) different" msgstr "Різні типи архітектур заголовків ELF (e_machine)" -#: src/unstrip.c:2277 +#: src/unstrip.c:2276 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "очищений заголовок програми (e_phnum) є меншим за неочищений" -#: src/unstrip.c:2308 +#: src/unstrip.c:2307 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "не вдалося знайти очищений файл для модуля «%s»: %s" -#: src/unstrip.c:2312 +#: src/unstrip.c:2311 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "не вдалося відкрити очищений файл «%s» для модуля «%s»: %s" -#: src/unstrip.c:2327 +#: src/unstrip.c:2326 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "не вдалося знайти файл діагностичних даних для модуля «%s»: %s" -#: src/unstrip.c:2331 +#: src/unstrip.c:2330 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "не вдалося відкрити файл діагностичних даних «%s» для модуля «%s»: %s" -#: src/unstrip.c:2344 +#: src/unstrip.c:2343 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "у модулі «%s» файл «%s» не очищено strip" -#: src/unstrip.c:2375 +#: src/unstrip.c:2374 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалося кешувати адреси розділів для модуля «%s»: %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2502 msgid "no matching modules found" msgstr "відповідних модулів не виявлено" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2512 msgid "matched more than one module" msgstr "встановлено відповідність декількох модулів" -#: src/unstrip.c:2560 +#: src/unstrip.c:2557 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7425,7 +7475,7 @@ msgstr "" "ОЧИЩЕНИЙ-ФАЙЛ ФАЙЛ-DEBUG\n" "[МОДУЛЬ...]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2558 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7498,9 +7548,11 @@ msgid "" "executable PATH\n" "source BUILDID /FILENAME\n" "source PATH /FILENAME\n" +"section BUILDID SECTION-NAME\n" +"section PATH SECTION-NAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "Запустити виконуваний файл" @@ -7512,6 +7564,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..d3399a5c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,171 @@ +2022-10-28 Arsen Arsenović + + * readelf.c (options): Add Binutils-style --syms alias. + +2022-10-19 Mark Wielaard + + * readelf.c (dwarf_loc_list_encoding_string): Handle + DW_LLE_GNU_view_pair. + (print_debug_loclists_section): Likewise. + +2022-09-20 Yonggang Luo + + * arlib.h: Use BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN. + +2022-08-28 Mark Wielaard + + * ar.c (do_oper_extract): Predecrement instance before compare + to zero. + (do_oper_delete): Likewise. + +2022-08-10 Andreas Schwab + + * readelf.c (print_attributes): Also handle SHT_RISCV_ATTRIBUTES. + +2022-08-09 Andreas Schwab + + * elflint.c (check_program_header): Don't complain about p_filesz + > p_memsz if p_memsz is zero and p_type is PT_RISCV_ATTRIBUTES. + +2022-08-01 Mark Wielaard + + * readelf.c (handle_dynamic): Pass start of buffer to memrchr. + Use dyn->d_un.d_val for offsets instead of d_ptr. + +2022-04-28 Di Chen + + * readelf.c (options): Add use-dynamic 'D'. + (use_dynamic_segment): New static bool. + (enum dyn_idx): New. + (get_dynscn_strtab): New function. + (get_dynscn_addrs): Likewise. + (find_offsets): Likewise. + (parse_opt): Handle 'D'. + (handle_dynamic): New argument phdr. Get data either through the shdr + or phdr. Print segment info when use_dynamic_segment. Use + get_dynscn_strtab. Get library name and paths through strtab_data. + +2022-05-09 Mark Wielaard + + * strip.c (remove_debug_relocations): Check gelf_getshdr, gelf_getrela, + gelf_getrel and gelf_getsymshndx don't return NULL. + +2022-05-10 Mark Wielaard + + * elfcompress.c (process_file): Sanity check shstrtab_name, + shstrtab_newname and symstrents are only set once. + +2022-04-24 Mark Wielaard + + * elfclassify.c (main): Use classify_flag_no_stdin for no-std in options. + +2022-04-19 Mark Wielaard + + * readelf.c (get_dyn_ents): Define dyn_mem outside the while loop. + +2022-03-01 Di Chen + + * 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 + + * 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 + + * elflint.c (check_note_data): Recognize NT_FDO_PACKAGING_METADATA. + +2022-03-11 Mark Wielaard + + * 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 + + * readelf.c (print_ehdr): Pass sizeof (buf) - 1 to strncpy. + +2021-10-20 John M Mellor-Crummey + + * 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 + + * elflint.c (check_sections): Don't dereference databits if bad. + +2021-09-09 Dmitry V. Levin + + * 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 + + * 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 + + * Makefile.am (AM_LDFLAGS): Add $(STACK_USAGE_NO_ERROR). + +2021-08-20 Saleem Abdulrasool + + * elfclassify.c: Remove error.h include. + +2021-03-18 Timm Bäder + + * 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 + + * readelf.c (compare_listptr): Fix dwarf_attr_name argument. + +2021-06-18 Mark Wielaard + + * unstrip.c (adjust_relocs): Check gelf_getrel and geld_getrela. + +2021-06-18 Mark Wielaard + + * strip.c (remove_debug_relocations): Check gelf_update results. + (update_section_size): Likewise. + +2021-06-06 Sergei Trofimovich + + * elflint.c (buffer_left): Mark as 'static' to avoid external linkage + failure. + 2021-05-12 Dmitry V. Levin * 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..7768b266 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 This file is part of elfutils. Written by Ulrich Drepper , 2005. @@ -27,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -49,7 +49,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 +63,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 +75,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 +114,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 +239,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 +523,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..3bcb18fe 100644 --- a/src/ar.c +++ b/src/ar.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -386,8 +385,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 +395,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 +468,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; @@ -519,7 +517,7 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, ENTRY entry; entry.key = arhdr->ar_name; ENTRY *res = hsearch (entry, FIND); - if (res != NULL && (instance < 0 || instance-- == 0) + if (res != NULL && (instance < 0 || --instance == 0) && !found[(char **) res->data - argv]) found[(char **) res->data - argv] = do_extract = true; } @@ -924,14 +922,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 (); @@ -954,7 +951,7 @@ do_oper_delete (const char *arfname, char **argv, int argc, ENTRY entry; entry.key = arhdr->ar_name; ENTRY *res = hsearch (entry, FIND); - if (res != NULL && (instance < 0 || instance-- == 0) + if (res != NULL && (instance < 0 || --instance == 0) && !found[(char **) res->data - argv]) found[(char **) res->data - argv] = do_delete = true; } @@ -1131,7 +1128,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 +1136,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 +1210,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 +1218,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 +1301,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 +1370,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-argp.c b/src/arlib-argp.c index a3c12e4d..115b9d76 100644 --- a/src/arlib-argp.c +++ b/src/arlib-argp.c @@ -20,7 +20,6 @@ #endif #include -#include #include "arlib.h" diff --git a/src/arlib.c b/src/arlib.c index a14c44d3..b8f89ba7 100644 --- a/src/arlib.c +++ b/src/arlib.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -210,8 +209,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 +222,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/arlib.h b/src/arlib.h index e117166e..d4a42210 100644 --- a/src/arlib.h +++ b/src/arlib.h @@ -46,7 +46,7 @@ extern const struct argp_child arlib_argp_children[]; #define AR_HDR_WORDS (sizeof (struct ar_hdr) / sizeof (uint32_t)) -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if BYTE_ORDER == LITTLE_ENDIAN # define le_bswap_32(val) bswap_32 (val) #else # define le_bswap_32(val) (val) diff --git a/src/arlib2.c b/src/arlib2.c index 11f44e5d..9ae6662c 100644 --- a/src/arlib2.c +++ b/src/arlib2.c @@ -20,7 +20,6 @@ # include #endif -#include #include #include 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 #include -#include #include #include #include @@ -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/elfcmp.c b/src/elfcmp.c index 21d8d9dc..fba67e02 100644 --- a/src/elfcmp.c +++ b/src/elfcmp.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include diff --git a/src/elfcompress.c b/src/elfcompress.c index 2c6d91ba..6f18e47d 100644 --- a/src/elfcompress.c +++ b/src/elfcompress.c @@ -730,6 +730,15 @@ process_file (const char *fname) { shstrtab_size = size; shstrtab_compressed = T_COMPRESS_GNU; + if (shstrtab_name != NULL + || shstrtab_newname != NULL) + { + error (0, 0, "Internal error," + " shstrtab_name already set," + " while handling section [%zd] %s", + ndx, sname); + goto cleanup; + } shstrtab_name = xstrdup (sname); shstrtab_newname = xstrdup (newname); } @@ -786,6 +795,15 @@ process_file (const char *fname) { shstrtab_size = size; shstrtab_compressed = T_COMPRESS_ZLIB; + if (shstrtab_name != NULL + || shstrtab_newname != NULL) + { + error (0, 0, "Internal error," + " shstrtab_name already set," + " while handling section [%zd] %s", + ndx, sname); + goto cleanup; + } shstrtab_name = xstrdup (sname); shstrtab_newname = (newname == NULL ? NULL : xstrdup (newname)); @@ -919,6 +937,12 @@ process_file (const char *fname) } size_t elsize = gelf_fsize (elfnew, ELF_T_SYM, 1, EV_CURRENT); size_t syms = symd->d_size / elsize; + if (symstrents != NULL) + { + error (0, 0, "Internal error, symstrents already set," + " while handling section [%zd] %s", ndx, name); + goto cleanup; + } symstrents = xmalloc (syms * sizeof (Dwelf_Strent *)); for (size_t i = 0; i < syms; i++) { @@ -1342,12 +1366,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..565cffdc 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -3434,7 +3433,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 +3704,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 +4101,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 +4383,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" @@ -4724,7 +4730,10 @@ section [%2zu] '%s' must not be executable\n"), } if (phdr->p_filesz > phdr->p_memsz - && (phdr->p_memsz != 0 || phdr->p_type != PT_NOTE)) + && (phdr->p_memsz != 0 + || (phdr->p_type != PT_NOTE + && !(ehdr->e_machine == EM_RISCV + && phdr->p_type == PT_RISCV_ATTRIBUTES)))) ERROR (_("\ program header entry %d: file size greater than memory size\n"), cnt); diff --git a/src/findtextrel.c b/src/findtextrel.c index 220ee909..d3021a3a 100644 --- a/src/findtextrel.c +++ b/src/findtextrel.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -36,6 +35,7 @@ #include #include +#include "libeu.h" #include "system.h" struct segments @@ -181,30 +181,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 +305,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 +334,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 +360,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..b46c1fd7 100644 --- a/src/nm.c +++ b/src/nm.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -137,8 +136,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 +377,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 +389,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 +686,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 +699,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 +733,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 +1231,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 +1327,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..d43c1dd6 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -100,8 +99,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 +254,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 +266,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 +683,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 +716,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 +754,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 +775,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/ranlib.c b/src/ranlib.c index bd7e1d8a..7838d69e 100644 --- a/src/ranlib.c +++ b/src/ranlib.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include diff --git a/src/readelf.c b/src/readelf.c index 9b472622..0e0b05c4 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -116,6 +115,7 @@ static const struct argp_option options[] = { "sections", 'S', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 }, { "symbols", 's', "SECTION", OPTION_ARG_OPTIONAL, N_("Display the symbol table sections"), 0 }, + { "syms", 's', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 }, { "dyn-syms", PRINT_DYNSYM_TABLE, NULL, 0, N_("Display (only) the dynamic symbol table"), 0 }, { "version-info", 'V', NULL, 0, N_("Display versioning information"), 0 }, @@ -137,6 +137,8 @@ static const struct argp_option options[] = { "string-dump", 'p', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 }, { "archive-index", 'c', NULL, 0, N_("Display the symbol index of an archive"), 0 }, + { "use-dynamic", 'D', NULL, 0, + N_("Use the dynamic segment when possible for displaying info"), 0 }, { NULL, 0, NULL, 0, N_("Output control:"), 0 }, { "numeric-addresses", 'N', NULL, 0, @@ -195,6 +197,9 @@ static bool print_symbol_table; /* True if (only) the dynsym table should be printed. */ static bool print_dynsym_table; +/* True if reconstruct dynamic symbol table from the PT_DYNAMIC segment. */ +static bool use_dynamic_segment; + /* A specific section name, or NULL to print all symbol tables. */ static char *symbol_table_section; @@ -318,6 +323,24 @@ static void dump_strings (Ebl *ebl); static void print_strings (Ebl *ebl); static void dump_archive_index (Elf *, const char *); +enum dyn_idx +{ + i_strsz, + i_verneed, + i_verdef, + i_versym, + i_symtab, + i_strtab, + i_hash, + i_gnu_hash, + i_max +}; + +/* Declarations of local functions for use-dynamic. */ +static Elf_Data *get_dynscn_strtab (Elf *elf, GElf_Phdr *phdr); +static void get_dynscn_addrs (Elf *elf, GElf_Phdr *phdr, GElf_Addr addrs[i_max]); +static void find_offsets (Elf *elf, GElf_Addr main_bias, size_t n, + GElf_Addr addrs[n], GElf_Off offs[n]); /* Looked up once with gettext in main. */ static char *yes_str; @@ -429,6 +452,9 @@ parse_opt (int key, char *arg, print_dynamic_table = true; any_control_option = true; break; + case 'D': + use_dynamic_segment = true; + break; case 'e': print_debug_sections |= section_exception; any_control_option = true; @@ -828,7 +854,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 +977,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 +1196,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 +1250,8 @@ print_shdr (Ebl *ebl, GElf_Ehdr *ehdr) { size_t sections; if (unlikely (elf_getshdrnum (ebl->elf, §ions) < 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 +1261,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 +1284,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 +1458,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) size_t sections; if (unlikely (elf_getshdrnum (ebl->elf, §ions) < 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 +1468,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 +1481,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 +1492,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 +1617,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 +1679,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,8 +1798,26 @@ 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) +handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, GElf_Phdr *phdr) { int class = gelf_getclass (ebl->elf); GElf_Shdr glink_mem; @@ -1790,38 +1825,68 @@ 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 (use_dynamic_segment) + data = elf_getdata_rawchunk(ebl->elf, phdr->p_offset, + phdr->p_filesz, ELF_T_DYN); + else + data = elf_getdata (scn, NULL); + if (data == NULL) return; - /* 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")); + /* Get the dynamic section entry number */ + dyn_ents = get_dyn_ents (data); - sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); + if (!use_dynamic_segment) + { + /* Get the section header string table index. */ + if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + 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)); + glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); + if (glink == NULL) + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); - printf (ngettext ("\ + 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), - class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, - shdr->sh_offset, - (int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, glink->sh_name)); + 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)); + } + else + { + printf (ngettext ("\ +\nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 "\n", + "\ +\nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 "\n", + dyn_ents), + (unsigned long int) dyn_ents, + class == ELFCLASS32 ? 10 : 18, phdr->p_paddr, + phdr->p_offset); + } + fputs_unlocked (_(" Type Value\n"), stdout); - for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) + /* if --use-dynamic option is enabled, + use the string table to get the related library info. */ + Elf_Data *strtab_data = NULL; + if (use_dynamic_segment) + { + strtab_data = get_dynscn_strtab(ebl->elf, phdr); + if (strtab_data == NULL) + error_exit (0, _("cannot get string table by using dynamic segment")); + } + + for (cnt = 0; cnt < dyn_ents; ++cnt) { GElf_Dyn dynmem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); @@ -1832,6 +1897,20 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) printf (" %-17s ", ebl_dynamic_tag_name (ebl, dyn->d_tag, buf, sizeof (buf))); + char *name = NULL; + if (dyn->d_tag == DT_NEEDED + || dyn->d_tag == DT_SONAME + || dyn->d_tag == DT_RPATH + || dyn->d_tag == DT_RUNPATH) + { + if (! use_dynamic_segment) + name = elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val); + else if (dyn->d_un.d_val < strtab_data->d_size + && memrchr (strtab_data->d_buf + dyn->d_un.d_val, '\0', + strtab_data->d_size - 1 - dyn->d_un.d_val) != NULL) + name = ((char *) strtab_data->d_buf) + dyn->d_un.d_val; + } + switch (dyn->d_tag) { case DT_NULL: @@ -1843,23 +1922,19 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) break; case DT_NEEDED: - printf (_("Shared library: [%s]\n"), - elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val)); + printf (_("Shared library: [%s]\n"), name); break; case DT_SONAME: - printf (_("Library soname: [%s]\n"), - elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val)); + printf (_("Library soname: [%s]\n"), name); break; case DT_RPATH: - printf (_("Library rpath: [%s]\n"), - elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val)); + printf (_("Library rpath: [%s]\n"), name); break; case DT_RUNPATH: - printf (_("Library runpath: [%s]\n"), - elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val)); + printf (_("Library runpath: [%s]\n"), name); break; case DT_PLTRELSZ: @@ -1933,8 +2008,9 @@ print_dynamic (Ebl *ebl) Elf_Scn *scn = gelf_offscn (ebl->elf, phdr->p_offset); GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC) - handle_dynamic (ebl, scn, shdr); + if ((use_dynamic_segment && phdr != NULL) + || (shdr != NULL && shdr->sh_type == SHT_DYNAMIC)) + handle_dynamic (ebl, scn, shdr, phdr); break; } } @@ -2005,8 +2081,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 +2270,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 +2447,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 +2462,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 +2523,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 +2788,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 +2863,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 +2949,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 +3172,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 +3235,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 +3336,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 +3402,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 +3480,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 +3518,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 +3544,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 +3564,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 +3592,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 +3661,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) { @@ -3608,7 +3672,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) && (shdr->sh_type != SHT_ARM_ATTRIBUTES || ehdr->e_machine != EM_ARM) && (shdr->sh_type != SHT_CSKY_ATTRIBUTES - || ehdr->e_machine != EM_CSKY))) + || ehdr->e_machine != EM_CSKY) + && (shdr->sh_type != SHT_RISCV_ATTRIBUTES + || ehdr->e_machine != EM_RISCV))) continue; printf (_("\ @@ -3834,7 +3900,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")); } @@ -4120,6 +4186,8 @@ dwarf_loc_list_encoding_string (unsigned int kind) #define DWARF_ONE_KNOWN_DW_LLE(NAME, CODE) case CODE: return #NAME; DWARF_ALL_KNOWN_DW_LLE #undef DWARF_ONE_KNOWN_DW_LLE + /* DW_LLE_GNU_view_pair is special/incompatible with default codes. */ + case DW_LLE_GNU_view_pair: return "GNU_view_pair"; default: return NULL; } @@ -4804,6 +4872,99 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, } +/* Turn the addresses into file offsets by using the phdrs. */ +static void +find_offsets(Elf *elf, GElf_Addr main_bias, size_t n, + GElf_Addr addrs[n], GElf_Off offs[n]) +{ + size_t unsolved = n; + for (size_t i = 0; i < phnum; ++i) { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr(elf, i, &phdr_mem); + if (phdr != NULL && phdr->p_type == PT_LOAD && phdr->p_memsz > 0) + for (size_t j = 0; j < n; ++j) + if (offs[j] == 0 && addrs[j] >= phdr->p_vaddr + main_bias && + addrs[j] - (phdr->p_vaddr + main_bias) < phdr->p_filesz) { + offs[j] = addrs[j] - (phdr->p_vaddr + main_bias) + phdr->p_offset; + if (--unsolved == 0) + break; + } + } +} + +/* The dynamic segment (type PT_DYNAMIC), contains the .dynamic section. + And .dynamic section contains an array of the dynamic structures. + We use the array to get: + DT_STRTAB: the address of the string table + DT_SYMTAB: the address of the symbol table + DT_STRSZ: the size, in bytes, of the string table + ... */ +static void +get_dynscn_addrs(Elf *elf, GElf_Phdr *phdr, GElf_Addr addrs[i_max]) +{ + Elf_Data *data = elf_getdata_rawchunk( + elf, phdr->p_offset, phdr->p_filesz, ELF_T_DYN); + + int dyn_idx = 0; + for (;; ++dyn_idx) { + GElf_Dyn dyn_mem; + GElf_Dyn *dyn = gelf_getdyn(data, dyn_idx, &dyn_mem); + /* DT_NULL Marks end of dynamic section. */ + if (dyn->d_tag == DT_NULL) + break; + + switch (dyn->d_tag) { + case DT_SYMTAB: + addrs[i_symtab] = dyn->d_un.d_ptr; + break; + + case DT_HASH: + addrs[i_hash] = dyn->d_un.d_ptr; + break; + + case DT_GNU_HASH: + addrs[i_gnu_hash] = dyn->d_un.d_ptr; + break; + + case DT_STRTAB: + addrs[i_strtab] = dyn->d_un.d_ptr; + break; + + case DT_VERSYM: + addrs[i_versym] = dyn->d_un.d_ptr; + break; + + case DT_VERDEF: + addrs[i_verdef] = dyn->d_un.d_ptr; + break; + + case DT_VERNEED: + addrs[i_verneed] = dyn->d_un.d_ptr; + break; + + case DT_STRSZ: + addrs[i_strsz] = dyn->d_un.d_val; + break; + } + } +} + + +/* Use dynamic segment to get data for the string table section. */ +static Elf_Data * +get_dynscn_strtab(Elf *elf, GElf_Phdr *phdr) +{ + Elf_Data *strtab_data; + GElf_Addr addrs[i_max] = {0,}; + GElf_Off offs[i_max] = {0,}; + get_dynscn_addrs(elf, phdr, addrs); + find_offsets(elf, 0, i_max, addrs, offs); + strtab_data = elf_getdata_rawchunk( + elf, offs[i_strtab], addrs[i_strsz], ELF_T_BYTE); + return strtab_data; +} + + struct listptr { Dwarf_Off offset:(64 - 3); @@ -4887,7 +5048,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 +7905,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 +8077,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 +8532,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 +8641,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 +8926,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 +8948,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 +9081,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")); @@ -9514,6 +9747,16 @@ print_debug_loclists_section (Dwfl_Module *dwflmod, readp += len; break; + case DW_LLE_GNU_view_pair: + if ((uint64_t) (nexthdr - readp) < 1) + goto invalid_entry; + get_uleb128 (op1, readp, nexthdr); + if ((uint64_t) (nexthdr - readp) < 1) + goto invalid_entry; + get_uleb128 (op2, readp, nexthdr); + printf (" %" PRIx64 ", %" PRIx64 "\n", op1, op2); + break; + default: goto invalid_entry; } @@ -11335,8 +11578,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 +11751,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 +11801,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 +12428,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 +12538,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 +12595,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 +12768,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 +12978,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 +12998,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 +13046,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 +13078,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 +13102,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..ff8ca075 100644 --- a/src/size.c +++ b/src/size.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -102,8 +101,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 +236,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 +247,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 +284,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 +293,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 +304,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 +393,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 +464,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 +476,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..55b047be 100644 --- a/src/strings.c +++ b/src/strings.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -298,8 +297,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 +580,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 +597,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 +634,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 +661,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..2a2cc801 100644 --- a/src/strip.c +++ b/src/strip.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -130,8 +129,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 +242,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 +262,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 +475,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 @@ -578,7 +575,8 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, might want to change the size. */ GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - if (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA) + if (shdr != NULL + && (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)) { /* Make sure that this relocation section points to a section to relocate with contents, that isn't @@ -586,7 +584,8 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, Elf_Scn *tscn = elf_getscn (elf, shdr->sh_info); GElf_Shdr tshdr_mem; GElf_Shdr *tshdr = gelf_getshdr (tscn, &tshdr_mem); - if (tshdr->sh_type == SHT_NOBITS + if (tshdr == NULL + || tshdr->sh_type == SHT_NOBITS || tshdr->sh_size == 0 || (tshdr->sh_flags & SHF_ALLOC) != 0) continue; @@ -655,6 +654,8 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, if (is_rela) { GElf_Rela *r = gelf_getrela (reldata, relidx, &mem.rela); + if (r == NULL) + INTERNAL_ERROR (fname); offset = r->r_offset; addend = r->r_addend; rtype = GELF_R_TYPE (r->r_info); @@ -664,6 +665,8 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, else { GElf_Rel *r = gelf_getrel (reldata, relidx, &mem.rel); + if (r == NULL) + INTERNAL_ERROR (fname); offset = r->r_offset; addend = 0; rtype = GELF_R_TYPE (r->r_info); @@ -687,6 +690,8 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata, symndx, &sym_mem, &xndx); + if (sym == NULL) + INTERNAL_ERROR (fname); Elf32_Word sec = (sym->st_shndx == SHN_XINDEX ? xndx : sym->st_shndx); @@ -705,17 +710,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 +961,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 +1067,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 +1090,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 +1098,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 +1200,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 +1628,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 +1726,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 +1742,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 +1787,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 +1796,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 +1849,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 +1860,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 +1978,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 +2763,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..d5bd1821 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -225,7 +224,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 +315,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 +439,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 +455,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 +470,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 +500,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 +516,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 +561,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 +589,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 +630,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 +863,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 +946,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 +1022,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 +1037,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 +1152,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 +1163,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 +1361,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 +1403,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 +1430,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 +1550,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 +1686,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 +1714,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 +1737,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 +1753,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 +1785,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 +1812,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 +1933,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 +2191,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 +2220,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 +2303,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 +2322,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 +2340,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 +2370,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 +2398,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 +2499,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 +2509,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 +2601,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..b656029f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,484 @@ +2022-11-01 Aaron Merey + + * run-debuginfod-section.sh (RPM_BUILDID): Use buildid from non-zstd + compressed rpm. + +2022-10-31 Aaron Merey + + * Makefile.am (TESTS): Add run-debuginfod-section.sh. + * run-debuginfod-section.sh: New test. + +2022-09-20 Yonggang Luo + + * Makefile.am (EXTRA_DIST): Remove debuginfod-rpms/hello2.spec. + Add debuginfod-rpms/hello{2,3}.specfile. + * tests/debuginfod-rpms/hello2.spec.: Renamed to... + * tests/debuginfod-rpms/hello2.specfile: ...this. + * tests/debuginfod-rpms/hello3.spec.: Renamed to... + * tests/debuginfod-rpms/hello3.specfile: ...this. + +2022-10-28 Arsen Arsenović + + * run-readelf-s.sh: Add tests for the --syms alias. + +2022-10-27 Mark Wielaard + + * backtrace-subr.sh: Use grep -E instead of egrep, use grep -F + instead of fgrep. + * debuginfod-subr.sh: Likewise. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-extraction-passive.sh: Likewise. + * run-debuginfod-response-headers.sh: Likewise. + * run-debuginfod-webapi-concurrency.sh: Likewise. + * run-strip-test.sh: Likewise. + +2022-10-16 Mark Wielaard + + * dwfl-report-offline-memory.c: Include config.h first. + +2022-10-16 Mark Wielaard + + * dwfl-report-offline-memory.c (main): Check lseek, read and malloc + results with correct types. + +2022-09-13 Aleksei Vetrov + + * Makefile.am (check_PROGRAMS): Add dwfl-report-offline-memory. + (TESTS): Add run-dwfl-report-offline-memory.sh. + (EXTRA_DIST): Likewise. + (dwfl_report_offline_memory_LDADD): New variable. + * dwfl-report-offline-memory.c: New file. + * run-dwfl-report-offline-memory.sh: Likewise. + +2022-09-13 Khem Raj + + * Makefile.am (*_LDADD): Add libeu if needed for error. + +2022-08-26 Mark Wielaard + + * run-ar-N.sh: New test. + * Makefile.am (TESTS): Add run-ar-N.sh. + (EXTRA_DIST): Likewise. + +2022-09-02 Frank Ch. Eigler + + * run-debuginfod-response-headers.sh: Use case-insensitive + header name matches. Use socat & sleep for greater + portability. + * run-debuginfod-sizetime.sh: Update for debuginfod-find -v -v. + +2022-07-15 Noah Sanci + + * run-debuginfod-response-headers.sh: Added test + to ensure that federated servers pass headers down to + queried server. + +2022-08-04 Sergei Trofimovich + + * low_high_pc.c (handle_die): Drop redundant 'lx' suffix. + +2022-08-01 Mark Wielaard + + * run-debuginfod-percent-escape.sh: Add initial scan wait_ready. + +2022-04-28 Di Chen + + * run-readelf-Dd.sh: New test. + * Makefile.am (TESTS): Add run-readelf-Dd.sh. + (EXTRA_DIST): Likewise. + +2022-06-01 Mark Wielaard + + * testfile-arm-flags.bz2: New test file. + * run-readelf-arm-flags.sh: New test. + * Makefile.am (TESTS): Add run-readelf-arm-flags.sh. + (EXTRA_DIST): Add readelf-arm-flags.sh and testfile-arm-flags.bz2 + +2022-05-13 Noah Sanci + + * run-debuginfod-fd-prefetch-caches.sh: Rewritten. + +2022-06-02 Mark Wielaard + + * Makefile.am (TESTS): Add run-debuginfod-federation-metrics.sh + only when OLD_LIBMICROHTTPD conditional is not set. + +2022-04-24 Mark Wielaard + + * run-debuginfod-webapi-concurrency.sh: Fix PR number in xfail. + +2022-04-23 Mark Wielaard + + * run-debuginfod-webapi-concurrency.sh: Lower parallel lookups. + +2022-03-01 Di Chen + + * 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 + + * run-debuginfod-federation-sqlite.sh: Don't try to corrupt + sqlite database. + +2022-04-13 Aaron Merey + + * 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 + + * run-large-elf-file.sh: Check elf class of addsections binary. + +2021-12-17 Mark Wielaard + + * run-debuginfod-query-retry.sh: Use /bin/sh instead of /bin/ls. + +2021-12-09 Frank Ch. Eigler + + * debuginfod-subr.sh (xfail): New proc. + * run-debuginfod-webapi-concurrency.sh: New test for -C. + * Makefile.am: List it. + +2021-12-04 Mark Wielaard + + * Makefile.am (EXTRA_NLIST_CFLAGS): New variable depends on + USE_ADDRESS_SANITIZER. + (test_nlist_CFLAGS): Add EXTRA_NLIST_CFLAGS. + +2021-12-04 Mark Wielaard + + * varlocs.c (dwarf_encoding_string): Return "" instead + of NULL. + (dwarf_tag_string): Return "" instead of NULL. + (dwarf_attr_string): Return "" instead of NULL. + (dwarf_form_string): Return "" instead of NULL. + (dwarf_opcode_string): Return "" instead of NULL. + (print_expr): Remove assert. + +2021-11-18 Mark Wielaard + + * Makefile.am (dwfl_proc_attach_LDFLAGS): Add -rdynamic. + +2021-11-11 Mark Wielaard + + * 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 + + PR28430 + * run-debuginfod-extraction-passive.sh: New test. + * Makefile.am (TESTS, EXTRA_DIST): Add it. + +2021-10-20 John M Mellor-Crummey + + * 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 + + * 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 + + PR28514 + * run-debuginfod-archive-groom.sh: Look for new groom metric. + +2021-10-23 Frank Ch. Eigler + + PR28240 + * run-debuginfod-000-permission.sh, -writable.sh: + Correct negative-cache file permission checking. + +2021-10-06 Mark Wielaard + + * show-die-info.c (handle): Handle dwarf_attr_string returning NULL. + +2021-10-06 Di Chen + + PR28242 + * run-debuginfod-000-permission.sh: Expect artifacttype metrics. + +2021-09-17 Noah Sanci + + * run-debuginfod-response-header.sh: removed checking for Connection + and Cache-Control in response headers. + +2021-09-08 Mark Wielaard + + * 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 + + * 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 + + * 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 + + * Makefile.am: added run-debuginfod-percent-escape.sh to TESTS and + EXTRA_DIST. + +2021-09-06 Dmitry V. Levin + + * elfcopy.c (copy_elf): Remove cast of malloc return value. + +2021-09-07 Mark Wielaard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * debuginfod-subr.sh (EXTRA_DIST): Add debuginfod-subr.sh. + +2021-08-20 Noah Sanci + + * 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 + + * run-debuginfod-find.sh: Use ":memory:" for the + forwarded-ttl-limit tests. + +2021-08-28 Mark Wielaard + + * run-debuginfod-find.sh: Use clean, separate databases for + forwarded-ttl-limit tests. + +2021-08-20 Di Chen + + * run-debuginfod-find.sh: Add test for X-Forwarded-For hops limit. + +2021-08-20 Noah Sanci + + * 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 + + PR28190 + * backtrace.c (callback_verify): Check for pthread_kill as first + frame. Change asserts to fprintf plus abort. + +2021-07-26 Noah Sanci + + 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 + + PR28034 + * run-debuginfod-percent-escape.sh: Added a test ensuring files with % + escapable characters in their paths are accessible. + +2021-07-21 Noah Sanci + + * run-debuginfod-find.sh: Properly kill $PID4 by waiting for it to + finish. Report $PORT3's metrics in err(). + +2021-06-28 Noah Sanci + + 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 + + PR27531 + * run-debuginfod-find.sh: Add test case for retry mechanism. + +2021-07-01 Noah Sanci + + PR2711 + * run-debuginfod-find.sh: Added test case for grooming the database + using regexes. + +2021-07-09 Noah Sanci + + PR27983 + * run-debuginfod-find.sh: Wrote test to ensure duplicate urls are in + fact not checked. + +2021-07-08 Mark Wielaard + + * Makefile.am (EXTRA_DIST): Fix typo testfile-largealign.bz2 was + was missing .o. + +2021-06-09 Andrei Homescu + + * 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 + + * run-debuginfo-find.sh: unset VALGRIND_CMD before testing debuginfod + client cache. + +2021-06-16 Frank Ch. Eigler + + * run-debuginfod-find.sh: Fix intermittent groom/stale failure, + due to SIGUSR1/SIGUSR2 races. Trace more. + +2021-06-15 Frank Ch. Eigler + + * run-debuginfod-find.sh (err): Elaborate. Use as the reliable + error-report triggering function, rather than "exit 1". + +2021-06-03 Frank Ch. Eigler + + PR27863 + * run-debuginfod-find.sh: Test "after-you" queueing via flooding + with concurent curls. + 2021-05-14 Frank Ch. Eigler PR27859 diff --git a/tests/Makefile.am b/tests/Makefile.am index dc7517d9..356b3fbf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -47,6 +47,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ alldts typeiter typeiter2 low_high_pc \ test-elf_cntl_gelf_getshdr dwflsyms dwfllines \ dwfl-report-elf-align dwfl-report-segment-contiguous \ + dwfl-report-offline-memory \ varlocs backtrace backtrace-child \ backtrace-data backtrace-dwarf debuglink debugaltlink \ buildid deleted deleted-lib.so aggregate_size peel_type \ @@ -61,6 +62,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,13 +88,20 @@ 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) \ $(test_nlist_CFLAGS) $(GCOV_FLAGS) -o $@ $< $(test_nlist_LDADD) TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ + run-ar-N.sh \ update1 update2 update3 update4 \ run-show-die-info.sh run-get-files.sh run-get-lines.sh \ run-next-files.sh run-next-lines.sh \ @@ -139,11 +148,12 @@ 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-dwfl-report-offline-memory.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,7 +167,9 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-backtrace-core-aarch64.sh run-backtrace-core-sparc.sh \ 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-arm-flags.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 \ @@ -188,7 +200,9 @@ 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 \ + run-readelf-Dd.sh if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 @@ -210,11 +224,41 @@ 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-percent-escape.sh \ + run-debuginfod-x-forwarded-for.sh \ + run-debuginfod-response-headers.sh \ + run-debuginfod-extraction-passive.sh \ + run-debuginfod-webapi-concurrency.sh \ + run-debuginfod-section.sh +endif +if !OLD_LIBMICROHTTPD +# Will crash on too old libmicrohttpd +# Too many open file descriptors confuses libmicrohttpd < 0.9.51 +TESTS += run-debuginfod-federation-metrics.sh endif endif EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ + run-ar-N.sh \ run-show-die-info.sh run-get-files.sh run-get-lines.sh \ run-next-files.sh run-next-lines.sh testfile-only-debug-line.bz2 \ run-get-pubnames.sh run-get-aranges.sh \ @@ -279,7 +323,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 \ @@ -310,7 +354,9 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-readelf-dwz-multi.sh libtestfile_multi_shared.so.bz2 \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \ + run-readelf-arm-flags.sh testfile-arm-flags.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 \ @@ -341,6 +387,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile56.bz2 testfile57.bz2 testfile58.bz2 \ run-typeiter.sh testfile59.bz2 \ run-readelf-d.sh testlib_dynseg.so.bz2 \ + run-readelf-Dd.sh \ testfile-s390x-hash-both.bz2 \ run-readelf-gdb_index.sh testfilegdbindex5.bz2 \ testfilegdbindex7.bz2 \ @@ -355,6 +402,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 \ @@ -368,6 +416,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile69.core.bz2 testfile69.so.bz2 \ testfile70.core.bz2 testfile70.exec.bz2 testfile71.bz2 \ run-dwfllines.sh run-dwfl-report-elf-align.sh \ + run-dwfl-report-offline-memory.sh \ testfile-dwfl-report-elf-align-shlib.so.bz2 \ testfilenolines.bz2 test-core-lib.so.bz2 test-core.core.bz2 \ test-core.exec.bz2 run-addr2line-test.sh \ @@ -377,7 +426,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 \ @@ -472,7 +530,32 @@ 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 \ + run-debuginfod-section.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 \ @@ -485,7 +568,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpm \ - debuginfod-rpms/hello2.spec. \ + debuginfod-rpms/hello2.specfile \ + debuginfod-rpms/hello3.specfile \ debuginfod-rpms/rhel6/hello2-1.0-2.i686.rpm \ debuginfod-rpms/rhel6/hello2-1.0-2.src.rpm \ debuginfod-rpms/rhel6/hello2-debuginfo-1.0-2.i686.rpm \ @@ -509,7 +593,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 @@ -567,17 +654,17 @@ libeu = ../lib/libeu.a arextract_LDADD = $(libelf) arsymtest_LDADD = $(libelf) newfile_LDADD = $(libelf) -saridx_LDADD = $(libelf) +saridx_LDADD = $(libeu) $(libelf) scnnames_LDADD = $(libelf) -sectiondump_LDADD = $(libelf) +sectiondump_LDADD = $(libeu) $(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) -early_offscn_LDADD = $(libelf) -ecp_LDADD = $(libelf) +early_offscn_LDADD = $(libeu) $(libelf) +ecp_LDADD = $(libeu) $(libelf) update1_LDADD = $(libelf) update2_LDADD = $(libelf) update3_LDADD = $(libdw) $(libelf) @@ -591,12 +678,12 @@ get_files_LDADD = $(libdw) $(libelf) next_files_LDADD = $(libdw) $(libelf) get_aranges_LDADD = $(libdw) $(libelf) allfcts_LDADD = $(libdw) $(libelf) -line2addr_LDADD = $(libdw) $(argp_LDADD) -addrscopes_LDADD = $(libdw) $(argp_LDADD) -funcscopes_LDADD = $(libdw) $(argp_LDADD) -funcretval_LDADD = $(libdw) $(argp_LDADD) -allregs_LDADD = $(libdw) $(argp_LDADD) -find_prologues_LDADD = $(libdw) $(argp_LDADD) +line2addr_LDADD = $(libeu) $(libdw) $(argp_LDADD) +addrscopes_LDADD = $(libeu) $(libdw) $(argp_LDADD) +funcscopes_LDADD = $(libeu) $(libdw) $(argp_LDADD) +funcretval_LDADD = $(libeu) $(libdw) $(argp_LDADD) +allregs_LDADD = $(libeu) $(libdw) $(argp_LDADD) +find_prologues_LDADD = $(libeu) $(libdw) $(argp_LDADD) #show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libdw) asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) $(libdw) @@ -607,19 +694,19 @@ asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) $(libdw) asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libdw) asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libdw) asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libdw) -dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(argp_LDADD) -rdwrmmap_LDADD = $(libelf) +dwflmodtest_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) $(argp_LDADD) +rdwrmmap_LDADD = $(libeu) $(libelf) dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) arls_LDADD = $(libelf) -dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) +dwfl_bug_fd_leak_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) -dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) -dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(argp_LDADD) +dwfl_bug_getmodules_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) +dwfl_addr_sect_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) $(argp_LDADD) dwarf_getmacros_LDADD = $(libdw) dwarf_ranges_LDADD = $(libdw) dwarf_getstring_LDADD = $(libdw) addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(argp_LDADD) -dwarfcfi_LDADD = $(libdw) $(libelf) +dwarfcfi_LDADD = $(libeu) $(libdw) $(libelf) test_flag_nobits_LDADD = $(libelf) rerequest_tag_LDADD = $(libdw) alldts_LDADD = $(libdw) $(libelf) @@ -628,35 +715,36 @@ typeiter2_LDADD = $(libdw) $(libelf) low_high_pc_LDADD = $(libdw) $(libelf) $(argp_LDADD) test_elf_cntl_gelf_getshdr_LDADD = $(libelf) dwflsyms_LDADD = $(libdw) $(libelf) $(argp_LDADD) -dwfllines_LDADD = $(libdw) $(libelf) $(argp_LDADD) -dwfl_report_elf_align_LDADD = $(libdw) +dwfllines_LDADD = $(libeu) $(libdw) $(libelf) $(argp_LDADD) +dwfl_report_elf_align_LDADD = $(libeu) $(libdw) +dwfl_report_offline_memory_LDADD = $(libeu) $(libdw) dwfl_report_segment_contiguous_LDADD = $(libdw) $(libebl) $(libelf) -varlocs_LDADD = $(libdw) $(libelf) $(argp_LDADD) -backtrace_LDADD = $(libdw) $(libelf) $(argp_LDADD) +varlocs_LDADD = $(libeu) $(libdw) $(libelf) $(argp_LDADD) +backtrace_LDADD = $(libeu) $(libdw) $(libelf) $(argp_LDADD) # backtrace-child-biarch also uses those *_CFLAGS and *_LDLAGS variables: backtrace_child_CFLAGS = $(fpie_CFLAGS) backtrace_child_LDFLAGS = -pie -pthread backtrace_child_biarch_SOURCES = backtrace-child.c -backtrace_data_LDADD = $(libdw) $(libelf) +backtrace_data_LDADD = $(libeu) $(libdw) $(libelf) backtrace_dwarf_CFLAGS = -Wno-unused-parameter -backtrace_dwarf_LDADD = $(libdw) $(libelf) -debuglink_LDADD = $(libdw) $(libelf) -debugaltlink_LDADD = $(libdw) $(libelf) -buildid_LDADD = $(libdw) $(libelf) +backtrace_dwarf_LDADD = $(libeu) $(libdw) $(libelf) +debuglink_LDADD = $(libeu) $(libdw) $(libelf) +debugaltlink_LDADD = $(libeu) $(libdw) $(libelf) +buildid_LDADD = $(libeu) $(libdw) $(libelf) deleted_LDADD = ./deleted-lib.so deleted_lib_so_LDFLAGS = -shared deleted_lib_so_CFLAGS = $(fpic_CFLAGS) -fasynchronous-unwind-tables aggregate_size_LDADD = $(libdw) $(libelf) $(argp_LDADD) peel_type_LDADD = $(libdw) $(libelf) $(argp_LDADD) -vdsosyms_LDADD = $(libdw) $(libelf) -getsrc_die_LDADD = $(libdw) $(libelf) +vdsosyms_LDADD = $(libeu) $(libdw) $(libelf) +getsrc_die_LDADD = $(libeu) $(libdw) $(libelf) strptr_LDADD = $(libelf) newdata_LDADD = $(libelf) elfstrtab_LDADD = $(libelf) -dwfl_proc_attach_LDADD = $(libdw) -dwfl_proc_attach_LDFLAGS = -pthread $(AM_LDFLAGS) +dwfl_proc_attach_LDADD = $(libeu) $(libdw) +dwfl_proc_attach_LDFLAGS = -pthread -rdynamic $(AM_LDFLAGS) elfshphehdr_LDADD =$(libelf) -elfstrmerge_LDADD = $(libdw) $(libelf) +elfstrmerge_LDADD = $(libeu) $(libdw) $(libelf) dwelfgnucompressed_LDADD = $(libelf) $(libdw) elfgetchdr_LDADD = $(libelf) $(libdw) elfgetzdata_LDADD = $(libelf) @@ -672,7 +760,7 @@ get_units_split_LDADD = $(libdw) attr_integrate_skel_LDADD = $(libdw) all_dwarf_ranges_LDADD = $(libdw) unit_info_LDADD = $(libdw) -next_cfi_LDADD = $(libelf) $(libdw) +next_cfi_LDADD = $(libeu) $(libelf) $(libdw) elfcopy_LDADD = $(libelf) addsections_LDADD = $(libelf) debuginfod_build_id_find_LDADD = $(libelf) $(libdw) @@ -682,6 +770,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-subr.sh b/tests/backtrace-subr.sh index 53c719df..b63e3814 100644 --- a/tests/backtrace-subr.sh +++ b/tests/backtrace-subr.sh @@ -59,7 +59,7 @@ check_backtracegen() # Ignore it here as it is a bug of OS, not a bug of elfutils. check_err() { - if [ $(egrep -v <$1 'dwfl_thread_getframes: (No DWARF information found|no matching address range|address out of range|Invalid register|\(null\))$' \ + if [ $(grep -E -v <$1 'dwfl_thread_getframes: (No DWARF information found|no matching address range|address out of range|Invalid register|\(null\))$' \ | wc -c) \ -eq 0 ] then @@ -101,7 +101,7 @@ check_native_unsupported() # and we can fall back on .debug_frame for the CFI. case "`uname -m`" in arm* ) - if egrep 'dwfl_thread_getframes(.*)No DWARF information found' $err; then + if grep -E 'dwfl_thread_getframes(.*)No DWARF information found' $err; then echo >&2 $testname: arm needs debuginfo installed for all libraries exit 77 fi 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-rpms/hello2.specfile b/tests/debuginfod-rpms/hello2.specfile new file mode 100644 index 00000000..0690992f --- /dev/null +++ b/tests/debuginfod-rpms/hello2.specfile @@ -0,0 +1,57 @@ +Summary: hello2 -- double hello, world rpm +Name: hello2 +Version: 1.0 +Release: 2 +Group: Utilities +License: GPL +Distribution: RPM ^W Elfutils test suite. +Vendor: Red Hat Software +Packager: Red Hat Software +URL: http://www.redhat.com +BuildRequires: gcc make +Source0: hello-1.0.tar.gz + +%description +Simple rpm demonstration with an eye to consumption by debuginfod. + +%package two +Summary: hello2two +License: GPL + +%description two +Dittoish. + +%prep +%setup -q -n hello-1.0 + +%build +gcc -g -O1 hello.c -o hello +gcc -g -O2 -D_FORTIFY_SOURCE=2 hello.c -o hello2 + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT/usr/local/bin +cp hello $RPM_BUILD_ROOT/usr/local/bin/ +cp hello2 $RPM_BUILD_ROOT/usr/local/bin/ + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%attr(0751,root,root) /usr/local/bin/hello + +%files two +%defattr(-,root,root) +%attr(0751,root,root) /usr/local/bin/hello2 + +%changelog +* Thu Nov 14 2019 Frank Ch. Eigler +- Added source code right here to make spec file self-contained. +- Dropped misc files not relevant to debuginfod testing. + +* Wed May 18 2016 Mark Wielaard +- Add hello2 for dwz testing support. + +* Tue Oct 20 1998 Jeff Johnson +- create. diff --git a/tests/debuginfod-rpms/hello3.specfile b/tests/debuginfod-rpms/hello3.specfile new file mode 100644 index 00000000..ffb95134 --- /dev/null +++ b/tests/debuginfod-rpms/hello3.specfile @@ -0,0 +1,60 @@ +Summary: hello3 -- double hello, world rpm +Name: hello3 +Version: 1.0 +Release: 2 +Group: Utilities +License: GPL +Distribution: RPM ^W Elfutils test suite. +Vendor: Red Hat Software +Packager: Red Hat Software +URL: http://www.redhat.com +BuildRequires: gcc make +Source0: hello-1.0.tar.gz + +%description +Simple rpm demonstration with an eye to consumption by debuginfod. + +%package two +Summary: hello3two +License: GPL + +%description two +Dittoish. + +%prep +%setup -q -n hello-1.0 + +%build +mkdir foobar +gcc -g -O1 foobar///./../hello.c -o hello +gcc -g -O2 -D_FORTIFY_SOURCE=2 foobar///./../hello.c -o hello3 + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT/usr/local/bin +cp hello $RPM_BUILD_ROOT/usr/local/bin/ +cp hello3 $RPM_BUILD_ROOT/usr/local/bin/ + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%attr(0751,root,root) /usr/local/bin/hello + +%files two +%defattr(-,root,root) +%attr(0751,root,root) /usr/local/bin/hello3 + +%changelog +* Tue Mar 24 2020 Frank Ch. Eigler +- New variant of hello2, with crazy source file paths + +* Thu Nov 14 2019 Frank Ch. Eigler +- Dropped misc files not relevant to debuginfod testing. + +* Wed May 18 2016 Mark Wielaard +- Add hello2 for dwz testing support. + +* Tue Oct 20 1998 Jeff Johnson +- create. diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh new file mode 100755 index 00000000..108dff74 --- /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 . + +# 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 | grep -F ":$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 | grep -F ":$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/dwfl-report-offline-memory.c b/tests/dwfl-report-offline-memory.c new file mode 100644 index 00000000..e6cb0a51 --- /dev/null +++ b/tests/dwfl-report-offline-memory.c @@ -0,0 +1,102 @@ +/* Test program for dwfl_report_offline_memory. + Copyright (C) 2022 Google LLC + 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 . */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include ELFUTILS_HEADER(dwfl) +#include "system.h" + + +static const Dwfl_Callbacks offline_callbacks = + { + .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo), + .section_address = INTUSE(dwfl_offline_section_address), + }; + +static int +count_modules (Dwfl_Module *mod __attribute__ ((unused)), + void **userdata __attribute__ ((unused)), + const char *name __attribute__ ((unused)), + Dwarf_Addr base __attribute__ ((unused)), void *arg) +{ + unsigned long long *counter = arg; + ++(*counter); + return DWARF_CB_OK; +} + +int +main (int argc, char **argv) +{ + /* We use no threads here which can interfere with handling a stream. */ + (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER); + + /* Set locale. */ + (void) setlocale (LC_ALL, ""); + + if (argc != 3) + error (-1, 0, + "usage: dwfl_report_offline_memory [filename] " + "[expected number of modules]"); + + const char *fname = argv[1]; + int fd = open (fname, O_RDONLY); + if (fd < 0) + error (-1, 0, "can't open file %s: %s", fname, strerror (errno)); + off_t size = lseek (fd, 0, SEEK_END); + if (size < 0) + error (-1, 0, "can't lseek file %s: %s", fname, strerror (errno)); + lseek (fd, 0, SEEK_SET); + char *data = malloc (size); + if (data == NULL) + error (-1, 0, "can't malloc: %s", strerror (errno)); + ssize_t bytes_read = read (fd, data, size); + assert (bytes_read == size); + close (fd); + + Dwfl *dwfl = dwfl_begin (&offline_callbacks); + assert (dwfl != NULL); + + Dwfl_Module *mod = + dwfl_report_offline_memory (dwfl, argv[1], argv[1], data, size); + assert (mod != NULL); + dwfl_report_end (dwfl, NULL, NULL); + + unsigned long long number_of_modules = 0; + ptrdiff_t offset = + dwfl_getmodules (dwfl, &count_modules, &number_of_modules, 0); + if (offset < 0) + error (1, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1)); + assert (offset == 0); + + char *endptr; + unsigned long long expected_number_of_modules = + strtoull (argv[2], &endptr, 0); + assert (endptr && !*endptr); + assert (number_of_modules == expected_number_of_modules); + + dwfl_end (dwfl); + free (data); + + return 0; +} 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/low_high_pc.c b/tests/low_high_pc.c index 78b6ad08..cd022b1c 100644 --- a/tests/low_high_pc.c +++ b/tests/low_high_pc.c @@ -72,7 +72,7 @@ handle_die (Dwarf_Die *die, void *arg) && highpc <= lowpc && ! (dwarf_tag (die) == DW_TAG_compile_unit && highpc == lowpc)) { - printf("lowpc: %" PRIx64 ", highpc: %" PRIx64 "lx\n", lowpc, highpc); + printf("lowpc: %" PRIx64 ", highpc: %" PRIx64 "\n", lowpc, highpc); fail (off, name, "highpc <= lowpc"); } 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include ELFUTILS_HEADER(dw) +#include +#include +#include + + +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-ar-N.sh b/tests/run-ar-N.sh new file mode 100755 index 00000000..de8f62b3 --- /dev/null +++ b/tests/run-ar-N.sh @@ -0,0 +1,65 @@ +#! /usr/bin/env bash +# Copyright (C) 2022 Mark J. Wielaard +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of 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 . + +. $srcdir/test-subr.sh + +tempfiles testfile test.ar + +echo create test.ar with 3 testfile +echo 1 > testfile +testrun ${abs_top_builddir}/src/ar -vr test.ar testfile +echo 2 > testfile +testrun ${abs_top_builddir}/src/ar -vq test.ar testfile +testrun ${abs_top_builddir}/src/ar -t test.ar +echo 3 > testfile +testrun ${abs_top_builddir}/src/ar -vq test.ar testfile +testrun_compare ${abs_top_builddir}/src/ar -t test.ar << EOF +testfile +testfile +testfile +EOF + +echo list content of testfile 1 2 3 +testrun ${abs_top_builddir}/src/ar -vx -N 1 test.ar testfile +diff -u testfile - << EOF +1 +EOF +testrun ${abs_top_builddir}/src/ar -vx -N 2 test.ar testfile +diff -u testfile - << EOF +2 +EOF +testrun ${abs_top_builddir}/src/ar -vx -N 3 test.ar testfile +diff -u testfile - << EOF +3 +EOF + +echo delete testfile 2 +testrun ${abs_top_builddir}/src/ar -vd -N 2 test.ar testfile +testrun_compare ${abs_top_builddir}/src/ar -t test.ar << EOF +testfile +testfile +EOF +testrun ${abs_top_builddir}/src/ar -vx -N 1 test.ar testfile +diff -u testfile - << EOF +1 +EOF +testrun ${abs_top_builddir}/src/ar -vx -N 2 test.ar testfile +diff -u testfile - << EOF +3 +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 . + +. $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..71f7742a --- /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 . + +. $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 + +grep -E '(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 . + +. $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 . + +. $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 . + +. $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 . + +. $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..26618f5c --- /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 . + +. $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 | grep -E 'role="scan"|role="groom"|role="traverse"') + +# Confirm no active threads +! (ps -q $PID2 -e -L -o '%p %c %a' | grep -E '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 . + +. $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..a538cd48 --- /dev/null +++ b/tests/run-debuginfod-fd-prefetch-caches.sh @@ -0,0 +1,150 @@ +#!/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 . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +# Set up archive folders for scanning +mkdir R Z +cp -rvp ${abs_srcdir}/debuginfod-tars Z +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +# Set up maximums. 1 is just a convenient cap to test on. +FDCACHE_MBS=1 +FDCACHE_FDS=1 +PREFETCH_FDS=1 +PREFETCH=2 +# 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 + +###### +# Test fd limits of fd and prefetch cache +###### +rm -rf $DEBUGINFOD_CACHE_PATH +rm -rf $DB +# Testing prefetch fd maximum (Set mb maximums to be beyond consideration) +# Set --fdcache-mintmp=0 so we don't accidentially trigger an fdcache +# emergency flush for filling tmpdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 -d $DB \ + --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-fds=$PREFETCH_FDS -vvvvv -g 0 -t 0 \ + -Z .tar.bz2=bzcat Z --fdcache-mbs=100 --fdcache-prefetch-mbs=100 \ + --fdcache-mintmp=0 --fdcache-prefetch=$PREFETCH > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +######################################################################## +kill -USR1 $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 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ +# load prefetch cache with debuginfod-tars/usr/src/debug/hello.c +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb +metrics=$(curl http://127.0.0.1:$PORT1/metrics) +regex="fdcache_prefetch_count ([0-9])+" +# Check to see if prefetch cache is maximally loaded. Note fdcache-prefetch (2) > prefetch-fds (1), +# so the debuginfod will try to load the prefetch cache with 2 files. We want prefetch-fds to cap that +# off +if [[ $metrics =~ $regex ]]; then + if [[ ${BASH_REMATCH[1]} -ne $PREFETCH_FDS ]]; then + err + fi +else + err +fi + +testrun ${abs_top_builddir}/debuginfod/debuginfod-find source cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c +metrics=$(curl http://127.0.0.1:$PORT1/metrics) +regex="fdcache_op_count\{op=\"prefetch_access\"\} ([0-9])+" +if [[ $metrics =~ $regex ]]; then + # In the test above hello.c should've been loaded into the prefetch cache. + # Ensure that searching for hello.c a second time accesses the prefetch cache once + if [[ ${BASH_REMATCH[1]} -ne 1 ]]; then + err + fi +else + err +fi + +kill $PID1 +wait $PID1 +PID1=0 + +######### +# Test mb limit on fd cache +######### +rm -rf $DEBUGINFOD_CACHE_PATH +rm -rf $DB +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 -d $DB \ + --fdcache-mbs=$FDCACHE_MBS -vvvvv -g 0 -t 0 -R R > vlog2$PORT1 2>&1 & +PID1=$! +tempfiles vlog2$PORT1 +errfiles vlog2$PORT1 +wait_ready $PORT1 'ready' 1 +######################################################################## +kill -USR1 $PID1 +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 +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 + +# This many archives cause the fd cache to be loaded with just over 1mb of +# files. So we expect the 1mb cap off +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +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 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA +metrics=$(curl http://127.0.0.1:$PORT1/metrics) +regex="fdcache_bytes ([0-9]+)" +# Since the server metrics report in bytes, $mb is just the total number of bytes allocated +# to the fd cache. Ensure that this cap isn't crossed +mb=$(($FDCACHE_MBS*1024*1024)) +if [[ $metrics =~ $regex ]]; then + fdbytes=${BASH_REMATCH[1]} + if [ $fdbytes -gt $mb ] ; then + err + fi +else + err +fi + +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 . + +. $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 . + +. $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 . + +. $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 . + +. $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-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 . + +. $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 . + +. $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 . + +. $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..cd867427 --- /dev/null +++ b/tests/run-debuginfod-percent-escape.sh @@ -0,0 +1,61 @@ +#!/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 . + +. $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 +# And initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +# 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"}' 2 +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 . + +. $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 . + +. $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..8cb7b843 --- /dev/null +++ b/tests/run-debuginfod-response-headers.sh @@ -0,0 +1,137 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2022 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 . + +type socat 2>/dev/null || exit 77 + +. $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 +errfiles vlog-find$PORT1.1 +cat vlog-find$PORT1.1 +grep 'Headers:' vlog-find$PORT1.1 +grep -i 'X-DEBUGINFOD-FILE: prog' vlog-find$PORT1.1 +grep -i '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 +errfiles vlog-find$PORT1.2 +cat vlog-find$PORT1.2 +grep 'Headers:' vlog-find$PORT1.2 +grep -i 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.2 +grep -i 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.2 +grep -i '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 -i 'X-DEBUGINFOD-SIZE' $file | head -1 | grep -E -o '[0-9]+') + test $st_size -eq $x_debuginfod_size +done + +rm -rf $DEBUGINFOD_CACHE_PATH +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a F/prog | grep 'Build ID' | cut -d ' ' -f 7` +netcat_dir="buildid/$BUILDID/" +mkdir -p ${PWD}/$netcat_dir +cp F/prog ${PWD}/$netcat_dir/executable +tempfiles F/prog + +# socat should after answering one request +(echo -e "HTTP/1.1 200 OK\r\nX-DEBUGINFOD-SIZE: ba:d_size\nX-DEBUGINFOD-\rFILE:\=\+ \r213\n\n $(date)" | socat -u - tcp-listen:$PORT2) & +PID2=$! +# Wait a bit until the netcat port is in use. Otherwise debuginfod-find can query +# before netcat is ready. +sleep 5 + +touch vlog-find$PORT2 +errfiles vlog-find$PORT2 +tempfiles vlog-find$PORT2 + +# calling out to valgrind deliberately, because this process will be forced to parse broken http headers +${VALGRIND_CMD} env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT2 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\ + -vvv executable $BUILDID > vlog-find$PORT2 2>&1 || true # permit curl rejection of the bad headers +cat vlog-find$PORT2 # won't have any valid x-debuginfod* headers +rm -f "$netcat_dir"executable +rmdir -p $netcat_dir + +kill $PID2 || true +wait $PID2 || true +PID2=0 + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0 diff --git a/tests/run-debuginfod-section.sh b/tests/run-debuginfod-section.sh new file mode 100755 index 00000000..66e53e83 --- /dev/null +++ b/tests/run-debuginfod-section.sh @@ -0,0 +1,135 @@ +#!/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 . + +. $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 + +# Set up directories for scanning +mkdir F +mkdir R +cp -rvp ${abs_srcdir}/debuginfod-rpms 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=13000 +get_ports + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 at the process. + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -R R -F 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 + +# 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. +tempfiles prog.c +echo "int main() { return 0; }" > ${PWD}/prog.c + +gcc -Wl,--build-id -g -o F/prog ${PWD}/prog.c + +testrun ${abs_top_builddir}/src/strip -g -f F/prog.debug ${PWD}/F/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a F/prog | grep 'Build ID' | cut -d ' ' -f 7` + +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 + +######################################################################## + +# Build-id for a file in the one of the testsuite's F31 rpms +RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 + +# Download sections from files indexed with -F +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $BUILDID .debug_info +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $BUILDID .text + +# Download sections from files indexed with -R +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $RPM_BUILDID .debug_info +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $RPM_BUILDID .text + +# Verify that the downloaded files match the contents of the original sections +tempfiles ${BUILDID}.debug_info +objcopy F/prog.debug -O binary --only-section=.debug_info --set-section-flags .debug_info=alloc $BUILDID.debug_info +cmp ${BUILDID}.debug_info ${DEBUGINFOD_CACHE_PATH}/${BUILDID}/section-.debug_info + +tempfiles ${BUILDID}.text +objcopy F/prog -O binary --only-section=.text ${BUILDID}.text +cmp ${BUILDID}.text ${DEBUGINFOD_CACHE_PATH}/${BUILDID}/section-.text + +# Download the original debuginfo/executable files. +DEBUGFILE=`env LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $RPM_BUILDID` +EXECFILE=`env LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv executable $BUILDID + +if test "$(arch)" == "x86_64"; then + tempfiles DEBUGFILE.debug_info + objcopy $DEBUGFILE -O binary --only-section=.debug_info --set-section-flags .debug_info=alloc DEBUGFILE.debug_info + testrun diff -u DEBUGFILE.debug_info ${DEBUGINFOD_CACHE_PATH}/${RPM_BUILDID}/section-.debug_info + + tempfiles EXECFILE.text + objcopy $EXECFILE -O binary --only-section=.text EXECFILE.text + testrun diff -u EXECFILE.text ${DEBUGINFOD_CACHE_PATH}/${RPM_BUILDID}/section-.text +fi + +# Kill the server. +kill $PID1 +wait $PID1 +PID1=0 + +# Delete the section files from the cache. +rm -f ${DEBUGINFOD_CACHE_PATH}/${RPM_BUILDID}/section-.text +rm -f ${DEBUGINFOD_CACHE_PATH}/${RPM_BUILDID}/section-.debug_info +rm -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID}/section-.text +rm -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID}/section-.debug_info + +# Verify that the client can extract sections from the debuginfo or executable +# if they're already in the cache. +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $BUILDID .debug_info +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $BUILDID .text +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $RPM_BUILDID .debug_info +testrun ${abs_top_builddir}/debuginfod/debuginfod-find -vvv section $RPM_BUILDID .text + +exit 0 diff --git a/tests/run-debuginfod-sizetime.sh b/tests/run-debuginfod-sizetime.sh new file mode 100755 index 00000000..17307c02 --- /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 . + +. $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 -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 -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 . + +. $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..5c2440ff --- /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 . + +. $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 | grep -E '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 . + +. $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 . + +. $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-dwfl-report-offline-memory.sh b/tests/run-dwfl-report-offline-memory.sh new file mode 100755 index 00000000..644a45dc --- /dev/null +++ b/tests/run-dwfl-report-offline-memory.sh @@ -0,0 +1,26 @@ +#! /bin/sh +# Copyright (C) 2022 Google LLC +# 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 . + +. $srcdir/test-subr.sh + +testfiles testfile-dwfl-report-elf-align-shlib.so +testfiles testarchive64.a + +testrun ${abs_builddir}/dwfl-report-offline-memory ./testfile-dwfl-report-elf-align-shlib.so 1 +testrun ${abs_builddir}/dwfl-report-offline-memory ./testarchive64.a 3 + +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 # 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 . + +. $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 . + +. $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 + [ 84] set file to 1 + [ 86] advance line by constant 24 to 25 + [ 88] copy + [ 89] special opcode 240: address+16 = 0x10 , line+1 = 26 + [ 8a] advance line by constant 1 to 27 + [ 8c] advance address by 48 to 0x40 + [ 8e] copy + [ 8f] advance line by constant -2 to 25 + [ 91] advance address by 80 to 0x90 + [ 94] copy + [ 95] special opcode 242: address+16 = 0xa0 , line+3 = 28 + [ 96] advance address by 96 to 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 + [ 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 + [ 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 + [ 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 + [ d9] copy + [ da] advance line by constant 1 to 8 + [ dc] advance address by 64 to 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 + [ 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 + [ fa] copy + [ fb] advance address by 192 to 0x480 + [ fe] extended opcode 1: end of sequence +EOF diff --git a/tests/run-readelf-Dd.sh b/tests/run-readelf-Dd.sh new file mode 100755 index 00000000..8c699937 --- /dev/null +++ b/tests/run-readelf-Dd.sh @@ -0,0 +1,66 @@ +#! /bin/sh +# Copyright (C) 2022 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 . + +. $srcdir/test-subr.sh + +# #include +# +# __thread int i; +# +# void print_i () +# { +# printf("%d\n", i); +# } +# +# gcc -fPIC -shared -o testlib_dynseg.so testlib_dynseg.c +# With ld --version +# GNU gold (GNU Binutils 2.22.52.20120402) 1.11 + +# The same testfile is used in run-readelf-d.sh +testfiles testlib_dynseg.so + +testrun_compare ${abs_top_builddir}/src/readelf -Dd testlib_dynseg.so <<\EOF + +Dynamic segment contains 23 entries: + Addr: 0x00000000000017e0 Offset: 0x0007e0 + Type Value + PLTGOT 0x00000000000019c8 + PLTRELSZ 72 (bytes) + JMPREL 0x0000000000000568 + PLTREL RELA + RELA 0x00000000000004d8 + RELASZ 144 (bytes) + RELAENT 24 (bytes) + RELACOUNT 1 + SYMTAB 0x0000000000000228 + SYMENT 24 (bytes) + STRTAB 0x0000000000000360 + STRSZ 190 (bytes) + GNU_HASH 0x0000000000000420 + NEEDED Shared library: [libc.so.6] + NEEDED Shared library: [ld-linux-x86-64.so.2] + INIT 0x00000000000005b0 + FINI 0x0000000000000748 + VERSYM 0x0000000000000460 + VERDEF 0x000000000000047c + VERDEFNUM 1 + VERNEED 0x0000000000000498 + VERNEEDNUM 2 + NULL +EOF + +exit 0 diff --git a/tests/run-readelf-arm-flags.sh b/tests/run-readelf-arm-flags.sh new file mode 100755 index 00000000..25c5477d --- /dev/null +++ b/tests/run-readelf-arm-flags.sh @@ -0,0 +1,30 @@ +#! /bin/sh + +. $srcdir/test-subr.sh + +# echo "int main () {}" | gcc -xc -o testfile-arm-flags - +testfiles testfile-arm-flags + +testrun_compare ${abs_top_builddir}/src/readelf -h testfile-arm-flags <<\EOF +ELF Header: + Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 + Class: ELF32 + Data: 2's complement, little endian + Ident Version: 1 (current) + OS/ABI: UNIX - System V + ABI Version: 0 + Type: DYN (Shared object file) + Machine: ARM + Version: 1 (current) + Entry point address: 0x3d1 + Start of program headers: 52 (bytes into file) + Start of section headers: 6920 (bytes into file) + Flags: Version5 EABI, hard-float ABI + Size of this header: 52 (bytes) + Size of program header entries: 32 (bytes) + Number of program headers entries: 9 + Size of section header entries: 40 (bytes) + Number of section headers entries: 29 + Section header string table index: 28 + +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 . + +. $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
+ [ 79] copy + [ 7a] set column to 15 + [ 7c] special opcode 32: address+4 = +0x728 , 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
+ 1:15 S 0 0 0 +0x0000000000000728 + 1:15 S * 0 0 0 +0x000000000000072b + +EOF + +exit 0 diff --git a/tests/run-readelf-s.sh b/tests/run-readelf-s.sh index 527c436c..ee1c0e82 100755 --- a/tests/run-readelf-s.sh +++ b/tests/run-readelf-s.sh @@ -277,10 +277,16 @@ EOF cat testfile.dynsym.in testfile.symtab.in \ | testrun_compare ${abs_top_builddir}/src/readelf -s testfilebaztab +cat testfile.dynsym.in testfile.symtab.in \ + | testrun_compare ${abs_top_builddir}/src/readelf --syms testfilebaztab + # Display just .dynsym cat testfile.dynsym.in \ | testrun_compare ${abs_top_builddir}/src/readelf \ --symbols=.dynsym testfilebaztab +cat testfile.dynsym.in \ + | testrun_compare ${abs_top_builddir}/src/readelf \ + --syms=.dynsym testfilebaztab cat testfile.dynsym.in \ | testrun_compare ${abs_top_builddir}/src/readelf \ --dyn-syms testfilebaztab 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 . +# + +. $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-strip-test.sh b/tests/run-strip-test.sh index 280814e6..317c2256 100755 --- a/tests/run-strip-test.sh +++ b/tests/run-strip-test.sh @@ -66,6 +66,6 @@ test $SIZE_stripped -lt $SIZE_original || tempfiles testfile.sections testrun ${abs_top_builddir}/src/readelf -S testfile.temp > testfile.sections || status=$? -fgrep ' .debug_' testfile.sections && status=1 +grep -F ' .debug_' testfile.sections && status=1 exit $status 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 . + +. $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 - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - <"); puts (""); if (dwarf_hasattr (die, DW_AT_low_pc) && dwarf_lowpc (die, &addr) == 0) diff --git a/tests/testfile-arm-flags.bz2 b/tests/testfile-arm-flags.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..d1b018adc504256350248641c45b03981f16cee6 GIT binary patch literal 2593 zcmV++3f}cXT4*^jL0KkKS$e_71po;tfB*mg|Ns8y{n!8h|M&m@|NHsm_}9&duP@Kv zY{&ZiDK0Gyn#MfuLvr00000XaE2J009sQq%w@qlL@p48hT7d&=U!!jWlQg zGH5htG#MBG1Pq!6MnfU$02vJiMnD)Q0h&;diK8i#H8fzDBTS7M4FQnQ05s6hGy#wR z01W^D000000000205s4t8ZWAl4O}5avT8 zWdaO_p%KvKZC|33H&1^iM%B4*RyF=shK_H4*k;|errX(YL#-3gZ+g{=WCF@D@^&2j z_Py#HOm^~J|23=RoIn65AXKvmSkQEV3DCp>1VAPghmQ!29;voNFaQ8NSN!Tks#l5O zxP&+WMWX-_U0KeoUvhmVWM?VZz(OEQ-px=1T^Q__Z4I-jg8u0ER5hK2#11(!Nf{)3+J|Lqys;Z$`pvM`RsALg@ zDr1bXuY5>e-X}pfYu3CZWFRjxS{6t_f#&! z@~o;wMR=4!6e4ZPZD$4W_}oh~Uy&0VM|NHq;we2_X$Z=7gZc zJR>nktTzRlvqPmVCXW3ml2?Wk5|m1Ua!5fSQ7M!#r4pc>X$Gl8kWfO`BvS;b2m^VD zyhOSe=oaLq0mb2t{W$bEoOP|-e|Cct=wab9&4rdN@fC^Z1(X{`Jc4gBHwN`WN?jKU zCA@(s=Qz{lxY9Abv~X6P`}E$-JCk{BCyv6p|xPHlHBHRHD!m@@mh$ls^q^Xc`TsnCkqMK zSc9}A6Jyi*MC(y+3iKnIKwainOYnPI9~ z5?ManZE<5yRm$_+?y}m>>Me-V*~hZRLdgEGRk^I;a_v~S*PtO>W*v3e8?34P$oqfe z*6?{8_y0q?iK7?tQdHUkk62^~r(PjeXpE z`nDE?QpG4|GcYp#-mqoCIgIwIsX1l>gk-tP-D zMy(~OO^+$+U7juU#IVKuj}%zJ2@Em&e#d!#IitG%3=}c9>Tbh#g<-81ayT^aUWiWp zBVvG>j5h_*-~n%d2@ojBlMJ8%(Jcoc$reWrv49g;iv(F2+@5EFG(vv~%41h$TR|f6 zrB6;1*N&zX8#+u%XbP-LO?QfwDUgaZbYq#}GJEyT*{dNe`ph_q&H==Mh)(4Q9a0d( z5O2o8NFhgqct=`6F&Lwcqg&fAA;BJKunO^&##O~_v%pFq;X#9N6b4Bu$|%6-Fc{oX z%V=Y7pFIiH@;_-U*YSUudwW12vIcD+Sab7G*BNW&9UWY7D%~NS`tWzqIP#H8dSFOd zaQ}NU8m#{oShpasV0j-Sx(){e3#_ZR!ic~H-5Hq+7sG&gu5>sb5$K@S1z@K*FK*__ zVpjM@8|US=y=Fd|RjjXbIvX2;skjh>J?|EW6ZN*a0nTX71OX^(~Ca% zs{suFXTY3S)ahf4hgo1!NSXs#vY0JnWy@=}#bL z&w-a3(+-#*UBoZDMT%<}QDKT+sA4F`O|lxrGrio#LR8L3%*wMhtSae$(vxnmew zz9~3-n`H5}@)p5ep2l27%hgi9cvkA2&P`n^j7X&?pPj4Z>Q^ie(#WFhmkCks|gd5ahSGrn13~KKSeftAxd( z2&BMQ$1AH8XsMW{|sKDkJ+0)u<9&4dyfMZPvElzw? zYe5S2XxW0lIzVFYDFC=eFi*HKvhvaR={rdPTMoRtcf4Doj)Q-ui!tQ=ra D3=yAi literal 0 HcmV?d00001 diff --git a/tests/testfile-dwarf5-fat-lto.o.bz2 b/tests/testfile-dwarf5-fat-lto.o.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..ce3659f4a41c0a42b6f85827a31d810a1ec996d3 GIT binary patch literal 3101 zcmaKj_dnE+1IOP+oN=6S;m#%zxbv-ho{zKcO|)dRuX1b9T@=3do$y~RaK<|GGPv`DuK_!XWVC|J)Ee;q*RjGQReln(9D^mQ9%zmL85zv*{ob9 zIuxgBgaRF<B$^Bg zxnIrDgKkP2mC6d@73Kq$QsopYwP&2nj!`5SuFQzBno?CgfFlnukR0e}M0FsV63p@< z343*yrm`Qa6mZF87X|_}=XO0TYgaJAaU<#Pl1OuU||BkWxm?7PC z#GTR15cvPlXLA^}YKu{EmBksy05C;ULWTiT?tp?b0RFF>f`I{s)PKdDPV>JHRY)? zW<3tPO>XVwd)6rA`zIIpSgeFAHvS>`sdB*9mwf9+>Gxk|dR$f$c2$3bGN0vJc=N?Z zzX%H`EDA1n*c_uLmt;-4$kNjfYu(ctrMWpzulPf7JJ8kI6LHmw{SvnpQ29knNZPw$ zFPImuYU{J|kAG0*yysNuxJB&&U!lL(taQtrcQA zwt+rtyhS1HE!;?B->U2tF-ndWWMxq^4ma?YV-F~R(!(~ zls0-rabixF8&q-VEilBB{=?R-{XD$FrQB^WMikr5d6(OdRO^E2;>w_UH}a_`-D`Yt zTVU%U1u3=_#yG@xIG8_;TP$26{V(Z$Nt zuGxMMR(3EVgJ=VrtWGow(S8mrh{B4y&?QzuGbQnHR=GBmg5o`}bv~=>C?IE_x ztdfX(x%I8VQyuj}BIPZqMr-m)$zd}`ZTHOpf>-LcHOgVzsd3ZGa&{_N_Q{7kV^M`c zhVcTItOtKpsmwnb`d)vfSi)O=Y-w1GMepRYp=Z%F{bY_%)pdedm!J0VyjJb=Exe<@ zq=oP9YpiNhNL~qRP|i`)+EhqBL;kC_!7`zY^ks$2}dE;J@=1wWD# zd}Gqj%O5F%21=NvPToeRcmzLTYkq2&H-3fAEdipQUO2RD`Dm$hTmwB#jN{O>x6c_! z@eya82{48+{!y+gnN}yc*s14VKfdzx&urh!_{9S?p^Dk%_0@pl4oc6R$62dRaF~-D z7|DCUVLbgsrlNrQLP%a%UZqdD3*NLRj#a6ZU6%+?cU>4#&u8N&JDQd=3-iX4zdY++ zKMpd8#r^Rz@dO`$7Np5yulX2qv{d?wz!sN@$7xiHk_o_j&NjsV*c(doyF zTYL5@k_2B(Lj0ds1`~-iiEe?q*0SZdJ<871VW)Je1S93(Cw!vtvt%NVxL^0k>axu; zr(`2K11+smN29AlyyDELl4sm9&=CUV%P@4<^RhDz;T-R+XQUh@BE%JqQKa`TkN`lS z1E-zjt&aUJ*v-urak}#LZl|BNv8`&UiWA+b`rNYsaPX7UyKTKsy(9xs$_ypKrpccz zMjs#;!v6f&t%PUWUdxTTt2TFM=+F0ilR8$rCH0bSfuFPFa7D$>OeLUt>CMCV)}5eI zxIFnNQOVX-|O(P&>ow>qFKeI;XEz-z7xGa5_)5AZ|5pDMj-W z?xFEtTgITp?C~YnhNGdCEqk&LpS_8}+E=%`wkyI{K3f0%SFUUVO-xQ~@8h+~N1&XN z-BIRX44xKwww80cj+agX_J71e;A;?=P0R1OORZM_n{TR-V?ZE13d*@0_Yfcb=ralw zsyVXk72iVNkPkX^kA9As1t-sQ3l2HuuKRue#4Fg^U%`JN|DR?ezKm- zJ*qy{dT1{6gsP1azQ4h31b^uh4e#>P&9t|5k2IuzE#PNRSRNI>mj3-#HYR6=$y7C~ zA5n3mTL%9XBfDpw*L)4df+E40p*UlU8iIR*Q@>4Tlg|ecS`Mq#JGssd7SshxdwNUf6hB?KdqceolnLQ)5Q$S3bQ>}vbq*X zTyPbY6cV=mBuDycWzdFL!C~Ei&9@wMK!;6zTU3+eueikuDGYa9)s>R3Mt2=%Qxnhi z(gn`gDx&;do=R^AVb~6lp`X}GJ-&)o2?r)J$ zHP!k8w-w@|rN^=E&0Du>Q1dyK-dLX$%?plLLV=S2{nh1aEH@>TF&b{ox4kjUOSOpW~gQpzMxClCI(^)~_a&7N++0H1}iKIup z)VvqpYs=F~Y=QnY?9u0Z(5UliSk~Onh@B%J@R>J97N-VF#iBt|V9X=e&fPrx@a&EQ hNwKd9FiBv2fA+nL6t-vb;YSxy>TOKyTf!aC{{TU>=i9ALlzKmb4hAON5M zfHcu5lL%>%qalz6gBn8_42FY2qd*z}8W~!#9HOGvK}7V;m`k9kmnQ7Xs*(clq9*|2 zA}D|*im9-mNr*r@N){aWV)s@c9Zj;%)REkP6oAtzQc;Q^velES!XQ@Wspq}yD~@;F lCD&sZA1p^UFHqN<4rm_o_X>?mK--t`cO+AV2?w`qzVN>OO*jAm literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c1ddf81ff6fcbc94e1f32cd3c2eccd38e733b92a GIT binary patch literal 568 zcmV-80>}MAT4*^jL0KkKS%dA}XaE7y|H=RVdH&z;{J)RqLI}U_-(tu>L;wH)pa{SL z)!lYwkrZhF01W}4&<2eFXc_=$003lY0i`yHqMpiR(?*~G4^RLA$)E#302)0_83Rm` znL|dJ0MVv~fB*m)0002>0BNAmN@^+UXqf;s0MGyrPylFTXaEL=Kr{#RVOlA4P(oBw zT_yCAvw@uZ&rP?VA6p+NToQjnO*EqEu~(txUmW7EHc*&NItcKjm}z!QTy^4z4(!Ah zg~)&yGY$h{Q1l_!Qr-@t=Kx|!c3KXU_E5}qKgrngTE4YO`&Fg`M3`f3GgB-8Y2}8A zCea}hL9WsShpJOVK!c=NsS=r(-9(B5nw9H-B22;%%p}D$1k`b+!9@Ocs~wt?)m^8- zxI`ne)+SxXm=Oo7fh>li78DQ&BHm-)7@9=LvjRl&6u;LF!q{=pS31n%K{mz0s75>_ zNFR)LlVvuL+7Y8fX^Eo)K$>L4 zFiarC(@acFFrI^khK!mtXwyR@A%p>t10d5t01SbU1c?xUBPpXts4=J*gVYQldQ43W zgGZ*LMuCKyK`KKDA|URB*H(qjZlpPpZNkl3Ve3{Sy(3JyD)O2tq$-pU!G|Tg(leH% zmtb||QJ`o`PgznZ5L4$i(vE3!E@YwT^2ee^$>vP7ef5hRk}X9Tn{@lji{ z;26<-VgsuvL_pwa?0#Vc+DD;+4K|P?{L$2+5$SEDv9KFRH#Ok_X^o*afwUt@pbY+V zi_Ma!1u3-`T-*RYNH2-=>CEcr+HxvV!VD*xm;o>swz6A(?5n zAyZU4@U$4K*ea4iX`~I?a>W5QNvSn9A=!lPM1XWLZnYR;WNB*a#ZS8aT+`uX&``^4 zso8V-JZHtY2fkwN_yw-uPjUvLh2#M-_k{Mi8gtP)PvLUXRgp9VSAkSqjMsSb{iu~GF*-G!nE;K>!PO>-A=ML1B9iMNqA2RRz= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b1d6b6c436bafbd4cc0c18b33e77d1a273e29c43 GIT binary patch literal 741 zcmVOLe226l@Pf$HZKn*ki27#ae14e2Z4@fkPO#+?-o{XRX z1JnQj&;S|$0002U0l)w>05k!h00TxK0B8UJ003wJks_HiCYnP)#Aq;qlT1xCX`>+Z z8UO*IwG9T1Gyt`rHTu$_dWIRAZX0Y}A-5D{vI$8_XxT@CzD`BtZ+bZz2?z%i+e)z` zF&;}Xx97(jw*9``xfLCz_RZ8nuNra{hmM#|JuYOqxocaERBcQcSJH@uBOns?;mhU9 zvze^h%`|Kn0G&mEobhNsG*@GEEZp2e=HsH$*6Zh8*ryvG^(wp8V-DZKQxG-+)nYPO zkg;%K0a?X}B`ji1iZonl#7{;FFQ6vClR(@srIK*aW<5rWEJqonTxB_A2jQabG$B{B z2}1%HgxDs~*uK@}B%4dPV35eB_doASjFcX*wbuHfkw`F8%nEc-EDp(tXhjNzjmTO! zGNCVBWdOQW^($^x;Jiwf#FPw2nSmCuWh=0GEKfsbiVOO;a?fUET(6wenU|Fe7%k-x zg4Oo-~x9r)8Jj}fL zQu|KBFl>-}jkDBe6TUC$g?ePQZlCHcX%S8FwH=V(2SZ6sT1<41gH4N%ujK;qfEB3? zGYa7TC1Gph+Lr;GnGk+1e2 zu|_7k9S2&LgMd`2(4f0g6~n~Pk7?mC_GE#YK)`+yBuXT78Unu(Dv?%@fhmMgl&`oM X48W&gfsE>*@9}peQ-ui&=e$KgnQlgt literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..adf6c6a532b5902f0a911d7f6b092e211efc420f GIT binary patch literal 761 zcmVY?$N``<44J4NkZNcnMA}noJx!!! z4Kx4%&>8>$0000000F=N0000082|tP000000gwPlktRZ(n3GKdO&J;nnrJl841u5l zplE1lGy$iiWCG@dq$Ex`!5N@Q2RIP7^9!ph!c(OnsGE~2qMlt{jfO`psF!V&MhoTp zo_|T%E8s*T6f3~u9sF3e7M#S387}SMPY zYAJO>LTx2fp$0T3lGMFz3T-8v#0w>eNoKTXx)`w@b5|Nc(rK|8jR1DD;UeQhXhUEX zn`8|kS8&ozpviwGP5d-x`FYE^K&Z0~y$;|S2?h7hSG^A2CCad=H>L4Inq_$Ay)%~R z2Et6ztkeS*>kgc^G{&76vL$l+`8A};yZ3z3*Q(5m+TXc0xDN)}AW0WpOhh}n@oOFd zQA8=RP2BZWBr9~o8cn3ZGE~A1Hb)K@MWkgsroX+&uFMRlPVr7j!wAClpbo+u{fR+c z+{sEom?CO#c^hML1B9!>A_ppSe^; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..da9aac73829eb036dad242af38c027e50259f70d GIT binary patch literal 660 zcmV;F0&D$3T4*^jL0KkKSt97HBme?4f7Sp0?&@ym{r~Ir5)%LK-{Rl`1O$M9Kmi~K zzydVliqwXtiG@Qo8){8FqaXm$My6?{89!9@HlPMT^#ec# zfB*mh27r2lfuLvxfuW!SLm{Ss8fXT90LWqh4FrgyG-(q}JwOai4^vG5&>CVH8UV;1 zkTk?J^w2p8(TBW*t>Og;Eg(UHIie&@(3c9OjoG&CC>euDNJIEeiIW?B1PNpMu=YPA zmAN6!kGfFAh>bKv+AzJ4u?@&MP=SsZz;97<{(Q6NuAsVN05GAFu!>bU&|qqG>bBj& zh$HUXpG>?8y*k&Y4JAOE5NEU<<{@%7VI*2;2F{C0wwr9W%S@%NYdlPrIwQ8h=fD-c z*Kvtb^2TPcnxSN|1hj_F96~~Fwh9>8r4THl+aLt;1Hax>mSac4BMc%jg`y8UaQx$$ z)YXb{5denROG1N>AZTE{H7oEC)yEAd&Vm?kdOx#;)1w9}tn0wKnTR1>ZHO#7n6cc< zvQz0}NJ|i?WH@Mqz&1V6e*L@jD=j|^aBBRnP!zajiP@7S<2w;44(y8cvb;~_NLLbB z4Z$g{oaeA*oR*wWfoVV`Qou+%^WaTp3`K0N$z=Q<(U1~WAHAAFO@itF$gCJC^|A1Z zAeOAwMGB?|eJ2qh6kql{{{$6ecoxe73o?U5+xD;_@oxqP>5Ps125+!ES9yqQD%~?c z#fyg#+C~zhoJ5h-CydjWDo%>rRM7q_vR+k~B7ip?yr^_8O#_XfAr={3=M3#5gbY4x{;9(q91pIgk8xL;X*)*qOgz}W+?{% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..26421644423ae556ae4b968cda93ceab1ffe0403 GIT binary patch literal 691 zcmV;k0!;lvT4*^jL0KkKS??NpH2?y7|Mma>`u=X`_5087QiQ+n-{61%f(SrBNB{@` zU8X`<1O*GR;#*;y#)EWR}$N&#WGy$VP%%(sZAb?LrJc;UP!~v(Npa3)g z000Jn0MIxZ27qW98UQph8fXEgfM@^=h9CgYNRl*)V^a~6XhDJoMwv9hFq&vFG7N{L zJxw&zCLqETt7qLv%NZCj{e{X%zS9iP$+u&N>ep_?RiT|+z^^DEfHw2pP=Oay z_P4g!R8BH9B5f9M@TZMQ3dsl+XP)7tPQ(da&_#2(Ng)(8FFO)hO(Y9JhT9B%C>87F z(}Y=baKPkZlNYU^U0FgCZHYDvX&Vdz7;7{h76=KRH>2H#;$KaIl^jnpBZhR=sK(H{ zf}LT873NF^W&=cD*n@G@HL&Y;oF>~P+k#J_qwOdUa|_nDIy{+02*|iW2*7uZA+QS< zcoa~Snk-&b;)(^}XeT&`f*8hzDyfi+p2Pua)a0!(TrpQOBdPw>-<=>6O}dc7AWE*) z1AM`qhOHYwR5k?LQy~^Hg>mcbB)Ninm%U%sD^Uj}xrH@b35JJXMKz{0vR)Ha6&GFO zc3EPzW6Y*goW9l0M&TJ}a^&B7Fa;6m_~%kZ(H0>OIh|wdxjRND81sEs{&i zFd`+w*T_G{46UC!DSq4)8mb2c3WN;5A6irl6D+XaA!Ilf#i1=4V;aAtCi7lrGm^`W zx?(`5gjo@FDp;IEvY|O{l;jj}KBU ZORZ5&=^79M>i>U>xgwk>NOz4r8i1Ij%|Nq@ znptf=9c>5@n@TAq7B#g^fQg6J*=JY#WT^c!opE8;rv4l(obu_{rxlS%a)o zx)6_NNjfnRtg=idkUQp#&1*qwz?f-QrVVSRfUc5~T85y>1j}KAGX)?VR}cdVxDQ-8 zhke?B?#51ntD(D9%(e1PK>+znzyFNJj25PKpNCp>mcEKuk+E~j3{Slq&+a1sggg69 zfS6@lqEi_Y)gCa|DuO97<|!f?J_qP4j|I`*Mz91j;y_3ptaLv)@y5AO8;2@Vl7nDJ zP!eMZ!LZp@skMky#ytQ_b8?xuQJ^oydT?MJfFwwe#*SF4(d(R2RD~fzsd1=(i@744 KC`d^|wy}V6)i!Sc literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e286f8f7519be11238a332cd5617b2b7cdd27e8d GIT binary patch literal 768 zcmV+b1ONO&T4*^jL0KkKSwuCE8vp{`fBpae`Tq9z_xtPpQh>kj-{^n{6aWN301!|B zP(UC^zyfOFMpXm~DYmHnQ%wdmo~Dfr4KRRc(WXE!5s+X^k5CysG@58M5j38HX+0V# z<4R;S(WcOY1R6ACF$_%_7zoj|GHBBr001-%4Gj%405kvrpc)zg0Av6FktIDwDtW3I zq|u@3Gz~P-`lCjMKmY^OGzX|OG-zmPkb_W*jZkIAF%S^~#$&G~RhT@Kzs_Sm3_ZK4 z=y;F@nEQa*5MqL}HFaBReR?UqTD6>ScXPvI*O8f_`>z?W=P}r^IjJ-qurN!Z8 z-nrVh7c&SHkd-{>hJsFtAWBbi=BiPc(j?M3tt1_0l1XA{!<~~MV>3bPzq=;wxL|f# z2{gPc0IpDgY-~z~LqOU`d59sln@H?5D;ik-?Q7c6sHN+m$oMXiV1Q0A67T7__;s}b zxkC6>e5FDn0CXbRm~axq4gDA#lNjSJR15aaX6@<~u+lYa0o%RTA z3y$%x?9S3sXfNE)l2$abGGP}b5XQ#a27!c{M=yH_K09ayOI_B#*s4`95Hq(55}6Q$ zz=!bVu#g!WxS`#1;6X6Ns5q_+-CO9KJ|U_(eS&xK&m~r_KG{4!3KuY7`8Wq^0MIoyrsj#tK<)WK(sBu+KrBGExwf#0dxgs9nhv;X*+W)kzU0B literal 0 HcmV?d00001 diff --git a/tests/testfile_multi_noline.bz2 b/tests/testfile_multi_noline.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..39320d1f57f82d5633f2892fb559b1cad8976299 GIT binary patch literal 3155 zcmV-Z46O4)T4*^jL0KkKSx#uJa{vrm|NsC0|Ns8~_y7O@|NsB*-~Rk>Z{N)PXWjPP zU(a{#>;K>jA8iq;^HejO>$kYn2+V%fDqsc~+M7T_ z)X;5B8f0NKdYB=g9#cjpCV*sVp|p=6h6HH!8Udg*0BF-ACYV8?0su`k$eL!NYI>fA z2?IdTGz=ynG5{I?8fl;ggFpb#4FCWD01X;w002EeRWwYSPzHbi0MGz54FRA7LqGrk z0iXep00Te(44O0z00000XaEF-C~BweLZ7N_A?kW+G-wY=rqt2uJwP6zpaJRt9-*P2 z&;V!yKxiJI05k!h0B8r44FG5W0Du4iqd)){hK7SifB*n#pcxq&WCnvFf&ria&;vjK z&@uot0004?Fi4_kAWaiAo~EXrr=-Mbk)Q(v8Zu~Uri~2;sL%}!0iXte05kv%4FQM- zfHE2Y000_-0(Xx;)I;F2MF}o5K>-}Sdpt0SBuJB`!HHX<^aiP{EkMK+gljg&uHb$b z!a0u;&e9>N$c8Q~n&o3H;9e<7@dF&$Of;3~s?-Qs1EvKL6jI{TDYDhdLB%#0YTVb? zsZ(^J%9rw^SCR5!*JfGa0rf$g>o+Fv56~rbEzOx4?;@!-&)jr#dD_E170iehViv@TpX--~lkg+H50Yq!8AY zg;1qKH2F*4inncKE+yryaTPVjXsONdn~SJHjFP4WC0q+jLFk|qkmcV*szFKQqLoyV zCKBsf&{Y})Z?>fF( z4NC+VBS=?q_`?4L+VhhhFX#GIrLF)PHn%n*5K1}QygM$ldbZ?j#pHxQh?kpgk^fqQ zuccGpUaWy`g~SjJb#W21$lK0LgLLU9#j8*I^Brwk2d5f9t1$q3?I7AP4nB>GBOw8l zR0f=}wn+AcTBfDTD3XwYE0ccwokQZz~7zQ*D1qYO1P&P0k(qj`~4S) zA|^K4T#E|WhSmEOZ^T*u7avWqWASO!u&GoP8rbZz9pfO$a@Ki6lk{G=o9~8cQLOh`VHBZ2;J4q`GJnXiD55k-{dDBSO&25NWy~ zqXc6}AkncA)T}_GFBpNi*3(K+JwuNX=bNEs6sUnLFeGEhPy{vrYFH=`8X(o=8z9`m zB4wRc1)N29HoMKvV(u6nfZq3B;SH4gx8K2V!$4+l9$=s{U{nKOLq!@&y5@&{ncord zc+e0HQH4Yhsv{4Wtm?|`DnAHm?bBNCEgONGQt+CJ?v6F3`y%Vig;ZkJbSOD2HF$E> zwucOJ=(ZgvVUoZ!bRiX}a{ApAjk29IRUx+X;R_J!BPP27)Dq;DHVBq14A4t3Tq5-f zMr3?*E3~nR5=TnoEinC3rp#Z6=HOftr$7nVk9z#1)`*^#lTpWkFq4~L+In=M^AiE%3 z5gHdBv52S<@&F0}YNDWw;L^Wg6I6PSf>b^B5Jn1mOIcZxXZ-pnWvU0lz%Xb;fDnWs zLO>`WY9F8mBrwJRK7+ZWs4I(gaMzri_Bvs7^XTe3787_n79%vxCz}AM8cQms zcdVCn17xOk+3JaVYU#GHA4>DMdRyI51L_*p)dgj9nu_zGlR05)&_W^o)r^Vw21tQk zP}x4fBQu8rT2lee1eO#eme{sOXU)2RK=dLft6KBHNnuT+5L2d_ghE!BvkfFsl`;Qu z21?PWfn=@$f48$T> zTSzjB84}wf;`1&gOLB-+ISeV~7zxZWO*Yt5a$hX+?lq(wpo0U0Jhlqdveg{jtd zE6b_A-}&$J2rnv;Apn6AM8-2sN0Nhp5Ig;P2owy?`r881uLYPx2NR&1Cs{h!TXMPY zC86fmX{;)pK^0bFM$}SK$q9tviPZVIe-6!gxp{w^@@|MN2june36lw+$ z5XnWPP18guVK(keD=fPrDMUac3!FSXI)RA7t;ORf#STTBIOghO6?i?C5ZrV(Z`$49 zT!Gz*bT+q6sEXR2=L`q*gQJnj$`K{)R?DWKG`D_Zd4y8k%n|7 zNQWq5)Zp?q*Sjwc`zt!KN`;Lh&$fOX5D2VF`hd3a3Uf{kgAj&yEP;`MBu?5mI0>6H zvS$>t`ZjfsfG$f(*AmdpcF9ADV9^DTx0?xVSzxORD_(eCO{^xR&vwwHn{XYaR<|1E zVxXZ`+{~>4g;#%TqY?)+{0Dk#OMMMuXfVdH0a7o(6^p?u; z7_zf@SFCXhRv$S|JEA8jB7D4IuF!!Y#`oz{JCY z9swDdhmJEB+R_*V+DJ49fM_Eb`RgKRYYj_<;U>2tk+df-8|suO+j&U|A!eSTQ2XAR{0tAa@t1U3dhYbiiFbDlj=&}ye_wS-(KbnOrkx~g&8kD=cL9E#?G3W2WTQfXlyyvhJ;)Q+%3MNIh zLQxw{2&dO6p=c<{Wbw08IYeq?NDd@IKE0^_NT%;+-jXY7)-mGYn0BRbcnUMpk1!hA z)ESFi3#mla0S6kTs>>obAJX99qvuQf>1Wrq#9HGmFxZ0xWxJTEO@b#)Dy!J&HwD)h z`Zc#0E@&_;O(105#KnHPsqpSBx%~*_=ARQ97d;xY&{?*#*vC<7#4a9V$^uE+9={zu znW#4KGW5pkto6_v1V|JqdP_i)P>|T%$pV3#Xso@U=)bHZ)?k0XgZa4^2`gCK~W tkwA(`R6Aaa5~Q|u<2~lD6oqlj`XFFffR=|t`<|))7ji{7P>@b&t#iQ@iZB2G literal 0 HcmV?d00001 diff --git a/tests/testfile_nvidia_linemap.bz2 b/tests/testfile_nvidia_linemap.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..8a6d09fbd1419af2b4664e8751207be470198f1a GIT binary patch literal 2365 zcmV-D3BvY5T4*^jL0KkKSq)>6PXG%lfB*mg|L^|i|Nqm@%YXm>|9|bF;0gptplMZb z+z@oxek$MzA3=Le*sZ4QFf%trk<(lJVeQ+CXEdl4WbN< z003wJ222QOG|4JO$`Q^Ookzl7$XsrKr|R55rS!>07C#HCYdx~lTt}N z38AT?G}BEz6Gx~S0Av6%G&D2~0017KWB>pLfCE4P28bFNG}BB>fu@E=hD|gy8euXR zhCpD9Moj?FV2nlyri=j$0F0Vs(Sk(*1jt54hEjf{$kR~t(lp+b(p@T+?W=XfGcS&L5UbU0?35a#xs8L!r-U)TF1&F!__dKhBSQp!#+wj$%m9uMNR-G!K_M%dqZ6H; zp6s^6LtA42tC>wzChpmB6xue3L}H1b!5}H>R`jsiDJG5(on{65{32{>NRWayf(z@`1E`3y{ zl~q+m1VF!oZ8R)6HEO=U!CjHKL=i#lMp8Ugu|_5N>}!I}P<2H9jm?W|S`&9IL7fYl&9&Tajy_+U zco?v~b4#nESGuIQ`WznwnVcDcvISVY32sJ@;zMlYbDE<_Ci5dU5WJ7A^d;1t&%hFdjAKBEu4x*h0Wpf#4;~SW1h|NlaA3mRdio<% zGpjR0sd)xQTDw99PZxme&R|Hv~Sh-6jvSs*KAN5Z798xL3$; z9FnOe=%tyNnVINO5fKqInrWo~+BvML@!#9pbEQiVVg!noOb1AemW7{KqN380XnRY1 z6{JWGivo+!W+h-4Y3?|6%5MW0g;{{xNZkBE)Ja^Fk-a=Dk zS=wXMwrouPmhh`==%Vz67fDh|NyHUm+g!3v8g!M10QsMnf&`Qk+^IDn5Z;=Pj1~a5 zH&O@Dx5OLVo51JwnP)1TKRjw}r3i|mBC4vaL`EVgtVLB-h={~hRw5{4IBBKH!Y!!n8(v!LfgK&f~C6?3$*akx+tT+~` zQ&mt=O;aXEkO2drE@PBN-FLcr75GzJg+W0&@WT#_C_bl!Qmkb@|P;)P6=sVtW;lDLBoVZy4hQ58{8Mk=bRAgk!m5)flbxZQ3X+O!1lp@o(X z+SMs00cDV_Ba9V5-r^D{G#CoWD#*P+kpPw8M6zZih>HSCTG3%@-dffX$!=A)MiVAu zjx63v@7iqgAu&330$@?#DN z6NEditP%rEZN^JA8Y?;mfGz=a@`QwllSz_F08}3)mY~3kP&Ps_ZMmM0c!-Q49`B4# zcb+A-d|*WH1GzczT?Nf5cK!b{F_9@3pgiJJ3pWL7W>gA4 zGiDm}BpCOl$LYMDSzZy{NiuK^^pSeEbtH;V1z?N>)ah6m1~G-bIK(87XT3qK5)l9x z40mqd)(~-IuM57Vl3(pymwh1aNiBL67qdt&_v%@YFH69NQHiccgh3-{yq!_dYu|g@ z=@*8TomE+8s9{vLJ*R@(ZQtwkpx|qDhM_ZY0%9&mHga|(YR7p3b|5p@TdqM_Eg+-s zLL!iMrX_|_A~gsaL?&2rselIk+iLV;pl>wLF0}Gs9l=WS)!Yq_pXg3`#*M}(Q-g2@ z1`~`<3%;7Tx%_a8VyAZl!6_V$UBw`=4iMR4eXP@L*K7((7gR*|jKtwYBx*=67Nb8((Hm10 zTeLcBi18~G1vRWQDD}RujxL{FF1l1;K}-aDVK9GC32vRua)mg)2*#^e6+Jh`NDdNs zn#lrvt*a9C4j5hys&rMN&Pg;`(RCy8V3aTH7)tkQALtOK1(%p_BZdf^uW4^<3GX)mdW&zZuC%MyCDnGxGg7 j?"; } 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 ""; } } @@ -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 ""; } } @@ -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 ""; } } @@ -160,7 +160,7 @@ dwarf_opcode_string (unsigned int code) if (likely (code < sizeof (known) / sizeof (known[0]))) return known[code]; - return NULL; + return ""; } // 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) { -- Gitee From fffc6435bdfecce9fd221c776c7925d06ea70d6d Mon Sep 17 00:00:00 2001 From: zhanghaibo Date: Tue, 25 Apr 2023 18:51:09 +0800 Subject: [PATCH 2/2] adapt v0.188 Signed-off-by: zhanghaibo Change-Id: I75e67e6493b0976f67a49bd7c6ad894f6610232d --- README.OpenSource | 4 ++-- bundle.json | 2 +- config.h | 34 ++++++++++++++++++++++------------ elfutils_config.gni | 3 +++ 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/README.OpenSource b/README.OpenSource index 63848c67..486dc4ac 100644 --- a/README.OpenSource +++ b/README.OpenSource @@ -3,7 +3,7 @@ "Name": "elfutils", "License": "LGPL V2.1", "License File": "", - "Version Number": "0.185", + "Version Number": "0.188", "Owner": "zhanghaibo0@huawei.com", "Upstream URL": "https://sourceware.org/elfutils/", "Description": "A collection of tools and libraries for reading, creating and modifying ELF binaries, finding and processing DWARF debug data, symbols, thread status, and stack trace of processes and core files on GNU/Linux." @@ -12,7 +12,7 @@ "Name": "elfutils", "License": "LGPL V3 or GPL V2", "License File": "COPYING-LGPLV3", - "Version Number": "0.185", + "Version Number": "0.188", "Owner": "zhanghaibo0@huawei.com", "Upstream URL": "https://sourceware.org/elfutils/", "Description": "A collection of tools and libraries for reading, creating and modifying ELF binaries, finding and processing DWARF debug data, symbols, thread status, and stack trace of processes and core files on GNU/Linux." diff --git a/bundle.json b/bundle.json index 9ac2561f..861ade4d 100644 --- a/bundle.json +++ b/bundle.json @@ -1,7 +1,7 @@ { "name": "@ohos/elfutils", "description": "elfutils is a collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, symbols, thread state and stacktraces for processes and core files on GNU/Linux.", - "version": "0.185", + "version": "4.0", "license": "LGPL V2.1,LGPL V3 or GPL v2", "publishAs": "code-segment", "segment": { diff --git a/config.h b/config.h index 401df94a..5030ef03 100644 --- a/config.h +++ b/config.h @@ -51,10 +51,20 @@ don't. */ #define HAVE_DECL_RAWMEMCHR 1 +/* Define to 1 if you have the declaration of `reallocarray', and to 0 if you + don't. */ +#define HAVE_DECL_REALLOCARRAY 1 + /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #define HAVE_DECL_STRERROR_R 1 +/* Define to 1 if you have the header file. */ +#define HAVE_ERROR_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ERR_H 1 + /* Defined if __attribute__((fallthrough)) is supported */ #define HAVE_FALLTHROUGH 1 @@ -70,8 +80,8 @@ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 +/* Define to 1 if you have the `mremap' function. */ +/* #undef HAVE_MREMAP */ /* Define to 1 if you have the `process_vm_readv' function. */ #define HAVE_PROCESS_VM_READV 1 @@ -85,10 +95,13 @@ /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 -/* Define to 1 if you have the `strerror_r' function. */ +/* Define if you have `strerror_r'. */ #define HAVE_STRERROR_R 1 /* Define to 1 if you have the header file. */ @@ -122,7 +135,7 @@ #define PACKAGE_NAME "elfutils" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "elfutils 0.185" +#define PACKAGE_STRING "elfutils 0.188" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "elfutils" @@ -131,12 +144,14 @@ #define PACKAGE_URL "http://elfutils.org/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "0.185" +#define PACKAGE_VERSION "0.188" /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 8 -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* Define to 1 if strerror_r returns char *. */ @@ -161,17 +176,12 @@ /* #undef USE_ZSTD */ /* Version number of package */ -#define VERSION "0.185" +#define VERSION "0.188" /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #define YYTEXT_POINTER 1 -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ diff --git a/elfutils_config.gni b/elfutils_config.gni index ecacde85..e3162416 100644 --- a/elfutils_config.gni +++ b/elfutils_config.gni @@ -32,6 +32,7 @@ sources_backends = [ "//third_party/elfutils/backends/arm_corenote.c", "//third_party/elfutils/backends/arm_init.c", "//third_party/elfutils/backends/arm_initreg.c", + "//third_party/elfutils/backends/arm_machineflagname.c", "//third_party/elfutils/backends/arm_regs.c", "//third_party/elfutils/backends/arm_retval.c", "//third_party/elfutils/backends/arm_symbol.c", @@ -218,9 +219,11 @@ sources_libdw = [ "//third_party/elfutils/libdw/dwarf_linebeginstatement.c", "//third_party/elfutils/libdw/dwarf_lineblock.c", "//third_party/elfutils/libdw/dwarf_linecol.c", + "//third_party/elfutils/libdw/dwarf_linecontext.c", "//third_party/elfutils/libdw/dwarf_linediscriminator.c", "//third_party/elfutils/libdw/dwarf_lineendsequence.c", "//third_party/elfutils/libdw/dwarf_lineepiloguebegin.c", + "//third_party/elfutils/libdw/dwarf_linefunctionname.c", "//third_party/elfutils/libdw/dwarf_lineisa.c", "//third_party/elfutils/libdw/dwarf_lineno.c", "//third_party/elfutils/libdw/dwarf_lineop_index.c", -- Gitee