diff options
author | Mark Wielaard <mark@klomp.org> | 2022-05-10 15:22:32 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2022-05-10 15:22:32 +0200 |
commit | e06d1d2530fa5d7eb898f3114d282bd196315d55 (patch) | |
tree | 1db2efd48765f9dc4c7e72abd936f860c1a9c9c5 | |
parent | e00652f54afca62c5facbaddebe21012acd43386 (diff) | |
parent | 059e690e896e37c16774047bd1fd0c9e608545b8 (diff) |
Merge tag 'elfutils-0.187' into mjw/RH-DTSupstream/mjw/RH-DTS
elfutils 0.187 release
194 files changed, 11756 insertions, 5511 deletions
diff --git a/.mailmap b/.mailmap new file mode 100644 index 00000000..fd42169b --- /dev/null +++ b/.mailmap @@ -0,0 +1,25 @@ +# help out git with erroneous or incomplete email address mappings + +Piotr DrÄ…g <raven@fedoraproject.org> +Domingo Becker <beckerde@fedoraproject.org> +Ulrich Drepper <drepper@x201.akkadia.org> +Ulrich Drepper <drepper@redhat.com.roland> +Hyu_gabaru Ryu_ichi <hyuuga@fedoraproject.org> +kiyoto hashida <khasida@fedoraproject.org> +Claudio Rodrigo Pereyra Diaz <elsupergomez@fedoraproject.org> +Gladys Guerrero <gguerrer@fedoraproject.org> +Wei Liu <leahliu@fedoraproject.org> +Michael Münch <micm@fedoraproject.org> +Noah Sanci <nsanci@redhat.com> +Noriko Mizumoto <noriko@fedoraproject.org> +Cornelius Neckenig <tbull@fedoraproject.org> +Francesco Tombolini <tombo@fedoraproject.org> +Thomas Spura <tomspur@fedoraproject.org> +Geert Warrink <warrink@fedoraproject.org> +Yulia Poyarkova <ypoyarko@fedoraproject.org> +Yuri Chornoivan <yurchor@fedoraproject.org> +Ahelenia ZiemiaÅ„ska <nabijaczleweli@nabijaczleweli.xyz> +Daniel Cabrera <logan@fedoraproject.org> +Thomas Canniot <mrtom@fedoraproject.org> +Ahelenia ZiemiaÅ„ska <nabijaczleweli@nabijaczleweli.xyz> наб via Elfutils-devel <elfutils-devel@sourceware.org> + @@ -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 @@ -1,3 +1,61 @@ +2022-04-25 Mark Wielaard <mark@klomp.org> + + * configure.ac (AC_INIT): Set version to 0.187. + * NEWS: Add some more 0.187 items. + +2022-04-24 Frank Ch. Eigler <fche@redhat.com> + + * AUTHORS.sh, .mailmap: New files. + * AUTHORS: Regenerated to cover entire history of elfutils. + +2022-04-24 Mark Wielaard <mark@klomp.org> + + * configure.ac (AC_CHECK_FUNCS): Add mremap. + +2021-03-20 Mark Wielaard <mark@klomp.org> + + * configure.ac: Remove -m64 on 32bit target comments for + utrace_BIARCH check. + +2021-03-14 Mark Wielaard <mark@klomp.org> + + * configure.ac: Use AS_HELP_STRING instead of AC_HELP_STRING. + +2021-03-11 Mark Wielaard <mark@klomp.org> + + * NEWS: Document new --relative option for addr2line. + +2022-03-10 Mark Wielaard <mark@klomp.org> + + * configure.ac: Move AC_PROG_CXX earlier. Check for both + -D_FORTIFY_SOURCE=3 and -D_FORTIFY_SOURCE=2 support. Also + set CXXFLAGS. Output final CFLAGS and CXXFLAGS setting. + +2021-12-04 Mark Wielaard <mark@klomp.org> + + * configure.ac: Add --enable-sanitize-address. + +2021-11-10 Mark Wielaard <mark@klomp.org> + + * configure.ac (AC_INIT): Set version to 0.186. + * NEWS: Add translation item. + +2021-09-03 John Mellor-Crummey <johnmc@rice.edu> + + * NEWS: Read inlining info in NVIDIA extended line map + +2021-08-10 Adrian Ratiu <adrian.ratiu@collabora.com> + + * configure.ac (AC_CACHE_CHECK): Rework std=gnu99 check to allow clang. + +2021-08-20 Saleem Abdulrasool <abdulras@google.com> + + * Add AC_CHECK_HEADERS for error.h and err.h. + +2021-07-28 Mark Wielaard <mark@klomp.org> + + * configure.ac (AC_CHECK_DECLS): Add reallocarray check. + 2021-05-22 Mark Wielaard <mark@klomp.org> * configure.ac (AC_INIT): Set version to 0.185. @@ -1,3 +1,48 @@ +Version 0.187 + +debuginfod: Support -C option for connection thread pooling. + +debuginfod-client: Negative cache file are now zero sized instead of + no-permission files. + +addr2line: The -A, --absolute option, which shows file names including + the full compilation directory is now the default. To get the + old behavior use the new option --relative. + +readelf, elflint: Recognize FDO Packaging Metadata ELF notes + +libdw, debuginfo-client: Load libcurl lazily only when files need to + be fetched remotely. libcurl is now never + loaded when DEBUGINFOD_URLS is unset. And when + DEBUGINFOD_URLS is set, libcurl is only loaded + when the debuginfod_begin function is called. + +Version 0.186 + +debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files + /etc/debuginfod/*.urls rather than hardcoded into the + /etc/profile.d/debuginfod* scripts. + Add $DEBUGINFOD_MAXSIZE and $DEBUGINFOD_MAXTIME settings + for skipping large/slow transfers. + Add $DEBUGINFOD_RETRY for retrying aborted lookups. + +debuginfod: Supply extra HTTP response headers, describing archive/file + names that satisfy the requested buildid content. + Support -d :memory: option for in-memory databases. + Protect against loops in federated server configurations. + Add -r option to use -I/-X regexes for grooming stale files. + Protect against wasted CPU from duplicate concurrent requests. + Limit the duration of groom ops roughly to rescan (-t) times. + Add --passive mode for serving from read-only database. + Several other performance improvements & prometheus metrics. + +libdw: Support for the NVIDIA Cuda line map extensions. + DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name + are defined in dwarf.h. New functions dwarf_linecontext and + dwarf_linefunctionname + +translations: Update Japanese translation. + Version 0.185 debuginfod-client: Simplify curl handle reuse so downloads which diff --git a/backends/ChangeLog b/backends/ChangeLog index ac0e3187..51959259 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,21 @@ +2022-02-16 Mark Wielaard <mark@klomp.org> + + * ppc_initreg.c (ppc_set_initial_registers_tid): Define struct + pt_regs32. Use PTRACE_GETREGSET. + +2021-09-29 William Cohen <wcohen@redhat.com> + + * riscv_init.c (riscv_return_value_location_lp64f): New function + declaration. + (riscv_return_value_location_lp64): Likewise. + (riscv_init): Set return_value_location based on elf class and + ehdr flags. + * riscv_retval.c (riscv_return_value_location_lp64d): Renamed to... + (riscv_return_value_location_lp64ifd): ...this. Handle single, + double, float _Complex and double _Complex cases. + (riscv_return_value_location_lp64d): New function. + (riscv_return_value_location_lp64f): Likewise. + 2021-04-19 Martin Liska <mliska@suse.cz> * aarch64_symbol.c (aarch64_data_marker_symbol): Use startswith. diff --git a/backends/ppc_initreg.c b/backends/ppc_initreg.c index e5cca7e1..8ed72fb4 100644 --- a/backends/ppc_initreg.c +++ b/backends/ppc_initreg.c @@ -1,5 +1,6 @@ /* Fetch live process registers from TID. Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -34,7 +35,11 @@ #if defined(__powerpc__) && defined(__linux__) # include <sys/ptrace.h> # include <asm/ptrace.h> +# ifndef PTRACE_GETREGSET +# include <linux/ptrace.h> +# endif # include <sys/user.h> +# include <sys/uio.h> #endif #include "system.h" @@ -75,39 +80,50 @@ ppc_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), #if !defined(__powerpc__) || !defined(__linux__) return false; #else /* __powerpc__ */ - union - { - struct pt_regs r; - long l[sizeof (struct pt_regs) / sizeof (long)]; - } - user_regs; - eu_static_assert (sizeof (struct pt_regs) % sizeof (long) == 0); - /* PTRACE_GETREGS is EIO on kernel-2.6.18-308.el5.ppc64. */ - errno = 0; - for (unsigned regno = 0; regno < sizeof (user_regs) / sizeof (long); - regno++) - { - user_regs.l[regno] = ptrace (PTRACE_PEEKUSER, tid, - (void *) (uintptr_t) (regno - * sizeof (long)), - NULL); - if (errno != 0) - return false; - } -#define GPRS (sizeof (user_regs.r.gpr) / sizeof (*user_regs.r.gpr)) + +/* pt_regs for 32bit processes. Same as 64bit pt_regs but all registers + are 32bit instead of 64bit long. */ +#define GPRS 32 + struct pt_regs32 + { + uint32_t gpr[GPRS]; + uint32_t nip; + uint32_t msr; + uint32_t orig_gpr3; + uint32_t ctr; + uint32_t link; + uint32_t xer; + uint32_t ccr; + uint32_t mq; + uint32_t trap; + uint32_t dar; + uint32_t dsisr; + uint32_t result; + }; + + struct pt_regs regs; + struct pt_regs32 *regs32 = (struct pt_regs32 *) ®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..141e0821 100644 --- a/backends/riscv_init.c +++ b/backends/riscv_init.c @@ -41,6 +41,12 @@ extern __typeof (EBLHOOK (return_value_location)) riscv_return_value_location_lp64d attribute_hidden; +extern __typeof (EBLHOOK (return_value_location)) + riscv_return_value_location_lp64f attribute_hidden; + +extern __typeof (EBLHOOK (return_value_location)) + riscv_return_value_location_lp64 attribute_hidden; + extern __typeof (EBLHOOK (core_note)) riscv64_core_note attribute_hidden; Ebl * @@ -63,10 +69,17 @@ riscv_init (Elf *elf, eh->core_note = riscv64_core_note; else HOOK (eh, core_note); - if (eh->class == ELFCLASS64 - && ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI) - == EF_RISCV_FLOAT_ABI_DOUBLE)) - eh->return_value_location = riscv_return_value_location_lp64d; + if (eh->class == ELFCLASS64) + { + if ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI) + == EF_RISCV_FLOAT_ABI_DOUBLE) + eh->return_value_location = riscv_return_value_location_lp64d; + else if ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI) + == EF_RISCV_FLOAT_ABI_SINGLE) + eh->return_value_location = riscv_return_value_location_lp64f; + else + eh->return_value_location = riscv_return_value_location_lp64; + } return eh; } diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c index 35b6010b..34761486 100644 --- a/backends/riscv_retval.c +++ b/backends/riscv_retval.c @@ -125,8 +125,8 @@ pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)), } int -riscv_return_value_location_lp64d (Dwarf_Die *functypedie, - const Dwarf_Op **locp) +riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie, + const Dwarf_Op **locp) { /* Start with the function's type, and get the DW_AT_type attribute, which is the type of the return value. */ @@ -211,10 +211,29 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie, switch (size) { case 4: /* single */ - case 8: /* double */ - return pass_in_fpr_lp64d (locp, size); - - case 16: /* quad */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + case EF_RISCV_FLOAT_ABI_SINGLE: + return pass_in_fpr_lp64d (locp, size); + case EF_RISCV_FLOAT_ABI_SOFT: + return pass_in_gpr_lp64 (locp, size); + default: + return -2; + } + case 8: /* double */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + return pass_in_fpr_lp64d (locp, size); + case EF_RISCV_FLOAT_ABI_SINGLE: + case EF_RISCV_FLOAT_ABI_SOFT: + return pass_in_gpr_lp64 (locp, size); + default: + return -2; + } + + case 16: /* quad */ return pass_in_gpr_lp64 (locp, size); default: @@ -227,12 +246,31 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie, switch (size) { case 8: /* float _Complex */ - return pass_in_fpr_lp64f (locp, size); - - case 16: /* double _Complex */ - return pass_in_fpr_lp64d (locp, size); - - case 32: /* long double _Complex */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + case EF_RISCV_FLOAT_ABI_SINGLE: + return pass_in_fpr_lp64f (locp, size); + case EF_RISCV_FLOAT_ABI_SOFT: + /* Double the size so the vals are two registers. */ + return pass_in_gpr_lp64 (locp, size * 2); + default: + return -2; + } + + case 16: /* double _Complex */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + return pass_in_fpr_lp64d (locp, size); + case EF_RISCV_FLOAT_ABI_SINGLE: + case EF_RISCV_FLOAT_ABI_SOFT: + return pass_in_gpr_lp64 (locp, size); + default: + return -2; + } + + case 32: /* long double _Complex */ return pass_by_ref (locp); default: @@ -249,3 +287,27 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie, *locp = NULL; return 0; } + +int +riscv_return_value_location_lp64d (Dwarf_Die *functypedie, + const Dwarf_Op **locp) +{ + return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_DOUBLE, + functypedie, locp); +} + +int +riscv_return_value_location_lp64f (Dwarf_Die *functypedie, + const Dwarf_Op **locp) +{ + return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_SINGLE, + functypedie, locp); +} + +int +riscv_return_value_location_lp64 (Dwarf_Die *functypedie, + const Dwarf_Op **locp) +{ + return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_SOFT, + functypedie, locp); +} diff --git a/config/ChangeLog b/config/ChangeLog index 2cdcfa72..51415258 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,39 @@ +2022-04-25 Mark Wielaard <mark@klomp.org> + + * elfutils.spec.in: Update for 0.187. + +2022-01-19 Ahelenia ZiemiaÅ„ska <nabijaczleweli@nabijaczleweli.xyz> + + * profile.csh.in: Set DEBUGINFOD_URLS directly. Use "$0" and : + in sh -c. + * profile.sh.in: Set DEBUGINFOD_URLS directly. Don't use sh -c. + Use $() instead of ``. + +2022-04-07 Mark Wielaard <mark@klomp.org> + + * elfutils.spec.in (debuginfod-client): Add an explicit requires + on elfutils-libs and elfutils-libelf. + +2021-11-10 Mark Wielaard <mark@klomp.org> + + * elfutils.spec.in: Update for 0.186. + +2021-10-03 Frank Ch. Eigler <fche@redhat.com> + + PR27783 + * profile.sh, profile.csh: Rewrite to document and set DEBUGINFOD_URLS + from /etc/debuginfod/*.urls files. + * Makefile.am: Install the configury-specified .urls file. + * elfutils.spec: Package it. + +2021-09-05 Dmitry V. Levin <ldv@altlinux.org> + + * eu.am (STACK_USAGE_NO_ERROR): New variable. + +2021-07-06 Alice Zhang <alizhang@redhat.com> + + * debuginfod.sysconfig: Introduce default retry limit. + 2021-05-10 Mark Wielaard <mark@klomp.org> * elfutils.spec.in: Update for 0.185. diff --git a/config/Makefile.am b/config/Makefile.am index a66f5490..0d3ba164 100644 --- a/config/Makefile.am +++ b/config/Makefile.am @@ -40,9 +40,16 @@ pkgconfig_DATA += libdebuginfod.pc install-data-local: $(INSTALL_DATA) profile.sh -D $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh $(INSTALL_DATA) profile.csh -D $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh + mkdir -p $(DESTDIR)$(sysconfdir)/debuginfod + if [ -n "@DEBUGINFOD_URLS@" ]; then \ + echo "@DEBUGINFOD_URLS@" > $(DESTDIR)$(sysconfdir)/debuginfod/elfutils.urls; \ + fi uninstall-local: - rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh + rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh + rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh + rm -f $(DESTDIR)$(sysconfdir)/debuginfod/elfutils.urls + -rmdir $(DESTDIR)$(sysconfdir)/debuginfod endif if MAINTAINER_MODE diff --git a/config/debuginfod.sysconfig b/config/debuginfod.sysconfig index 44603874..890a1a25 100644 --- a/config/debuginfod.sysconfig +++ b/config/debuginfod.sysconfig @@ -11,4 +11,5 @@ DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin / # upstream debuginfods #DEBUGINFOD_URLS="http://secondhost:8002 http://thirdhost:8002" #DEBUGINFOD_TIMEOUT="5" +#DEBUGINFOD_RETRY_LIMIT="2" #DEBUGINFOD_CACHE_DIR="" diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 5552352b..54599159 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -141,6 +141,9 @@ profiling) of processes. %package debuginfod-client Summary: Library and command line client for build-id HTTP ELF/DWARF server License: GPLv3+ and (GPLv2+ or LGPLv3+) +# For debuginfod-find binary +Requires: elfutils-libs = %{version}-%{release} +Requires: elfutils-libelf = %{version}-%{release} %package debuginfod-client-devel Summary: Libraries and headers to build debuginfod client applications @@ -299,12 +302,15 @@ fi %{_libdir}/libdebuginfod.so.* %{_bindir}/debuginfod-find %{_mandir}/man1/debuginfod-find.1* +%{_mandir}/man7/debuginfod*.7* %config(noreplace) %{_sysconfdir}/profile.d/* +%config(noreplace) %{_sysconfdir}/debuginfod/* %files debuginfod-client-devel %defattr(-,root,root) %{_libdir}/pkgconfig/libdebuginfod.pc %{_mandir}/man3/debuginfod_*.3* +%{_mandir}/man7/debuginfod*.7* %{_includedir}/elfutils/debuginfod.h %{_libdir}/libdebuginfod.so @@ -315,6 +321,7 @@ fi %{_unitdir}/debuginfod.service %{_sysconfdir}/sysconfig/debuginfod %{_mandir}/man8/debuginfod.8* +%{_mandir}/man7/debuginfod*.7* %dir %attr(0700,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod %ghost %attr(0600,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod/debuginfod.sqlite @@ -333,6 +340,43 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Mon Apr 25 2022 Mark Wielaard <mark@klomp.org> 0.187-1 +- debuginfod: Support -C option for connection thread pooling. +- debuginfod-client: Negative cache file are now zero sized instead + of no-permission files. +- addr2line: The -A, --absolute option, which shows file names + includingthe full compilation directory is now the + default. To get theold behavior use the new option --relative. +- readelf, elflint: Recognize FDO Packaging Metadata ELF notes +- libdw, debuginfo-client: Load libcurl lazily only when files need + to be fetched remotely. libcurl is now never loaded when + DEBUGINFOD_URLS is unset. And whenDEBUGINFOD_URLS is set, + libcurl is only loaded when the debuginfod_begin function is + called. + +* Wed Nov 10 2021 Mark Wielaard <mark@klomp.org> 0.186-1 +- debuginfod-client: Default $DEBUGINFOD_URLS is computed from + drop-in files /etc/debuginfod/*.urls rather than + hardcoded into the /etc/profile.d/debuginfod* + scripts. + Add $DEBUGINFOD_MAXSIZE and $DEBUGINFOD_MAXTIME settings + for skipping large/slow transfers. + Add $DEBUGINFOD_RETRY for retrying aborted lookups. +- debuginfod: Supply extra HTTP response headers, describing + archive/file names that satisfy the requested buildid content. + Support -d :memory: option for in-memory databases. + Protect against loops in federated server configurations. + Add -r option to use -I/-X regexes for grooming stale files. + Protect against wasted CPU from duplicate concurrent requests. + Limit the duration of groom ops roughly to rescan (-t) times. + Add --passive mode for serving from read-only database. + Several other performance improvements & prometheus metrics. +- libdw: Support for the NVIDIA Cuda line map extensions. + DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name + are defined in dwarf.h. New functions dwarf_linecontext and + dwarf_linefunctionname. +- translations: Update Japanese translation. + * Sat May 22 2021 Mark Wielaard <mark@klomp.org> 0.185-1 - debuginfod-client: Simplify curl handle reuse so downloads which return an error are retried. diff --git a/config/eu.am b/config/eu.am index 2c3e4571..58cd3c4f 100644 --- a/config/eu.am +++ b/config/eu.am @@ -39,8 +39,10 @@ ARFLAGS = cr # Warn about stack usage of more than 256K = 262144 bytes. if ADD_STACK_USAGE_WARNING STACK_USAGE_WARNING=-Wstack-usage=262144 +STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= else STACK_USAGE_WARNING= +STACK_USAGE_NO_ERROR= endif if SANE_LOGICAL_OP_WARNING diff --git a/config/profile.csh.in b/config/profile.csh.in index 0a2d6d16..012e243a 100644 --- a/config/profile.csh.in +++ b/config/profile.csh.in @@ -1,11 +1,16 @@ -if ("@DEBUGINFOD_URLS@" != "") then - if ($?DEBUGINFOD_URLS) then - if ($%DEBUGINFOD_URLS) then - setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS @DEBUGINFOD_URLS@" - else - setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@" - endif - else - setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@" - endif +# $HOME/.login* or similar files may first set $DEBUGINFOD_URLS. +# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files. +# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS. +# See also [man debuginfod-client-config] for other environment variables +# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS. + +if (! $?DEBUGINFOD_URLS) then + set prefix="@prefix@" + set DEBUGINFOD_URLS=`sh -c 'cat "$0"/*.urls; :' "@sysconfdir@/debuginfod" 2>/dev/null | tr '\n' ' '` + if ( "$DEBUGINFOD_URLS" != "" ) then + setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS" + else + unset DEBUGINFOD_URLS + endif + unset prefix endif diff --git a/config/profile.sh.in b/config/profile.sh.in index aa228a0d..bad20b1e 100644 --- a/config/profile.sh.in +++ b/config/profile.sh.in @@ -1,4 +1,12 @@ -if [ -n "@DEBUGINFOD_URLS@" ]; then - DEBUGINFOD_URLS="${DEBUGINFOD_URLS-}${DEBUGINFOD_URLS:+ }@DEBUGINFOD_URLS@" - export DEBUGINFOD_URLS +# $HOME/.profile* or similar files may first set $DEBUGINFOD_URLS. +# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files. +# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS. +# See also [man debuginfod-client-config] for other environment variables +# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS. + +if [ -z "$DEBUGINFOD_URLS" ]; then + prefix="@prefix@" + DEBUGINFOD_URLS=$(cat "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ') + [ -n "$DEBUGINFOD_URLS" ] && export DEBUGINFOD_URLS || unset DEBUGINFOD_URLS + unset prefix fi diff --git a/configure.ac b/configure.ac index b348a717..11d1cf82 100644 --- a/configure.ac +++ b/configure.ac @@ -2,6 +2,7 @@ dnl Process this file with autoconf to produce a configure script. dnl Configure input file for elfutils. -*-autoconf-*- dnl dnl Copyright (C) 1996-2019 Red Hat, Inc. +dnl Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> dnl dnl This file is part of elfutils. dnl @@ -17,7 +18,7 @@ dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <http://www.gnu.org/licenses/>. -AC_INIT([elfutils],[0.185],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) +AC_INIT([elfutils],[0.187],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) dnl Workaround for older autoconf < 2.64 m4_ifndef([AC_PACKAGE_URL], @@ -44,7 +45,7 @@ fi AC_CONFIG_AUX_DIR([config]) AC_CONFIG_FILES([config/Makefile]) -AC_COPYRIGHT([Copyright (C) 1996-2021 The elfutils developers.]) +AC_COPYRIGHT([Copyright (C) 1996-2022 The elfutils developers.]) AC_PREREQ(2.63) dnl Minimum Autoconf version required. dnl We use GNU make extensions; automake 1.10 defaults to -Wportability. @@ -87,7 +88,8 @@ AS_IF([test "$use_locks" = yes], AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) -AC_PROG_CC +AC_PROG_CC_C99 +AC_PROG_CXX AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX @@ -96,39 +98,6 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_CHECK_TOOL([READELF], [readelf]) AC_CHECK_TOOL([NM], [nm]) -# We use -std=gnu99 but have explicit checks for some language constructs -# and GNU extensions since some compilers claim GNU99 support, but don't -# really support all language extensions. In particular we need -# Mixed Declarations and Code -# https://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html -# Nested Functions -# https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html -# Arrays of Variable Length -# https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html -AC_CACHE_CHECK([for gcc with GNU99 support], ac_cv_c99, [dnl -old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -std=gnu99" -AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl -int foo (int a) -{ - for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; return s; -} - -double bar (double a, double b) -{ - double square (double z) { return z * z; } - return square (a) + square (b); -} - -void baz (int n) -{ - struct S { int x[[n]]; }; -}])], - ac_cv_c99=yes, ac_cv_c99=no) -CFLAGS="$old_CFLAGS"]) -AS_IF([test "x$ac_cv_c99" != xyes], - AC_MSG_ERROR([gcc with GNU99 support required])) - AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))], ac_cv_visibility, [dnl save_CFLAGS="$CFLAGS" @@ -264,25 +233,38 @@ AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts, AS_IF([test "x$ac_cv_bad_fts" = "xyes"], [CFLAGS="$CFLAGS -DBAD_FTS=1" CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"]) -# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already +# See if we can add -D_FORTIFY_SOURCE=2 or =3. Don't do it if it is already # (differently) defined or if it generates warnings/errors because we # don't use the right optimisation level (string.h will warn about that). -AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS]) +AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 or =3 to CFLAGS]) case "$CFLAGS" in - *-D_FORTIFY_SOURCE=2*) + *-D_FORTIFY_SOURCE=*) AC_MSG_RESULT([no, already there]) ;; *) save_CFLAGS="$CFLAGS" - CFLAGS="-D_FORTIFY_SOURCE=2 $CFLAGS -Werror" + # Try 3 first. + CFLAGS="-D_FORTIFY_SOURCE=3 $save_CFLAGS -Werror" + fortified_cflags="" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include <string.h> int main() { return 0; } - ]])], [ AC_MSG_RESULT([yes]) - CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ], - [ AC_MSG_RESULT([no]) - CFLAGS="$save_CFLAGS"]) - ;; + ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=3]) + fortified_cflags="-D_FORTIFY_SOURCE=3" ], []) + + # If that didn't work, try 2. + if test -z "$fortified_cflags"; then + CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS -Werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + #include <string.h> + int main() { return 0; } + ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=2]) + fortified_cflags="-D_FORTIFY_SOURCE=2" ], + [ AC_MSG_RESULT([no, cannot be used])]) + fi + CFLAGS="$fortified_cflags $save_CFLAGS" + CXXFLAGS="$fortified_cflags $CXXFLAGS" + ;; esac dnl enable debugging of branch prediction. @@ -340,10 +322,34 @@ esac AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val, [Building with -fsanitize=undefined or not]) +AC_ARG_ENABLE([sanitize-address], + AS_HELP_STRING([--enable-sanitize-address], + [Use gcc address sanitizer]), + [use_address=$enableval], [use_address=no]) +if test "$use_address" = yes; then + old_CFLAGS="$CFLAGS" + old_CXXFLAGS="$CXXFLAGS" + old_LDFLAGS="$LDFLAGS" + # We want to fail immediately on first error, don't try to recover. + CFLAGS="$CFLAGS -fsanitize=address -fno-sanitize-recover" + CXXFLAGS="$CXXFLAGS -fsanitize=address -fno-sanitize-recover" + # Some compilers don't handle -fsanatize=address correctly with --no-undefined + LDFLAGS="-Wl,-z,defs -shared" + AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_address=yes, use_address=no) + AS_IF([test "x$use_address" != xyes], + AC_MSG_WARN([gcc address sanitizer not available]) + CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS") + LDFLAGS="$old_LDFLAGS" +fi +AM_CONDITIONAL(USE_ADDRESS_SANITIZER, test "$use_address" = yes) + AC_ARG_ENABLE([valgrind], AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]), [use_valgrind=$enableval], [use_valgrind=no]) if test "$use_valgrind" = yes; then + if test "$use_address" = yes; then + AC_MSG_ERROR([cannot enable valgrind and sanitize address together]) + fi AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) if test "$HAVE_VALGRIND" = "no"; then AC_MSG_ERROR([valgrind not found]) @@ -425,8 +431,17 @@ AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>]) AC_CHECK_DECLS([mempcpy],[],[], [#define _GNU_SOURCE #include <string.h>]) +AC_CHECK_DECLS([reallocarray],[],[], + [#define _GNU_SOURCE + #include <stdlib.h>]) + +AC_CHECK_FUNCS([process_vm_readv mremap]) -AC_CHECK_FUNCS([process_vm_readv]) +AS_IF([test "x$ac_cv_func_mremap" = "xno"], + [AC_MSG_WARN([elf_update needs mremap to support ELF_C_RDWR_MMAP])]) + +AC_CHECK_HEADERS([error.h]) +AC_CHECK_HEADERS([err.h]) old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -D_GNU_SOURCE" @@ -694,9 +709,7 @@ if test "$sys_user_has_user_regs" = "yes"; then fi # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. -# Likewise in a 32-bit build on a host where $CC -m64 works. utrace_BIARCH -# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine. CC_BIARCH="$CC $utrace_biarch" AC_SUBST([CC_BIARCH]) @@ -732,7 +745,7 @@ AC_CHECK_PROG(HAVE_ZSTD, zstd, yes, no) AM_CONDITIONAL([HAVE_ZSTD],[test "x$HAVE_ZSTD" = "xyes"]) # Look for libcurl for libdebuginfod minimum version as per rhel7. -AC_ARG_ENABLE([libdebuginfod],AC_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)])) +AC_ARG_ENABLE([libdebuginfod],AS_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)])) AS_IF([test "x$enable_libdebuginfod" != "xno"], [ if test "x$enable_libdebuginfod" != "xdummy"; then AC_MSG_NOTICE([checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip]) @@ -759,8 +772,7 @@ AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"]) # Look for libmicrohttpd, libarchive, sqlite for debuginfo server # minimum versions as per rhel7. -AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server])) -AC_PROG_CXX +AC_ARG_ENABLE([debuginfod],AS_HELP_STRING([--enable-debuginfod], [Build debuginfod server])) AS_IF([test "x$enable_debuginfod" != "xno"], [ AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip]) AX_CXX_COMPILE_STDCXX(11, noext, mandatory) @@ -807,6 +819,9 @@ AC_MSG_NOTICE([ Maintainer mode : ${enable_maintainer_mode} build arch : ${ac_cv_build} + CFLAGS=${CFLAGS} + CXXFLAGS=${CXXFLAGS} + RECOMMENDED FEATURES (should all be yes) gzip support : ${with_zlib} bzip2 support : ${with_bzlib} @@ -836,6 +851,7 @@ AC_MSG_NOTICE([ gcov support : ${use_gcov} run all tests under valgrind : ${use_valgrind} gcc undefined behaviour sanitizer : ${use_undefined} + gcc address sanitizer : ${use_address} use rpath in tests : ${tests_use_rpath} test biarch : ${utrace_cv_cc_biarch} ]) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 21407dc2..93c8ae11 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,268 @@ +2022-04-22 Mark Wielaard <mark@klomp.org> + + * Makefile.am (libdebuginfod): Add -lpthread. + (libdebuginfod_so_LDLIBS): Likewise. + * debuginfod-client.c (init_control): New static pthread_once_t. + (libcurl_init): New static function. + (debuginfod_begin): Use ptrace_once to call libcurl_init. + (libdebuginfod_ctor): Removed. + (libdebuginfod_dtor): Likewise. + +2022-04-24 Mark Wielaard <mark@klomp.org> + + * debuginfod.cxx (main): Add MHD_USE_ITC to MHD_start_daemon flags. + +2022-04-13 Aaron Merey <amerey@redhat.com> + + * debuginfod-client.c (debuginfod_query_server): + Drop st_mode check. Add st_size > 0 check. + Save target_mtime before calling + debuginfod_config_cache. unlink target_cache_path + on EACCESS. Create target_cache_path with DEFFILEMODE. + +2022-04-03 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (main): Use single dual-stack daemon setup, + rather than duplicate ipv4 and ipv6. + (conninfo, handle_buildid): Represent ipv4-mapped ipv6 addresses + in their native ipv4 form for logging and X-F-F: purposes. + * debuginfod-client.c (debuginfod_add_http_header): Tolerate + colons in http header values. + +2022-04-03 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (main): Use MHD_USE_EPOLL for libmicrohttpd, to + encourage more round-robin dispatch of incoming connections. + +2021-12-09 Alexander Kanavin <alex@linutronix.de> + + * debuginfod-client.c (cache_clean_default_interval_s): Change type to + long from time_t. + (cache_miss_default_s): Likewise. + (cache_default_max_unused_age_s): Likewise. + +2021-12-09 Mark Wielaard <mark@klomp.org> + + * debuginfod.cxx (database_stats_report): Don't format clog + using 'right' and 'setw(20)'. + +2021-12-08 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (connection_pool): New global. + (parse_opt): Parse & check -C option to set it. + (error_cb): New callback for libmicrohttpd error counting. + (main): Activate MHD_OPTION_THREAD_POOL_SIZE if appropriate. + Activate error_cb. + +2021-12-04 Mark Wielaard <mark@klomp.org> + + * debuginfod.cxx (main): Call debuginfod_pool_groom before exit. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * debuginfod.cxx (add_mhd_response_header): New function. + (reportable_exception::mhd_send_response): Call + MHD_add_response_header. + (add_mhd_last_modified): Likewise. + (handle_buildid_f_match): Likewise. + (handle_buildid_r_match): Likewise. + (handle_metrics): Likewise. And check MHD_Response was actually + created. + (handle_root): Likewise. + +2021-12-08 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex. + +2021-12-04 Mark Wielaard <mark@klomp.org> + + * debuginfod-client.c (debuginfod_query_server): Free winning_headers. + Reset response_data_size when clearing response_data. + +2021-12-01 Mark Wielaard <mark@klomp.org> + + * debuginfod-client.c (debuginfod_query_server): Free tmp_url on + realloc error. curl_free escaped_string on error. Fix error out + goto on curl_easy_init failure. Only cleanup data[i] handle and + response_data if it was initialized. + +2021-12-01 Mark Wielaard <mark@klomp.org> + + * debuginfod-client.c (timestamp): Use gmtime_r instead of gmtime. + (add_mhd_last_modified): Likewise. + +2021-11-10 Érico N. Rolim <erico.erc@gmail.com> + + * debuginfod.cxx: include "system.h" under 'extern "C"' block. + +2021-11-05 Frank Ch. Eigler <fche@redhat.com> + + PR28430 + * debuginfod.cxx (parse_opt): Add "--passive" flag. Complain + about inconsistent flags. + (main): In passive mode, suppress scan/groom/traverse threads and + other read-write database ops. + +2021-11-04 Frank Ch. Eigler <fche@redhat.com> + + PR28514 + * debuginfod.cxx (groom): Rework into separate decision/action + phases. Add new metrics to monitor progress. Limit indefinite + operation times to avoid starving rescan. + +2021-10-23 Frank Ch. Eigler <fche@redhat.com> + + PR28240 + * debuginfod-client.c (debuginfod_query_server): Correct + negative-hit cache check sequence for root user. + +2021-10-15 Mark Wielaard <mark@klomp.org> + + * debuginfod-client.c (debuginfod_query_server): Set + CURLOPT_PROTOCOLS. + +2021-10-06 Di Chen <dichen@redhat.com> + + PR28242 + * debuginfod.cxx (inc_metrics, add_metrics): Add two-tag variants. + (handler_cb): Call it with artifacttype for http_responses_* metrics. + (handle_buildid): Sanitize artifacttype if necessary. + (dwarf_extract_source_path): Pass sanitizable string param. + +2021-09-17 Noah Sanci <nsanci@redhat.com> + + * debuginfod-client.c (debuginfod_query_server): curl_multi_perform + now occurs before checking if response headers have arrived. + +2021-09-14 Frank Ch. Eigler <fche@redhat.com> + + PRPR28339 + * debuginfod.cxx (waitq::fronters): New field. + (waitq::wait_idle): Respect it. + (waitq::done_front): New function. + (thread_main_scanner): Call it to match wait_front(). + +2021-09-12 Mark Wielaard <mark@klomp.org> + + * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after + obatched(clog) line. +2021-09-13 Noah Sanci <nsanci@redhat.com> + + * debuginfod-client.c (debuginfod_query_server): Removed constant + operations from a loop. curl_free memory. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * debuginfod-client.c (debuginfod_begin): Remove cast of calloc return + value. + +2021-08-28 Mark Wielaard <mjw@redhat.com> + + * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into + "file::memory:?cache=shared" for the db_path. + +2021-08-20 Di Chen <dichen@redhat.com> + + * debuginfod.cxx (options): Add ARGP_KEY_FORWARDED_TTL_LIMIT. + (forwarded_ttl_limit): New static unsigned. + (parse_opt): Handle ARGP_KEY_FORWARDED_TTL_LIMIT. + (handle_buildid): Check forwarded_ttl_limit. + (main): Log forwarded ttl limit. + +2021-08-20 Saleem Abdulrasool <abdulras@google.com> + + * debuginfod.cxx: Remove error.h include. + +2021-08-19 Frank Ch. Eigler <fche@redhat.com> + + PR28249 + * debuginfod.cxx (handler_cb): Fix after_you unique_set key + to the entire incoming URL. + +2021-08-02 Noah Sanci <nsanci@redhat.com> + + PR27277 + * debuginfod-client.c (struct debuginfod_client): New field + winning_headers. + (struct handle_data): New field response_data, response_data_size. + (header_callback): Store received headers in response_data. + (debuginfod_query_server): Activate CURLOPT_HEADERFUNCTION. + Save winning response_data. + (debuginfod_end): free client winning headers. + * debuginfod.cxx (handle_buildid_f_match): remove X-DEBUGINFOD-FILE + path. Add X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE headers. + (handle_buildid_r_match): remove X-DEBUGINFOD-FILE path. Add + X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE + headers, and X-ARCHIVE headers. + +2021-07-26 Noah Sanci <nsanci@redhat.com> + + PR27982 + * debuginfod-client.c (globals): added default_maxsize and + default_maxtime. + (debuginfod_query_server): Added DEBUGINFOD_MAXSIZE and + DEBUGINFOD_MAXTIME envvar processing. + * debuginfod.cxx (handler_cb): If the requested file exceeds + maxsize return code 406. + * debuginfod.h.in: Added DEBUGINFOD_MAXSIZE_ENV_VAR and + DEBUGINFOD_MAXTIME_ENV_VAR. + +2021-07-16 Noah Sanci <nsanci@redhat.com> + + PR28034 + * debuginfod-client.c (debuginfod_query_server): % escape filename + so the completed url is processed properly. + +2021-06-28 Noah Sanci <nsanci@redhat.com> + + PR25978 + * debuginfod.cxx (options): Added --fdcache-prefetch-fds/mbs options. + (set_metric): Added a condition for fdcache_mintmp to ensure no + negative percentages or percentages larger than 100% are given. + (globals): Added fdcache_prefetch_mbs/fdcache_prefetch_fds. + (set_metrics): Differentiate between lru and prefetch metrics. + (intern): Added prefetch functionality for nuking preexisting copies + and incrementing prefetch metrics. + (lookup): Search prefetch cache and increment associated metrics. Upon + finding in the prefetch cache move the element to the lru cache. + (limit): Arguments updated. Update size of prefetch cache. + (main): Log prefetch and cache fds/mbs + +2021-07-06 Alice Zhang <alizhang@redhat.com> + + PR27531 + * debuginfod-client.c (debuginfod_query_server): Retry failed queries + if error code is not ENOENT. + * debuginfod.h.in: Introduce DEBUGINFOD_RETRY_LIMIT_ENV_VAR. + +2021-07-01 Noah Sanci <nsanci@redhat.com> + + PR27711 + * debuginfod.cxx (options): Add --regex-groom, -r option. + (regex_groom): New static bool defaults to false. + (parse_opt): Handle 'r' option by setting regex_groom to true. + (groom): Introduce and use reg_include and reg_exclude. + +2021-07-09 Noah Sanci <nsanci@redhat.com> + + PR27983 + * debuginfod-client.c (debuginfod_query_server): As full-length + urls are generated with standardized formats, ignore duplicates. + Created out1 and changed out2 error gotos. Updated url creation print + statements. + (globals): Removed url_delim_char, as it was no longer used. + +2021-06-18 Mark Wielaard <mark@klomp.org> + + * debuginfod-client.c (debuginfod_begin): Don't use client if + calloc call failed. + +2021-06-03 Frank Ch. Eigler <fche@redhat.com> + + PR27863 + * debuginfod.cxx (unique_set, unique_set_reserver): New classes. + (handler_cb): Use them to implement "after-you" queueing. + 2021-05-14 Frank Ch. Eigler <fche@redhat.com> PR27859 diff --git a/debuginfod/Makefile.am b/debuginfod/Makefile.am index 79677afe..5566d56d 100644 --- a/debuginfod/Makefile.am +++ b/debuginfod/Makefile.am @@ -47,7 +47,7 @@ libelf = ../libelf/libelf.a -lz if DUMMY_LIBDEBUGINFOD libdebuginfod = ./libdebuginfod.a else -libdebuginfod = ./libdebuginfod.a $(libcurl_LIBS) +libdebuginfod = ./libdebuginfod.a -lpthread $(libcurl_LIBS) endif else libasm = ../libasm/libasm.so @@ -98,7 +98,7 @@ libdebuginfod_so_LIBS = libdebuginfod_pic.a if DUMMY_LIBDEBUGINFOD libdebuginfod_so_LDLIBS = else -libdebuginfod_so_LDLIBS = $(libcurl_LIBS) $(fts_LIBS) +libdebuginfod_so_LDLIBS = -lpthread $(libcurl_LIBS) $(fts_LIBS) endif $(LIBDEBUGINFOD_SONAME): $(srcdir)/libdebuginfod.map $(libdebuginfod_so_LIBS) $(AM_V_CCLD)$(LINK) $(dso_LDFLAGS) -o $@ \ diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index ee7eda24..ea6e461a 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1,5 +1,6 @@ /* Retrieve ELF / DWARF / source files from the debuginfod. - Copyright (C) 2019-2020 Red Hat, Inc. + Copyright (C) 2019-2021 Red Hat, Inc. + Copyright (C) 2021, 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -97,6 +98,16 @@ void debuginfod_end (debuginfod_client *c) { } #include <fts.h> #endif +#include <pthread.h> + +static pthread_once_t init_control = PTHREAD_ONCE_INIT; + +static void +libcurl_init(void) +{ + curl_global_init(CURL_GLOBAL_DEFAULT); +} + struct debuginfod_client { /* Progress/interrupt callback function. */ @@ -127,23 +138,24 @@ struct debuginfod_client timeout or other info gotten from environment variables, the handle data, etc. So those don't have to be reparsed and recreated on each request. */ + char * winning_headers; }; /* The cache_clean_interval_s file within the debuginfod cache specifies how frequently the cache should be cleaned. The file's st_mtime represents the time of last cleaning. */ static const char *cache_clean_interval_filename = "cache_clean_interval_s"; -static const time_t cache_clean_default_interval_s = 86400; /* 1 day */ +static const long cache_clean_default_interval_s = 86400; /* 1 day */ /* The cache_miss_default_s within the debuginfod cache specifies how - frequently the 000-permision file should be released.*/ -static const time_t cache_miss_default_s = 600; /* 10 min */ + frequently the empty file should be released.*/ +static const long cache_miss_default_s = 600; /* 10 min */ static const char *cache_miss_filename = "cache_miss_s"; /* The cache_max_unused_age_s file within the debuginfod cache specifies the the maximum time since last access that a file will remain in the cache. */ static const char *cache_max_unused_age_filename = "max_unused_age_s"; -static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */ +static const long cache_default_max_unused_age_s = 604800; /* 1 week */ /* Location of the cache of files downloaded from debuginfods. The default parent directory is $HOME, or '/' if $HOME doesn't exist. */ @@ -152,11 +164,12 @@ static const char *cache_xdg_name = "debuginfod_client"; /* URLs of debuginfods, separated by url_delim. */ static const char *url_delim = " "; -static const char url_delim_char = ' '; /* Timeout for debuginfods, in seconds (to get at least 100K). */ static const long default_timeout = 90; +/* Default retry count for download error. */ +static const long default_retry_limit = 2; /* Data associated with a particular CURL easy handle. Passed to the write callback. */ @@ -182,6 +195,9 @@ struct handle_data to the cache. Used to ensure that a file is not downloaded from multiple servers unnecessarily. */ CURL **target_handle; + /* Response http headers for this client handle, sent from the server */ + char *response_data; + size_t response_data_size; }; static size_t @@ -497,6 +513,37 @@ default_progressfn (debuginfod_client *c, long a, long b) return 0; } +/* This is a callback function that receives http response headers in buffer for use + * in this program. https://curl.se/libcurl/c/CURLOPT_HEADERFUNCTION.html is the + * online documentation. + */ +static size_t +header_callback (char * buffer, size_t size, size_t numitems, void * userdata) +{ + if (size != 1) + return 0; + /* Temporary buffer for realloc */ + char *temp = NULL; + struct handle_data *data = (struct handle_data *) userdata; + if (data->response_data == NULL) + { + temp = malloc(numitems+1); + if (temp == NULL) + return 0; + } + else + { + temp = realloc(data->response_data, data->response_data_size + numitems + 1); + if (temp == NULL) + return 0; + } + + memcpy(temp + data->response_data_size, buffer, numitems); + data->response_data = temp; + data->response_data_size += numitems; + data->response_data[data->response_data_size] = '\0'; + return numitems; +} /* Query each of the server URLs found in $DEBUGINFOD_URLS for the file with the specified build-id, type (debuginfo, executable or source) @@ -554,6 +601,39 @@ debuginfod_query_server (debuginfod_client *c, free (c->url); c->url = NULL; + /* PR 27982: Add max size if DEBUGINFOD_MAXSIZE is set. */ + long maxsize = 0; + const char *maxsize_envvar; + maxsize_envvar = getenv(DEBUGINFOD_MAXSIZE_ENV_VAR); + if (maxsize_envvar != NULL) + maxsize = atol (maxsize_envvar); + + /* PR 27982: Add max time if DEBUGINFOD_MAXTIME is set. */ + long maxtime = 0; + const char *maxtime_envvar; + maxtime_envvar = getenv(DEBUGINFOD_MAXTIME_ENV_VAR); + if (maxtime_envvar != NULL) + maxtime = atol (maxtime_envvar); + if (maxtime && vfd >= 0) + dprintf(vfd, "using max time %lds\n", maxtime); + + /* Maxsize is valid*/ + if (maxsize > 0) + { + if (vfd) + dprintf (vfd, "using max size %ldB\n", maxsize); + char *size_header = NULL; + rc = asprintf (&size_header, "X-DEBUGINFOD-MAXSIZE: %ld", maxsize); + if (rc < 0) + { + rc = -ENOMEM; + goto out; + } + rc = debuginfod_add_http_header(c, size_header); + free(size_header); + if (rc < 0) + goto out; + } add_default_headers(c); /* Copy lowercase hex representation of build_id into buf. */ @@ -697,37 +777,66 @@ debuginfod_query_server (debuginfod_client *c, if (rc != 0) goto out; - /* If the target is already in the cache then we are done. */ - int fd = open (target_cache_path, O_RDONLY); + /* Check if the target is already in the cache. */ + int fd = open(target_cache_path, O_RDONLY); if (fd >= 0) { - /* Success!!!! */ - if (path != NULL) - *path = strdup(target_cache_path); - rc = fd; - goto out; - } - - struct stat st; - time_t cache_miss; - /* Check if the file exists and it's of permission 000*/ - if (errno == EACCES - && stat(target_cache_path, &st) == 0 - && (st.st_mode & 0777) == 0) - { - rc = debuginfod_config_cache(cache_miss_path, cache_miss_default_s, &st); - if (rc < 0) - goto out; + struct stat st; + if (fstat(fd, &st) != 0) + { + rc = -errno; + close (fd); + goto out; + } - cache_miss = (time_t)rc; - if (time(NULL) - st.st_mtime <= cache_miss) + /* If the file is non-empty, then we are done. */ + if (st.st_size > 0) { - rc = -ENOENT; - goto out; - } + if (path != NULL) + { + *path = strdup(target_cache_path); + if (*path == NULL) + { + rc = -errno; + close (fd); + goto out; + } + } + /* Success!!!! */ + rc = fd; + goto out; + } else - unlink(target_cache_path); + { + /* The file is empty. Attempt to download only if enough time + has passed since the last attempt. */ + time_t cache_miss; + time_t target_mtime = st.st_mtime; + rc = debuginfod_config_cache(cache_miss_path, + cache_miss_default_s, &st); + if (rc < 0) + { + close(fd); + goto out; + } + + cache_miss = (time_t)rc; + if (time(NULL) - target_mtime <= cache_miss) + { + close(fd); + rc = -ENOENT; + goto out; + } + else + /* TOCTOU non-problem: if another task races, puts a working + download or an empty file in its place, unlinking here just + means WE will try to download again as uncached. */ + unlink(target_cache_path); + } } + else if (errno == EACCES) + /* Ensure old 000-permission files are not lingering in the cache. */ + unlink(target_cache_path); long timeout = default_timeout; const char* timeout_envvar = getenv(DEBUGINFOD_TIMEOUT_ENV_VAR); @@ -763,16 +872,69 @@ debuginfod_query_server (debuginfod_client *c, goto out0; } + /* Initialize the memory to zero */ + char *strtok_saveptr; + char **server_url_list = NULL; + char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr); /* Count number of URLs. */ int num_urls = 0; - for (int i = 0; server_urls[i] != '\0'; i++) - if (server_urls[i] != url_delim_char - && (i == 0 || server_urls[i - 1] == url_delim_char)) - num_urls++; - + + while (server_url != NULL) + { + /* PR 27983: If the url is already set to be used use, skip it */ + char *slashbuildid; + if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/') + slashbuildid = "buildid"; + else + slashbuildid = "/buildid"; + + char *tmp_url; + if (asprintf(&tmp_url, "%s%s", server_url, slashbuildid) == -1) + { + rc = -ENOMEM; + goto out1; + } + int url_index; + for (url_index = 0; url_index < num_urls; ++url_index) + { + if(strcmp(tmp_url, server_url_list[url_index]) == 0) + { + url_index = -1; + break; + } + } + if (url_index == -1) + { + if (vfd >= 0) + dprintf(vfd, "duplicate url: %s, skipping\n", tmp_url); + free(tmp_url); + } + else + { + num_urls++; + char ** realloc_ptr; + realloc_ptr = reallocarray(server_url_list, num_urls, + sizeof(char*)); + if (realloc_ptr == NULL) + { + free (tmp_url); + rc = -ENOMEM; + goto out1; + } + server_url_list = realloc_ptr; + server_url_list[num_urls-1] = tmp_url; + } + server_url = strtok_r(NULL, url_delim, &strtok_saveptr); + } + + int retry_limit = default_retry_limit; + const char* retry_limit_envvar = getenv(DEBUGINFOD_RETRY_LIMIT_ENV_VAR); + if (retry_limit_envvar != NULL) + retry_limit = atoi (retry_limit_envvar); + CURLM *curlm = c->server_mhandle; assert (curlm != NULL); - + /* Tracks which handle should write to fd. Set to the first handle that is ready to write the target file to the cache. */ CURL *target_handle = NULL; @@ -780,10 +942,14 @@ debuginfod_query_server (debuginfod_client *c, if (data == NULL) { rc = -ENOMEM; - goto out0; + goto out1; } - /* thereafter, goto out1 on error. */ + /* thereafter, goto out2 on error. */ + + /*The beginning of goto block query_in_parallel.*/ + query_in_parallel: + rc = -ENOENT; /* Reset rc to default.*/ /* Initialize handle_data with default values. */ for (int i = 0; i < num_urls; i++) @@ -793,12 +959,37 @@ debuginfod_query_server (debuginfod_client *c, data[i].errbuf[0] = '\0'; } - char *strtok_saveptr; - char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr); - + char *escaped_string = NULL; + size_t escaped_strlen = 0; + if (filename) + { + escaped_string = curl_easy_escape(&target_handle, filename+1, 0); + if (!escaped_string) + { + rc = -ENOMEM; + goto out2; + } + char *loc = escaped_string; + escaped_strlen = strlen(escaped_string); + while ((loc = strstr(loc, "%2F"))) + { + loc[0] = '/'; + //pull the string back after replacement + // loc-escaped_string finds the distance from the origin to the new location + // - 2 accounts for the 2F which remain and don't need to be measured. + // The two above subtracted from escaped_strlen yields the remaining characters + // in the string which we want to pull back + memmove(loc+1, loc+3,escaped_strlen - (loc-escaped_string) - 2); + //Because the 2F was overwritten in the memmove (as desired) escaped_strlen is + // now two shorter. + escaped_strlen -= 2; + } + } /* Initialize each handle. */ - for (int i = 0; i < num_urls && server_url != NULL; i++) + for (int i = 0; i < num_urls; i++) { + if ((server_url = server_url_list[i]) == NULL) + break; if (vfd >= 0) dprintf (vfd, "init server %d %s\n", i, server_url); @@ -807,29 +998,27 @@ debuginfod_query_server (debuginfod_client *c, data[i].handle = curl_easy_init(); if (data[i].handle == NULL) { + if (filename) curl_free (escaped_string); rc = -ENETUNREACH; - goto out1; + goto out2; } data[i].client = c; - /* Build handle url. Tolerate both http://foo:999 and - http://foo:999/ forms */ - char *slashbuildid; - if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/') - slashbuildid = "buildid"; - else - slashbuildid = "/buildid"; - if (filename) /* must start with / */ - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s%s", server_url, - slashbuildid, build_id_bytes, type, filename); + { + /* PR28034 escape characters in completed url to %hh format. */ + snprintf(data[i].url, PATH_MAX, "%s/%s/%s/%s", server_url, + build_id_bytes, type, escaped_string); + } else - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s", server_url, - slashbuildid, build_id_bytes, type); - + snprintf(data[i].url, PATH_MAX, "%s/%s/%s", server_url, build_id_bytes, type); if (vfd >= 0) dprintf (vfd, "url %d %s\n", i, data[i].url); + /* Only allow http:// + https:// + file:// so we aren't being + redirected to some unsupported protocol. */ + curl_easy_setopt(data[i].handle, CURLOPT_PROTOCOLS, + CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FILE); curl_easy_setopt(data[i].handle, CURLOPT_URL, data[i].url); if (vfd >= 0) curl_easy_setopt(data[i].handle, CURLOPT_ERRORBUFFER, data[i].errbuf); @@ -846,10 +1035,14 @@ debuginfod_query_server (debuginfod_client *c, curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_LIMIT, 100 * 1024L); } + data[i].response_data = NULL; + data[i].response_data_size = 0; curl_easy_setopt(data[i].handle, CURLOPT_FILETIME, (long) 1); curl_easy_setopt(data[i].handle, CURLOPT_FOLLOWLOCATION, (long) 1); curl_easy_setopt(data[i].handle, CURLOPT_FAILONERROR, (long) 1); curl_easy_setopt(data[i].handle, CURLOPT_NOSIGNAL, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_HEADERFUNCTION, header_callback); + curl_easy_setopt(data[i].handle, CURLOPT_HEADERDATA, (void *) &(data[i])); #if LIBCURL_VERSION_NUM >= 0x072a00 /* 7.42.0 */ curl_easy_setopt(data[i].handle, CURLOPT_PATH_AS_IS, (long) 1); #else @@ -861,9 +1054,9 @@ debuginfod_query_server (debuginfod_client *c, curl_easy_setopt(data[i].handle, CURLOPT_HTTPHEADER, c->headers); curl_multi_add_handle(curlm, data[i].handle); - server_url = strtok_r(NULL, url_delim, &strtok_saveptr); } + if (filename) curl_free(escaped_string); /* Query servers in parallel. */ if (vfd >= 0) dprintf (vfd, "query %d urls in parallel\n", num_urls); @@ -871,10 +1064,39 @@ debuginfod_query_server (debuginfod_client *c, long loops = 0; int committed_to = -1; bool verbose_reported = false; + struct timespec start_time, cur_time; + if (c->winning_headers != NULL) + { + free (c->winning_headers); + c->winning_headers = NULL; + } + if ( maxtime > 0 && clock_gettime(CLOCK_MONOTONIC_RAW, &start_time) == -1) + { + rc = errno; + goto out2; + } + long delta = 0; do { + /* Check to see how long querying is taking. */ + if (maxtime > 0) + { + if (clock_gettime(CLOCK_MONOTONIC_RAW, &cur_time) == -1) + { + rc = errno; + goto out2; + } + delta = cur_time.tv_sec - start_time.tv_sec; + if ( delta > maxtime) + { + dprintf(vfd, "Timeout with max time=%lds and transfer time=%lds\n", maxtime, delta ); + rc = -ETIME; + goto out2; + } + } /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */ curl_multi_wait(curlm, NULL, 0, 1000, NULL); + CURLMcode curlm_res = curl_multi_perform(curlm, &still_running); /* If the target file has been found, abort the other queries. */ if (target_handle != NULL) @@ -883,7 +1105,18 @@ debuginfod_query_server (debuginfod_client *c, if (data[i].handle != target_handle) curl_multi_remove_handle(curlm, data[i].handle); else - committed_to = i; + { + committed_to = i; + if (c->winning_headers == NULL) + { + c->winning_headers = data[committed_to].response_data; + if (vfd >= 0 && c->winning_headers != NULL) + dprintf(vfd, "\n%s", c->winning_headers); + data[committed_to].response_data = NULL; + data[committed_to].response_data_size = 0; + } + + } } if (vfd >= 0 && !verbose_reported && committed_to >= 0) @@ -896,7 +1129,6 @@ debuginfod_query_server (debuginfod_client *c, verbose_reported = true; } - CURLMcode curlm_res = curl_multi_perform(curlm, &still_running); if (curlm_res != CURLM_OK) { switch (curlm_res) @@ -905,14 +1137,48 @@ debuginfod_query_server (debuginfod_client *c, case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break; default: rc = -ENETUNREACH; break; } - goto out1; + goto out2; + } + + long dl_size = 0; + if (target_handle && (c->progressfn || maxsize > 0)) + { + /* Get size of file being downloaded. NB: If going through + deflate-compressing proxies, this number is likely to be + unavailable, so -1 may show. */ + CURLcode curl_res; +#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T + curl_off_t cl; + curl_res = curl_easy_getinfo(target_handle, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, + &cl); + if (curl_res == CURLE_OK && cl >= 0) + dl_size = (cl > LONG_MAX ? LONG_MAX : (long)cl); +#else + double cl; + curl_res = curl_easy_getinfo(target_handle, + CURLINFO_CONTENT_LENGTH_DOWNLOAD, + &cl); + if (curl_res == CURLE_OK) + dl_size = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl); +#endif + /* If Content-Length is -1, try to get the size from + X-Debuginfod-Size */ + if (dl_size == -1 && c->winning_headers != NULL) + { + long xdl; + char *hdr = strcasestr(c->winning_headers, "x-debuginfod-size"); + + if (hdr != NULL + && sscanf(hdr, "x-debuginfod-size: %ld", &xdl) == 1) + dl_size = xdl; + } } if (c->progressfn) /* inform/check progress callback */ { loops ++; - long pa = loops; /* default params for progress callback */ - long pb = 0; /* transfer_timeout tempting, but loops != elapsed-time */ + long pa = loops; /* default param for progress callback */ if (target_handle) /* we've committed to a server; report its download progress */ { CURLcode curl_res; @@ -932,28 +1198,20 @@ debuginfod_query_server (debuginfod_client *c, pa = (dl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)dl); #endif - /* NB: If going through deflate-compressing proxies, this - number is likely to be unavailable, so -1 may show. */ -#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T - curl_off_t cl; - curl_res = curl_easy_getinfo(target_handle, - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, - &cl); - if (curl_res == 0 && cl >= 0) - pb = (cl > LONG_MAX ? LONG_MAX : (long)cl); -#else - double cl; - curl_res = curl_easy_getinfo(target_handle, - CURLINFO_CONTENT_LENGTH_DOWNLOAD, - &cl); - if (curl_res == 0) - pb = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl); -#endif } - if ((*c->progressfn) (c, pa, pb)) + if ((*c->progressfn) (c, pa, dl_size)) break; } + + /* Check to see if we are downloading something which exceeds maxsize, if set.*/ + if (target_handle && dl_size > maxsize && maxsize > 0) + { + if (vfd >=0) + dprintf(vfd, "Content-Length too large.\n"); + rc = -EFBIG; + goto out2; + } } while (still_running); /* Check whether a query was successful. If so, assign its handle @@ -987,6 +1245,8 @@ debuginfod_query_server (debuginfod_client *c, if (msg->data.result != CURLE_OK) { + long resp_code; + CURLcode ok0; /* Unsuccessful query, determine error code. */ switch (msg->data.result) { @@ -1001,6 +1261,16 @@ debuginfod_query_server (debuginfod_client *c, case CURLE_SEND_ERROR: rc = -ECONNRESET; break; case CURLE_RECV_ERROR: rc = -ECONNRESET; break; case CURLE_OPERATION_TIMEDOUT: rc = -ETIME; break; + case CURLE_HTTP_RETURNED_ERROR: + ok0 = curl_easy_getinfo (msg->easy_handle, + CURLINFO_RESPONSE_CODE, + &resp_code); + /* 406 signals that the requested file was too large */ + if ( ok0 == CURLE_OK && resp_code == 406) + rc = -EFBIG; + else + rc = -ENOENT; + break; default: rc = -ENOENT; break; } } @@ -1065,17 +1335,41 @@ debuginfod_query_server (debuginfod_client *c, } } while (num_msg > 0); - /* Create a 000-permission file named as $HOME/.cache if the query - fails with ENOENT.*/ + /* Create an empty file named as $HOME/.cache if the query fails + with ENOENT.*/ if (rc == -ENOENT) { - int efd = open (target_cache_path, O_CREAT|O_EXCL, 0000); + int efd = open (target_cache_path, O_CREAT|O_EXCL, DEFFILEMODE); if (efd >= 0) close(efd); } + else if (rc == -EFBIG) + goto out2; + /* If the verified_handle is NULL and rc != -ENOENT, the query fails with + * an error code other than 404, then do several retry within the retry_limit. + * Clean up all old handles and jump back to the beginning of query_in_parallel, + * reinitialize handles and query again.*/ if (verified_handle == NULL) - goto out1; + { + if (rc != -ENOENT && retry_limit-- > 0) + { + if (vfd >= 0) + dprintf (vfd, "Retry failed query, %d attempt(s) remaining\n", retry_limit); + /* remove all handles from multi */ + for (int i = 0; i < num_urls; i++) + { + curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ + curl_easy_cleanup (data[i].handle); + free(data[i].response_data); + } + free(c->winning_headers); + c->winning_headers = NULL; + goto query_in_parallel; + } + else + goto out2; + } if (vfd >= 0) { @@ -1104,7 +1398,7 @@ debuginfod_query_server (debuginfod_client *c, if (rc < 0) { rc = -errno; - goto out1; + goto out2; /* Perhaps we need not give up right away; could retry or something ... */ } @@ -1113,8 +1407,12 @@ debuginfod_query_server (debuginfod_client *c, { curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ curl_easy_cleanup (data[i].handle); + free (data[i].response_data); } + for (int i = 0; i < num_urls; ++i) + free(server_url_list[i]); + free(server_url_list); free (data); free (server_urls); @@ -1127,12 +1425,16 @@ debuginfod_query_server (debuginfod_client *c, goto out; /* error exits */ - out1: + out2: /* remove all handles from multi */ for (int i = 0; i < num_urls; i++) { - curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ - curl_easy_cleanup (data[i].handle); + if (data[i].handle != NULL) + { + curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ + curl_easy_cleanup (data[i].handle); + free (data[i].response_data); + } } unlink (target_cache_tmppath); @@ -1140,6 +1442,11 @@ debuginfod_query_server (debuginfod_client *c, (void) rmdir (target_cache_dir); /* nop if not empty */ free(data); + out1: + for (int i = 0; i < num_urls; ++i) + free(server_url_list[i]); + free(server_url_list); + out0: free (server_urls); @@ -1181,9 +1488,12 @@ debuginfod_query_server (debuginfod_client *c, debuginfod_client * debuginfod_begin (void) { + /* Initialize libcurl lazily, but only once. */ + pthread_once (&init_control, libcurl_init); + debuginfod_client *client; size_t size = sizeof (struct debuginfod_client); - client = (debuginfod_client *) calloc (1, size); + client = calloc (1, size); if (client != NULL) { @@ -1193,12 +1503,12 @@ debuginfod_begin (void) client->verbose_fd = STDERR_FILENO; else client->verbose_fd = -1; - } - // allocate 1 curl multi handle - client->server_mhandle = curl_multi_init (); - if (client->server_mhandle == NULL) - goto out1; + // allocate 1 curl multi handle + client->server_mhandle = curl_multi_init (); + if (client->server_mhandle == NULL) + goto out1; + } // extra future initialization @@ -1239,6 +1549,7 @@ debuginfod_end (debuginfod_client *client) curl_multi_cleanup (client->server_mhandle); curl_slist_free_all (client->headers); + free (client->winning_headers); free (client->url); free (client); } @@ -1277,13 +1588,13 @@ int debuginfod_find_source(debuginfod_client *client, int debuginfod_add_http_header (debuginfod_client *client, const char* header) { /* Sanity check header value is of the form Header: Value. - It should contain exactly one colon that isn't the first or + It should contain at least one colon that isn't the first or last character. */ - char *colon = strchr (header, ':'); - if (colon == NULL - || colon == header - || *(colon + 1) == '\0' - || strchr (colon + 1, ':') != NULL) + char *colon = strchr (header, ':'); /* first colon */ + if (colon == NULL /* present */ + || colon == header /* not at beginning - i.e., have a header name */ + || *(colon + 1) == '\0') /* not at end - i.e., have a value */ + /* NB: but it's okay for a value to contain other colons! */ return -EINVAL; struct curl_slist *temp = curl_slist_append (client->headers, header); @@ -1313,18 +1624,4 @@ debuginfod_set_verbose_fd(debuginfod_client *client, int fd) client->verbose_fd = fd; } - -/* NB: these are thread-unsafe. */ -__attribute__((constructor)) attribute_hidden void libdebuginfod_ctor(void) -{ - curl_global_init(CURL_GLOBAL_DEFAULT); -} - -/* NB: this is very thread-unsafe: it breaks other threads that are still in libcurl */ -__attribute__((destructor)) attribute_hidden void libdebuginfod_dtor(void) -{ - /* ... so don't do this: */ - /* curl_global_cleanup(); */ -} - #endif /* DUMMY_LIBDEBUGINFOD */ diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index e0948eab..4aaf41c0 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1,5 +1,6 @@ /* Debuginfo-over-http server. Copyright (C) 2019-2021 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -33,11 +34,11 @@ extern "C" { #include "printversion.h" +#include "system.h" } #include "debuginfod.h" #include <dwarf.h> -#include <system.h> #include <argp.h> #ifdef __GNUC__ @@ -46,7 +47,6 @@ extern "C" { #include <unistd.h> #include <stdlib.h> -#include <error.h> #include <libintl.h> #include <locale.h> #include <pthread.h> @@ -353,13 +353,16 @@ static const struct argp_option options[] = { "rescan-time", 't', "SECONDS", 0, "Number of seconds to wait between rescans, 0=disable.", 0 }, { "groom-time", 'g', "SECONDS", 0, "Number of seconds to wait between database grooming, 0=disable.", 0 }, { "maxigroom", 'G', NULL, 0, "Run a complete database groom/shrink pass at startup.", 0 }, - { "concurrency", 'c', "NUM", 0, "Limit scanning thread concurrency to NUM.", 0 }, + { "concurrency", 'c', "NUM", 0, "Limit scanning thread concurrency to NUM, default=#CPUs.", 0 }, + { "connection-pool", 'C', "NUM", OPTION_ARG_OPTIONAL, + "Use webapi connection pool with NUM threads, default=unlim.", 0 }, { "include", 'I', "REGEX", 0, "Include files matching REGEX, default=all.", 0 }, { "exclude", 'X', "REGEX", 0, "Exclude files matching REGEX, default=none.", 0 }, { "port", 'p', "NUM", 0, "HTTP port to listen on, default 8002.", 0 }, { "database", 'd', "FILE", 0, "Path to sqlite database.", 0 }, { "ddl", 'D', "SQL", 0, "Apply extra sqlite ddl/pragma to connection.", 0 }, { "verbose", 'v', NULL, 0, "Increase verbosity.", 0 }, + { "regex-groom", 'r', NULL, 0,"Uses regexes from -I and -X arguments to groom the database.",0}, #define ARGP_KEY_FDCACHE_FDS 0x1001 { "fdcache-fds", ARGP_KEY_FDCACHE_FDS, "NUM", 0, "Maximum number of archive files to keep in fdcache.", 0 }, #define ARGP_KEY_FDCACHE_MBS 0x1002 @@ -368,7 +371,17 @@ static const struct argp_option options[] = { "fdcache-prefetch", ARGP_KEY_FDCACHE_PREFETCH, "NUM", 0, "Number of archive files to prefetch into fdcache.", 0 }, #define ARGP_KEY_FDCACHE_MINTMP 0x1004 { "fdcache-mintmp", ARGP_KEY_FDCACHE_MINTMP, "NUM", 0, "Minimum free space% on tmpdir.", 0 }, - { NULL, 0, NULL, 0, NULL, 0 } +#define ARGP_KEY_FDCACHE_PREFETCH_MBS 0x1005 + { "fdcache-prefetch-mbs", ARGP_KEY_FDCACHE_PREFETCH_MBS, "MB", 0,"Megabytes allocated to the \ + prefetch cache.", 0}, +#define ARGP_KEY_FDCACHE_PREFETCH_FDS 0x1006 + { "fdcache-prefetch-fds", ARGP_KEY_FDCACHE_PREFETCH_FDS, "NUM", 0,"Number of files allocated to the \ + prefetch cache.", 0}, +#define ARGP_KEY_FORWARDED_TTL_LIMIT 0x1007 + {"forwarded-ttl-limit", ARGP_KEY_FORWARDED_TTL_LIMIT, "NUM", 0, "Limit of X-Forwarded-For hops, default 8.", 0}, +#define ARGP_KEY_PASSIVE 0x1008 + { "passive", ARGP_KEY_PASSIVE, NULL, 0, "Do not scan or groom, read-only database.", 0 }, + { NULL, 0, NULL, 0, NULL, 0 }, }; /* Short description of program. */ @@ -401,18 +414,24 @@ static unsigned rescan_s = 300; static unsigned groom_s = 86400; static bool maxigroom = false; static unsigned concurrency = std::thread::hardware_concurrency() ?: 1; +static int connection_pool = 0; static set<string> source_paths; static bool scan_files = false; static map<string,string> scan_archives; static vector<string> extra_ddl; static regex_t file_include_regex; static regex_t file_exclude_regex; +static bool regex_groom = false; static bool traverse_logical; static long fdcache_fds; static long fdcache_mbs; static long fdcache_prefetch; static long fdcache_mintmp; +static long fdcache_prefetch_mbs; +static long fdcache_prefetch_fds; +static unsigned forwarded_ttl_limit = 8; static string tmpdir; +static bool passive_p = false; static void set_metric(const string& key, double value); // static void inc_metric(const string& key); @@ -424,7 +443,14 @@ static void inc_metric(const string& metric, static void add_metric(const string& metric, const string& lname, const string& lvalue, double value); -// static void add_metric(const string& metric, double value); +static void inc_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue); +static void add_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue, + double value); + class tmp_inc_metric { // a RAII style wrapper for exception-safe scoped increment & decrement string m, n, v; @@ -471,7 +497,14 @@ parse_opt (int key, char *arg, switch (key) { case 'v': verbose ++; break; - case 'd': db_path = string(arg); break; + case 'd': + /* When using the in-memory database make sure it is shareable, + so we can open it twice as read/write and read-only. */ + if (strcmp (arg, ":memory:") == 0) + db_path = "file::memory:?cache=shared"; + else + db_path = string(arg); + break; case 'p': http_port = (unsigned) atoi(arg); if (http_port == 0 || http_port > 65535) argp_failure(state, 1, EINVAL, "port number"); @@ -498,35 +531,68 @@ parse_opt (int key, char *arg, } break; case 'L': + if (passive_p) + argp_failure(state, 1, EINVAL, "-L option inconsistent with passive mode"); traverse_logical = true; break; - case 'D': extra_ddl.push_back(string(arg)); break; + case 'D': + if (passive_p) + argp_failure(state, 1, EINVAL, "-D option inconsistent with passive mode"); + extra_ddl.push_back(string(arg)); + break; case 't': + if (passive_p) + argp_failure(state, 1, EINVAL, "-t option inconsistent with passive mode"); rescan_s = (unsigned) atoi(arg); break; case 'g': + if (passive_p) + argp_failure(state, 1, EINVAL, "-g option inconsistent with passive mode"); groom_s = (unsigned) atoi(arg); break; case 'G': + if (passive_p) + argp_failure(state, 1, EINVAL, "-G option inconsistent with passive mode"); maxigroom = true; break; case 'c': + if (passive_p) + argp_failure(state, 1, EINVAL, "-c option inconsistent with passive mode"); concurrency = (unsigned) atoi(arg); if (concurrency < 1) concurrency = 1; break; + case 'C': + if (arg) + { + connection_pool = atoi(arg); + if (connection_pool < 2) + argp_failure(state, 1, EINVAL, "-C NUM minimum 2"); + } + else // arg not given + connection_pool = std::thread::hardware_concurrency() * 2 ?: 2; + break; case 'I': // NB: no problem with unconditional free here - an earlier failed regcomp would exit program + if (passive_p) + argp_failure(state, 1, EINVAL, "-I option inconsistent with passive mode"); regfree (&file_include_regex); rc = regcomp (&file_include_regex, arg, REG_EXTENDED|REG_NOSUB); if (rc != 0) argp_failure(state, 1, EINVAL, "regular expression"); break; case 'X': + if (passive_p) + argp_failure(state, 1, EINVAL, "-X option inconsistent with passive mode"); regfree (&file_exclude_regex); rc = regcomp (&file_exclude_regex, arg, REG_EXTENDED|REG_NOSUB); if (rc != 0) argp_failure(state, 1, EINVAL, "regular expression"); break; + case 'r': + if (passive_p) + argp_failure(state, 1, EINVAL, "-r option inconsistent with passive mode"); + regex_groom = true; + break; case ARGP_KEY_FDCACHE_FDS: fdcache_fds = atol (arg); break; @@ -538,10 +604,34 @@ parse_opt (int key, char *arg, break; case ARGP_KEY_FDCACHE_MINTMP: fdcache_mintmp = atol (arg); + if( fdcache_mintmp > 100 || fdcache_mintmp < 0 ) + argp_failure(state, 1, EINVAL, "fdcache mintmp percent"); + break; + case ARGP_KEY_FORWARDED_TTL_LIMIT: + forwarded_ttl_limit = (unsigned) atoi(arg); break; case ARGP_KEY_ARG: source_paths.insert(string(arg)); break; + case ARGP_KEY_FDCACHE_PREFETCH_FDS: + fdcache_prefetch_fds = atol(arg); + if ( fdcache_prefetch_fds < 0) + argp_failure(state, 1, EINVAL, "fdcache prefetch fds"); + break; + case ARGP_KEY_FDCACHE_PREFETCH_MBS: + fdcache_prefetch_mbs = atol(arg); + if ( fdcache_prefetch_mbs < 0) + argp_failure(state, 1, EINVAL, "fdcache prefetch mbs"); + break; + case ARGP_KEY_PASSIVE: + passive_p = true; + if (source_paths.size() > 0 + || maxigroom + || extra_ddl.size() > 0 + || traverse_logical) + // other conflicting options tricky to check + argp_failure(state, 1, EINVAL, "inconsistent options with passive mode"); + break; // case 'h': argp_state_help (state, stderr, ARGP_HELP_LONG|ARGP_HELP_EXIT_OK); default: return ARGP_ERR_UNKNOWN; } @@ -553,6 +643,9 @@ parse_opt (int key, char *arg, //////////////////////////////////////////////////////////////////////// +static void add_mhd_response_header (struct MHD_Response *r, + const char *h, const char *v); + // represent errors that may get reported to an ostream and/or a libmicrohttpd connection struct reportable_exception @@ -570,7 +663,7 @@ struct reportable_exception MHD_Response* r = MHD_create_response_from_buffer (message.size(), (void*) message.c_str(), MHD_RESPMEM_MUST_COPY); - MHD_add_response_header (r, "Content-Type", "text/plain"); + add_mhd_response_header (r, "Content-Type", "text/plain"); MHD_RESULT rc = MHD_queue_response (c, code, r); MHD_destroy_response (r); return rc; @@ -626,10 +719,11 @@ class workq mutex mtx; condition_variable cv; bool dead; - unsigned idlers; + unsigned idlers; // number of threads busy with wait_idle / done_idle + unsigned fronters; // number of threads busy with wait_front / done_front public: - workq() { dead = false; idlers = 0; } + workq() { dead = false; idlers = 0; fronters = 0; } ~workq() {} void push_back(const Payload& p) @@ -653,10 +747,11 @@ public: unique_lock<mutex> lock(mtx); q.clear(); set_metric("thread_work_pending","role","scan", q.size()); + // NB: there may still be some live fronters cv.notify_all(); // maybe wake up waiting idlers } - // block this scanner thread until there is work to do and no active + // block this scanner thread until there is work to do and no active idler bool wait_front (Payload& p) { unique_lock<mutex> lock(mtx); @@ -668,19 +763,29 @@ public: { p = * q.begin(); q.erase (q.begin()); + fronters ++; // prevent idlers from starting awhile, even if empty q set_metric("thread_work_pending","role","scan", q.size()); - if (q.size() == 0) - cv.notify_all(); // maybe wake up waiting idlers + // NB: don't wake up idlers yet! The consumer is busy + // processing this element until it calls done_front(). return true; } } + // notify waitq that scanner thread is done with that last item + void done_front () + { + unique_lock<mutex> lock(mtx); + fronters --; + if (q.size() == 0 && fronters == 0) + cv.notify_all(); // maybe wake up waiting idlers + } + // block this idler thread until there is no work to do void wait_idle () { unique_lock<mutex> lock(mtx); cv.notify_all(); // maybe wake up waiting scanners - while (!dead && (q.size() != 0)) + while (!dead && ((q.size() != 0) || fronters > 0)) cv.wait(lock); idlers ++; } @@ -705,6 +810,54 @@ static workq<scan_payload> scanq; // just a single one // idler: thread_main_groom() +//////////////////////////////////////////////////////////////////////// + +// Unique set is a thread-safe structure that lends 'ownership' of a value +// to a thread. Other threads requesting the same thing are made to wait. +// It's like a semaphore-on-demand. +template <typename T> +class unique_set +{ +private: + set<T> values; + mutex mtx; + condition_variable cv; +public: + unique_set() {} + ~unique_set() {} + + void acquire(const T& value) + { + unique_lock<mutex> lock(mtx); + while (values.find(value) != values.end()) + cv.wait(lock); + values.insert(value); + } + + void release(const T& value) + { + unique_lock<mutex> lock(mtx); + // assert (values.find(value) != values.end()); + values.erase(value); + cv.notify_all(); + } +}; + + +// This is the object that's instantiate to uniquely hold a value in a +// RAII-pattern way. +template <typename T> +class unique_set_reserver +{ +private: + unique_set<T>& please_hold; + T mine; +public: + unique_set_reserver(unique_set<T>& t, const T& value): + please_hold(t), mine(value) { please_hold.acquire(mine); } + ~unique_set_reserver() { please_hold.release(mine); } +}; + //////////////////////////////////////////////////////////////////////// @@ -716,10 +869,11 @@ timestamp (ostream &o) char datebuf[80]; char *now2 = NULL; time_t now_t = time(NULL); - struct tm *now = gmtime (&now_t); - if (now) + struct tm now; + struct tm *nowp = gmtime_r (&now_t, &now); + if (nowp) { - (void) strftime (datebuf, sizeof (datebuf), "%c", now); + (void) strftime (datebuf, sizeof (datebuf), "%c", nowp); now2 = datebuf; } @@ -909,9 +1063,22 @@ conninfo (struct MHD_Connection * conn) sts = getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), servname, sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV); } else if (so && so->sa_family == AF_INET6) { - sts = getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), - servname, sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV); + struct sockaddr_in6* addr6 = (struct sockaddr_in6*) so; + if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) { + struct sockaddr_in addr4; + memset (&addr4, 0, sizeof(addr4)); + addr4.sin_family = AF_INET; + addr4.sin_port = addr6->sin6_port; + memcpy (&addr4.sin_addr.s_addr, addr6->sin6_addr.s6_addr+12, sizeof(addr4.sin_addr.s_addr)); + sts = getnameinfo ((struct sockaddr*) &addr4, sizeof (addr4), + hostname, sizeof (hostname), servname, sizeof (servname), + NI_NUMERICHOST | NI_NUMERICSERV); + } else { + sts = getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0, + NI_NUMERICHOST); + } } + if (sts != 0) { hostname[0] = servname[0] = '\0'; } @@ -930,20 +1097,31 @@ conninfo (struct MHD_Connection * conn) //////////////////////////////////////////////////////////////////////// +/* Wrapper for MHD_add_response_header that logs an error if we + couldn't add the specified header. */ +static void +add_mhd_response_header (struct MHD_Response *r, + const char *h, const char *v) +{ + if (MHD_add_response_header (r, h, v) == MHD_NO) + obatched(clog) << "Error: couldn't add '" << h << "' header" << endl; +} static void add_mhd_last_modified (struct MHD_Response *resp, time_t mtime) { - struct tm *now = gmtime (&mtime); - if (now != NULL) + struct tm now; + struct tm *nowp = gmtime_r (&mtime, &now); + if (nowp != NULL) { char datebuf[80]; - size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT", now); + size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT", + nowp); if (rc > 0 && rc < sizeof (datebuf)) - (void) MHD_add_response_header (resp, "Last-Modified", datebuf); + add_mhd_response_header (resp, "Last-Modified", datebuf); } - (void) MHD_add_response_header (resp, "Cache-Control", "public"); + add_mhd_response_header (resp, "Cache-Control", "public"); } @@ -989,7 +1167,11 @@ handle_buildid_f_match (bool internal_req_t, } else { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + std::string file = b_source0.substr(b_source0.find_last_of("/")+1, b_source0.length()); + add_mhd_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", + to_string(s.st_size).c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); add_mhd_last_modified (r, s.st_mtime); if (verbose > 1) obatched(clog) << "serving file " << b_source0 << endl; @@ -1151,23 +1333,32 @@ private: }; deque<fdcache_entry> lru; // @head: most recently used long max_fds; + deque<fdcache_entry> prefetch; // prefetched long max_mbs; + long max_prefetch_mbs; + long max_prefetch_fds; public: void set_metrics() { - double total_mb = 0.0; + double fdcache_mb = 0.0; + double prefetch_mb = 0.0; for (auto i = lru.begin(); i < lru.end(); i++) - total_mb += i->fd_size_mb; - set_metric("fdcache_bytes", (int64_t)(total_mb*1024.0*1024.0)); + fdcache_mb += i->fd_size_mb; + for (auto j = prefetch.begin(); j < prefetch.end(); j++) + prefetch_mb += j->fd_size_mb; + set_metric("fdcache_bytes", fdcache_mb*1024.0*1024.0); set_metric("fdcache_count", lru.size()); + set_metric("fdcache_prefetch_bytes", prefetch_mb*1024.0*1024.0); + set_metric("fdcache_prefetch_count", prefetch.size()); } void intern(const string& a, const string& b, string fd, off_t sz, bool front_p) { { unique_lock<mutex> lock(fdcache_lock); - for (auto i = lru.begin(); i < lru.end(); i++) // nuke preexisting copy + // nuke preexisting copy + for (auto i = lru.begin(); i < lru.end(); i++) { if (i->archive == a && i->entry == b) { @@ -1177,33 +1368,45 @@ public: break; // must not continue iterating } } + // nuke preexisting copy in prefetch + for (auto i = prefetch.begin(); i < prefetch.end(); i++) + { + if (i->archive == a && i->entry == b) + { + unlink (i->fd.c_str()); + prefetch.erase(i); + inc_metric("fdcache_op_count","op","prefetch_dequeue"); + break; // must not continue iterating + } + } double mb = (sz+65535)/1048576.0; // round up to 64K block fdcache_entry n = { a, b, fd, mb }; if (front_p) { - inc_metric("fdcache_op_count","op","enqueue_front"); + inc_metric("fdcache_op_count","op","enqueue"); lru.push_front(n); } else { - inc_metric("fdcache_op_count","op","enqueue_back"); - lru.push_back(n); + inc_metric("fdcache_op_count","op","prefetch_enqueue"); + prefetch.push_front(n); } if (verbose > 3) obatched(clog) << "fdcache interned a=" << a << " b=" << b << " fd=" << fd << " mb=" << mb << " front=" << front_p << endl; + + set_metrics(); } - set_metrics(); // NB: we age the cache at lookup time too if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp)) { inc_metric("fdcache_op_count","op","emerg-flush"); obatched(clog) << "fdcache emergency flush for filling tmpdir" << endl; - this->limit(0, 0); // emergency flush + this->limit(0, 0, 0, 0); // emergency flush } else if (front_p) - this->limit(max_fds, max_mbs); // age cache if required + this->limit(max_fds, max_mbs, max_prefetch_fds, max_prefetch_mbs); // age cache if required } int lookup(const string& a, const string& b) @@ -1219,7 +1422,21 @@ public: lru.erase(i); // invalidates i, so no more iteration! lru.push_front(n); inc_metric("fdcache_op_count","op","requeue_front"); - fd = open(n.fd.c_str(), O_RDONLY); // NB: no problem if dup() fails; looks like cache miss + fd = open(n.fd.c_str(), O_RDONLY); + break; + } + } + // Iterate through prefetch while fd == -1 to ensure that no duplication between lru and + // prefetch occurs. + for ( auto i = prefetch.begin(); fd == -1 && i < prefetch.end(); ++i) + { + if (i->archive == a && i->entry == b) + { // found it; take the entry from the prefetch deque to the lru deque, since it has now been accessed. + fdcache_entry n = *i; + prefetch.erase(i); + lru.push_front(n); + inc_metric("fdcache_op_count","op","prefetch_access"); + fd = open(n.fd.c_str(), O_RDONLY); break; } } @@ -1228,11 +1445,11 @@ public: if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp)) { inc_metric("fdcache_op_count","op","emerg-flush"); - obatched(clog) << "fdcache emergency flush for filling tmpdir"; - this->limit(0, 0); // emergency flush + obatched(clog) << "fdcache emergency flush for filling tmpdir" << endl; + this->limit(0, 0, 0, 0); // emergency flush } else if (fd >= 0) - this->limit(max_fds, max_mbs); // age cache if required + this->limit(max_fds, max_mbs, max_prefetch_fds, max_prefetch_mbs); // age cache if required return fd; } @@ -1248,6 +1465,14 @@ public: return true; } } + for (auto i = prefetch.begin(); i < prefetch.end(); i++) + { + if (i->archive == a && i->entry == b) + { + inc_metric("fdcache_op_count","op","prefetch_probe_hit"); + return true; + } + } inc_metric("fdcache_op_count","op","probe_miss"); return false; } @@ -1258,7 +1483,7 @@ public: for (auto i = lru.begin(); i < lru.end(); i++) { if (i->archive == a && i->entry == b) - { // found it; move it to head of lru + { // found it; erase it from lru fdcache_entry n = *i; lru.erase(i); // invalidates i, so no more iteration! inc_metric("fdcache_op_count","op","clear"); @@ -1267,10 +1492,21 @@ public: return; } } + for (auto i = prefetch.begin(); i < prefetch.end(); i++) + { + if (i->archive == a && i->entry == b) + { // found it; erase it from lru + fdcache_entry n = *i; + prefetch.erase(i); // invalidates i, so no more iteration! + inc_metric("fdcache_op_count","op","prefetch_clear"); + unlink (n.fd.c_str()); + set_metrics(); + return; + } + } } - - void limit(long maxfds, long maxmbs, bool metrics_p = true) + void limit(long maxfds, long maxmbs, long maxprefetchfds, long maxprefetchmbs , bool metrics_p = true) { if (verbose > 3 && (this->max_fds != maxfds || this->max_mbs != maxmbs)) obatched(clog) << "fdcache limited to maxfds=" << maxfds << " maxmbs=" << maxmbs << endl; @@ -1278,7 +1514,8 @@ public: unique_lock<mutex> lock(fdcache_lock); this->max_fds = maxfds; this->max_mbs = maxmbs; - + this->max_prefetch_fds = maxprefetchfds; + this->max_prefetch_mbs = maxprefetchmbs; long total_fd = 0; double total_mb = 0.0; for (auto i = lru.begin(); i < lru.end(); i++) @@ -1286,7 +1523,7 @@ public: // accumulate totals from most recently used one going backward total_fd ++; total_mb += i->fd_size_mb; - if (total_fd > max_fds || total_mb > max_mbs) + if (total_fd > this->max_fds || total_mb > this->max_mbs) { // found the cut here point! @@ -1304,6 +1541,29 @@ public: break; } } + total_fd = 0; + total_mb = 0.0; + for(auto i = prefetch.begin(); i < prefetch.end(); i++){ + // accumulate totals from most recently used one going backward + total_fd ++; + total_mb += i->fd_size_mb; + if (total_fd > this->max_prefetch_fds || total_mb > this->max_prefetch_mbs) + { + // found the cut here point! + for (auto j = i; j < prefetch.end(); j++) // close all the fds from here on in + { + if (verbose > 3) + obatched(clog) << "fdcache evicted from prefetch a=" << j->archive << " b=" << j->entry + << " fd=" << j->fd << " mb=" << j->fd_size_mb << endl; + if (metrics_p) + inc_metric("fdcache_op_count","op","prefetch_evict"); + unlink (j->fd.c_str()); + } + + prefetch.erase(i, prefetch.end()); // erase the nodes generally + break; + } + } if (metrics_p) set_metrics(); } @@ -1312,7 +1572,7 @@ public: { // unlink any fdcache entries in $TMPDIR // don't update metrics; those globals may be already destroyed - limit(0, 0, false); + limit(0, 0, 0, 0, false); } }; static libarchive_fdcache fdcache; @@ -1381,7 +1641,11 @@ handle_buildid_r_match (bool internal_req_p, inc_metric ("http_responses_total","result","archive fdcache"); - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", + to_string(fs.st_size).c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-FILE", b_source1.c_str()); add_mhd_last_modified (r, fs.st_mtime); if (verbose > 1) obatched(clog) << "serving fdcache archive " << b_source0 << " file " << b_source1 << endl; @@ -1499,7 +1763,7 @@ handle_buildid_r_match (bool internal_req_p, // responsible for unlinking it later. fdcache.intern(b_source0, fn, tmppath, archive_entry_size(e), - false); // prefetched ones go to back of lru + false); // prefetched ones go to the prefetch cache prefetch_count --; close (fd); // we're not saving this fd to make a mhd-response from! continue; @@ -1522,7 +1786,14 @@ handle_buildid_r_match (bool internal_req_p, } else { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + std::string file = b_source1.substr(b_source1.find_last_of("/")+1, b_source1.length()); + add_mhd_response_header (r, "Content-Type", + "application/octet-stream"); + add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", + to_string(archive_entry_size(e)).c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE", + b_source0.c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); add_mhd_last_modified (r, archive_entry_mtime(e)); if (verbose > 1) obatched(clog) << "serving archive " << b_source0 << " file " << b_source1 << endl; @@ -1617,7 +1888,7 @@ void debuginfod_pool_end(debuginfod_client* c) static struct MHD_Response* handle_buildid (MHD_Connection* conn, const string& buildid /* unsafe */, - const string& artifacttype /* unsafe */, + string& artifacttype /* unsafe, cleanse on exception/return */, const string& suffix /* unsafe */, int *result_fd) { @@ -1626,7 +1897,10 @@ handle_buildid (MHD_Connection* conn, if (artifacttype == "debuginfo") atype_code = "D"; else if (artifacttype == "executable") atype_code = "E"; else if (artifacttype == "source") atype_code = "S"; - else throw reportable_exception("invalid artifacttype"); + else { + artifacttype = "invalid"; // PR28242 ensure http_resposes metrics don't propagate unclean user data + throw reportable_exception("invalid artifacttype"); + } inc_metric("http_requests_total", "type", artifacttype); @@ -1731,18 +2005,42 @@ handle_buildid (MHD_Connection* conn, if (xff != "") xff += string(", "); // comma separated list + unsigned int xff_count = 0; + for (auto&& i : xff){ + if (i == ',') xff_count++; + } + + // if X-Forwarded-For: exceeds N hops, + // do not delegate a local lookup miss to upstream debuginfods. + if (xff_count >= forwarded_ttl_limit) + throw reportable_exception(MHD_HTTP_NOT_FOUND, "not found, --forwared-ttl-limit reached \ +and will not query the upstream servers"); + // Compute the client's numeric IP address only - so can't merge with conninfo() const union MHD_ConnectionInfo *u = MHD_get_connection_info (conn, MHD_CONNECTION_INFO_CLIENT_ADDRESS); struct sockaddr *so = u ? u->client_addr : 0; char hostname[256] = ""; // RFC1035 - if (so && so->sa_family == AF_INET) + if (so && so->sa_family == AF_INET) { (void) getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), NULL, 0, NI_NUMERICHOST); - else if (so && so->sa_family == AF_INET6) - (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0, - NI_NUMERICHOST); - + } else if (so && so->sa_family == AF_INET6) { + struct sockaddr_in6* addr6 = (struct sockaddr_in6*) so; + if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) { + struct sockaddr_in addr4; + memset (&addr4, 0, sizeof(addr4)); + addr4.sin_family = AF_INET; + addr4.sin_port = addr6->sin6_port; + memcpy (&addr4.sin_addr.s_addr, addr6->sin6_addr.s6_addr+12, sizeof(addr4.sin_addr.s_addr)); + (void) getnameinfo ((struct sockaddr*) &addr4, sizeof (addr4), + hostname, sizeof (hostname), NULL, 0, + NI_NUMERICHOST); + } else { + (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0, + NI_NUMERICHOST); + } + } + string xff_complete = string("X-Forwarded-For: ")+xff+string(hostname); debuginfod_add_http_header (client, xff_complete.c_str()); } @@ -1774,7 +2072,8 @@ handle_buildid (MHD_Connection* conn, auto r = MHD_create_response_from_fd ((uint64_t) s.st_size, fd); if (r) { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "Content-Type", + "application/octet-stream"); add_mhd_last_modified (r, s.st_mtime); if (verbose > 1) obatched(clog) << "serving file from upstream debuginfod/cache" << endl; @@ -1884,6 +2183,29 @@ add_metric(const string& metric, // and more for higher arity labels if needed +static void +inc_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue) +{ + string key = (metric + "{" + + metric_label(lname, lvalue) + "," + + metric_label(rname, rvalue) + "}"); + unique_lock<mutex> lock(metrics_lock); + metrics[key] ++; +} +static void +add_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue, + double value) +{ + string key = (metric + "{" + + metric_label(lname, lvalue) + "," + + metric_label(rname, rvalue) + "}"); + unique_lock<mutex> lock(metrics_lock); + metrics[key] += value; +} static struct MHD_Response* handle_metrics (off_t* size) @@ -1902,8 +2224,11 @@ handle_metrics (off_t* size) MHD_Response* r = MHD_create_response_from_buffer (os.size(), (void*) os.c_str(), MHD_RESPMEM_MUST_COPY); - *size = os.size(); - MHD_add_response_header (r, "Content-Type", "text/plain"); + if (r != NULL) + { + *size = os.size(); + add_mhd_response_header (r, "Content-Type", "text/plain"); + } return r; } @@ -1915,8 +2240,11 @@ handle_root (off_t* size) MHD_Response* r = MHD_create_response_from_buffer (version.size (), (void *) version.c_str (), MHD_RESPMEM_PERSISTENT); - *size = version.size (); - MHD_add_response_header (r, "Content-Type", "text/plain"); + if (r != NULL) + { + *size = version.size (); + add_mhd_response_header (r, "Content-Type", "text/plain"); + } return r; } @@ -1952,6 +2280,13 @@ handler_cb (void * /*cls*/, } *ptr = NULL; /* reset when done */ + const char *maxsize_string = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "X-DEBUGINFOD-MAXSIZE"); + long maxsize = 0; + if (maxsize_string != NULL && maxsize_string[0] != '\0') + maxsize = atol(maxsize_string); + else + maxsize = 0; + #if MHD_VERSION >= 0x00097002 enum MHD_Result rc; #else @@ -1961,6 +2296,8 @@ handler_cb (void * /*cls*/, off_t http_size = -1; struct timespec ts_start, ts_end; clock_gettime (CLOCK_MONOTONIC, &ts_start); + double afteryou = 0.0; + string artifacttype, suffix; try { @@ -1973,7 +2310,25 @@ handler_cb (void * /*cls*/, if (slash1 != string::npos && url1 == "/buildid") { + // PR27863: block this thread awhile if another thread is already busy + // fetching the exact same thing. This is better for Everyone. + // The latecomer says "... after you!" and waits. + add_metric ("thread_busy", "role", "http-buildid-after-you", 1); +#ifdef HAVE_PTHREAD_SETNAME_NP + (void) pthread_setname_np (pthread_self(), "mhd-buildid-after-you"); +#endif + struct timespec tsay_start, tsay_end; + clock_gettime (CLOCK_MONOTONIC, &tsay_start); + static unique_set<string> busy_urls; + unique_set_reserver<string> after_you(busy_urls, url_copy); + clock_gettime (CLOCK_MONOTONIC, &tsay_end); + afteryou = (tsay_end.tv_sec - tsay_start.tv_sec) + (tsay_end.tv_nsec - tsay_start.tv_nsec)/1.e9; + add_metric ("thread_busy", "role", "http-buildid-after-you", -1); + tmp_inc_metric m ("thread_busy", "role", "http-buildid"); +#ifdef HAVE_PTHREAD_SETNAME_NP + (void) pthread_setname_np (pthread_self(), "mhd-buildid"); +#endif size_t slash2 = url_copy.find('/', slash1+1); if (slash2 == string::npos) throw reportable_exception("/buildid/ webapi error, need buildid"); @@ -1981,7 +2336,7 @@ handler_cb (void * /*cls*/, string buildid = url_copy.substr(slash1+1, slash2-slash1-1); size_t slash3 = url_copy.find('/', slash2+1); - string artifacttype, suffix; + if (slash3 == string::npos) { artifacttype = url_copy.substr(slash2+1); @@ -2007,12 +2362,14 @@ handler_cb (void * /*cls*/, else if (url1 == "/metrics") { tmp_inc_metric m ("thread_busy", "role", "http-metrics"); - inc_metric("http_requests_total", "type", "metrics"); + artifacttype = "metrics"; + inc_metric("http_requests_total", "type", artifacttype); r = handle_metrics(& http_size); } else if (url1 == "/") { - inc_metric("http_requests_total", "type", "/"); + artifacttype = "/"; + inc_metric("http_requests_total", "type", artifacttype); r = handle_root(& http_size); } else @@ -2021,6 +2378,12 @@ handler_cb (void * /*cls*/, if (r == 0) throw reportable_exception("internal error, missing response"); + if (maxsize > 0 && http_size > maxsize) + { + MHD_destroy_response(r); + throw reportable_exception(406, "File too large, max size=" + std::to_string(maxsize)); + } + rc = MHD_queue_response (connection, MHD_HTTP_OK, r); http_code = MHD_HTTP_OK; MHD_destroy_response (r); @@ -2036,22 +2399,30 @@ handler_cb (void * /*cls*/, clock_gettime (CLOCK_MONOTONIC, &ts_end); double deltas = (ts_end.tv_sec - ts_start.tv_sec) + (ts_end.tv_nsec - ts_start.tv_nsec)/1.e9; + // afteryou: delay waiting for other client's identical query to complete + // deltas: total latency, including afteryou waiting obatched(clog) << conninfo(connection) << ' ' << method << ' ' << url << ' ' << http_code << ' ' << http_size - << ' ' << (int)(deltas*1000) << "ms" + << ' ' << (int)(afteryou*1000) << '+' << (int)((deltas-afteryou)*1000) << "ms" << endl; // related prometheus metrics string http_code_str = to_string(http_code); - if (http_size >= 0) - add_metric("http_responses_transfer_bytes_sum","code",http_code_str, - http_size); - inc_metric("http_responses_transfer_bytes_count","code",http_code_str); + add_metric("http_responses_transfer_bytes_sum", + "code", http_code_str, "type", artifacttype, http_size); + inc_metric("http_responses_transfer_bytes_count", + "code", http_code_str, "type", artifacttype); + + add_metric("http_responses_duration_milliseconds_sum", + "code", http_code_str, "type", artifacttype, deltas*1000); // prometheus prefers _seconds and floating point + inc_metric("http_responses_duration_milliseconds_count", + "code", http_code_str, "type", artifacttype); - add_metric("http_responses_duration_milliseconds_sum","code",http_code_str, - deltas*1000); // prometheus prefers _seconds and floating point - inc_metric("http_responses_duration_milliseconds_count","code",http_code_str); + add_metric("http_responses_after_you_milliseconds_sum", + "code", http_code_str, "type", artifacttype, afteryou*1000); + inc_metric("http_responses_after_you_milliseconds_count", + "code", http_code_str, "type", artifacttype); return rc; } @@ -2100,7 +2471,8 @@ dwarf_extract_source_paths (Elf *elf, set<string>& debug_sourcefiles) struct MHD_Response *r = 0; try { - r = handle_buildid (0, buildid, "debuginfo", "", &alt_fd); + string artifacttype = "debuginfo"; + r = handle_buildid (0, buildid, artifacttype, "", &alt_fd); } catch (const reportable_exception& e) { @@ -2934,6 +3306,8 @@ thread_main_scanner (void* arg) e.report(cerr); } + scanq.done_front(); // let idlers run + if (fts_cached || fts_executable || fts_debuginfo || fts_sourcefiles || fts_sref || fts_sdef) {} // NB: not just if a successful scan - we might have encountered -ENOSPC & failed (void) statfs_free_enough_p(db_path, "database"); // report sqlite filesystem size @@ -3135,7 +3509,7 @@ database_stats_report() throw sqlite_exception(rc, "step"); obatched(clog) - << right << setw(20) << ((const char*) sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL") + << ((const char*) sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL") << " " << (sqlite3_column_text(ps_query, 1) ?: (const unsigned char*) "NULL") << endl; @@ -3156,16 +3530,30 @@ void groom() clock_gettime (CLOCK_MONOTONIC, &ts_start); // scan for files that have disappeared - sqlite_ps files (db, "check old files", "select s.mtime, s.file, f.name from " - BUILDIDS "_file_mtime_scanned s, " BUILDIDS "_files f " - "where f.id = s.file"); - sqlite_ps files_del_f_de (db, "nuke f_de", "delete from " BUILDIDS "_f_de where file = ? and mtime = ?"); - sqlite_ps files_del_r_de (db, "nuke r_de", "delete from " BUILDIDS "_r_de where file = ? and mtime = ?"); - sqlite_ps files_del_scan (db, "nuke f_m_s", "delete from " BUILDIDS "_file_mtime_scanned " - "where file = ? and mtime = ?"); + sqlite_ps files (db, "check old files", + "select distinct s.mtime, s.file, f.name from " + BUILDIDS "_file_mtime_scanned s, " BUILDIDS "_files f " + "where f.id = s.file"); + // NB: Because _ftime_mtime_scanned can contain both F and + // R records for the same file, this query would return duplicates if the + // DISTINCT qualifier were not there. files.reset(); + + // DECISION TIME - we enumerate stale fileids/mtimes + deque<pair<int64_t,int64_t> > stale_fileid_mtime; + + time_t time_start = time(NULL); while(1) { + // PR28514: limit grooming iteration to O(rescan time), to avoid + // slow filesystem tests over many files locking out rescans for + // too long. + if (rescan_s > 0 && (long)time(NULL) > (long)(time_start + rescan_s)) + { + inc_metric("groomed_total", "decision", "aborted"); + break; + } + if (interrupted) break; int rc = files.step(); @@ -3176,24 +3564,74 @@ void groom() int64_t fileid = sqlite3_column_int64 (files, 1); const char* filename = ((const char*) sqlite3_column_text (files, 2) ?: ""); struct stat s; + bool reg_include = !regexec (&file_include_regex, filename, 0, 0, 0); + bool reg_exclude = !regexec (&file_exclude_regex, filename, 0, 0, 0); + rc = stat(filename, &s); - if (rc < 0 || (mtime != (int64_t) s.st_mtime)) + if ( (regex_groom && reg_exclude && !reg_include) || rc < 0 || (mtime != (int64_t) s.st_mtime) ) { if (verbose > 2) - obatched(clog) << "groom: forgetting file=" << filename << " mtime=" << mtime << endl; - files_del_f_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); - files_del_r_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); - files_del_scan.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + obatched(clog) << "groom: stale file=" << filename << " mtime=" << mtime << endl; + stale_fileid_mtime.push_back(make_pair(fileid,mtime)); inc_metric("groomed_total", "decision", "stale"); + set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size()); } else inc_metric("groomed_total", "decision", "fresh"); - + if (sigusr1 != forced_rescan_count) // stop early if scan triggered break; } files.reset(); + // ACTION TIME + + // Now that we know which file/mtime tuples are stale, actually do + // the deletion from the database. Doing this during the SELECT + // iteration above results in undefined behaviour in sqlite, as per + // https://www.sqlite.org/isolation.html + + // We could shuffle stale_fileid_mtime[] here. It'd let aborted + // sequences of nuke operations resume at random locations, instead + // of just starting over. But it doesn't matter much either way, + // as long as we make progress. + + sqlite_ps files_del_f_de (db, "nuke f_de", "delete from " BUILDIDS "_f_de where file = ? and mtime = ?"); + sqlite_ps files_del_r_de (db, "nuke r_de", "delete from " BUILDIDS "_r_de where file = ? and mtime = ?"); + sqlite_ps files_del_scan (db, "nuke f_m_s", "delete from " BUILDIDS "_file_mtime_scanned " + "where file = ? and mtime = ?"); + + while (! stale_fileid_mtime.empty()) + { + auto stale = stale_fileid_mtime.front(); + stale_fileid_mtime.pop_front(); + set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size()); + + // PR28514: limit grooming iteration to O(rescan time), to avoid + // slow nuke_* queries over many files locking out rescans for too + // long. We iterate over the files in random() sequence to avoid + // partial checks going over the same set. + if (rescan_s > 0 && (long)time(NULL) > (long)(time_start + rescan_s)) + { + inc_metric("groomed_total", "action", "aborted"); + break; + } + + if (interrupted) break; + + int64_t fileid = stale.first; + int64_t mtime = stale.second; + files_del_f_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + files_del_r_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + files_del_scan.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + inc_metric("groomed_total", "action", "cleaned"); + + if (sigusr1 != forced_rescan_count) // stop early if scan triggered + break; + } + stale_fileid_mtime.clear(); // no need for this any longer + set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size()); + // delete buildids with no references in _r_de or _f_de tables; // cascades to _r_sref & _f_s records sqlite_ps buildids_del (db, "nuke orphan buildids", @@ -3220,8 +3658,8 @@ void groom() sqlite3_db_release_memory(dbq); // ... for both connections debuginfod_pool_groom(); // and release any debuginfod_client objects we've been holding onto - fdcache.limit(0,0); // release the fdcache contents - fdcache.limit(fdcache_fds,fdcache_mbs); // restore status quo parameters + fdcache.limit(0,0,0,0); // release the fdcache contents + fdcache.limit(fdcache_fds, fdcache_mbs, fdcache_prefetch_fds, fdcache_prefetch_mbs); // restore status quo parameters clock_gettime (CLOCK_MONOTONIC, &ts_end); double deltas = (ts_end.tv_sec - ts_start.tv_sec) + (ts_end.tv_nsec - ts_start.tv_nsec)/1.e9; @@ -3310,7 +3748,15 @@ sigusr2_handler (int /* sig */) } - +static void // error logging callback from libmicrohttpd internals +error_cb (void *arg, const char *fmt, va_list ap) +{ + (void) arg; + inc_metric("error_count","libmicrohttpd",fmt); + char errmsg[512]; + (void) vsnprintf (errmsg, sizeof(errmsg), fmt, ap); // ok if slightly truncated + obatched(cerr) << "libmicrohttpd error: " << errmsg; // MHD_DLOG calls already include \n +} // A user-defined sqlite function, to score the sharedness of the @@ -3333,7 +3779,7 @@ static void sqlite3_sharedprefix_fn (sqlite3_context* c, int argc, sqlite3_value const unsigned char* a = sqlite3_value_text (argv[0]); const unsigned char* b = sqlite3_value_text (argv[1]); int i = 0; - while (*a++ == *b++) + while (*a != '\0' && *b != '\0' && *a++ == *b++) i++; sqlite3_result_int (c, i); } @@ -3383,7 +3829,7 @@ main (int argc, char *argv[]) if (scan_archives.size()==0 && !scan_files && source_paths.size()>0) obatched(clog) << "warning: without -F -R -U -Z, ignoring PATHs" << endl; - fdcache.limit(fdcache_fds, fdcache_mbs); + fdcache.limit(fdcache_fds, fdcache_mbs, fdcache_prefetch_fds, fdcache_prefetch_mbs); (void) signal (SIGPIPE, SIG_IGN); // microhttpd can generate it incidentally, ignore (void) signal (SIGINT, signal_handler); // ^C @@ -3393,22 +3839,25 @@ main (int argc, char *argv[]) (void) signal (SIGUSR2, sigusr2_handler); // end-user /* Get database ready. */ - rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE - |SQLITE_OPEN_URI - |SQLITE_OPEN_PRIVATECACHE - |SQLITE_OPEN_CREATE - |SQLITE_OPEN_FULLMUTEX), /* thread-safe */ - NULL); - if (rc == SQLITE_CORRUPT) - { - (void) unlink (db_path.c_str()); - error (EXIT_FAILURE, 0, - "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db)); - } - else if (rc) - { - error (EXIT_FAILURE, 0, - "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + if (! passive_p) + { + rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE + |SQLITE_OPEN_URI + |SQLITE_OPEN_PRIVATECACHE + |SQLITE_OPEN_CREATE + |SQLITE_OPEN_FULLMUTEX), /* thread-safe */ + NULL); + if (rc == SQLITE_CORRUPT) + { + (void) unlink (db_path.c_str()); + error (EXIT_FAILURE, 0, + "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db)); + } + else if (rc) + { + error (EXIT_FAILURE, 0, + "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + } } // open the readonly query variant @@ -3426,8 +3875,10 @@ main (int argc, char *argv[]) } - obatched(clog) << "opened database " << db_path << endl; + obatched(clog) << "opened database " << db_path + << (db?" rw":"") << (dbq?" ro":"") << endl; obatched(clog) << "sqlite version " << sqlite3_version << endl; + obatched(clog) << "service mode " << (passive_p ? "passive":"active") << endl; // add special string-prefix-similarity function used in rpm sref/sdef resolution rc = sqlite3_create_function(dbq, "sharedprefix", 2, SQLITE_UTF8, NULL, @@ -3436,42 +3887,42 @@ main (int argc, char *argv[]) error (EXIT_FAILURE, 0, "cannot create sharedprefix function: %s", sqlite3_errmsg(dbq)); - if (verbose > 3) - obatched(clog) << "ddl: " << DEBUGINFOD_SQLITE_DDL << endl; - rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_DDL, NULL, NULL, NULL); - if (rc != SQLITE_OK) + if (! passive_p) { - error (EXIT_FAILURE, 0, - "cannot run database schema ddl: %s", sqlite3_errmsg(db)); + if (verbose > 3) + obatched(clog) << "ddl: " << DEBUGINFOD_SQLITE_DDL << endl; + rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_DDL, NULL, NULL, NULL); + if (rc != SQLITE_OK) + { + error (EXIT_FAILURE, 0, + "cannot run database schema ddl: %s", sqlite3_errmsg(db)); + } } - // Start httpd server threads. Separate pool for IPv4 and IPv6, in - // case the host only has one protocol stack. - MHD_Daemon *d4 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION + // Start httpd server threads. Use a single dual-homed pool. + MHD_Daemon *d46 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION) #if MHD_VERSION >= 0x00095300 | MHD_USE_INTERNAL_POLLING_THREAD #else | MHD_USE_SELECT_INTERNALLY #endif - | MHD_USE_DEBUG, /* report errors to stderr */ - http_port, - NULL, NULL, /* default accept policy */ - handler_cb, NULL, /* handler callback */ - MHD_OPTION_END); - MHD_Daemon *d6 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION -#if MHD_VERSION >= 0x00095300 - | MHD_USE_INTERNAL_POLLING_THREAD -#else - | MHD_USE_SELECT_INTERNALLY +#ifdef MHD_USE_EPOLL + | MHD_USE_EPOLL +#endif + | MHD_USE_DUAL_STACK +#if MHD_VERSION >= 0x00095200 + | MHD_USE_ITC #endif - | MHD_USE_IPv6 | MHD_USE_DEBUG, /* report errors to stderr */ http_port, NULL, NULL, /* default accept policy */ handler_cb, NULL, /* handler callback */ + MHD_OPTION_EXTERNAL_LOGGER, error_cb, NULL, + (connection_pool ? MHD_OPTION_THREAD_POOL_SIZE : MHD_OPTION_END), + (connection_pool ? (int)connection_pool : MHD_OPTION_END), MHD_OPTION_END); - if (d4 == NULL && d6 == NULL) // neither ipv4 nor ipv6? boo + if (d46 == NULL) { sqlite3 *database = db; sqlite3 *databaseq = dbq; @@ -3481,9 +3932,7 @@ main (int argc, char *argv[]) error (EXIT_FAILURE, 0, "cannot start http server at port %d", http_port); } - obatched(clog) << "started http server on " - << (d4 != NULL ? "IPv4 " : "") - << (d6 != NULL ? "IPv6 " : "") + obatched(clog) << "started http server on IPv4 IPv6 " << "port=" << http_port << endl; // add maxigroom sql if -G given @@ -3506,31 +3955,41 @@ main (int argc, char *argv[]) } // run extra -D sql if given - for (auto&& i: extra_ddl) - { - if (verbose > 1) - obatched(clog) << "extra ddl:\n" << i << endl; - rc = sqlite3_exec (db, i.c_str(), NULL, NULL, NULL); - if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW) - error (0, 0, - "warning: cannot run database extra ddl %s: %s", i.c_str(), sqlite3_errmsg(db)); - } - - if (maxigroom) - obatched(clog) << "maxigroomed database" << endl; + if (! passive_p) + for (auto&& i: extra_ddl) + { + if (verbose > 1) + obatched(clog) << "extra ddl:\n" << i << endl; + rc = sqlite3_exec (db, i.c_str(), NULL, NULL, NULL); + if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW) + error (0, 0, + "warning: cannot run database extra ddl %s: %s", i.c_str(), sqlite3_errmsg(db)); + + if (maxigroom) + obatched(clog) << "maxigroomed database" << endl; + } - obatched(clog) << "search concurrency " << concurrency << endl; - obatched(clog) << "rescan time " << rescan_s << endl; + if (! passive_p) + obatched(clog) << "search concurrency " << concurrency << endl; + obatched(clog) << "webapi connection pool " << connection_pool + << (connection_pool ? "" : " (unlimited)") << endl; + if (! passive_p) + obatched(clog) << "rescan time " << rescan_s << endl; obatched(clog) << "fdcache fds " << fdcache_fds << endl; obatched(clog) << "fdcache mbs " << fdcache_mbs << endl; obatched(clog) << "fdcache prefetch " << fdcache_prefetch << endl; obatched(clog) << "fdcache tmpdir " << tmpdir << endl; obatched(clog) << "fdcache tmpdir min% " << fdcache_mintmp << endl; - obatched(clog) << "groom time " << groom_s << endl; + if (! passive_p) + obatched(clog) << "groom time " << groom_s << endl; + obatched(clog) << "prefetch fds " << fdcache_prefetch_fds << endl; + obatched(clog) << "prefetch mbs " << fdcache_prefetch_mbs << endl; + obatched(clog) << "forwarded ttl limit " << forwarded_ttl_limit << endl; + if (scan_archives.size()>0) { obatched ob(clog); - auto& o = ob << "scanning archive types "; + auto& o = ob << "accepting archive types "; for (auto&& arch : scan_archives) o << arch.first << "(" << arch.second << ") "; o << endl; @@ -3541,37 +4000,40 @@ main (int argc, char *argv[]) vector<pthread_t> all_threads; - pthread_t pt; - rc = pthread_create (& pt, NULL, thread_main_groom, NULL); - if (rc) - error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n"); - else - { -#ifdef HAVE_PTHREAD_SETNAME_NP - (void) pthread_setname_np (pt, "groom"); -#endif - all_threads.push_back(pt); - } - - if (scan_files || scan_archives.size() > 0) + if (! passive_p) { - rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL); + pthread_t pt; + rc = pthread_create (& pt, NULL, thread_main_groom, NULL); if (rc) - error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n"); + error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n"); + else + { #ifdef HAVE_PTHREAD_SETNAME_NP - (void) pthread_setname_np (pt, "traverse"); + (void) pthread_setname_np (pt, "groom"); #endif - all_threads.push_back(pt); + all_threads.push_back(pt); + } - for (unsigned i=0; i<concurrency; i++) + if (scan_files || scan_archives.size() > 0) { - rc = pthread_create (& pt, NULL, thread_main_scanner, NULL); + rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL); if (rc) - error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n"); + error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n"); #ifdef HAVE_PTHREAD_SETNAME_NP - (void) pthread_setname_np (pt, "scan"); + (void) pthread_setname_np (pt, "traverse"); #endif all_threads.push_back(pt); + + for (unsigned i=0; i<concurrency; i++) + { + rc = pthread_create (& pt, NULL, thread_main_scanner, NULL); + if (rc) + error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n"); +#ifdef HAVE_PTHREAD_SETNAME_NP + (void) pthread_setname_np (pt, "scan"); +#endif + all_threads.push_back(pt); + } } } @@ -3590,17 +4052,21 @@ main (int argc, char *argv[]) pthread_join (it, NULL); /* Stop all the web service threads. */ - if (d4) MHD_stop_daemon (d4); - if (d6) MHD_stop_daemon (d6); + if (d46) MHD_stop_daemon (d46); - /* With all threads known dead, we can clean up the global resources. */ - rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_CLEANUP_DDL, NULL, NULL, NULL); - if (rc != SQLITE_OK) + if (! passive_p) { - error (0, 0, - "warning: cannot run database cleanup ddl: %s", sqlite3_errmsg(db)); + /* With all threads known dead, we can clean up the global resources. */ + rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_CLEANUP_DDL, NULL, NULL, NULL); + if (rc != SQLITE_OK) + { + error (0, 0, + "warning: cannot run database cleanup ddl: %s", sqlite3_errmsg(db)); + } } + debuginfod_pool_groom (); + // NB: no problem with unconditional free here - an earlier failed regcomp would exit program (void) regfree (& file_include_regex); (void) regfree (& file_exclude_regex); @@ -3609,7 +4075,8 @@ main (int argc, char *argv[]) sqlite3 *databaseq = dbq; db = dbq = 0; // for signal_handler not to freak (void) sqlite3_close (databaseq); - (void) sqlite3_close (database); + if (! passive_p) + (void) sqlite3_close (database); return 0; } diff --git a/debuginfod/debuginfod.h.in b/debuginfod/debuginfod.h.in index 559ea947..c358df4d 100644 --- a/debuginfod/debuginfod.h.in +++ b/debuginfod/debuginfod.h.in @@ -35,6 +35,9 @@ #define DEBUGINFOD_TIMEOUT_ENV_VAR "DEBUGINFOD_TIMEOUT" #define DEBUGINFOD_PROGRESS_ENV_VAR "DEBUGINFOD_PROGRESS" #define DEBUGINFOD_VERBOSE_ENV_VAR "DEBUGINFOD_VERBOSE" +#define DEBUGINFOD_RETRY_LIMIT_ENV_VAR "DEBUGINFOD_RETRY_LIMIT" +#define DEBUGINFOD_MAXSIZE_ENV_VAR "DEBUGINFOD_MAXSIZE" +#define DEBUGINFOD_MAXTIME_ENV_VAR "DEBUGINFOD_MAXTIME" /* The libdebuginfod soname. */ #define DEBUGINFOD_SONAME "@LIBDEBUGINFOD_SONAME@" diff --git a/doc/ChangeLog b/doc/ChangeLog index 05fcd23d..303e3dc0 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,51 @@ +2022-01-31 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod-client-config.7: Elaborate DEBUGINFOD_URLS. + +2021-12-08 Frank Ch. Eigler <fche@redhat.com> + + PR28661 + * debuginfod.8 (-C): Document new flag. + +2021-11-05 Frank Ch. Eigler <fche@redhat.com> + + PR28430 + * debuginfod.8 (--passive): Document new flag & operation mode. + +2021-08-28 Di Chen <dichen@redhat.com> + + * debuginfod.8 (-d): Document ":memory:" as in-memory database. + +2021-08-20 Di Chen <dichen@redhat.com> + + * debuginfod.8: Add --forwarded-ttl-limit=NUM documentation. + +2021-07-28 Alice Zhang <alizhang@redhat.com> + + PR27950 + * debuginfod-client-config.7: New file to store all cache config + infos. + * debuginfod-find.1: Removed redundant occurrences of environment + variables & cache control files. + * debuginfod.8: Likewise. + * debuginfod_find_debuginfo.3: Likewise. + * Makefile.am: Updated to include debuginfod-client-config.7 + * man3, man7: Symlinks for source tree man page testing. + +2021-08-04 Noah Sanci <nsanci@redhat.com> + + PR27277 + * debuginfod-find.1: Increasing verbosity describes the downloaded + file. + * debuginfod.8: Describe X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE, and + X-DEBUGINFOD-ARCHIVE. + +2021-07-26 Noah Sanci <nsanci@redhat.com> + + PR27982 + * debuginfod-find.1: Document DEBUGINFOD_MAXTIME + and DEBUGINFOD_MAXSIZE. + 2021-04-23 Frank Ch. Eigler <fche@redhat.com> PR27701 diff --git a/doc/Makefile.am b/doc/Makefile.am index ef66fb88..32d1a2b8 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -19,14 +19,19 @@ EXTRA_DIST = COPYING-GFDL README dist_man1_MANS=readelf.1 elfclassify.1 notrans_dist_man3_MANS=elf_update.3 elf_getdata.3 elf_clone.3 elf_begin.3 +notrans_dist_man7_MANS= notrans_dist_man8_MANS= notrans_dist_man1_MANS= if DEBUGINFOD +if !LIBDEBUGINFOD +notrans_dist_man7_MANS += debuginfod-client-config.7 +endif notrans_dist_man8_MANS += debuginfod.8 endif if LIBDEBUGINFOD +notrans_dist_man7_MANS += debuginfod-client-config.7 notrans_dist_man3_MANS += debuginfod_add_http_header.3 notrans_dist_man3_MANS += debuginfod_begin.3 notrans_dist_man3_MANS += debuginfod_end.3 diff --git a/doc/debuginfod-client-config.7 b/doc/debuginfod-client-config.7 new file mode 100644 index 00000000..fecc6038 --- /dev/null +++ b/doc/debuginfod-client-config.7 @@ -0,0 +1,129 @@ +'\"! tbl | nroff \-man +'\" t macro stdmacro +.if \n(zZ=1 .ig zZ + +.TH DEBUGINFOD-CLIENT-CONFIG 7 +.SH NAME +debuginfod-client-config \- debuginfod client environment variables, cache control files and etc. + +.SH SYNOPSIS +Several environment variables and control files control the behaviour of debuginfod client applications. + +.\" The preceding section permits this man page to be viewed as if self-contained. +.zZ +.\" The following section (only) gets included into other man pages via .so + + +.SH ENVIRONMENT VARIABLES +.TP +.B $TMPDIR +This environment variable points to a file system to be used for +temporary files. The default is /tmp. + +.TP +.B $DEBUGINFOD_URLS +This environment variable contains a list of URL prefixes for trusted +debuginfod instances. Alternate URL prefixes are separated by space. +This environment variable may be set by /etc/profile.d scripts +reading /etc/debuginfod/*.urls files. + +.TP +.B $DEBUGINFOD_CACHE_PATH +This environment variable governs the location of the cache where +downloaded files and cache-control files are kept. The default +directory is chosen based on other environment variables, see below. + +.TP +.B $DEBUGINFOD_PROGRESS +This environment variable governs the default progress function. If +set, and if a progressfn is not explicitly set, then the library will +configure a default progressfn. This function will append a simple +progress message periodically to stderr. The default is no progress +function output. + +.TP +.B $DEBUGINFOD_VERBOSE +This environment variable governs the default file descriptor for +verbose output. If set, and if a verbose fd is not explicitly set, +then the verbose output will be produced on STDERR_FILENO. + +.TP +.B $DEBUGINFOD_RETRY_LIMIT +This environment variable governs the default limit of retry attempts. If a +query failed with errno other than ENOENT, will initiate several attempts +within the limit. + +.TP +.B $DEBUGINFOD_TIMEOUT +This environment variable governs the download \fIcommencing\fP +timeout for each debuginfod HTTP connection. A server that fails to +provide at least 100K of data within this many seconds is skipped. The +default is 90 seconds. (Zero or negative means "no timeout".) + +.TP +.B $DEBUGINFOD_MAXTIME +This environment variable dictates how long the client will wait to +\fIcomplete\fP the download a file found on a server in seconds. It is best +used to ensure that a file is downloaded quickly or be rejected. The +default is 0 (infinite time). + +.TP +.B $DEBUGINFOD_MAXSIZE +This environment variable dictates the maximum size of a file to +download in bytes. This is best used if the user would like to ensure +only small files are downloaded. A value of 0 causes no consideration +for size, and the client may attempt to download a file of any size. +The default is 0 (infinite size). + +.SH CACHE + +Before each query, the debuginfod client library checks for a need to +clean the cache. If it's time to clean, the library traverses the +cache directory and removes downloaded debuginfo-related artifacts and +newly empty directories, if they have not been accessed recently. + +Control files are located directly under the cache directory. They +contain simple decimal numbers to set cache-related configuration +parameters. If the files do not exist, the client library creates the +files with the default parameter values as content. + +After each query, the debuginfod client library deposits newly +received files into a directory & file that is named based on the +build-id. A failed query is also cached by a special file. The +naming convention used for these artifacts is deliberately +\fBundocumented\fP. + +.TP +.B $XDG_CACHE_HOME/debuginfod_client/ +Default cache directory, if $XDG_CACHE_HOME is set. +.PD + +.TP +.B $HOME/.cache/debuginfod_client/ +Default cache directory, if $XDG_CACHE_HOME is not set. +.PD + +.TP +.B $HOME/.debuginfod_client_cache/ +Deprecated cache directory, used only if preexisting. +.PD + +.TP +.B cache_clean_interval_s +This control file gives the interval between cache cleaning rounds, in +seconds. The default is 86400, one day. 0 means "immediately". + +.TP +.B max_unused_age_s +This control file sets how long unaccessed debuginfo-related files +are retained, in seconds. The default is 604800, one week. 0 means +"immediately". + +.TP +.B cache_miss_s +This control file sets how long to remember a query failure, in +seconds. New queries for the same artifacts within this time window +are short-circuited (returning an immediate failure instead of sending +a new query to servers). This accelerates queries that probably would +still fail. The default is 600, 10 minutes. 0 means "forget +immediately". diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1 index 12d4ec2d..957ec7e7 100644 --- a/doc/debuginfod-find.1 +++ b/doc/debuginfod-find.1 @@ -110,7 +110,8 @@ l l. .TP .B "\-v" -Increase verbosity, including printing frequent download-progress messages. +Increase verbosity, including printing frequent download-progress messages +and printing the http response headers from the server. .SH "SECURITY" @@ -125,35 +126,8 @@ for the basic plaintext \%\fIhttp[s]://userid:password@hostname/\fP style. (The debuginfod server does not perform authentication, but a front-end proxy server could.) -.SH "ENVIRONMENT VARIABLES" - -.TP 21 -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -debuginfod instances. Alternate URL prefixes are separated by space. - -.TP 21 -.B DEBUGINFOD_TIMEOUT -This environment variable governs the timeout for each debuginfod HTTP -connection. A server that fails to provide at least 100K of data -within this many seconds is skipped. The default is 90 seconds. (Zero -or negative means "no timeout".) - -.TP 21 -.B DEBUGINFOD_CACHE_PATH -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this program -is reexecuted. Cache management parameters may be set by files under -this directory: see the \fBdebuginfod_find_debuginfo(3)\fP man page -for details. The default is $HOME/.debuginfod_client_cache. - -.SH "FILES" -.LP -.PD .1v -.TP 20 -.B $HOME/.debuginfod_client_cache -Default cache directory. -.PD +.nr zZ 1 +.so man7/debuginfod-client-config.7 .SH "SEE ALSO" .I "debuginfod(8)" diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index 1ba42cf6..ee8e4078 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -12,7 +12,6 @@ .fi .RE .. - .TH DEBUGINFOD 8 .SH NAME debuginfod \- debuginfo-related http file-server daemon @@ -75,9 +74,10 @@ all. If no PATH is listed, or none of the scanning options is given, then \fBdebuginfod\fP will simply serve content that it accumulated into -its index in all previous runs, and federate to any upstream -debuginfod servers. - +its index in all previous runs, periodically groom the database, and +federate to any upstream debuginfod servers. In \fIpassive\fP mode, +\fBdebuginfod\fP will only serve content from a read-only index and +federated upstream servers, but will not scan or groom. .SH OPTIONS @@ -118,8 +118,20 @@ file is disposable in the sense that a later rescan will repopulate data. It will contain absolute file path names, so it may not be portable across machines. It may be frequently read/written, so it should be on a fast filesystem. It should not be shared across -machines or users, to maximize sqlite locking performance. The -default database file is \%$HOME/.debuginfod.sqlite. +machines or users, to maximize sqlite locking performance. For quick +testing the magic string ":memory:" can be used to use an one-time +memory-only database. The default database file is +\%$HOME/.debuginfod.sqlite. + +.TP +.B "\-\-passive" +Set the server to passive mode, where it only services webapi +requests, including participating in federation. It performs no +scanning, no grooming, and so only opens the sqlite database +read-only. This way a database can be safely shared between a active +scanner/groomer server and multiple passive ones, thereby sharing +service load. Archive pattern options must still be given, so +debuginfod can recognize file name extensions for unpacking. .TP .B "\-D SQL" "\-\-ddl=SQL" @@ -159,6 +171,9 @@ scan, independent of the rescan time (including if it was zero), interrupting a groom pass (if any). .TP +.B "\-r" +Apply the -I and -X during groom cycles, so that files excluded by the regexes are removed from the index. These parameters are in addition to what normally qualifies a file for grooming, not a replacement. + .B "\-g SECONDS" "\-\-groom\-time=SECONDS" Set the groom time for the index database. This is the amount of time the grooming thread will wait after finishing a grooming pass before @@ -191,6 +206,23 @@ an ELF file and especially decompressing archives. The default is the number of processors on the system; the minimum is 1. .TP +.B "\-C" "\-C=NUM" "\-\-connection\-pool" "\-\-connection\-pool=NUM" +Set the size of the pool of threads serving webapi queries. The +following table summarizes the interpretaton of this option and its +optional NUM parameter. +.TS +l l. +no option clone new thread for every request, no fixed pool +\-C use a fixed thread pool sized automatically +\-C=NUM use a fixed thread pool sized NUM, minimum 2 +.TE + +The first mode is useful for friendly bursty traffic. The second mode +is a simple and safe configuration based on the number of processors. +The third mode is suitable for tuned load-limiting configurations +facing unruly traffic. + +.TP .B "\-L" Traverse symbolic links encountered during traversal of the PATHs, including across devices - as in \fIfind\ -L\fP. The default is to @@ -213,6 +245,16 @@ most recently used extracted files are kept. Grooming cleans this cache. .TP +.B "\-\-fdcache\-\-prefetch\-fds=NUM" "\-\-fdcache\-\-prefetch\-mbs=MB" +Configure how many file descriptors (fds) and megabytes (mbs) are +allocated to the prefetch fdcache. If unspecified, values of +\fB\-\-prefetch\-fds\fP and \fB\-\-prefetch\-mbs\fP depend +on concurrency of the system and on the available disk space on +the $TMPDIR. Allocating more to the prefetch cache will improve +performance in environments where different parts of several large +archives are being accessed. + +.TP .B "\-\-fdcache\-mintmp=NUM" Configure a disk space threshold for emergency flushing of the cache. The filesystem holding the cache is checked periodically. If the @@ -224,6 +266,12 @@ can translate to RAM scarcity if the disk happens to be on a RAM virtual disk. The default threshold is 25%. .TP +.B "\-\-forwarded\-ttl\-limit=NUM" +Configure limits of X-Forwarded-For hops. if X-Forwarded-For +exceeds N hops, it will not delegate a local lookup miss to +upstream debuginfods. The default limit is 8. + +.TP .B "\-v" Increase verbosity of logging to the standard error file descriptor. May be repeated to increase details. The default verbosity is 0. @@ -238,6 +286,15 @@ Unknown buildid / request combinations result in HTTP error codes. This file service resemblance is intentional, so that an installation can take advantage of standard HTTP management infrastructure. +Upon finding a file in an archive or simply in the database, some +custom http headers are added to the response. For files in the +database X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE are added. +X-DEBUGINFOD-FILE is simply the unescaped filename and +X-DEBUGINFOD-SIZE is the size of the file. For files found in archives, +in addition to X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE, +X-DEBUGINFOD-ARCHIVE is added. X-DEBUGINFOD-ARCHIVE is the name of the +archive the file was found in. + There are three requests. In each case, the buildid is encoded as a lowercase hexadecimal string. For example, for a program \fI/bin/ls\fP, look at the ELF note GNU_BUILD_ID: @@ -296,6 +353,10 @@ l l. \../bar/foo.c AT_comp_dir=/zoo/ /buildid/BUILDID/source/zoo//../bar/foo.c .TE +Note: the client should %-escape characters in /SOURCE/FILE that are +not shown as "unreserved" in section 2.3 of RFC3986. Some characters +that will be escaped include "+", "\\", "$", "!", the 'space' character, +and ";". RFC3986 includes a more comprehensive list of these characters. .SS /metrics This endpoint returns a Prometheus formatted text/plain dump of a @@ -332,22 +393,22 @@ be helpful to apply tight \-I or \-X regular-expression constraints to exclude files from scanning that you know have no debuginfo-relevant content. -As debuginfod runs, it periodically rescans its target directories, -and any new content found is added to the database. Old content, such -as data for files that have disappeared or that have been replaced -with newer versions is removed at a periodic \fIgrooming\fP pass. -This means that the sqlite files grow fast during initial indexing, -slowly during index rescans, and periodically shrink during grooming. -There is also an optional one-shot \fImaximal grooming\fP pass is -available. It removes information debuginfo-unrelated data from the -archive content index such as file names found in archives ("archive -sdef" records) that are not referred to as source files from any -binaries find in archives ("archive sref" records). This can save -considerable disk space. However, it is slow and temporarily requires -up to twice the database size as free space. Worse: it may result in -missing source-code info if the archive traversals were interrupted, -so that not all source file references were known. Use it rarely to -polish a complete index. +As debuginfod runs in normal \fIactive\fP mode, it periodically +rescans its target directories, and any new content found is added to +the database. Old content, such as data for files that have +disappeared or that have been replaced with newer versions is removed +at a periodic \fIgrooming\fP pass. This means that the sqlite files +grow fast during initial indexing, slowly during index rescans, and +periodically shrink during grooming. There is also an optional +one-shot \fImaximal grooming\fP pass is available. It removes +information debuginfo-unrelated data from the archive content index +such as file names found in archives ("archive sdef" records) that are +not referred to as source files from any binaries find in archives +("archive sref" records). This can save considerable disk space. +However, it is slow and temporarily requires up to twice the database +size as free space. Worse: it may result in missing source-code info +if the archive traversals were interrupted, so that not all source +file references were known. Use it rarely to polish a complete index. You should ensure that ample disk space remains available. (The flood of error messages on -ENOSPC is ugly and nagging. But, like for most @@ -380,6 +441,11 @@ worry about disk space. If a system crash corrupts the database, or you want to force debuginfod to reset and start over, simply erase the sqlite file before restarting debuginfod. +In contrast, in \fIpassive\fP mode, all scanning and grooming is +disabled, and the index database remains read-only. This makes the +database more suitable for sharing between servers or sites with +simple one-way replication, and data management considerations are +generally moot. .SH SECURITY @@ -401,53 +467,15 @@ rather than HTTPS, the network should be trustworthy. Authentication information through the internal \fIlibcurl\fP library is not currently enabled. +.nr zZ 1 +.so man7/debuginfod-client-config.7 -.SH "ENVIRONMENT VARIABLES" - +.SH ADDITIONAL FILES .TP -.B TMPDIR -This environment variable points to a file system to be used for -temporary files. The default is /tmp. - -.TP -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -debuginfod instances. Alternate URL prefixes are separated by space. -Avoid referential loops that cause a server to contact itself, directly -or indirectly - the results would be hilarious. - -.TP -.B DEBUGINFOD_TIMEOUT -This environment variable governs the timeout for each debuginfod HTTP -connection. A server that fails to provide at least 100K of data -within this many seconds is skipped. The default is 90 seconds. (Zero -or negative means "no timeout".) - - -.TP -.B DEBUGINFOD_CACHE_PATH -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this -program is reexecuted. If XDG_CACHE_HOME is set then -$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise -$HOME/.cache/debuginfod_client is used. For more information regarding -the client cache see \fIdebuginfod_find_debuginfo(3)\fP. - -.SH FILES -.LP -.PD .1v -.TP 20 .B $HOME/.debuginfod.sqlite Default database file. .PD -.TP 20 -.B $XDG_CACHE_HOME/debuginfod_client -Default cache directory for content from upstream debuginfods. -If XDG_CACHE_HOME is not set then \fB$HOME/.cache/debuginfod_client\fP -is used. -.PD - .SH "SEE ALSO" .I "debuginfod-find(1)" diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 index 5ae44a98..30cef3c1 100644 --- a/doc/debuginfod_find_debuginfo.3 +++ b/doc/debuginfod_find_debuginfo.3 @@ -198,19 +198,6 @@ By default, the library adds a descriptive \fIUser-Agent:\fP header to outgoing requests. If the client application adds a header with the same name, this default is suppressed. -.SH "CACHE" -If the query is successful, the \fBdebuginfod_find_*\fP() functions save -the target file to a local cache. The location of the cache is controlled -by the \fB$DEBUGINFOD_CACHE_PATH\fP environment variable (see below). -Cleaning of the cache is controlled by the \fIcache_clean_interval_s\fP -and \fImax_unused_age_s\fP files, which are found in the -\fB$DEBUGINFOD_CACHE_PATH\fP directory. \fIcache_clean_interval_s\fP controls -how frequently the cache is traversed for cleaning and \fImax_unused_age_s\fP -controls how long a file can go unused (fstat(2) atime) before it's -removed from the cache during cleaning. These files should contain only an -ASCII decimal integer representing the interval or max unused age in seconds. -The default is one day and one week, respectively. Values of zero mean "immediately". - .SH "MACROS" .SS "DEBUGINFOD_SONAME" @@ -241,43 +228,6 @@ for the basic plaintext \%\fIhttp[s]://userid:password@hostname/\fP style. (The debuginfod server does not perform authentication, but a front-end proxy server could.) -.SH "ENVIRONMENT VARIABLES" - -.TP 21 -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -debuginfod instances. Alternate URL prefixes are separated by space. - -.TP 21 -.B DEBUGINFOD_TIMEOUT -This environment variable governs the timeout for each debuginfod HTTP -connection. A server that fails to provide at least 100K of data -within this many seconds is skipped. The default is 90 seconds. (Zero -or negative means "no timeout".) - -.TP 21 -.B DEBUGINFOD_PROGRESS -This environment variable governs the default progress function. If -set, and if a progressfn is not explicitly set, then the library will -configure a default progressfn. This function will append a simple -progress message periodically to stderr. The default is no progress -function output. - -.TP 21 -.B DEBUGINFOD_VERBOSE -This environment variable governs the default file descriptor for -verbose output. If set, and if a verbose fd is not explicitly set, -then the verbose output will be produced on STDERR_FILENO. - -.TP 21 -.B DEBUGINFOD_CACHE_PATH -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this -program is reexecuted. If XDG_CACHE_HOME is set then -$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise -$HOME/.cache/debuginfod_client is used. - - .SH "ERRORS" The following list is not comprehensive. Error codes may also originate from calls to various C Library functions. @@ -333,17 +283,16 @@ System is unable to allocate resources. .TP .BR ETIME -Query failed due to timeout. \fB$DEBUGINFOD_TIMEOUT\fP controls -the timeout duration. See debuginfod(8) for more information. - -.SH "FILES" -.LP -.PD .1v -.TP 20 -.B $HOME/.debuginfod_client_cache -Default cache directory. If XDG_CACHE_HOME is not set then -\fB$HOME/.cache/debuginfod_client\fP is used. -.PD +Query failed due to timeout. \fB$DEBUGINFOD_TIMEOUT\fP and +\fB$DEBUGINFOD_MAXTIME\fP control this. + +.TP +.BR EF2BIG +Query aborted due to the file requested being too big. The +\fB$DEBUGINFOD_MAXSIZE\fP controls this. + +.nr zZ 1 +.so man7/debuginfod-client-config.7 .SH "SEE ALSO" .I "debuginfod(8)" diff --git a/doc/man3 b/doc/man3 new file mode 120000 index 00000000..945c9b46 --- /dev/null +++ b/doc/man3 @@ -0,0 +1 @@ +.
\ No newline at end of file diff --git a/doc/man7 b/doc/man7 new file mode 120000 index 00000000..945c9b46 --- /dev/null +++ b/doc/man7 @@ -0,0 +1 @@ +.
\ No newline at end of file diff --git a/lib/ChangeLog b/lib/ChangeLog index dd3ebcab..32dda566 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,69 @@ +2022-04-25 Mark Wielaard <mark@klomp.org> + + * printversion.c (print_version): Update copyright year. + +2022-03-27 Mark Wielaard <mark@klomp.org> + + * system.h: define error_exit. + +2021-02-14 Alexander Miller <alex.miller@gmx.de> + + * eu-config.h (used_in_asm): New macro. + (NEW_INTDEF): New macro. + (NEW_VERSION): Mark symbol as used_in_asm. Use @@ symver and change + asm name instead. New variant using symver attribute if available. + (OLD_VERSION): Update new symbol name. Indent asm directives. New + variant using symver attribute. + (COMPAT_VERSION_NEWPROTO): Mark symbol as used_in_asm. Reorder + lines. Replace asm with __asm__ in declaration. New variant using + symver attribute. + (COMPAT_VERSION): Likewise. + +2021-09-10 Colin Cross <ccross@google.com> + + * error.c (error): Call fflush on stdout and stderr. Setup errno and + call verr, verrx, vwarn or vwarnx based on status and errnum. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * color.c (parse_opt): Replace asprintf followed by error(EXIT_FAILURE) + with xasprintf. + + * xasprintf.c: New file. + * Makefile.am (libeu_a_SOURCES): Add it. + * libeu.h (xasprintf): New prototype. + + * dynamicsizehash.c (INIT(NAME)): Remove cast of calloc return value. + * dynamicsizehash_concurrent.c (INIT(NAME)): Remove cast of malloc + return value. + +2021-08-23 Saleem Abdulrasool <abdulras@google.com> + + * system.h: Remove inline definition for error and error_message_count + in the fallback path. + * Makefile.am (libeu_a_SOURCES): Add error.c. + * error.c: New file, moves the previous inline definitions to avoid + multiple definitions properly rather than relying on -fcommon and vague + linkage. + +2021-08-21 Saleem Abdulrasool <abdulras@google.com> + + * fixedsizehash.h: Remove unused STROF macro. + +2021-08-20 Saleem Abdulrasool <abdulras@google.com> + + * system.h: Check for HAVE_ERROR_H and HAVE_ERR_H and define + error_message_cont and error if necessary. + +2021-08-20 Saleem Abdulrasool <abdulras@google.com> + + * fixedsizehash.h: Remove sys/cdefs.h include. Unconditionally + define STROF and CONCAT macros. + +2021-07-28 Mark Wielaard <mark@klomp.org> + + * system.h (reallocarray): New static inline fallback function. + 2021-04-19 Martin Liska <mliska@suse.cz> * system.h (startswith): New function. diff --git a/lib/Makefile.am b/lib/Makefile.am index 97bf7329..42ddf5ae 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -33,9 +33,9 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf noinst_LIBRARIES = libeu.a -libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \ +libeu_a_SOURCES = xasprintf.c xstrdup.c xstrndup.c xmalloc.c next_prime.c \ crc32.c crc32_file.c \ - color.c printversion.c + color.c error.c printversion.c noinst_HEADERS = fixedsizehash.h libeu.h system.h dynamicsizehash.h list.h \ eu-config.h color.h printversion.h bpf.h \ diff --git a/lib/color.c b/lib/color.c index 454cb7ca..e43b6143 100644 --- a/lib/color.c +++ b/lib/color.c @@ -188,10 +188,8 @@ valid arguments are:\n\ if (name_len == known[i].len && memcmp (start, known[i].name, name_len) == 0) { - if (asprintf (known[i].varp, "\e[%.*sm", - (int) (env - val), val) < 0) - error (EXIT_FAILURE, errno, - _("cannot allocate memory")); + *known[i].varp = + xasprintf ("\e[%.*sm", (int) (env - val), val); break; } } diff --git a/lib/dynamicsizehash.c b/lib/dynamicsizehash.c index f9406eba..76c86dad 100644 --- a/lib/dynamicsizehash.c +++ b/lib/dynamicsizehash.c @@ -184,7 +184,7 @@ INIT(NAME) (NAME *htab, size_t init_size) #ifdef ITERATE htab->first = NULL; #endif - htab->table = (void *) calloc ((init_size + 1), sizeof (htab->table[0])); + htab->table = calloc ((init_size + 1), sizeof (htab->table[0])); if (htab->table == NULL) return -1; diff --git a/lib/dynamicsizehash_concurrent.c b/lib/dynamicsizehash_concurrent.c index 2d53bec6..4e2e2476 100644 --- a/lib/dynamicsizehash_concurrent.c +++ b/lib/dynamicsizehash_concurrent.c @@ -355,7 +355,7 @@ INIT(NAME) (NAME *htab, size_t init_size) pthread_rwlock_init(&htab->resize_rwl, NULL); - htab->table = (void *) malloc ((init_size + 1) * sizeof (htab->table[0])); + htab->table = malloc ((init_size + 1) * sizeof (htab->table[0])); if (htab->table == NULL) return -1; diff --git a/lib/error.c b/lib/error.c new file mode 100644 index 00000000..5186fc15 --- /dev/null +++ b/lib/error.c @@ -0,0 +1,75 @@ +/* Definitions for error fallback functions. + Copyright (C) 2021 Google, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#if !defined(HAVE_ERROR_H) && defined(HAVE_ERR_H) +#include <errno.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <err.h> + +unsigned int error_message_count = 0; + +void error(int status, int errnum, const char *format, ...) { + va_list argp; + int saved_errno = errno; + + fflush (stdout); + + va_start(argp, format); + if (status) + { + if (errnum) + { + errno = errnum; + verr (status, format, argp); + } + else + verrx (status, format, argp); + } + else + { + if (errnum) + { + errno = errnum; + vwarn (format, argp); + } + else + vwarnx (format, argp); + } + va_end(argp); + + fflush (stderr); + + ++error_message_count; + + errno = saved_errno; +} +#endif diff --git a/lib/eu-config.h b/lib/eu-config.h index f0e3d07a..c7d7cbb2 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -176,27 +176,68 @@ asm (".section predict_data, \"aw\"; .previous\n" /* This macro is used by the tests conditionalize for standalone building. */ #define ELFUTILS_HEADER(name) <lib##name.h> +/* Don't reorder with global asm blocks or optimize away. (Doesn't reliably + keep it in the same LTO partition, though; -flto-partition=none may be + still needed for some gcc versions < 10.) */ +#ifdef __has_attribute +# if __has_attribute(no_reorder) +# define used_in_asm __attribute__ ((externally_visible, no_reorder)) +# endif +#endif +#ifndef used_in_asm +# define used_in_asm /* empty */ +#endif #ifdef SYMBOL_VERSIONING -# define OLD_VERSION(name, version) \ - asm (".globl _compat." #version "." #name "\n" \ - "_compat." #version "." #name " = " #name "\n" \ - ".symver _compat." #version "." #name "," #name "@" #version); -# define NEW_VERSION(name, version) \ - asm (".symver " #name "," #name "@@@" #version); -# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ - asm (".symver _compat." #version "." #name "," #name "@" #version); \ +# define NEW_INTDEF(name) __typeof (name) INTUSE(name) \ + __attribute__ ((alias ("_new." #name))) attribute_hidden; +# ifdef __has_attribute +# if __has_attribute(symver) +# define NEW_VERSION(name, version) \ + __typeof (name) name __asm__ ("_new." #name) \ + __attribute__ ((symver (#name "@@" #version))); +# define OLD_VERSION(name, version) _OLD_VERSION1(name, __COUNTER__, version) +# define _OLD_VERSION1(name, num, version) _OLD_VERSION2(name, num, version) +# define _OLD_VERSION2(name, num, version) \ + __typeof (name) _compat_old##num##_##name \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((alias ("_new." #name), symver (#name "@" #version))); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ - asm ("_compat." #version "." #name); -# define COMPAT_VERSION(name, version, prefix) \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((symver (#name "@" #version))); +# define COMPAT_VERSION(name, version, prefix) \ asm (".symver _compat." #version "." #name "," #name "@" #version); \ - __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name); + __typeof (name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((symver (#name "@" #version))); +# endif +# endif +# ifndef NEW_VERSION +# define OLD_VERSION(name, version) \ + asm (".globl _compat." #version "." #name "\n\t" \ + "_compat." #version "." #name " = _new." #name "\n\t" \ + ".symver _compat." #version "." #name "," #name "@" #version); +# define NEW_VERSION(name, version) \ + __typeof (name) name __asm__ ("_new." #name) used_in_asm; \ + asm (".symver _new." #name ", " #name "@@" #version); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ + __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) used_in_asm; \ + asm (".symver _compat." #version "." #name ", " #name "@" #version); +# define COMPAT_VERSION(name, version, prefix) \ + __typeof (name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) used_in_asm; \ + asm (".symver _compat." #version "." #name ", " #name "@" #version); +# endif #else +# define NEW_INTDEF(name) INTDEF(name) # define OLD_VERSION(name, version) /* Nothing for static linking. */ # define NEW_VERSION(name, version) /* Nothing for static linking. */ # define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ error "should use #ifdef SYMBOL_VERSIONING" -# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SYMBOL_VERSIONING" +# define COMPAT_VERSION(name, version, prefix) \ + error "should use #ifdef SYMBOL_VERSIONING" #endif #ifndef FALLTHROUGH diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h index dac2a5f5..14f0fb88 100644 --- a/lib/fixedsizehash.h +++ b/lib/fixedsizehash.h @@ -30,17 +30,11 @@ #include <errno.h> #include <stdlib.h> #include <string.h> -#include <sys/cdefs.h> #include <system.h> -#ifdef __CONCAT -#define CONCAT(t1,t2) __CONCAT (t1,t2) -#else -#define STROF(t2) t2 #define CONCAT_EXPANDED(t1,t2) t1 ## t2 #define CONCAT(t1,t2) CONCAT_EXPANDED(t1,t2) -#endif /* Before including this file the following macros must be defined: diff --git a/lib/libeu.h b/lib/libeu.h index ecb4d011..e849a79e 100644 --- a/lib/libeu.h +++ b/lib/libeu.h @@ -39,6 +39,8 @@ extern void *xrealloc (void *, size_t) __attribute__ ((__malloc__)); extern char *xstrdup (const char *) __attribute__ ((__malloc__)); extern char *xstrndup (const char *, size_t) __attribute__ ((__malloc__)); +extern char *xasprintf(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))) __attribute__ ((__malloc__)); extern uint32_t crc32 (uint32_t crc, unsigned char *buf, size_t len); extern int crc32_file (int fd, uint32_t *resp); diff --git a/lib/printversion.c b/lib/printversion.c index adf127d6..f657329c 100644 --- a/lib/printversion.c +++ b/lib/printversion.c @@ -41,5 +41,5 @@ print_version (FILE *stream, struct argp_state *state) Copyright (C) %s The elfutils developers <%s>.\n\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "2021", PACKAGE_URL); +"), "2022", PACKAGE_URL); } diff --git a/lib/system.h b/lib/system.h index cdf18ed7..d3f42c91 100644 --- a/lib/system.h +++ b/lib/system.h @@ -1,5 +1,6 @@ /* Declarations for common convenience functions. Copyright (C) 2006-2011 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -29,8 +30,9 @@ #ifndef LIB_SYSTEM_H #define LIB_SYSTEM_H 1 +#include <config.h> + #include <errno.h> -#include <error.h> #include <stddef.h> #include <stdint.h> #include <sys/param.h> @@ -38,6 +40,26 @@ #include <byteswap.h> #include <unistd.h> #include <string.h> +#include <stdarg.h> +#include <stdlib.h> + +#if defined(HAVE_ERROR_H) +#include <error.h> +#elif defined(HAVE_ERR_H) +extern int error_message_count; +void error(int status, int errnum, const char *format, ...); +#else +#error "err.h or error.h must be available" +#endif + +/* error (EXIT_FAILURE, ...) should be noreturn but on some systems it + isn't. This may cause warnings about code that should not be reachable. + So have an explicit error_exit wrapper that is noreturn (because it + calls exit explicitly). */ +#define error_exit(errnum,...) do { \ + error (EXIT_FAILURE,errnum,__VA_ARGS__); \ + exit (EXIT_FAILURE); \ + } while (0) #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) @@ -70,6 +92,19 @@ ((void *) ((char *) memcpy (dest, src, n) + (size_t) n)) #endif +#if !HAVE_DECL_REALLOCARRAY +static inline void * +reallocarray (void *ptr, size_t nmemb, size_t size) +{ + if (size > 0 && nmemb > SIZE_MAX / size) + { + errno = ENOMEM; + return NULL; + } + return realloc (ptr, nmemb * size); +} +#endif + /* Return TRUE if the start of STR matches PREFIX, FALSE otherwise. */ static inline int diff --git a/lib/xasprintf.c b/lib/xasprintf.c new file mode 100644 index 00000000..179ea2e8 --- /dev/null +++ b/lib/xasprintf.c @@ -0,0 +1,52 @@ +/* A wrapper around vasprintf that dies in case of an error. + Copyright (c) 2021 Dmitry V. Levin <ldv@altlinux.org> + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <libintl.h> +#include "libeu.h" +#include "system.h" + +char * +xasprintf (const char *fmt, ...) +{ + char *res; + va_list ap; + + va_start (ap, fmt); + if (unlikely (vasprintf (&res, fmt, ap) < 0)) + error (EXIT_FAILURE, 0, _("memory exhausted")); + va_end(ap); + + return res; +} diff --git a/libasm/ChangeLog b/libasm/ChangeLog index 85e723e6..c65fd21b 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,3 +1,17 @@ +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * asm_align.c (__libasm_ensure_section_space): Remove casts of calloc + return values. + * asm_begin.c (asm_begin): Remove cast of malloc return value. + * asm_fill.c (asm_fill): Likewise. + * asm_newabssym.c (asm_newabssym): Likewise. + * asm_newcomsym.c (asm_newcomsym): Likewise. + * asm_newscn.c (asm_newscn): Likewise. + * asm_newscngrp.c (asm_newscngrp): Likewise. + * asm_newsubscn.c (asm_newsubscn): Likewise. + * asm_newsym.c (asm_newsym): Likewise. + * disasm_begin.c (disasm_begin): Likewise. + 2021-04-19 Martin Liska <mliska@suse.cz> * libasmP.h (asm_emit_symbol_p): Use startswith. diff --git a/libasm/asm_align.c b/libasm/asm_align.c index c8c671b2..3a976756 100644 --- a/libasm/asm_align.c +++ b/libasm/asm_align.c @@ -143,8 +143,7 @@ __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len) /* This is the first block. */ size = MAX (2 * len, 960); - asmscn->content = (struct AsmData *) calloc (1, sizeof (struct AsmData) - + size); + asmscn->content = calloc (1, sizeof (struct AsmData) + size); if (asmscn->content == NULL) return -1; @@ -160,7 +159,7 @@ __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len) size = MAX (2 *len, MIN (32768, 2 * asmscn->offset)); - newp = (struct AsmData *) calloc (1, sizeof (struct AsmData) + size); + newp = calloc (1, sizeof (struct AsmData) + size); if (newp == NULL) return -1; diff --git a/libasm/asm_begin.c b/libasm/asm_begin.c index 1df2d4ea..a190202c 100644 --- a/libasm/asm_begin.c +++ b/libasm/asm_begin.c @@ -138,8 +138,7 @@ asm_begin (const char *fname, Ebl *ebl, bool textp) right away. Instead we create a temporary file in the same directory which, if everything goes alright, will replace a possibly existing file with the given name. */ - AsmCtx_t *result - = (AsmCtx_t *) malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9); + AsmCtx_t *result = malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9); if (result == NULL) return NULL; diff --git a/libasm/asm_fill.c b/libasm/asm_fill.c index 62d9d732..783555ee 100644 --- a/libasm/asm_fill.c +++ b/libasm/asm_fill.c @@ -54,8 +54,7 @@ asm_fill (AsmScn_t *asmscn, void *bytes, size_t len) else { /* Allocate appropriate memory. */ - pattern = (struct FillPattern *) malloc (sizeof (struct FillPattern) - + len); + pattern = malloc (sizeof (struct FillPattern) + len); if (pattern == NULL) return -1; diff --git a/libasm/asm_newabssym.c b/libasm/asm_newabssym.c index 34fef3e3..728d6043 100644 --- a/libasm/asm_newabssym.c +++ b/libasm/asm_newabssym.c @@ -71,7 +71,7 @@ asm_newabssym (AsmCtx_t *ctx, const char *name, GElf_Xword size, rwlock_wrlock (ctx->lock); - result = (AsmSym_t *) malloc (sizeof (AsmSym_t)); + result = malloc (sizeof (AsmSym_t)); if (result == NULL) return NULL; diff --git a/libasm/asm_newcomsym.c b/libasm/asm_newcomsym.c index ee3b6966..750a1380 100644 --- a/libasm/asm_newcomsym.c +++ b/libasm/asm_newcomsym.c @@ -71,7 +71,7 @@ asm_newcomsym (AsmCtx_t *ctx, const char *name, GElf_Xword size, rwlock_wrlock (ctx->lock); - result = (AsmSym_t *) malloc (sizeof (AsmSym_t)); + result = malloc (sizeof (AsmSym_t)); if (result == NULL) return NULL; diff --git a/libasm/asm_newscn.c b/libasm/asm_newscn.c index 7cdf484f..1150015f 100644 --- a/libasm/asm_newscn.c +++ b/libasm/asm_newscn.c @@ -181,7 +181,7 @@ asm_newscn (AsmCtx_t *ctx, const char *scnname, GElf_Word type, rwlock_wrlock (ctx->lock); /* This is a new section. */ - result = (AsmScn_t *) malloc (sizeof (AsmScn_t) + scnname_len); + result = malloc (sizeof (AsmScn_t) + scnname_len); if (result != NULL) { /* Add the name. */ diff --git a/libasm/asm_newscngrp.c b/libasm/asm_newscngrp.c index 80757a9a..0ca87fba 100644 --- a/libasm/asm_newscngrp.c +++ b/libasm/asm_newscngrp.c @@ -57,7 +57,7 @@ asm_newscngrp (AsmCtx_t *ctx, const char *grpname, AsmSym_t *signature, return NULL; } - result = (AsmScnGrp_t *) malloc (sizeof (AsmScnGrp_t) + grpname_len); + result = malloc (sizeof (AsmScnGrp_t) + grpname_len); if (result == NULL) return NULL; diff --git a/libasm/asm_newsubscn.c b/libasm/asm_newsubscn.c index 906240ac..2f2ba78e 100644 --- a/libasm/asm_newsubscn.c +++ b/libasm/asm_newsubscn.c @@ -62,7 +62,7 @@ asm_newsubscn (AsmScn_t *asmscn, unsigned int nr) runp = runp->subnext; } - newp = (AsmScn_t *) malloc (sizeof (AsmScn_t)); + newp = malloc (sizeof (AsmScn_t)); if (newp == NULL) return NULL; diff --git a/libasm/asm_newsym.c b/libasm/asm_newsym.c index 53891668..a89ee129 100644 --- a/libasm/asm_newsym.c +++ b/libasm/asm_newsym.c @@ -73,7 +73,7 @@ asm_newsym (AsmScn_t *asmscn, const char *name, GElf_Xword size, size_t name_len = strlen (name) + 1; - result = (AsmSym_t *) malloc (sizeof (AsmSym_t) + name_len); + result = malloc (sizeof (AsmSym_t) + name_len); if (result == NULL) return NULL; diff --git a/libasm/disasm_begin.c b/libasm/disasm_begin.c index d00852b7..cb10f66e 100644 --- a/libasm/disasm_begin.c +++ b/libasm/disasm_begin.c @@ -49,7 +49,7 @@ disasm_begin (Ebl *ebl, Elf *elf, DisasmGetSymCB_t symcb) return NULL; } - DisasmCtx_t *ctx = (DisasmCtx_t *) malloc (sizeof (DisasmCtx_t)); + DisasmCtx_t *ctx = malloc (sizeof (DisasmCtx_t)); if (ctx == NULL) { __libasm_seterrno (ASM_E_NOMEM); diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 7cca9419..48fbba19 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,8 @@ +2021-12-04 Mark Wielaard <mark@klomp.org> + + * Makefile.am (GENDIS_ENV): New variable, depends on + USE_ADDRESS_SANITIZER. + 2020-12-20 Dmitry V. Levin <ldv@altlinux.org> * .gitignore: New file. diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am index c8e94507..b1a3bce4 100644 --- a/libcpu/Makefile.am +++ b/libcpu/Makefile.am @@ -61,8 +61,16 @@ noinst_HEADERS += memory-access.h i386_parse.h i386_data.h noinst_PROGRAMS = i386_gendis$(EXEEXT) +# i386_gendis doesn't clean up, ignore leaks. +# It is just a build tool to generate source in maintainer mode. +if USE_ADDRESS_SANITIZER +GENDIS_ENV=env ASAN_OPTIONS=detect_leaks=0 +else +GENDIS_ENV= +endif + $(srcdir)/%_dis.h: %_defs i386_gendis$(EXEEXT) - $(AM_V_GEN)./i386_gendis$(EXEEXT) $< > $@T + $(AM_V_GEN) $(GENDIS_ENV) ./i386_gendis$(EXEEXT) $< > $@T $(AM_V_at)mv -f $@T $@ else diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b5462ef4..631f2f2a 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,76 @@ +2022-04-16 Mark Wielaard <mark@klomp.org> + + * libdwP.h: Remove atomics.h include. + +2022-04-13 Mark Wielaard <mark@klomp.org> + + * dwarf.h: Add DWARF5 package file section identifiers, + DW_SECT_*. + +2021-10-20 John M Mellor-Crummey <johnmc@rice.edu> + + * dwarf_linecontext.c: New file. + * dwarf_linefunctionname.c: Likewise. + * Makefile.am (libdw_a_SOURCES): Add dwarf_linecontext.c and + dwarf_linefunctionname.c + * dwarf.h: Add DW_LNE_NVIDIA_inlined_call and + DW_LNE_NVIDIA_set_function_name. + * dwarf_getsrclines.c (struct line_state): Add context and + function_name fields. + (add_new_line): Set context and function_name. + (MAX_STACK_LINES): Reduce to MAX_STACK_ALLOC / 2. + (read_srclines): Initialize context and function_name. Try to + read debug_str_offset if available. Handle + DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name. + * libdw.h (dwarf_linecontext): New declaration. + (dwarf_linefunctionname): Likewise. + * libdw.map (ELFUTILS_0.186): New section. + +2021-11-08 Mark Wielaard <mark@klomp.org> + + * dwarf_begin_elf.c (scn_dwarf_type): New function. + (check_section): Check result->type. + (global_read): First check type. + (scngrp_read): Likewise. + * libdw/libdwP.h (enum dwarf_type): New enumeration. + (struct Dwarf): New field type. + +2021-02-14 Alexander Miller <alex.miller@gmx.de> + + * dwarf_aggregate_size.c (dwarf_aggregate_size): Move NEW_VERSION + before definition. Replace INTDEF with NEW_INTDEF. + * dwarf_srclang.c (dwarf_srclang): Likewise. + * dwarf_arrayorder.c (dwarf_arrayorder): Move NEW_VERSION. + * dwarf_bitoffset.c (dwarf_bitoffset): Likewise. + * dwarf_bitsize.c (dwarf_bitsize): Likewise. + * dwarf_bytesize.c (dwarf_bytesize): Likewise. + * dwarf_decl_column.c (dwarf_decl_column): Likewise. + +2021-10-18 Mark Wielaard <mark@klomp.org> + + * dwarf_aggregate_size.c (get_type): Don't pass NULL to + dwarf_peel_type. + +2021-10-06 Mark Wielaard <mark@klomp.org> + + * dwarf_aggregate_size.c (array_size): Check signedness of child DIE + type. Use dwarf_formsdata or dwarf_formudata to get the lower and + upper bounds. + +2021-09-08 Mark Wielaard <mark@klomp.org> + + * dwarf_begin_elf.c (valid_p): Identify ELF class and use this to set + address_size of the fake CUs. Also set offset_size and DWARF version. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * dwarf_begin_elf.c (valid_p): Remove casts of malloc return values. + (dwarf_begin_elf): Remove cast of calloc return value. + * dwarf_getpubnames.c (get_offsets): Remove casts of realloc return + values. + * dwarf_getsrclines.c (read_srclines): Remove cast of malloc return + value. + 2021-04-19 Martin Liska <mliska@suse.cz> * dwarf_begin_elf.c (check_section): Use startswith. diff --git a/libdw/Makefile.am b/libdw/Makefile.am index 8906b61a..6c7bc289 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -64,6 +64,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_linesrc.c dwarf_lineno.c dwarf_lineaddr.c \ dwarf_linecol.c dwarf_linebeginstatement.c \ dwarf_lineendsequence.c dwarf_lineblock.c \ + dwarf_linecontext.c dwarf_linefunctionname.c \ dwarf_lineprologueend.c dwarf_lineepiloguebegin.c \ dwarf_lineisa.c dwarf_linediscriminator.c \ dwarf_lineop_index.c dwarf_line_file.c \ diff --git a/libdw/dwarf.h b/libdw/dwarf.h index 19a4be96..c961bc36 100644 --- a/libdw/dwarf.h +++ b/libdw/dwarf.h @@ -844,6 +844,10 @@ enum DW_LNE_set_discriminator = 4, DW_LNE_lo_user = 128, + + DW_LNE_NVIDIA_inlined_call = 144, + DW_LNE_NVIDIA_set_function_name = 145, + DW_LNE_hi_user = 255 }; @@ -930,6 +934,19 @@ enum DW_LLE_GNU_start_length_entry = 0x3 }; +/* DWARF5 package file section identifiers. */ +enum + { + DW_SECT_INFO = 1, + /* Reserved = 2, */ + DW_SECT_ABBREV = 3, + DW_SECT_LINE = 4, + DW_SECT_LOCLISTS = 5, + DW_SECT_STR_OFFSETS = 6, + DW_SECT_MACRO = 7, + DW_SECT_RNGLISTS = 8, + }; + /* DWARF call frame instruction encodings. */ enum diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 75105e4d..8216ae42 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -40,7 +40,7 @@ get_type (Dwarf_Die *die, Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem) Dwarf_Die *type = INTUSE(dwarf_formref_die) (INTUSE(dwarf_attr_integrate) (die, DW_AT_type, attr_mem), type_mem); - if (INTUSE(dwarf_peel_type) (type, type) != 0) + if (type == NULL || INTUSE(dwarf_peel_type) (type, type) != 0) return NULL; return type; @@ -83,19 +83,51 @@ array_size (Dwarf_Die *die, Dwarf_Word *size, } else { + bool is_signed = true; + if (INTUSE(dwarf_attr) (get_type (&child, attr_mem, &type_mem), + DW_AT_encoding, attr_mem) != NULL) + { + Dwarf_Word encoding; + if (INTUSE(dwarf_formudata) (attr_mem, &encoding) == 0) + is_signed = (encoding == DW_ATE_signed + || encoding == DW_ATE_signed_char); + } + Dwarf_Sword upper; Dwarf_Sword lower; - if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) - (&child, DW_AT_upper_bound, - attr_mem), &upper) != 0) - return -1; + if (is_signed) + { + if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) + (&child, DW_AT_upper_bound, + attr_mem), &upper) != 0) + return -1; + } + else + { + Dwarf_Word unsigned_upper; + if (INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) + (&child, DW_AT_upper_bound, + attr_mem), &unsigned_upper) != 0) + return -1; + upper = unsigned_upper; + } /* Having DW_AT_lower_bound is optional. */ if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_lower_bound, attr_mem) != NULL) { - if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0) - return -1; + if (is_signed) + { + if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0) + return -1; + } + else + { + Dwarf_Word unsigned_lower; + if (INTUSE(dwarf_formudata) (attr_mem, &unsigned_lower) != 0) + return -1; + lower = unsigned_lower; + } } else { @@ -209,6 +241,7 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, return -1; } +NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) int dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) { @@ -219,6 +252,5 @@ dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) return aggregate_size (&die_mem, size, &type_mem, 0); } -INTDEF (dwarf_aggregate_size) +NEW_INTDEF (dwarf_aggregate_size) OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144) -NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c index da64f992..782e075c 100644 --- a/libdw/dwarf_arrayorder.c +++ b/libdw/dwarf_arrayorder.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) int dwarf_arrayorder (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_arrayorder (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_arrayorder, ELFUTILS_0.122) -NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index 9e944b86..a48dada6 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -72,6 +72,31 @@ static const char dwarf_scnnames[IDX_last][19] = }; #define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0])) +static enum dwarf_type +scn_dwarf_type (Dwarf *result, size_t shstrndx, Elf_Scn *scn) +{ + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + return TYPE_UNKNOWN; + + const char *scnname = elf_strptr (result->elf, shstrndx, + shdr->sh_name); + if (scnname != NULL) + { + if (startswith (scnname, ".gnu.debuglto_.debug")) + return TYPE_GNU_LTO; + else if (startswith (scnname, ".debug_") || startswith (scnname, ".zdebug_")) + { + size_t len = strlen (scnname); + if (strcmp (scnname + len - 4, ".dwo") == 0) + return TYPE_DWO; + else + return TYPE_PLAIN; + } + } + return TYPE_UNKNOWN; +} static Dwarf * check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) { @@ -116,7 +141,11 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) return NULL; } - /* Recognize the various sections. Most names start with .debug_. */ + /* Recognize the various sections. Most names start with .debug_. + They might be compressed (and start with .z). Or end with .dwo + for split dwarf sections. Or start with .gnu.debuglto_ for + LTO debug sections. We should only use one consistent set at + a time. We prefer PLAIN over DWO over LTO. */ size_t cnt; bool gnu_compressed = false; for (cnt = 0; cnt < ndwarf_scnnames; ++cnt) @@ -127,7 +156,15 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) && (dbglen == scnlen || (scnlen == dbglen + 4 && strstr (scnname, ".dwo") == scnname + dbglen))) - break; + { + if (dbglen == scnlen) + { + if (result->type == TYPE_PLAIN) + break; + } + else if (result->type == TYPE_DWO) + break; + } else if (scnname[0] == '.' && scnname[1] == 'z' && (strncmp (&scnname[2], &dwarf_scnnames[cnt][1], dbglen - 1) == 0 @@ -136,13 +173,27 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) && strstr (scnname, ".dwo") == scnname + dbglen + 1)))) { - gnu_compressed = true; - break; + if (scnlen == dbglen + 1) + { + if (result->type == TYPE_PLAIN) + { + gnu_compressed = true; + break; + } + } + else if (result->type <= TYPE_DWO) + { + gnu_compressed = true; + break; + } } else if (scnlen > 14 /* .gnu.debuglto_ prefix. */ && startswith (scnname, ".gnu.debuglto_") && strcmp (&scnname[14], dwarf_scnnames[cnt]) == 0) - break; + { + if (result->type == TYPE_GNU_LTO) + break; + } } if (cnt >= ndwarf_scnnames) @@ -224,12 +275,29 @@ valid_p (Dwarf *result) result = NULL; } + /* We are setting up some "fake" CUs, which need an address size. + Check the ELF class to come up with something reasonable. */ + int elf_addr_size = 8; + if (result != NULL) + { + GElf_Ehdr ehdr; + if (gelf_getehdr (result->elf, &ehdr) == NULL) + { + Dwarf_Sig8_Hash_free (&result->sig8_hash); + __libdw_seterrno (DWARF_E_INVALID_ELF); + free (result); + result = NULL; + } + else if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) + elf_addr_size = 4; + } + /* For dwarf_location_attr () we need a "fake" CU to indicate where the "fake" attribute data comes from. This is a block inside the .debug_loc or .debug_loclists section. */ if (result != NULL && result->sectiondata[IDX_debug_loc] != NULL) { - result->fake_loc_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU)); + result->fake_loc_cu = malloc (sizeof (Dwarf_CU)); if (unlikely (result->fake_loc_cu == NULL)) { Dwarf_Sig8_Hash_free (&result->sig8_hash); @@ -247,15 +315,16 @@ valid_p (Dwarf *result) = (result->sectiondata[IDX_debug_loc]->d_buf + result->sectiondata[IDX_debug_loc]->d_size); result->fake_loc_cu->locs = NULL; - result->fake_loc_cu->address_size = 0; - result->fake_loc_cu->version = 0; + result->fake_loc_cu->address_size = elf_addr_size; + result->fake_loc_cu->offset_size = 4; + result->fake_loc_cu->version = 4; result->fake_loc_cu->split = NULL; } } if (result != NULL && result->sectiondata[IDX_debug_loclists] != NULL) { - result->fake_loclists_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU)); + result->fake_loclists_cu = malloc (sizeof (Dwarf_CU)); if (unlikely (result->fake_loclists_cu == NULL)) { Dwarf_Sig8_Hash_free (&result->sig8_hash); @@ -274,8 +343,9 @@ valid_p (Dwarf *result) = (result->sectiondata[IDX_debug_loclists]->d_buf + result->sectiondata[IDX_debug_loclists]->d_size); result->fake_loclists_cu->locs = NULL; - result->fake_loclists_cu->address_size = 0; - result->fake_loclists_cu->version = 0; + result->fake_loclists_cu->address_size = elf_addr_size; + result->fake_loclists_cu->offset_size = 4; + result->fake_loclists_cu->version = 5; result->fake_loclists_cu->split = NULL; } } @@ -286,7 +356,7 @@ valid_p (Dwarf *result) inside the .debug_addr section, if it exists. */ if (result != NULL && result->sectiondata[IDX_debug_addr] != NULL) { - result->fake_addr_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU)); + result->fake_addr_cu = malloc (sizeof (Dwarf_CU)); if (unlikely (result->fake_addr_cu == NULL)) { Dwarf_Sig8_Hash_free (&result->sig8_hash); @@ -306,8 +376,9 @@ valid_p (Dwarf *result) = (result->sectiondata[IDX_debug_addr]->d_buf + result->sectiondata[IDX_debug_addr]->d_size); result->fake_addr_cu->locs = NULL; - result->fake_addr_cu->address_size = 0; - result->fake_addr_cu->version = 0; + result->fake_addr_cu->address_size = elf_addr_size; + result->fake_addr_cu->offset_size = 4; + result->fake_addr_cu->version = 5; result->fake_addr_cu->split = NULL; } } @@ -324,6 +395,16 @@ global_read (Dwarf *result, Elf *elf, size_t shstrndx) { Elf_Scn *scn = NULL; + /* First check the type (PLAIN, DWO, LTO) we are looking for. We + prefer PLAIN if available over DWO, over LTO. */ + while ((scn = elf_nextscn (elf, scn)) != NULL && result->type != TYPE_PLAIN) + { + enum dwarf_type type = scn_dwarf_type (result, shstrndx, scn); + if (type > result->type) + result->type = type; + } + + scn = NULL; while (result != NULL && (scn = elf_nextscn (elf, scn)) != NULL) result = check_section (result, shstrndx, scn, false); @@ -368,6 +449,9 @@ scngrp_read (Dwarf *result, Elf *elf, size_t shstrndx, Elf_Scn *scngrp) represent section indices. The first word is a flag word. */ Elf32_Word *scnidx = (Elf32_Word *) data->d_buf; size_t cnt; + + /* First check the type (PLAIN, DWO, LTO) we are looking for. We + prefer PLAIN if available over DWO, over LTO. */ for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size; ++cnt) { Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]); @@ -381,6 +465,15 @@ scngrp_read (Dwarf *result, Elf *elf, size_t shstrndx, Elf_Scn *scngrp) return NULL; } + enum dwarf_type type = scn_dwarf_type (result, shstrndx, scn); + if (type > result->type) + result->type = type; + } + + for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size && result != NULL; ++cnt) + { + Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]); + assert (scn != NULL); // checked above result = check_section (result, shstrndx, scn, true); if (result == NULL) break; @@ -415,7 +508,7 @@ dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp) assert (sizeof (struct Dwarf) < mem_default_size); /* Allocate the data structure. */ - Dwarf *result = (Dwarf *) calloc (1, sizeof (Dwarf)); + Dwarf *result = calloc (1, sizeof (Dwarf)); if (unlikely (result == NULL) || unlikely (Dwarf_Sig8_Hash_init (&result->sig8_hash, 11) < 0)) { diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c index c1a3a343..61a0d593 100644 --- a/libdw/dwarf_bitoffset.c +++ b/libdw/dwarf_bitoffset.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) int dwarf_bitoffset (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bitoffset (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_bitoffset, ELFUTILS_0.122) -NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c index 0ed9b710..35e8744c 100644 --- a/libdw/dwarf_bitsize.c +++ b/libdw/dwarf_bitsize.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) int dwarf_bitsize (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bitsize (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_bitsize, ELFUTILS_0.122) -NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c index 116cd321..6d1ff9ae 100644 --- a/libdw/dwarf_bytesize.c +++ b/libdw/dwarf_bytesize.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) int dwarf_bytesize (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bytesize (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_bytesize, ELFUTILS_0.122) -NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c index 08d36b87..3225fd18 100644 --- a/libdw/dwarf_decl_column.c +++ b/libdw/dwarf_decl_column.c @@ -35,10 +35,10 @@ #include "libdwP.h" +NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) int dwarf_decl_column (Dwarf_Die *decl, int *colp) { return __libdw_attr_intval (decl, colp, DW_AT_decl_column); } OLD_VERSION (dwarf_decl_column, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c index d4aa0a18..75662a33 100644 --- a/libdw/dwarf_decl_file.c +++ b/libdw/dwarf_decl_file.c @@ -36,6 +36,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) const char * dwarf_decl_file (Dwarf_Die *die) { @@ -86,4 +87,3 @@ dwarf_decl_file (Dwarf_Die *die) return cu->files->info[idx].name; } OLD_VERSION (dwarf_decl_file, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c index 80fae6c9..6b31eebe 100644 --- a/libdw/dwarf_decl_line.c +++ b/libdw/dwarf_decl_line.c @@ -37,13 +37,13 @@ #include "libdwP.h" +NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) int dwarf_decl_line (Dwarf_Die *func, int *linep) { return __libdw_attr_intval (func, linep, DW_AT_decl_line); } OLD_VERSION (dwarf_decl_line, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) int internal_function diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c index 25600f33..de726407 100644 --- a/libdw/dwarf_getpubnames.c +++ b/libdw/dwarf_getpubnames.c @@ -57,8 +57,7 @@ get_offsets (Dwarf *dbg) if (cnt >= allocated) { allocated = MAX (10, 2 * allocated); - struct pubnames_s *newmem - = (struct pubnames_s *) realloc (mem, allocated * entsize); + struct pubnames_s *newmem = realloc (mem, allocated * entsize); if (newmem == NULL) { __libdw_seterrno (DWARF_E_NOMEM); @@ -132,7 +131,7 @@ get_offsets (Dwarf *dbg) return -1; } - dbg->pubnames_sets = (struct pubnames_s *) realloc (mem, cnt * entsize); + dbg->pubnames_sets = realloc (mem, cnt * entsize); dbg->pubnames_nsets = cnt; return 0; diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index d6a581ad..2c1d7a40 100644 --- a/libdw/dwarf_getsrclines.c +++ b/libdw/dwarf_getsrclines.c @@ -93,6 +93,8 @@ struct line_state struct linelist *linelist; size_t nlinelist; unsigned int end_sequence; + unsigned int context; + unsigned int function_name; }; static inline void @@ -139,6 +141,8 @@ add_new_line (struct line_state *state, struct linelist *new_line) SET (epilogue_begin); SET (isa); SET (discriminator); + SET (context); + SET (function_name); #undef SET @@ -161,7 +165,7 @@ read_srclines (Dwarf *dbg, the stack. Stack allocate some entries, only dynamically malloc when more than MAX. */ #define MAX_STACK_ALLOC 4096 -#define MAX_STACK_LINES MAX_STACK_ALLOC +#define MAX_STACK_LINES (MAX_STACK_ALLOC / 2) #define MAX_STACK_FILES (MAX_STACK_ALLOC / 4) #define MAX_STACK_DIRS (MAX_STACK_ALLOC / 16) @@ -180,7 +184,9 @@ read_srclines (Dwarf *dbg, .prologue_end = false, .epilogue_begin = false, .isa = 0, - .discriminator = 0 + .discriminator = 0, + .context = 0, + .function_name = 0 }; /* The dirs normally go on the stack, but if there are too many @@ -372,7 +378,7 @@ read_srclines (Dwarf *dbg, { if (ndirlist > SIZE_MAX / sizeof (*dirarray)) goto no_mem; - dirarray = (struct dirlist *) malloc (ndirlist * sizeof (*dirarray)); + dirarray = malloc (ndirlist * sizeof (*dirarray)); if (unlikely (dirarray == NULL)) { no_mem: @@ -648,6 +654,13 @@ read_srclines (Dwarf *dbg, } } + unsigned int debug_str_offset = 0; + if (unlikely (linep == header_start + header_length - 4)) + { + /* CUBINs contain an unsigned 4-byte offset */ + debug_str_offset = read_4ubyte_unaligned_inc (dbg, linep); + } + /* Consistency check. */ if (unlikely (linep != header_start + header_length)) { @@ -753,6 +766,8 @@ read_srclines (Dwarf *dbg, state.epilogue_begin = false; state.isa = 0; state.discriminator = 0; + state.context = 0; + state.function_name = 0; break; case DW_LNE_set_address: @@ -831,6 +846,23 @@ read_srclines (Dwarf *dbg, get_uleb128 (state.discriminator, linep, lineendp); break; + case DW_LNE_NVIDIA_inlined_call: + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (state.context, linep, lineendp); + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (state.function_name, linep, lineendp); + state.function_name += debug_str_offset; + break; + + case DW_LNE_NVIDIA_set_function_name: + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (state.function_name, linep, lineendp); + state.function_name += debug_str_offset; + break; + default: /* Unknown, ignore it. */ if (unlikely ((size_t) (lineendp - (linep - 1)) < len)) diff --git a/libdw/dwarf_linecontext.c b/libdw/dwarf_linecontext.c new file mode 100644 index 00000000..84572e22 --- /dev/null +++ b/libdw/dwarf_linecontext.c @@ -0,0 +1,45 @@ +/* Return context in line. + This file is part of elfutils. + Written by John Mellor-Crummey <johnmc@rice.edu>, 2021. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libdwP.h" + + +Dwarf_Line* +dwarf_linecontext (Dwarf_Lines* lines, Dwarf_Line *line) +{ + if (lines == NULL || line == NULL) + return NULL; + if (line->context == 0 || line->context >= lines->nlines) + return NULL; + + return lines->info + (line->context - 1); +} diff --git a/libdw/dwarf_linefunctionname.c b/libdw/dwarf_linefunctionname.c new file mode 100644 index 00000000..e194d212 --- /dev/null +++ b/libdw/dwarf_linefunctionname.c @@ -0,0 +1,52 @@ +/* Return function name in line. + This file is part of elfutils. + Written by John Mellor-Crummey <johnmc@rice.edu>, 2021. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> +#include "libdwP.h" + + +const char * +dwarf_linefunctionname (Dwarf *dbg, Dwarf_Line *line) +{ + if (dbg == NULL || line == NULL) + return NULL; + if (line->context == 0) + return NULL; + + Elf_Data *str_data = dbg->sectiondata[IDX_debug_str]; + if (str_data == NULL || line->function_name >= str_data->d_size + || memchr (str_data->d_buf + line->function_name, '\0', + str_data->d_size - line->function_name) == NULL) + return NULL; + + return (char *) str_data->d_buf + line->function_name; +} diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c index f10e7642..77bd58c2 100644 --- a/libdw/dwarf_srclang.c +++ b/libdw/dwarf_srclang.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) int dwarf_srclang (Dwarf_Die *die) { @@ -45,6 +46,5 @@ dwarf_srclang (Dwarf_Die *die) (die, DW_AT_language, &attr_mem), &value) == 0 ? (int) value : -1; } -INTDEF (dwarf_srclang) +NEW_INTDEF (dwarf_srclang) OLD_VERSION (dwarf_srclang, ELFUTILS_0.122) -NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) diff --git a/libdw/libdw.h b/libdw/libdw.h index 77174d28..64d1689a 100644 --- a/libdw/libdw.h +++ b/libdw/libdw.h @@ -701,6 +701,15 @@ extern int dwarf_linediscriminator (Dwarf_Line *line, unsigned int *discp) extern const char *dwarf_linesrc (Dwarf_Line *line, Dwarf_Word *mtime, Dwarf_Word *length); +/* Return the caller of this line if inlined. If not inlined, + return NULL. */ +extern Dwarf_Line *dwarf_linecontext (Dwarf_Lines *lines, Dwarf_Line *line); + +/* Return the function name in this line record. If this line is + inlined, this is the name of the function that was inlined. If this line + is not inlined, return NULL. */ +extern const char *dwarf_linefunctionname (Dwarf *dbg, Dwarf_Line *line); + /* Return file information. The returned string is NULL when an error occurred, or the file path. The file path is either absolute or relative to the compilation directory. See dwarf_decl_file. */ diff --git a/libdw/libdw.map b/libdw/libdw.map index 8ab0a2a0..4f530378 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -360,3 +360,9 @@ ELFUTILS_0.177 { # presume that NULL is only returned on error (otherwise ELF_K_NONE). dwelf_elf_begin; } ELFUTILS_0.175; + +ELFUTILS_0.186 { + global: + dwarf_linecontext; + dwarf_linefunctionname; +} ELFUTILS_0.177; diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 7174ea93..56b388c1 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -35,7 +35,6 @@ #include <libdw.h> #include <dwarf.h> -#include "atomics.h" /* Known location expressions already decoded. */ @@ -145,6 +144,16 @@ enum #include "dwarf_sig8_hash.h" +/* The type of Dwarf object, sorted by preference + (if there is a higher order type, we pick that one over the others). */ +enum dwarf_type + { + TYPE_UNKNOWN = 0, + TYPE_GNU_LTO = 16, + TYPE_DWO = 32, + TYPE_PLAIN = 64, + }; + /* This is the structure representing the debugging state. */ struct Dwarf { @@ -216,6 +225,8 @@ struct Dwarf /* Similar for addrx/constx, which will come from .debug_addr section. */ struct Dwarf_CU *fake_addr_cu; + enum dwarf_type type; + /* Supporting lock for internal memory handling. Ensures threads that have an entry in the mem_tails array are not disturbed by new threads doing allocations for this Dwarf. */ @@ -291,6 +302,9 @@ struct Dwarf_Line_s unsigned int op_index:8; unsigned int isa:8; unsigned int discriminator:24; + /* These are currently only used for the NVIDIA extensions. */ + unsigned int context; + unsigned int function_name; }; struct Dwarf_Lines_s diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index a0ff9f4f..c9010af8 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,19 @@ +2022-03-24 Mark Wielaard <mark@klomp.org> + + * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add + EM_INTELGT Intel Graphics Technology. + +2021-02-14 Alexander Miller <alex.miller@gmx.de> + + * dwelf_elf_begin.c (dwelf_elf_begin): Move NEW_VERSION before + definition. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * dwelf_strtab.c (dwelf_strtab_init): Remove cast of calloc return + value. + (morememory): Remove cast of malloc return value. + 2020-12-12 Dmitry V. Levin <ldv@altlinux.org> * libdwelf.h: Fix spelling typos in comments. diff --git a/libdwelf/dwelf_elf_begin.c b/libdwelf/dwelf_elf_begin.c index c7d63a1c..c3cfe633 100644 --- a/libdwelf/dwelf_elf_begin.c +++ b/libdwelf/dwelf_elf_begin.c @@ -36,6 +36,7 @@ #include <unistd.h> +NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) Elf * dwelf_elf_begin (int fd) { @@ -61,4 +62,3 @@ dwelf_elf_begin (int fd) return NULL; } OLD_VERSION (dwelf_elf_begin, ELFUTILS_0.175) -NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) diff --git a/libdwelf/dwelf_elf_e_machine_string.c b/libdwelf/dwelf_elf_e_machine_string.c index 387648e2..051c70b5 100644 --- a/libdwelf/dwelf_elf_e_machine_string.c +++ b/libdwelf/dwelf_elf_e_machine_string.c @@ -360,6 +360,8 @@ dwelf_elf_e_machine_string (int machine) return "XMOS xCORE"; case EM_MCHP_PIC: return "Microchip 8-bit PIC"; + case EM_INTELGT: + return "Intel Graphics Technology"; case EM_KM32: return "KM211 KM32"; case EM_KMX32: diff --git a/libdwelf/dwelf_strtab.c b/libdwelf/dwelf_strtab.c index c6ae7cdf..5ec8c295 100644 --- a/libdwelf/dwelf_strtab.c +++ b/libdwelf/dwelf_strtab.c @@ -91,8 +91,7 @@ dwelf_strtab_init (bool nullstr) assert (sizeof (struct memoryblock) < ps - MALLOC_OVERHEAD); } - Dwelf_Strtab *ret - = (Dwelf_Strtab *) calloc (1, sizeof (struct Dwelf_Strtab)); + Dwelf_Strtab *ret = calloc (1, sizeof (struct Dwelf_Strtab)); if (ret != NULL) { ret->nullstr = nullstr; @@ -117,7 +116,7 @@ morememory (Dwelf_Strtab *st, size_t len) /* Allocate nearest multiple of pagesize >= len. */ len = ((len / ps) + (len % ps != 0)) * ps - MALLOC_OVERHEAD; - struct memoryblock *newmem = (struct memoryblock *) malloc (len); + struct memoryblock *newmem = malloc (len); if (newmem == NULL) return 1; diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index fedf65a4..76053039 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,181 @@ +2022-04-22 Mark Wielaard <mark@klomp.org> + + * debuginfod-client.c (init_control): New static pthread_once_t. + (get_client): Use pthread_once to call __libdwfl_debuginfod_init. + (__libdwfl_debuginfod_init): Make static, remove attribute + constructor. + +2022-02-18 Mark Wielaard <mark@klomp.org> + + * image-header.c (__libdw_image_header): Assign header values for + magic1, magic2, version, offset, length and sects using memcpy. + +2022-02-18 Mark Wielaard <mark@klomp.org> + + * offline.c (process_archive_member): Close member if process_file + failed. + +2022-01-03 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Only declare d32 and d64 before + actual use. + +2022-01-03 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + dyn_data and set xlatefrom.d_buf to dyns when dyns is not aligned. + +2022-01-03 Mark Wielaard <mark@klomp.org> + + * link_map.c (read_addrs): Fix buffer_available nb overflow. + +2021-12-23 Mark Wielaard <mark@klomp.org> + + * link_map.c (read_addrs): Calculate addr to read by hand. + +2021-12-23 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Call memcpy and set in.d_buf to + out.d_buf before calling xlatetom for unaligned buffers. + +2021-12-23 Mark Wielaard <mark@klomp.org> + + * core-file.c (dwfl_elf_phdr_memory_callback): Check start < + elf->maximum_size and end - start < minread. + +2021-12-20 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Move + and initialize struct elf_build_id build_id early. Only free memory + early when no longer needed. Free memory if not NULL at out. + +2021-12-19 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + data and set xlatefrom.d_buf to notes when data is not aligned. + +2021-12-19 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + ph_buffer and set xlatefrom.d_buf to phdrsp when ph_buffer is not + aligned. + +2021-12-19 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + buffer and set xlatefrom.d_buf to ehdr when buffer is not aligned. + +2021-12-19 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + notes filesz. Rewrite reading of GElf_Nhdr. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure + that dyn_filesz can contain at least one Elf_Dyn and isn't larger than + possible. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure + that ph_buffer_size has room for at least one phdr. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make + sure the note len increases each iteration. + +2021-12-17 Mark Wielaard <mark@klomp.org> + + * libdwflP.h (dwfl_segment_report_module): Add maxread argument. + * core-file.c (dwfl_core_file_report): Pass elf->maximum_size to + dwfl_segment_report_module. + * dwfl_segment_report_module.c (dwfl_segment_report_module): Add + maxread argument. Check file_trimmed_end against maxread. + +2021-12-16 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + note data is properly aligned. + +2021-12-16 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Make sure phnum is non-zero. + +2021-12-16 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Make sure dyn_filesz / entsize is + non-zero. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Add + len overflow check while iterating notes. + +2021-12-15 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Make sure phent is either sizeof + Elf32_Phdr or sizeof Elf64_Phdr. Check in.d_size can hold at least one + Phdr. + +2021-12-12 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + allocate more than SIZE_MAX. + +2021-12-09 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Limit dyn_filesz malloc size + to max possible. When converting make sure we don't exceed the number + of bytes available in either in.d_buf or out.d_buf. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + Dwfl_Module isn't associated with an Elf before installing it. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + trust e_shentsize. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Make sure phent != 0. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * link_map.c (dwfl_link_map_report): Limit malloc size to max + possible. When converting make sure we don't exceed the number + of bytes available in either in.d_buf nor out.d_buf. + +2021-12-08 Mark Wielaard <mark@klomp.org> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + read beyond of (actual) end of (memory) file. + +2021-11-18 Matthias Maennich <maennich@google.com> + + * linux-kernel-modules.c (dwfl_linux_kernel_report_modules): + Add one to modname array size. + +2021-02-14 Alexander Miller <alex.miller@gmx.de> + + * core-file.c (dwfl_core_file_report): Move NEW_VERSION before + definition. Replace INTDEF with NEW_INTDEF. + * dwfl_module_build_id.c (dwfl_module_build_id): Likewise. + * dwfl_report_elf.c (dwfl_report_elf): Likewise. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * linux-pid-attach.c (read_cached_memory): Remove cast of malloc + return value. + +2021-06-09 Omar Sandoval <osandov@fb.com> + + * link_map.c (read_addrs): Fix potential NULL pointer dereference. + 2021-04-19 Martin Liska <mliska@suse.cz> * dwfl_frame.c (dwfl_attach_state): Use startswith. diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index a0ccc9b3..cefc3db0 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -1,5 +1,6 @@ /* Core file handling. Copyright (C) 2008-2010, 2013, 2015 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -320,7 +321,7 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx, (void) more (*buffer_available); /* If it's already on hand anyway, use as much as there is. */ - if (elf->map_address != NULL) + if (elf->map_address != NULL && start < elf->maximum_size) (void) more (elf->maximum_size - start); /* Make sure we don't look past the end of the actual file, @@ -332,6 +333,9 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx, if (unlikely (start >= end)) return false; + if (end - start < minread) + return false; + if (elf->map_address != NULL) { void *contents = elf->map_address + elf->start_offset + start; @@ -440,6 +444,7 @@ __libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddrp) return false; } +NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) int dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) { @@ -558,6 +563,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) int seg = dwfl_segment_report_module (dwfl, ndx, NULL, &dwfl_elf_phdr_memory_callback, elf, core_file_read_eagerly, elf, + elf->maximum_size, note_file, note_file_size, &r_debug_info); if (unlikely (seg < 0)) @@ -625,8 +631,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) error rather than just nothing found. */ return listed > 0 ? listed : retval; } -INTDEF (dwfl_core_file_report) -NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) +NEW_INTDEF (dwfl_core_file_report) #ifdef SYMBOL_VERSIONING int _compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf); diff --git a/libdwfl/debuginfod-client.c b/libdwfl/debuginfod-client.c index 99b66b6e..153260c3 100644 --- a/libdwfl/debuginfod-client.c +++ b/libdwfl/debuginfod-client.c @@ -1,5 +1,6 @@ /* Try to get an ELF or debug file through the debuginfod. Copyright (C) 2019 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -31,6 +32,7 @@ #endif #include "libdwflP.h" +#include <pthread.h> #include <dlfcn.h> static __typeof__ (debuginfod_begin) *fp_debuginfod_begin; @@ -38,6 +40,10 @@ static __typeof__ (debuginfod_find_executable) *fp_debuginfod_find_executable; static __typeof__ (debuginfod_find_debuginfo) *fp_debuginfod_find_debuginfo; static __typeof__ (debuginfod_end) *fp_debuginfod_end; +static void __libdwfl_debuginfod_init (void); + +static pthread_once_t init_control = PTHREAD_ONCE_INIT; + /* NB: this is slightly thread-unsafe */ static debuginfod_client * @@ -46,6 +52,8 @@ get_client (Dwfl *dwfl) if (dwfl->debuginfod != NULL) return dwfl->debuginfod; + pthread_once (&init_control, __libdwfl_debuginfod_init); + if (fp_debuginfod_begin != NULL) { dwfl->debuginfod = (*fp_debuginfod_begin) (); @@ -96,9 +104,9 @@ __libdwfl_debuginfod_end (debuginfod_client *c) (*fp_debuginfod_end) (c); } -/* Try to get the libdebuginfod library functions to make sure - everything is initialized early. */ -void __attribute__ ((constructor)) +/* Try to get the libdebuginfod library functions. + Only needs to be called once from get_client. */ +static void __libdwfl_debuginfod_init (void) { void *debuginfod_so = dlopen(DEBUGINFOD_SONAME, RTLD_LAZY); diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index 6ca93761..0c198f23 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -77,6 +77,7 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) return found_build_id (mod, set, build_id_bits, build_id_len, build_id_vaddr); } +NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) int dwfl_module_build_id (Dwfl_Module *mod, const unsigned char **bits, GElf_Addr *vaddr) @@ -102,8 +103,7 @@ dwfl_module_build_id (Dwfl_Module *mod, *vaddr = mod->build_id_vaddr; return mod->build_id_len; } -INTDEF (dwfl_module_build_id) -NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) +NEW_INTDEF (dwfl_module_build_id) #ifdef SYMBOL_VERSIONING COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 9da86698..a5f0e5e5 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -287,6 +287,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, return m; } +NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) Dwfl_Module * dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, GElf_Addr base, bool add_p_vaddr) @@ -322,8 +323,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, return mod; } -INTDEF (dwfl_report_elf) -NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) +NEW_INTDEF (dwfl_report_elf) #ifdef SYMBOL_VERSIONING Dwfl_Module * diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index ee9cfa2e..1461ae26 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -1,5 +1,6 @@ /* Sniff out modules from ELF headers visible in memory segments. Copyright (C) 2008-2012, 2014, 2015, 2018 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -294,6 +295,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *memory_callback_arg, Dwfl_Module_Callback *read_eagerly, void *read_eagerly_arg, + size_t maxread, const void *note_file, size_t note_file_size, const struct r_debug_info *r_debug_info) { @@ -331,6 +333,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, here so we can always safely free it. */ void *phdrsp = NULL; + /* Collect the build ID bits here. */ + struct elf_build_id build_id; + build_id.memory = NULL; + build_id.len = 0; + build_id.vaddr = 0; + if (! (*memory_callback) (dwfl, ndx, &buffer, &buffer_available, start, sizeof (Elf64_Ehdr), memory_callback_arg) || memcmp (buffer, ELFMAG, SELFMAG) != 0) @@ -366,6 +374,20 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, e_ident = ((const unsigned char *) buffer); ei_class = e_ident[EI_CLASS]; ei_data = e_ident[EI_DATA]; + /* buffer may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ + size_t ehdr_align = (ei_class == ELFCLASS32 + ? __alignof__ (Elf32_Ehdr) + : __alignof__ (Elf64_Ehdr)); + if (((uintptr_t) buffer & (ehdr_align - 1)) != 0) + { + memcpy (&ehdr, buffer, + (ei_class == ELFCLASS32 + ? sizeof (Elf32_Ehdr) + : sizeof (Elf64_Ehdr))); + xlatefrom.d_buf = &ehdr; + } switch (ei_class) { case ELFCLASS32: @@ -383,7 +405,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, zero sh_size field. We ignore this here because getting shdrs is just a nice bonus (see below in the type == PT_LOAD case where we trim the last segment). */ - shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize; + shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * sizeof (Elf32_Shdr); break; case ELFCLASS64: @@ -397,7 +419,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if (phentsize != sizeof (Elf64_Phdr)) goto out; /* See the NOTE above for shdrs_end and ehdr.e32.e_shnum. */ - shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize; + shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * sizeof (Elf64_Shdr); break; default: @@ -425,7 +447,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, buffer, otherwise it will be the size of the new buffer that could be read. */ if (ph_buffer_size != 0) - xlatefrom.d_size = ph_buffer_size; + { + phnum = ph_buffer_size / phentsize; + if (phnum == 0) + goto out; + xlatefrom.d_size = ph_buffer_size; + } xlatefrom.d_buf = ph_buffer; @@ -441,6 +468,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlateto.d_buf = phdrsp; xlateto.d_size = phdrsp_bytes; + /* ph_ buffer may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ + size_t phdr_align = (class32 + ? __alignof__ (Elf32_Phdr) + : __alignof__ (Elf64_Phdr)); + if (((uintptr_t) ph_buffer & (phdr_align - 1)) != 0) + { + memcpy (phdrsp, ph_buffer, phdrsp_bytes); + xlatefrom.d_buf = phdrsp; + } + /* Track the bounds of the file visible in memory. */ GElf_Off file_trimmed_end = 0; /* Proper p_vaddr + p_filesz end. */ GElf_Off file_end = 0; /* Rounded up to effective page size. */ @@ -460,12 +499,6 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, GElf_Addr dyn_vaddr = 0; GElf_Xword dyn_filesz = 0; - /* Collect the build ID bits here. */ - struct elf_build_id build_id; - build_id.memory = NULL; - build_id.len = 0; - build_id.vaddr =0; - Elf32_Phdr *p32 = phdrsp; Elf64_Phdr *p64 = phdrsp; if ((ei_class == ELFCLASS32 @@ -514,15 +547,23 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if (data_size != 0) filesz = data_size; + if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr)) + continue; + assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); void *notes; - if (ei_data == MY_ELFDATA) + if (ei_data == MY_ELFDATA + && (uintptr_t) data == (align == 8 + ? NOTE_ALIGN8 ((uintptr_t) data) + : NOTE_ALIGN4 ((uintptr_t) data))) notes = data; else { const unsigned int xencoding = ehdr.e32.e_ident[EI_DATA]; + if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr)) + continue; notes = malloc (filesz); if (unlikely (notes == NULL)) continue; /* Next header */ @@ -533,6 +574,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlatefrom.d_size = filesz; xlateto.d_buf = notes; xlateto.d_size = filesz; + + /* data may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ + if ((uintptr_t) data != (align == 8 + ? NOTE_ALIGN8 ((uintptr_t) data) + : NOTE_ALIGN4 ((uintptr_t) data))) + { + memcpy (notes, data, filesz); + xlatefrom.d_buf = notes; + } + if (elf32_xlatetom (&xlateto, &xlatefrom, xencoding) == NULL) { free (notes); @@ -543,40 +596,48 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, const GElf_Nhdr *nh = notes; size_t len = 0; - while (filesz > len + sizeof (*nh)) + while (filesz - len > sizeof (*nh)) { - const void *note_name; - const void *note_desc; - - len += sizeof (*nh); - note_name = notes + len; - - len += nh->n_namesz; - len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len); - note_desc = notes + len; - - if (unlikely (filesz < len + nh->n_descsz)) - break; - - if (nh->n_type == NT_GNU_BUILD_ID - && nh->n_descsz > 0 - && nh->n_namesz == sizeof "GNU" - && !memcmp (note_name, "GNU", sizeof "GNU")) - { - build_id.vaddr = (note_desc + len += sizeof (*nh); + + size_t namesz = nh->n_namesz; + namesz = align == 8 ? NOTE_ALIGN8 (namesz) : NOTE_ALIGN4 (namesz); + if (namesz > filesz - len || len + namesz < namesz) + break; + + void *note_name = notes + len; + len += namesz; + + size_t descsz = nh->n_descsz; + descsz = align == 8 ? NOTE_ALIGN8 (descsz) : NOTE_ALIGN4 (descsz); + if (descsz > filesz - len || len + descsz < descsz) + break; + + void *note_desc = notes + len; + len += descsz; + + /* We don't handle very short or really large build-ids. We need at + at least 3 and allow for up to 64 (normally ids are 20 long). */ +#define MIN_BUILD_ID_BYTES 3 +#define MAX_BUILD_ID_BYTES 64 + if (nh->n_type == NT_GNU_BUILD_ID + && nh->n_descsz >= MIN_BUILD_ID_BYTES + && nh->n_descsz <= MAX_BUILD_ID_BYTES + && nh->n_namesz == sizeof "GNU" + && !memcmp (note_name, "GNU", sizeof "GNU")) + { + build_id.vaddr = (note_desc - (const void *) notes + note_vaddr); - build_id.len = nh->n_descsz; - build_id.memory = malloc (build_id.len); - if (likely (build_id.memory != NULL)) - memcpy (build_id.memory, note_desc, build_id.len); - break; - } - - len += nh->n_descsz; - len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len); - nh = (void *) notes + len; - } + build_id.len = nh->n_descsz; + build_id.memory = malloc (build_id.len); + if (likely (build_id.memory != NULL)) + memcpy (build_id.memory, note_desc, build_id.len); + break; + } + + nh = (void *) notes + len; + } if (notes != data) free (notes); @@ -641,10 +702,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* We must have seen the segment covering offset 0, or else the ELF header we read at START was not produced by these program headers. */ if (unlikely (!found_bias)) - { - free (build_id.memory); - goto out; - } + goto out; /* Now we know enough to report a module for sure: its bounds. */ module_start += bias; @@ -712,10 +770,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } } if (skip_this_module) - { - free (build_id.memory); - goto out; - } + goto out; } const char *file_note_name = handle_file_note (module_start, module_end, @@ -774,6 +829,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if (dyn_data_size != 0) dyn_filesz = dyn_data_size; + if ((dyn_filesz / dyn_entsize) == 0 + || dyn_filesz > (SIZE_MAX / dyn_entsize)) + goto out; void *dyns = malloc (dyn_filesz); Elf32_Dyn *d32 = dyns; Elf64_Dyn *d64 = dyns; @@ -786,7 +844,19 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlateto.d_buf = dyns; xlateto.d_size = dyn_filesz; + /* dyn_data may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ bool is32 = (ei_class == ELFCLASS32); + size_t dyn_align = (is32 + ? __alignof__ (Elf32_Dyn) + : __alignof__ (Elf64_Dyn)); + if (((uintptr_t) dyn_data & (dyn_align - 1)) != 0) + { + memcpy (dyns, dyn_data, dyn_filesz); + xlatefrom.d_buf = dyns; + } + if ((is32 && elf32_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL) || (!is32 && elf64_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL)) { @@ -877,6 +947,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* At this point we do not need BUILD_ID or NAME any more. They have been copied. */ free (build_id.memory); + build_id.memory = NULL; finish_portion (&read_state, &soname, &soname_size); if (unlikely (mod == NULL)) @@ -904,6 +975,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* The caller wants to read the whole file in right now, but hasn't done it for us. Fill in a local image of the virtual file. */ + if (file_trimmed_end > maxread) + file_trimmed_end = maxread; + void *contents = calloc (1, file_trimmed_end); if (unlikely (contents == NULL)) goto out; @@ -924,8 +998,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, GElf_Off offset = is32 ? p32[i].p_offset : p64[i].p_offset; GElf_Xword filesz = is32 ? p32[i].p_filesz : p64[i].p_filesz; + /* Don't try to read beyond the actual end of file. */ + if (offset >= file_trimmed_end) + continue; + void *into = contents + offset; - size_t read_size = filesz; + size_t read_size = MIN (filesz, file_trimmed_end - offset); (*memory_callback) (dwfl, addr_segndx (dwfl, segment, vaddr + bias, false), &into, &read_size, vaddr + bias, read_size, @@ -959,7 +1037,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, elf->flags |= ELF_F_MALLOCED; } - if (elf != NULL) + if (elf != NULL && mod->main.elf == NULL) { /* Install the file in the module. */ mod->main.elf = elf; @@ -972,6 +1050,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } out: + if (build_id.memory != NULL) + free (build_id.memory); free (phdrsp); if (buffer != NULL) (*memory_callback) (dwfl, -1, &buffer, &buffer_available, 0, 0, diff --git a/libdwfl/image-header.c b/libdwfl/image-header.c index 25fbfd99..f906068a 100644 --- a/libdwfl/image-header.c +++ b/libdwfl/image-header.c @@ -1,5 +1,6 @@ /* Linux kernel image support for libdwfl. Copyright (C) 2009-2011 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -80,17 +81,28 @@ __libdw_image_header (int fd, off_t *start_offset, header = header_buffer - H_START; } - if (*(uint16_t *) (header + H_MAGIC1) == LE16 (MAGIC1) - && *(uint32_t *) (header + H_MAGIC2) == LE32 (MAGIC2) - && LE16 (*(uint16_t *) (header + H_VERSION)) >= MIN_VERSION) + uint16_t magic1; + uint32_t magic2; + uint16_t version; + memcpy (&magic1, header + H_MAGIC1, sizeof (uint16_t)); + memcpy (&magic2, header + H_MAGIC2, sizeof (uint32_t)); + memcpy (&version, header + H_VERSION, sizeof (uint16_t)); + if (magic1 == LE16 (MAGIC1) && magic2 == LE32 (MAGIC2) + && LE16 (version) >= MIN_VERSION) { /* The magic numbers match and the version field is sufficient. Extract the payload bounds. */ - uint32_t offset = LE32 (*(uint32_t *) (header + H_PAYLOAD_OFFSET)); - uint32_t length = LE32 (*(uint32_t *) (header + H_PAYLOAD_LENGTH)); + uint32_t offset; + uint32_t length; + uint8_t sects; + memcpy (&offset, header + H_PAYLOAD_OFFSET, sizeof (uint32_t)); + memcpy (&length, header + H_PAYLOAD_LENGTH, sizeof (uint32_t)); + memcpy (§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/libdwflP.h b/libdwfl/libdwflP.h index 4344e356..7503a627 100644 --- a/libdwfl/libdwflP.h +++ b/libdwfl/libdwflP.h @@ -698,6 +698,7 @@ extern int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *memory_callback_arg, Dwfl_Module_Callback *read_eagerly, void *read_eagerly_arg, + size_t maxread, const void *note_file, size_t note_file_size, const struct r_debug_info *r_debug_info); diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 0d8d1c17..c0207cd3 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -1,5 +1,6 @@ /* Report modules by examining dynamic linker data structures. Copyright (C) 2008-2016 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -254,9 +255,10 @@ read_addrs (struct memory_closure *closure, Dwfl *dwfl = closure->dwfl; /* Read a new buffer if the old one doesn't cover these words. */ - if (buffer == NULL + if (*buffer == NULL || vaddr < *read_vaddr - || vaddr - (*read_vaddr) + nb > *buffer_available) + || nb > *buffer_available + || vaddr - (*read_vaddr) > *buffer_available - nb) { release_buffer (closure, buffer, buffer_available, 0); @@ -269,26 +271,25 @@ read_addrs (struct memory_closure *closure, return true; } - Elf32_Addr (*a32)[n] = vaddr - (*read_vaddr) + (*buffer); - Elf64_Addr (*a64)[n] = (void *) a32; + unsigned char *addr = vaddr - (*read_vaddr) + (*buffer); if (elfclass == ELFCLASS32) { if (elfdata == ELFDATA2MSB) for (size_t i = 0; i < n; ++i) - addrs[i] = BE32 (read_4ubyte_unaligned_noncvt (&(*a32)[i])); + addrs[i] = BE32 (read_4ubyte_unaligned_noncvt (addr + i * 4)); else for (size_t i = 0; i < n; ++i) - addrs[i] = LE32 (read_4ubyte_unaligned_noncvt (&(*a32)[i])); + addrs[i] = LE32 (read_4ubyte_unaligned_noncvt (addr + i * 4)); } else { if (elfdata == ELFDATA2MSB) for (size_t i = 0; i < n; ++i) - addrs[i] = BE64 (read_8ubyte_unaligned_noncvt (&(*a64)[i])); + addrs[i] = BE64 (read_8ubyte_unaligned_noncvt (addr + i * 8)); else for (size_t i = 0; i < n; ++i) - addrs[i] = LE64 (read_8ubyte_unaligned_noncvt (&(*a64)[i])); + addrs[i] = LE64 (read_8ubyte_unaligned_noncvt (addr + i * 8)); } return false; @@ -784,7 +785,9 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, GElf_Xword dyn_filesz = 0; GElf_Addr dyn_bias = (GElf_Addr) -1; - if (phdr != 0 && phnum != 0) + if (phdr != 0 && phnum != 0 + && ((elfclass == ELFCLASS32 && phent == sizeof (Elf32_Phdr)) + || (elfclass == ELFCLASS64 && phent == sizeof (Elf64_Phdr)))) { Dwfl_Module *phdr_mod; int phdr_segndx = INTUSE(dwfl_addrsegment) (dwfl, phdr, &phdr_mod); @@ -847,6 +850,11 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, /* Note this in the !in_ok path. That means memory_callback failed. But the callback might still have reset the d_size value (to zero). So explicitly set it here again. */ + if (unlikely (phnum > SIZE_MAX / phent)) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return false; + } in.d_size = phnum * phent; in.d_buf = malloc (in.d_size); if (unlikely (in.d_buf == NULL)) @@ -876,6 +884,18 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, return false; } size_t nbytes = phnum * phent; + /* We can only process as many bytes/phnum as there are + in in.d_size. The data might have been truncated. */ + if (nbytes > in.d_size) + { + nbytes = in.d_size; + phnum = nbytes / phent; + if (phnum == 0) + { + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } + } void *buf = malloc (nbytes); Elf32_Phdr (*p32)[phnum] = buf; Elf64_Phdr (*p64)[phnum] = buf; @@ -888,15 +908,34 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, { .d_type = ELF_T_PHDR, .d_version = EV_CURRENT, - .d_size = phnum * phent, + .d_size = nbytes, .d_buf = buf }; - in.d_size = out.d_size; + if (in.d_size > out.d_size) + { + in.d_size = out.d_size; + phnum = in.d_size / phent; + if (phnum == 0) + { + free (buf); + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } + } + bool is32 = (elfclass == ELFCLASS32); + size_t phdr_align = (is32 + ? __alignof__ (Elf32_Phdr) + : __alignof__ (Elf64_Phdr)); + if (!in_from_exec + && ((uintptr_t) in.d_buf & (phdr_align - 1)) != 0) + { + memcpy (out.d_buf, in.d_buf, in.d_size); + in.d_buf = out.d_buf; + } if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) { - bool is32 = (elfclass == ELFCLASS32); for (size_t i = 0; i < phnum; ++i) { GElf_Word type = (is32 @@ -981,9 +1020,23 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, if ((*memory_callback) (dwfl, dyn_segndx, &in.d_buf, &in.d_size, dyn_vaddr, dyn_filesz, memory_callback_arg)) { + size_t entsize = (elfclass == ELFCLASS32 + ? sizeof (Elf32_Dyn) : sizeof (Elf64_Dyn)); + if (unlikely (dyn_filesz > SIZE_MAX / entsize)) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return false; + } + /* We can only process as many bytes as there are in + in.d_size. The data might have been truncated. */ + if (dyn_filesz > in.d_size) + dyn_filesz = in.d_size; + if (dyn_filesz / entsize == 0) + { + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } void *buf = malloc (dyn_filesz); - Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf; - Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf; if (unlikely (buf == NULL)) { __libdwfl_seterrno (DWFL_E_NOMEM); @@ -996,7 +1049,16 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, .d_size = dyn_filesz, .d_buf = buf }; - in.d_size = out.d_size; + if (in.d_size > out.d_size) + in.d_size = out.d_size; + size_t dyn_align = (elfclass == ELFCLASS32 + ? __alignof__ (Elf32_Dyn) + : __alignof__ (Elf64_Dyn)); + if (((uintptr_t) in.d_buf & (dyn_align - 1)) != 0) + { + memcpy (out.d_buf, in.d_buf, in.d_size); + in.d_buf = out.d_buf; + } if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) @@ -1004,6 +1066,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, /* We are looking for DT_DEBUG. */ if (elfclass == ELFCLASS32) { + Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf; size_t n = dyn_filesz / sizeof (Elf32_Dyn); for (size_t i = 0; i < n; ++i) if ((*d32)[i].d_tag == DT_DEBUG) @@ -1014,6 +1077,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, } else { + Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf; size_t n = dyn_filesz / sizeof (Elf64_Dyn); for (size_t i = 0; i < n; ++i) if ((*d64)[i].d_tag == DT_DEBUG) diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index c0f8dfa4..58c0c417 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -1008,7 +1008,7 @@ dwfl_linux_kernel_report_modules (Dwfl *dwfl) int result = 0; Dwarf_Addr modaddr; unsigned long int modsz; - char modname[128]; + char modname[128+1]; char *line = NULL; size_t linesz = 0; /* We can't just use fscanf here because it's not easy to distinguish \n diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c index cd534825..09cba07b 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -135,7 +135,7 @@ read_cached_memory (struct __libdwfl_pid_arg *pid_arg, if (mem_cache == NULL) { size_t mem_cache_size = sizeof (struct __libdwfl_remote_mem_cache); - mem_cache = (struct __libdwfl_remote_mem_cache *) malloc (mem_cache_size); + mem_cache = malloc (mem_cache_size); if (mem_cache == NULL) return false; diff --git a/libdwfl/offline.c b/libdwfl/offline.c index d8697cf2..58ba4c36 100644 --- a/libdwfl/offline.c +++ b/libdwfl/offline.c @@ -1,5 +1,6 @@ /* Recover relocatibility for addresses computed from debug information. Copyright (C) 2005-2009, 2012 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -233,8 +234,11 @@ process_archive_member (Dwfl *dwfl, const char *name, const char *file_name, free (member_name); free (module_name); - if (*mod == NULL) /* process_file called elf_end. */ - return ELF_C_NULL; + if (*mod == NULL) + { + elf_end (member); + return ELF_C_NULL; + } /* Advance the archive-reading offset for the next iteration. */ return elf_next (member); diff --git a/libebl/ChangeLog b/libebl/ChangeLog index fff66b3e..2e31e75d 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,12 @@ +2021-12-21 Luca Boccassi <bluca@debian.org> + + * eblobjnote.c (ebl_object_note): Handle NT_FDO_PACKAGING_METADATA. + * eblobjnotetypename.c (ebl_object_note_type_name): Likewise. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * eblopenbackend.c (openbackend): Remove cast of calloc return value. + 2021-04-19 Martin Liska <mliska@suse.cz> * eblobjnotetypename.c (ebl_object_note_type_name): Use startswith. diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c index 36efe275..5a7c5c62 100644 --- a/libebl/eblobjnote.c +++ b/libebl/eblobjnote.c @@ -288,6 +288,10 @@ ebl_object_note (Ebl *ebl, uint32_t namesz, const char *name, uint32_t type, if (descsz == 0 && type == NT_VERSION) return; + if (strcmp ("FDO", name) == 0 && type == NT_FDO_PACKAGING_METADATA + && descsz > 0 && desc[descsz - 1] == '\0') + printf(" Packaging Metadata: %.*s\n", (int) descsz, desc); + /* Everything else should have the "GNU" owner name. */ if (strcmp ("GNU", name) != 0) return; diff --git a/libebl/eblobjnotetypename.c b/libebl/eblobjnotetypename.c index 4662906d..473a1f2f 100644 --- a/libebl/eblobjnotetypename.c +++ b/libebl/eblobjnotetypename.c @@ -101,6 +101,9 @@ ebl_object_note_type_name (Ebl *ebl, const char *name, uint32_t type, return buf; } + if (strcmp (name, "FDO") == 0 && type == NT_FDO_PACKAGING_METADATA) + return "FDO_PACKAGING_METADATA"; + if (strcmp (name, "GNU") != 0) { /* NT_VERSION is special, all data is in the name. */ diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index 2ff86416..831b865d 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -267,7 +267,7 @@ openbackend (Elf *elf, const char *emulation, GElf_Half machine) /* First allocate the data structure for the result. We do this here since this assures that the structure is always large enough. */ - result = (Ebl *) calloc (1, sizeof (Ebl)); + result = calloc (1, sizeof (Ebl)); if (result == NULL) { // XXX uncomment diff --git a/libelf/ChangeLog b/libelf/ChangeLog index a1fd414c..00d4ac0f 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,89 @@ +2022-04-24 Mark Wielaard <mark@klomp.org> + + * elf_update.c (write_file): Check HAVE_MREMAP. + +2022-04-01 Mark Wielaard <mark@klomp.org> + + * libelfP.h (struct Elf_Data_Chunk): Add an int64_t offset field. + * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Check whether the + requested chunk, offset, size and type, was already handed out. + Set new Elf_Data_Chunk offset field. + +2022-03-29 Mark Wielaard <mark@klomp.org> + + * gelf_xlate.c (START): Define and use sz variable. + (END): Use sz variable to decide whether to do a memmove. + +2022-03-24 Mark Wielaard <mark@klomp.org> + + * elf.h: Update from glibc. + +2022-03-22 Mark Wielaard <mark@klomp.org> + + * elf_getdata.c (__libelf_type_aligns): ELF_T_GNUHASH has different + alignment for ELFCLASS32 and ELFCLASS64. + +2022-03-20 Mark Wielaard <mark@klomp.org> + + * version_xlate.h (elf_cvt_Verdef): Make sure aux_offset and + def_offset don't overflow. + (elf_cvt_Verneed): Make sure aux_offset and need_offset don't + overflow. + +2022-03-18 Mark Wielaard <mark@klomp.org> + + * version_xlate.h (elf_cvt_Verdef): Check alignment of def_offset + and aux_offset. + (elf_cvt_Verneed): Check alignment of need_offset and aux_offset. + +2022-03-17 Mark Wielaard <mark@klomp.org> + + * elf_begin.c (read_long_names): Check ar_size starts with a digit. + +2022-03-17 Mark Wielaard <mark@klomp.org> + + * elf_begin.c (get_shnum): Take offset into account for Shdr + alignment check. + +2021-12-19 Mark Wielaard <mark@klomp.org> + + * elf_begin.c (file_read_elf): Cast ehdr to uintptr_t before e_shoff + alignment check. Only set shdr state when scncnt is larger than zero. + +2021-12-16 Mark Wielaard <mark@klomp.org> + + * libelfP.h (NOTE_ALIGN4): And with negative unsigned long. + (NOTE_ALIGN8): Likewise. + +2021-12-15 Mark Wielaard <mark@klomp.org> + + * elf_begin.c (get_shnum): Use offsetof to get field of unaligned + struct. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * common.h (allocate_elf): Remove cast of calloc return value. + * elf_newdata.c (elf_newdata): Likewise. + * elf_getscn.c (elf_getscn): Remove casts of calloc return values. + * elf_newscn.c (elf_newscn): Likewise. + * elf32_updatefile.c (__elfw2): Remove casts of malloc return values. + * elf_getdata.c (convert_data): Likewise. + (__libelf_set_rawdata_wrlock): Remove cast of malloc return value. + * elf_begin.c (read_long_names): Remove cast of malloc return value. + * elf_readall.c (__libelf_readall): Likewise. + * elf_getarsym.c (elf_getarsym): Remove casts of malloc and realloc + return values. + +2021-07-19 Mark Wielaard <mark@klomp.org> + + * elf_strptr.c (validate_str): Check last char is zero first before + calling memrchr on the whole block. + +2021-06-09 Andrei Homescu <ah@immunant.com> + + * elf_getdata.c: Fix d_align for sections where alignment is larger + than offset. + 2020-12-12 Mark Wielaard <mark@klomp.org> * elf.h: Update from glibc. diff --git a/libelf/common.h b/libelf/common.h index e41c717d..3718b3fd 100644 --- a/libelf/common.h +++ b/libelf/common.h @@ -71,7 +71,7 @@ __attribute__ ((unused)) allocate_elf (int fildes, void *map_address, int64_t offset, size_t maxsize, Elf_Cmd cmd, Elf *parent, Elf_Kind kind, size_t extra) { - Elf *result = (Elf *) calloc (1, sizeof (Elf) + extra); + Elf *result = calloc (1, sizeof (Elf) + extra); if (result == NULL) __libelf_seterrno (ELF_E_NOMEM); else diff --git a/libelf/elf.h b/libelf/elf.h index 8e3e618f..0735f6b5 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -1,5 +1,5 @@ /* This file defines standard ELF types, structures, and macros. - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -336,7 +336,8 @@ typedef struct #define EM_BA2 202 /* Beyond BA2 */ #define EM_XCORE 203 /* XMOS xCORE */ #define EM_MCHP_PIC 204 /* Microchip 8-bit PIC(r) */ - /* reserved 205-209 */ +#define EM_INTELGT 205 /* Intel Graphics Technology */ + /* reserved 206-209 */ #define EM_KM32 210 /* KM211 KM32 */ #define EM_KMX32 211 /* KM211 KMX32 */ #define EM_EMX16 212 /* KM211 KMX16 */ @@ -813,6 +814,10 @@ typedef struct address keys. */ #define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication generic key. */ +#define NT_ARM_TAGGED_ADDR_CTRL 0x409 /* AArch64 tagged address + control. */ +#define NT_ARM_PAC_ENABLED_KEYS 0x40a /* AArch64 pointer authentication + enabled keys. */ #define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note. */ #define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers. */ #define NT_MIPS_FP_MODE 0x801 /* MIPS floating-point mode. */ @@ -1226,8 +1231,7 @@ typedef struct #define AT_L3_CACHESIZE 46 #define AT_L3_CACHEGEOMETRY 47 -#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery - (AArch64). */ +#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery */ /* Note section contents. Each entry in the note section begins with a header of a fixed form. */ @@ -1254,6 +1258,8 @@ typedef struct /* Note entries for GNU systems have this name. */ #define ELF_NOTE_GNU "GNU" +/* Note entries for freedesktop.org have this name. */ +#define ELF_NOTE_FDO "FDO" /* Defined types of notes for Solaris. */ @@ -1297,6 +1303,10 @@ typedef struct /* Program property. */ #define NT_GNU_PROPERTY_TYPE_0 5 +/* Packaging metadata as defined on + https://systemd.io/COREDUMP_PACKAGE_METADATA/ */ +#define NT_FDO_PACKAGING_METADATA 0xcafe1a7e + /* Note section name of program property. */ #define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property" @@ -1307,6 +1317,23 @@ typedef struct /* No copy relocation on protected data symbol. */ #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 +/* A 4-byte unsigned integer property: A bit is set if it is set in all + relocatable inputs. */ +#define GNU_PROPERTY_UINT32_AND_LO 0xb0000000 +#define GNU_PROPERTY_UINT32_AND_HI 0xb0007fff + +/* A 4-byte unsigned integer property: A bit is set if it is set in any + relocatable inputs. */ +#define GNU_PROPERTY_UINT32_OR_LO 0xb0008000 +#define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff + +/* The needed properties by the object file. */ +#define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO + +/* Set if the object file requires canonical function pointers and + cannot be used with copy relocation. */ +#define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) + /* Processor-specific semantics, lo */ #define GNU_PROPERTY_LOPROC 0xc0000000 /* Processor-specific semantics, hi */ @@ -1324,31 +1351,26 @@ typedef struct /* The x86 instruction sets indicated by the corresponding bits are used in program. Their support in the hardware is optional. */ -#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 +#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002 /* The x86 instruction sets indicated by the corresponding bits are used in program and they must be supported by the hardware. */ -#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 +#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002 /* X86 processor-specific features used in program. */ #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 -#define GNU_PROPERTY_X86_ISA_1_486 (1U << 0) -#define GNU_PROPERTY_X86_ISA_1_586 (1U << 1) -#define GNU_PROPERTY_X86_ISA_1_686 (1U << 2) -#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 3) -#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 4) -#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 5) -#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 6) -#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 7) -#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 8) -#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 9) -#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 10) -#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 11) -#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 12) -#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 13) -#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 14) -#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 15) -#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 16) -#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 17) +/* GNU_PROPERTY_X86_ISA_1_BASELINE: CMOV, CX8 (cmpxchg8b), FPU (fld), + MMX, OSFXSR (fxsave), SCE (syscall), SSE and SSE2. */ +#define GNU_PROPERTY_X86_ISA_1_BASELINE (1U << 0) +/* GNU_PROPERTY_X86_ISA_1_V2: GNU_PROPERTY_X86_ISA_1_BASELINE, + CMPXCHG16B (cmpxchg16b), LAHF-SAHF (lahf), POPCNT (popcnt), SSE3, + SSSE3, SSE4.1 and SSE4.2. */ +#define GNU_PROPERTY_X86_ISA_1_V2 (1U << 1) +/* GNU_PROPERTY_X86_ISA_1_V3: GNU_PROPERTY_X86_ISA_1_V2, AVX, AVX2, BMI1, + BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE. */ +#define GNU_PROPERTY_X86_ISA_1_V3 (1U << 2) +/* GNU_PROPERTY_X86_ISA_1_V4: GNU_PROPERTY_X86_ISA_1_V3, AVX512F, + AVX512BW, AVX512CD, AVX512DQ and AVX512VL. */ +#define GNU_PROPERTY_X86_ISA_1_V4 (1U << 3) /* This indicates that all executable sections are compatible with IBT. */ @@ -4102,4 +4124,41 @@ enum #define R_ARC_TLS_LE_S9 0x4a #define R_ARC_TLS_LE_32 0x4b +/* OpenRISC 1000 specific relocs. */ +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + #endif /* elf.h */ diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c index f67e6261..1ff58900 100644 --- a/libelf/elf32_updatefile.c +++ b/libelf/elf32_updatefile.c @@ -218,7 +218,7 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) return 1; Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns; - Elf_Scn **scns = (Elf_Scn **) malloc (shnum * sizeof (Elf_Scn *)); + Elf_Scn **scns = malloc (shnum * sizeof (Elf_Scn *)); if (unlikely (scns == NULL)) { __libelf_seterrno (ELF_E_NOMEM); @@ -688,7 +688,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) /* Get all sections into the array and sort them. */ Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns; - Elf_Scn **scns = (Elf_Scn **) malloc (shnum * sizeof (Elf_Scn *)); + Elf_Scn **scns = malloc (shnum * sizeof (Elf_Scn *)); if (unlikely (scns == NULL)) { free (shdr_data_mem); diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 32648c15..17d9b1f3 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -1,5 +1,6 @@ /* Create descriptor for processing file. Copyright (C) 1998-2010, 2012, 2014, 2015, 2016 Red Hat, Inc. + Copyright (C) 2021, 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. Written by Ulrich Drepper <drepper@redhat.com>, 1998. @@ -157,7 +158,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((size_t) ((char *) map_address + ehdr.e32->e_shoff)) + || (((size_t) ((char *) (map_address + ehdr.e32->e_shoff + + offset))) & (__alignof__ (Elf32_Shdr) - 1)) == 0)) /* We can directly access the memory. */ result = ((Elf32_Shdr *) ((char *) map_address + ehdr.e32->e_shoff @@ -170,9 +172,10 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, if (likely (map_address != NULL)) /* gcc will optimize the memcpy to a simple memory access while taking care of alignment issues. */ - memcpy (&size, &((Elf32_Shdr *) ((char *) map_address - + ehdr.e32->e_shoff - + offset))->sh_size, + memcpy (&size, ((char *) map_address + + ehdr.e32->e_shoff + + offset + + offsetof (Elf32_Shdr, sh_size)), sizeof (Elf32_Word)); else if (unlikely ((r = pread_retry (fildes, &size, @@ -216,7 +219,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, Elf64_Xword size; if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((size_t) ((char *) map_address + ehdr.e64->e_shoff)) + || (((size_t) ((char *) (map_address + ehdr.e64->e_shoff + + offset))) & (__alignof__ (Elf64_Shdr) - 1)) == 0)) /* We can directly access the memory. */ size = ((Elf64_Shdr *) ((char *) map_address + ehdr.e64->e_shoff @@ -227,9 +231,10 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, if (likely (map_address != NULL)) /* gcc will optimize the memcpy to a simple memory access while taking care of alignment issues. */ - memcpy (&size, &((Elf64_Shdr *) ((char *) map_address - + ehdr.e64->e_shoff - + offset))->sh_size, + memcpy (&size, ((char *) map_address + + ehdr.e64->e_shoff + + offset + + offsetof (Elf64_Shdr, sh_size)), sizeof (Elf64_Xword)); else if (unlikely ((r = pread_retry (fildes, &size, @@ -380,7 +385,7 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA && cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */ && (ALLOW_UNALIGNED - || (((uintptr_t) ((char *) ehdr + e_shoff) + || ((((uintptr_t) ehdr + e_shoff) & (__alignof__ (Elf32_Shdr) - 1)) == 0))) { if (unlikely (scncnt > 0 && e_shoff >= maxsize) @@ -392,8 +397,10 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, __libelf_seterrno (ELF_E_INVALID_ELF); return NULL; } - elf->state.elf32.shdr - = (Elf32_Shdr *) ((char *) ehdr + e_shoff); + + if (scncnt > 0) + elf->state.elf32.shdr + = (Elf32_Shdr *) ((char *) ehdr + e_shoff); for (size_t cnt = 0; cnt < scncnt; ++cnt) { @@ -482,15 +489,17 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA && cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */ && (ALLOW_UNALIGNED - || (((uintptr_t) ((char *) ehdr + e_shoff) + || ((((uintptr_t) ehdr + e_shoff) & (__alignof__ (Elf64_Shdr) - 1)) == 0))) { if (unlikely (scncnt > 0 && e_shoff >= maxsize) || unlikely (maxsize - e_shoff < scncnt * sizeof (Elf64_Shdr))) goto free_and_out; - elf->state.elf64.shdr - = (Elf64_Shdr *) ((char *) ehdr + e_shoff); + + if (scncnt > 0) + elf->state.elf64.shdr + = (Elf64_Shdr *) ((char *) ehdr + e_shoff); for (size_t cnt = 0; cnt < scncnt; ++cnt) { @@ -756,6 +765,11 @@ read_long_names (Elf *elf) *((char *) mempcpy (buf, hdr->ar_size, sizeof (hdr->ar_size))) = '\0'; string = buf; } + + /* atol expects to see at least one digit. + It also cannot be negative (-). */ + if (!isdigit(string[0])) + return NULL; len = atol (string); if (memcmp (hdr->ar_name, "// ", 16) == 0) @@ -774,7 +788,7 @@ read_long_names (Elf *elf) /* Due to the stupid format of the long name table entry (which are not NUL terminted) we have to provide an appropriate representation anyhow. Therefore we always make a copy which has the appropriate form. */ - newp = (char *) malloc (len); + newp = malloc (len); if (newp != NULL) { char *runp; diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c index 1f031fca..05ebf6a9 100644 --- a/libelf/elf_getarsym.c +++ b/libelf/elf_getarsym.c @@ -198,7 +198,7 @@ elf_getarsym (Elf *elf, size_t *ptr) /* Now we can allocate the arrays needed to store the index. */ size_t ar_sym_len = (n + 1) * sizeof (Elf_Arsym); - elf->state.ar.ar_sym = (Elf_Arsym *) malloc (ar_sym_len); + elf->state.ar.ar_sym = malloc (ar_sym_len); if (elf->state.ar.ar_sym != NULL) { void *file_data; /* unit32_t[n] or uint64_t[n] */ @@ -216,8 +216,7 @@ elf_getarsym (Elf *elf, size_t *ptr) file_data = temp_data; ar_sym_len += index_size - n * w; - Elf_Arsym *newp = (Elf_Arsym *) realloc (elf->state.ar.ar_sym, - ar_sym_len); + Elf_Arsym *newp = realloc (elf->state.ar.ar_sym, ar_sym_len); if (newp == NULL) { free (elf->state.ar.ar_sym); diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c index 6ed44504..a704aae3 100644 --- a/libelf/elf_getdata.c +++ b/libelf/elf_getdata.c @@ -1,5 +1,6 @@ /* Return the next data element from the section after possibly converting it. Copyright (C) 1998-2005, 2006, 2007, 2015, 2016 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. Written by Ulrich Drepper <drepper@redhat.com>, 1998. @@ -77,7 +78,6 @@ static const Elf_Type shtype_map[TYPEIDX (SHT_HISUNW) + 1] = const uint_fast8_t __libelf_type_aligns[ELFCLASSNUM - 1][ELF_T_NUM] = { # define TYPE_ALIGNS(Bits) \ - { \ [ELF_T_ADDR] = __alignof__ (ElfW2(Bits,Addr)), \ [ELF_T_EHDR] = __alignof__ (ElfW2(Bits,Ehdr)), \ [ELF_T_HALF] = __alignof__ (ElfW2(Bits,Half)), \ @@ -100,13 +100,17 @@ const uint_fast8_t __libelf_type_aligns[ELFCLASSNUM - 1][ELF_T_NUM] = [ELF_T_MOVE] = __alignof__ (ElfW2(Bits,Move)), \ [ELF_T_LIB] = __alignof__ (ElfW2(Bits,Lib)), \ [ELF_T_NHDR] = __alignof__ (ElfW2(Bits,Nhdr)), \ - [ELF_T_GNUHASH] = __alignof__ (Elf32_Word), \ [ELF_T_AUXV] = __alignof__ (ElfW2(Bits,auxv_t)), \ [ELF_T_CHDR] = __alignof__ (ElfW2(Bits,Chdr)), \ - [ELF_T_NHDR8] = 8 /* Special case for GNU Property note. */ \ - } - [ELFCLASS32 - 1] = TYPE_ALIGNS (32), - [ELFCLASS64 - 1] = TYPE_ALIGNS (64), + [ELF_T_NHDR8] = 8 /* Special case for GNU Property note. */ + [ELFCLASS32 - 1] = { + TYPE_ALIGNS (32), + [ELF_T_GNUHASH] = __alignof__ (Elf32_Word), + }, + [ELFCLASS64 - 1] = { + TYPE_ALIGNS (64), + [ELF_T_GNUHASH] = __alignof__ (Elf64_Xword), + }, # undef TYPE_ALIGNS }; @@ -146,7 +150,7 @@ convert_data (Elf_Scn *scn, int eclass, scn->data_base = scn->rawdata_base; else { - scn->data_base = (char *) malloc (size); + scn->data_base = malloc (size); if (scn->data_base == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -161,7 +165,7 @@ convert_data (Elf_Scn *scn, int eclass, { xfct_t fp; - scn->data_base = (char *) malloc (size); + scn->data_base = malloc (size); if (scn->data_base == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -175,7 +179,7 @@ convert_data (Elf_Scn *scn, int eclass, rawdata_source = scn->rawdata_base; else { - rawdata_source = (char *) malloc (size); + rawdata_source = malloc (size); if (rawdata_source == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -328,8 +332,7 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn) /* We have to read the data from the file. Allocate the needed memory. */ - scn->rawdata_base = scn->rawdata.d.d_buf - = (char *) malloc (size); + scn->rawdata_base = scn->rawdata.d.d_buf = malloc (size); if (scn->rawdata.d.d_buf == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -384,7 +387,18 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn) which should be uncommon. */ align = align ?: 1; if (type != SHT_NOBITS && align > offset) - align = offset; + { + /* Align the offset to the next power of two. Uses algorithm from + https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 */ + align = offset - 1; + align |= align >> 1; + align |= align >> 2; + align |= align >> 4; + align |= align >> 8; + align |= align >> 16; + align |= align >> 32; + align++; + } scn->rawdata.d.d_align = align; if (elf->class == ELFCLASS32 || (offsetof (struct Elf, state.elf32.ehdr) diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c index 1072f7de..2f55cbb4 100644 --- a/libelf/elf_getdata_rawchunk.c +++ b/libelf/elf_getdata_rawchunk.c @@ -1,5 +1,6 @@ /* Return converted data from raw chunk of ELF file. Copyright (C) 2007, 2014, 2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -75,6 +76,20 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size, Elf_Type type) rwlock_rdlock (elf->lock); + /* Maybe we already got this chunk? */ + Elf_Data_Chunk *rawchunks = elf->state.elf.rawchunks; + while (rawchunks != NULL) + { + if ((rawchunks->offset == offset || size == 0) + && rawchunks->data.d.d_size == size + && rawchunks->data.d.d_type == type) + { + result = &rawchunks->data.d; + goto out; + } + rawchunks = rawchunks->next; + } + size_t align = __libelf_type_align (elf->class, type); if (elf->map_address != NULL) { @@ -171,6 +186,7 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size, Elf_Type type) chunk->data.d.d_type = type; chunk->data.d.d_align = align; chunk->data.d.d_version = EV_CURRENT; + chunk->offset = offset; rwlock_unlock (elf->lock); rwlock_wrlock (elf->lock); diff --git a/libelf/elf_getscn.c b/libelf/elf_getscn.c index e1fbaaaa..be9c76f0 100644 --- a/libelf/elf_getscn.c +++ b/libelf/elf_getscn.c @@ -68,7 +68,7 @@ elf_getscn (Elf *elf, size_t idx) Elf_Scn *scn0 = &runp->data[0]; if (elf->class == ELFCLASS32) { - scn0->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr)); + scn0->shdr.e32 = calloc (1, sizeof (Elf32_Shdr)); if (scn0->shdr.e32 == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -77,7 +77,7 @@ elf_getscn (Elf *elf, size_t idx) } else { - scn0->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr)); + scn0->shdr.e64 = calloc (1, sizeof (Elf64_Shdr)); if (scn0->shdr.e64 == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_newdata.c b/libelf/elf_newdata.c index 896f22cd..0063d599 100644 --- a/libelf/elf_newdata.c +++ b/libelf/elf_newdata.c @@ -106,7 +106,7 @@ elf_newdata (Elf_Scn *scn) } /* Create a new, empty data descriptor. */ - result = (Elf_Data_List *) calloc (1, sizeof (Elf_Data_List)); + result = calloc (1, sizeof (Elf_Data_List)); if (result == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c index d15a642e..d6bdf153 100644 --- a/libelf/elf_newscn.c +++ b/libelf/elf_newscn.c @@ -94,9 +94,9 @@ elf_newscn (Elf *elf) 1 #endif ) - newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList) - + ((elf->state.elf.scnincr *= 2) - * sizeof (Elf_Scn)), 1); + newp = calloc (sizeof (Elf_ScnList) + + ((elf->state.elf.scnincr *= 2) + * sizeof (Elf_Scn)), 1); if (newp == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -122,7 +122,7 @@ elf_newscn (Elf *elf) /* Create a section header for this section. */ if (elf->class == ELFCLASS32) { - result->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr)); + result->shdr.e32 = calloc (1, sizeof (Elf32_Shdr)); if (result->shdr.e32 == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -131,7 +131,7 @@ elf_newscn (Elf *elf) } else { - result->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr)); + result->shdr.e64 = calloc (1, sizeof (Elf64_Shdr)); if (result->shdr.e64 == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_readall.c b/libelf/elf_readall.c index 384d2512..0a3a233d 100644 --- a/libelf/elf_readall.c +++ b/libelf/elf_readall.c @@ -107,7 +107,7 @@ __libelf_readall (Elf *elf) } /* Allocate all the memory we need. */ - mem = (char *) malloc (elf->maximum_size); + mem = malloc (elf->maximum_size); if (mem != NULL) { /* Read the file content. */ diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c index 76f2caf1..79a24d25 100644 --- a/libelf/elf_strptr.c +++ b/libelf/elf_strptr.c @@ -56,7 +56,9 @@ get_zdata (Elf_Scn *strscn) static bool validate_str (const char *str, size_t from, size_t to) { #if HAVE_DECL_MEMRCHR - return memrchr (&str[from], '\0', to - from) != NULL; + // Check end first, which is likely a zero terminator, to prevent function call + return ((to > 0 && str[to - 1] == '\0') + || (to - from > 0 && memrchr (&str[from], '\0', to - from - 1) != NULL)); #else do { if (to <= from) diff --git a/libelf/elf_update.c b/libelf/elf_update.c index 9b8867ce..97ca9ca9 100644 --- a/libelf/elf_update.c +++ b/libelf/elf_update.c @@ -106,8 +106,10 @@ write_file (Elf *elf, int64_t size, int change_bo, size_t shnum) if (elf->cmd == ELF_C_RDWR_MMAP && (size_t) size > elf->maximum_size) { +#ifdef HAVE_MREMAP if (mremap (elf->map_address, elf->maximum_size, size, 0) == MAP_FAILED) +#endif { __libelf_seterrno (ELF_E_WRITE_ERROR); return -1; diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c index b9e7fd65..6f8c57b7 100644 --- a/libelf/gelf_xlate.c +++ b/libelf/gelf_xlate.c @@ -1,5 +1,6 @@ /* Transformation functions for ELF data types. Copyright (C) 1998,1999,2000,2002,2004,2005,2006,2007,2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. Written by Ulrich Drepper <drepper@redhat.com>, 1998. @@ -138,9 +139,14 @@ union unaligned int encode __attribute__ ((unused))) \ { ElfW2(Bits, Name) *tdest = (ElfW2(Bits, Name) *) dest; \ ElfW2(Bits, Name) *tsrc = (ElfW2(Bits, Name) *) src; \ + size_t sz = sizeof (ElfW2(Bits, Name)); \ size_t n; \ - for (n = len / sizeof (ElfW2(Bits, Name)); n > 0; ++tdest, ++tsrc, --n) { -#define END(Bits, Name) } } + for (n = len / sz; n > 0; ++tdest, ++tsrc, --n) { +#define END(Bits, Name) \ + } \ + if (len % sz > 0) /* Cannot convert partial structures, just copy. */ \ + memmove (dest, src, len % sz); \ + } #define TYPE_EXTRA(Code) #define TYPE_XLATE(Code) Code #define TYPE_NAME(Type, Name) TYPE_NAME2 (Type, Name) diff --git a/libelf/libelfP.h b/libelf/libelfP.h index fc1aebec..56331f45 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -266,6 +266,7 @@ typedef struct Elf_Data_Chunk Elf_Scn dummy_scn; struct Elf_Data_Chunk *next; }; + int64_t offset; /* The original raw offset in the Elf image. */ } Elf_Data_Chunk; @@ -603,10 +604,10 @@ extern void __libelf_reset_rawdata (Elf_Scn *scn, void *buf, size_t size, /* Align offset to 4 bytes as needed for note name and descriptor data. This is almost always used, except for GNU Property notes, which use 8 byte padding... */ -#define NOTE_ALIGN4(n) (((n) + 3) & -4U) +#define NOTE_ALIGN4(n) (((n) + 3) & -4UL) /* Special note padding rule for GNU Property notes. */ -#define NOTE_ALIGN8(n) (((n) + 7) & -8U) +#define NOTE_ALIGN8(n) (((n) + 7) & -8UL) /* Convenience macro. */ #define INVALID_NDX(ndx, type, data) \ diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h index 9fe01c64..97f3b730 100644 --- a/libelf/version_xlate.h +++ b/libelf/version_xlate.h @@ -1,5 +1,6 @@ /* Conversion functions for versioning information. Copyright (C) 1998, 1999, 2000, 2002, 2003, 2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. Written by Ulrich Drepper <drepper@redhat.com>, 1998. @@ -66,7 +67,9 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) GElf_Verdaux *asrc; /* Test for correct offset. */ - if (def_offset > len || len - def_offset < sizeof (GElf_Verdef)) + if (def_offset > len + || len - def_offset < sizeof (GElf_Verdef) + || (def_offset & (__alignof__ (GElf_Verdef) - 1)) != 0) return; /* Work the tree from the first record. */ @@ -84,10 +87,16 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) ddest->vd_aux = bswap_32 (dsrc->vd_aux); ddest->vd_next = bswap_32 (dsrc->vd_next); + if (ddest->vd_aux > len - def_offset) + return; aux_offset = def_offset + ddest->vd_aux; } else - aux_offset = def_offset + dsrc->vd_aux; + { + if (dsrc->vd_aux > len - def_offset) + return; + aux_offset = def_offset + dsrc->vd_aux; + } /* Handle all the auxiliary records belonging to this definition. */ do @@ -95,26 +104,38 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) GElf_Verdaux *adest; /* Test for correct offset. */ - if (aux_offset > len || len - aux_offset < sizeof (GElf_Verdaux)) + if (aux_offset > len + || len - aux_offset < sizeof (GElf_Verdaux) + || (aux_offset & (__alignof__ (GElf_Verdaux) - 1)) != 0) return; adest = (GElf_Verdaux *) ((char *) dest + aux_offset); asrc = (GElf_Verdaux *) ((char *) src + aux_offset); if (encode) - aux_offset += asrc->vda_next; + { + if (asrc->vda_next > len - aux_offset) + return; + aux_offset += asrc->vda_next; + } adest->vda_name = bswap_32 (asrc->vda_name); adest->vda_next = bswap_32 (asrc->vda_next); if (! encode) - aux_offset += adest->vda_next; + { + if (adest->vda_next > len - aux_offset) + return; + aux_offset += adest->vda_next; + } } while (asrc->vda_next != 0); /* Encode now if necessary. */ if (encode) { + if (dsrc->vd_next > len - def_offset) + return; def_offset += dsrc->vd_next; ddest->vd_version = bswap_16 (dsrc->vd_version); @@ -126,7 +147,11 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) ddest->vd_next = bswap_32 (dsrc->vd_next); } else - def_offset += ddest->vd_next; + { + if (ddest->vd_next > len - def_offset) + return; + def_offset += ddest->vd_next; + } } while (dsrc->vd_next != 0); } @@ -165,7 +190,9 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) GElf_Vernaux *asrc; /* Test for correct offset. */ - if (need_offset > len || len - need_offset < sizeof (GElf_Verneed)) + if (need_offset > len + || len - need_offset < sizeof (GElf_Verneed) + || (need_offset & (__alignof__ (GElf_Verneed) - 1)) != 0) return; /* Work the tree from the first record. */ @@ -181,10 +208,16 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) ndest->vn_aux = bswap_32 (nsrc->vn_aux); ndest->vn_next = bswap_32 (nsrc->vn_next); + if (ndest->vn_aux > len - need_offset) + return; aux_offset = need_offset + ndest->vn_aux; } else - aux_offset = need_offset + nsrc->vn_aux; + { + if (nsrc->vn_aux > len - need_offset) + return; + aux_offset = need_offset + nsrc->vn_aux; + } /* Handle all the auxiliary records belonging to this requirement. */ do @@ -192,14 +225,20 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) GElf_Vernaux *adest; /* Test for correct offset. */ - if (aux_offset > len || len - aux_offset < sizeof (GElf_Vernaux)) + if (aux_offset > len + || len - aux_offset < sizeof (GElf_Vernaux) + || (aux_offset & (__alignof__ (GElf_Vernaux) - 1)) != 0) return; adest = (GElf_Vernaux *) ((char *) dest + aux_offset); asrc = (GElf_Vernaux *) ((char *) src + aux_offset); if (encode) - aux_offset += asrc->vna_next; + { + if (asrc->vna_next > len - aux_offset) + return; + aux_offset += asrc->vna_next; + } adest->vna_hash = bswap_32 (asrc->vna_hash); adest->vna_flags = bswap_16 (asrc->vna_flags); @@ -208,13 +247,19 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) adest->vna_next = bswap_32 (asrc->vna_next); if (! encode) - aux_offset += adest->vna_next; + { + if (adest->vna_next > len - aux_offset) + return; + aux_offset += adest->vna_next; + } } while (asrc->vna_next != 0); /* Encode now if necessary. */ if (encode) { + if (nsrc->vn_next > len - need_offset) + return; need_offset += nsrc->vn_next; ndest->vn_version = bswap_16 (nsrc->vn_version); @@ -224,7 +269,11 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) ndest->vn_next = bswap_32 (nsrc->vn_next); } else - need_offset += ndest->vn_next; + { + if (ndest->vn_next > len - need_offset) + return; + need_offset += ndest->vn_next; + } } while (nsrc->vn_next != 0); } diff --git a/m4/ChangeLog b/m4/ChangeLog index 32832693..8729f58c 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,12 @@ +2022-03-20 Mark Wielaard <mark@klomp.org> + + * biarch.m4: Don't check whether -m64 works for 32bit host. + +2022-03-14 Mark Wielaard <mark@klomp.org> + + * biarch.m4: Use AS_HELP_STRING instead of AC_HELP_STRING. + * zip.m4: Likewise. + 2020-12-15 Dmitry V. Levin <ldv@altlinux.org> * .gitignore: New file. diff --git a/m4/biarch.m4 b/m4/biarch.m4 index c238d8d1..c7baead7 100644 --- a/m4/biarch.m4 +++ b/m4/biarch.m4 @@ -28,13 +28,13 @@ biarch_CC="$biarch_CC $utrace_biarch"])]) AC_DEFUN([utrace_BIARCH], [AC_REQUIRE([utrace_HOST64]) utrace_biarch_forced=no AC_ARG_WITH([biarch], - AC_HELP_STRING([--with-biarch], + AS_HELP_STRING([--with-biarch], [enable biarch tests despite build problems]), [AS_IF([test "x$with_biarch" != xno], [utrace_biarch_forced=yes])]) AS_IF([test $utrace_biarch_forced = yes], [dnl utrace_cv_cc_biarch=yes AC_MSG_NOTICE([enabling biarch tests regardless using $biarch_CC])], [dnl -AS_IF([test x$utrace_cv_CC_m32 != xnone], [dnl +AS_IF([test x$utrace_cv_CC_m32 != xnone -a x$utrace_cv_host64 != xno], [dnl AC_CACHE_CHECK([whether $biarch_CC makes executables we can run], utrace_cv_cc_biarch, [dnl save_CC="$CC" @@ -4,7 +4,7 @@ dnl and sets AC_DEFINE(USE_$2) and LIBS. AC_DEFUN([eu_ZIPLIB], [dnl AC_ARG_WITH([[$1]], -AC_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),, +AS_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),, [with_[$1]=default]) if test $with_[$1] != no; then AC_SEARCH_LIBS([$4], [$3], [with_[$1]=yes], diff --git a/po/ChangeLog b/po/ChangeLog index a3c69b56..6e610671 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,15 @@ +2022-04-25 Mark Wielaard <mark@klomp.org> + + * *.po: Update for 0.187. + +2021-11-10 Mark Wielaard <mark@klomp.org> + + * *.po: Update for 0.186. + +2021-07-25 Hayatsu Shunsuke <hayatsu.shunsuke@gmail.com> + + * ja.po: update Japanese translation + 2021-05-22 Mark Wielaard <mark@klomp.org> * *.po: Update for 0.185. @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2009-06-29 15:15+0200\n" "Last-Translator: Michael Münch <micm@fedoraproject.org>\n" "Language-Team: German\n" @@ -37,11 +37,6 @@ msgid "" " - 'auto', 'tty', 'if-tty'\n" msgstr "" -#: lib/color.c:194 src/objdump.c:728 -#, fuzzy, c-format -msgid "cannot allocate memory" -msgstr "konnte Verzeichnis nicht erstellen: %s" - #: lib/printversion.c:40 #, fuzzy, c-format msgid "" @@ -54,8 +49,8 @@ msgstr "" "GARANTIE,\n" "auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "Kein Speicher mehr verfügbar" @@ -313,7 +308,7 @@ msgstr "unbekannter Typ" msgid ".debug_addr section missing" msgstr ".debug_line Sektion fehlt" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Eingabeauswahloptionen:" @@ -550,7 +545,7 @@ msgid "No backend" msgstr "Kein Backend" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -601,18 +596,18 @@ msgstr "" msgid " Args: " msgstr "" -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Build ID: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr "" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " OS: %s, ABI: " @@ -646,7 +641,7 @@ msgstr "ungültige Grösse des Quell-Operanden" msgid "invalid size of destination operand" msgstr "ungültige Grösse des Ziel-Operanden" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" @@ -734,8 +729,8 @@ msgstr "data/scn Unterschied" msgid "invalid section header" msgstr "ungültiger Abschnitts-Header" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "Ungültige Daten" @@ -810,94 +805,98 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s" msgid "cannot decompress data" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/addr2line.c:57 +#: src/addr2line.c:59 #, fuzzy msgid "Input format options:" msgstr "Eingabeauswahloptionen:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "" -#: src/addr2line.c:61 +#: src/addr2line.c:63 #, fuzzy msgid "Output format options:" msgstr "Ausgabeformat:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +msgid "Show absolute file names using compilation directory (default)" msgstr "" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:80 +msgid "Show relative file names without compilation directory" +msgstr "" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Verschiedenes:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:519 -#, fuzzy, c-format +#: src/addr2line.c:527 +#, fuzzy msgid "Section syntax requires exactly one module" msgstr "Abschnitt syntax benötigt genau ein Modul" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %#<PRIxMAX> lies outside section '%s'" msgstr "" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "Konnte Symbol '%s' nicht finden" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %#<PRIxMAX> lies outside contents of '%s'" msgstr "" @@ -1067,112 +1066,110 @@ msgstr "" msgid "no entry %s in archive\n" msgstr "Kein Eintrag %s in Archiv\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "Konnte Hash-Tabelle nicht erstellen" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "Konnte nicht in Hash-Tabelle einfügen" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "Konnte %.*s nicht öffnen" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "Konnte %s nicht schreiben" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "Konnte Bearbeitungszeit von %s nicht ändern" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "Konnte temporäre Datei nicht in %.*s umbenennen" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "neue Datei konnte nicht angelegt werden" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: Kein Eintrag %s in dem Archiv!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "Konnte %s nicht öffnen" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s ist keine reguläre Datei" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "Konnte %s: %s nicht lesen" -#: src/ar.c:1483 +#: src/ar.c:1480 #, fuzzy, c-format msgid "cannot represent ar_date" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1489 +#: src/ar.c:1486 #, fuzzy, c-format msgid "cannot represent ar_uid" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1495 +#: src/ar.c:1492 #, fuzzy, c-format msgid "cannot represent ar_gid" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1501 +#: src/ar.c:1498 #, fuzzy, c-format msgid "cannot represent ar_mode" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/ar.c:1507 +#: src/ar.c:1504 #, fuzzy, c-format msgid "cannot represent ar_size" msgstr "Konnte %s nicht öffnen" @@ -1201,194 +1198,194 @@ msgstr "Das Archiv '%s' ist zu groß" msgid "cannot read ELF header of %s(%s): %s" msgstr "\"Konnte ELF-Kopf von %s(%s): %s nicht lesen" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 #, fuzzy #| msgid "cannot get ELF header" msgid "ELF header" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 #, fuzzy #| msgid "Program Headers:" msgid "program headers" msgstr "Programm-Köpfe:" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 #, fuzzy #| msgid "Program Headers:" msgid "program header" msgstr "Programm-Köpfe:" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 #, fuzzy #| msgid "invalid section header" msgid "section headers" msgstr "ungültiger Abschnitts-Header" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 #, fuzzy msgid "section header string table index" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 #, fuzzy msgid "could not obtain section header" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 #, fuzzy msgid "could not obtain section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 #, fuzzy #| msgid "Input selection options:" msgid "Classification options" msgstr "Eingabeauswahloptionen:" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 #, fuzzy #| msgid "cannot find kernel modules" msgid "File is a linux kernel module" msgstr "Konnte Kernel Module nicht finden" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 #, fuzzy #| msgid "Output format:" msgid "Output flags" msgstr "Ausgabeformat:" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 #, fuzzy #| msgid "More than one output file name given." msgid "Do not output file names" msgstr "Mehr als ein Name der Ausgabedatei angegeben." -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "DATEI..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1618,14 +1615,14 @@ msgstr "" msgid "Invalid value '%s' for --gaps parameter." msgstr "" -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 #: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "'%s' kann nicht geöffnet werden" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "" @@ -1635,7 +1632,7 @@ msgstr "" msgid "cannot create EBL descriptor for '%s'" msgstr "" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "" @@ -1650,7 +1647,7 @@ msgstr "" msgid "cannot get relocation: %s" msgstr "" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "" @@ -1671,7 +1668,7 @@ msgstr "unbekannter Typ" msgid "No input file given" msgstr "Eingabedatei '%s' ignoriert" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "" @@ -1913,7 +1910,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "" @@ -3277,305 +3274,305 @@ msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" msgstr "" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " "program header entry" msgstr "" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "neue Datei konnte nicht angelegt werden" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "" #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, fuzzy, c-format msgid "cannot get program header count: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, fuzzy, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " "function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3684,12 +3681,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: INTERNER FEHLER %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "beim Schliessen von '%s'" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: Dateiformat nicht erkannt" @@ -3724,24 +3721,23 @@ msgstr "" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: Dateiformat nicht erkannt" -#: src/nm.c:705 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "Kann Suchbaum nicht erstellen" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -3755,58 +3751,58 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:776 +#: src/nm.c:773 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1246 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1255 +#: src/nm.c:1251 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1336 +#: src/nm.c:1331 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: entry size in section `%s' is not what we expect" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Ungültige Operation" -#: src/nm.c:1622 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: keine Symbole" @@ -3850,11 +3846,11 @@ msgstr "Keine Operation angegeben.\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "" @@ -3876,12 +3872,11 @@ msgid "Contents of section %s:\n" msgstr "Inhalt des Abschnitts %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "Disassemblieren nicht möglich" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:758 +#, fuzzy msgid "cannot create backend for elf file" msgstr "neue Datei konnte nicht angelegt werden" @@ -4064,20 +4059,20 @@ msgstr "" msgid "cannot generate Elf descriptor: %s" msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 #: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" @@ -4088,8 +4083,8 @@ msgstr "" msgid "cannot get section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "" @@ -4149,274 +4144,274 @@ msgstr "" msgid "cannot create EBL handle" msgstr "" -#: src/readelf.c:961 +#: src/readelf.c:959 #, fuzzy, c-format msgid "cannot determine number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, fuzzy, c-format msgid "cannot read ELF: %s" msgstr "Konnte %s: %s nicht lesen" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " msgstr "" -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" " Class: %s\n" msgstr "" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, fuzzy, c-format msgid " Data: %s\n" msgstr " Daten: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr "" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(aktuell)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr "" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr "" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr "" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, fuzzy, c-format msgid " Machine: <unknown>: 0x%x\n" msgstr " Daten: %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr "" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#<PRIx64>\n" msgstr "" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: %<PRId64> %s\n" msgstr "" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: %<PRId64> %s\n" msgstr "" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr "" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: %<PRId16> %s\n" msgstr "" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(Bytes)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: %<PRId16> %s\n" msgstr "" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %<PRId16>" msgstr "" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (%<PRIu32> in [0].sh_info)" msgstr "" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr "" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: %<PRId16> %s\n" msgstr "" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %<PRId16>" msgstr "" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (%<PRIu32> in [0].sh_size)" msgstr "" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (%<PRIu32> in [0].sh_link)" msgstr "" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" "\n" msgstr "" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %<PRId16>\n" "\n" msgstr "" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#<PRIx64>:\n" "\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" msgstr "" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" msgstr "" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, c-format msgid "bad compression header for section %zd: %s" msgstr "" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "Programm-Köpfe:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" msgstr "" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" " Segment Sections..." msgstr "" -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4427,7 +4422,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4438,31 +4433,31 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "<INVALID SYMBOL>" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "<INVALID SECTION>" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4475,43 +4470,43 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr "" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "%<PRId64> (bytes)\n" msgstr "" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" "Invalid symbol table at offset %#0<PRIx64>\n" msgstr "" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4530,7 +4525,7 @@ msgstr[1] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4541,29 +4536,29 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "<INVALID RELOC>" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4574,40 +4569,40 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "keine" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| <unknown>" msgstr "| <unbekannt>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4620,17 +4615,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, fuzzy, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -4643,18 +4638,18 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -4667,15 +4662,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *lokal* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -4690,66 +4685,66 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" msgstr "" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3452 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4760,13 +4755,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:3614 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -4774,102 +4769,102 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:3631 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3655 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3696 #, c-format msgid " File: %11<PRIu32>\n" msgstr " File: %11<PRIu32>\n" -#: src/readelf.c:3748 +#: src/readelf.c:3745 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3748 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3754 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3761 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3767 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, fuzzy, c-format +#: src/readelf.c:3834 +#, fuzzy msgid "sprintf failure" msgstr "mprotect fehlgeschlagen" -#: src/readelf.c:4319 +#: src/readelf.c:4316 msgid "empty block" msgstr "" -#: src/readelf.c:4322 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:4800 +#: src/readelf.c:4797 #, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "" -#: src/readelf.c:4867 +#: src/readelf.c:4864 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "" -#: src/readelf.c:4874 +#: src/readelf.c:4871 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "" -#: src/readelf.c:4881 +#: src/readelf.c:4878 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "" -#: src/readelf.c:4888 +#: src/readelf.c:4885 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr "" -#: src/readelf.c:4996 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -4877,79 +4872,79 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:5107 +#: src/readelf.c:5104 #, c-format msgid "" "\n" "Abbreviation section at offset %<PRIu64>:\n" msgstr "" -#: src/readelf.c:5120 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:5136 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" "DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n" msgstr "" -#: src/readelf.c:5182 +#: src/readelf.c:5179 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, fuzzy, c-format msgid " Address size: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, fuzzy, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, fuzzy, c-format msgid "Unknown version" msgstr "unbekannte Version" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, fuzzy, c-format msgid "unsupported address size" msgstr "Kein Adress-Wert" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:5414 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -4960,239 +4955,239 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5445 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" msgstr "" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5488 src/readelf.c:8425 #, c-format msgid "" "\n" "Table at offset %zu:\n" msgstr "" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5511 +#: src/readelf.c:5508 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5523 +#: src/readelf.c:5520 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5527 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5535 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5544 +#: src/readelf.c:5541 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr "" -#: src/readelf.c:5555 +#: src/readelf.c:5552 #, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr "" -#: src/readelf.c:5610 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5651 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5674 src/readelf.c:9176 #, fuzzy, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5729 src/readelf.c:9231 #, fuzzy, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5768 src/readelf.c:9270 #, fuzzy, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5823 +#: src/readelf.c:5820 #, fuzzy, c-format msgid "invalid range list data" msgstr "Ungültige Daten" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr "" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6104 src/readelf.c:9798 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:6367 +#: src/readelf.c:6364 msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:6624 +#: src/readelf.c:6621 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:6642 +#: src/readelf.c:6639 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#<PRIx64>:\n" msgstr "" -#: src/readelf.c:6692 +#: src/readelf.c:6689 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6790 src/readelf.c:6944 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:6808 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:6814 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:6924 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#<PRIx64>)" msgstr "" -#: src/readelf.c:6931 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr "" -#: src/readelf.c:6968 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr "" -#: src/readelf.c:7053 +#: src/readelf.c:7050 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "" -#: src/readelf.c:7063 +#: src/readelf.c:7060 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "" -#: src/readelf.c:7085 +#: src/readelf.c:7082 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "" -#: src/readelf.c:7415 +#: src/readelf.c:7412 #, fuzzy, c-format msgid "invalid file (%<PRId64>): %s" msgstr "Ungültige Datei" -#: src/readelf.c:7419 +#: src/readelf.c:7416 #, fuzzy, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr "unbekannte Form %<PRIx64>" -#: src/readelf.c:7423 +#: src/readelf.c:7420 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:7738 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5200,12 +5195,12 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:7788 +#: src/readelf.c:7785 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7805 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5214,7 +5209,7 @@ msgid "" " Type signature: %#<PRIx64>, Type offset: %#<PRIx64> [%<PRIx64>]\n" msgstr "" -#: src/readelf.c:7820 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5222,37 +5217,37 @@ msgid "" "%<PRIu8>, Offset size: %<PRIu8>\n" msgstr "" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:7895 +#: src/readelf.c:7892 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:7933 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:7941 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:7985 +#: src/readelf.c:7980 #, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5260,7 +5255,7 @@ msgid "" "%<PRIu8>, Offset size: %<PRIu8>\n" msgstr "" -#: src/readelf.c:8037 +#: src/readelf.c:8032 #, c-format msgid "" "\n" @@ -5268,18 +5263,18 @@ msgid "" "\n" msgstr "" -#: src/readelf.c:8369 +#: src/readelf.c:8364 #, fuzzy, c-format msgid "unknown form: %s" msgstr "unbekannte Form %<PRIx64>" -#: src/readelf.c:8400 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8516 #, c-format msgid "" "\n" @@ -5298,177 +5293,187 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:8524 +#: src/readelf.c:8538 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:8532 +#: src/readelf.c:8546 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "Kein Adress-Wert" -#: src/readelf.c:8540 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "" -#: src/readelf.c:8550 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:8565 +#: src/readelf.c:8579 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:8576 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8596 src/readelf.c:8673 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8667 msgid "" "\n" "File name table:" msgstr "" -#: src/readelf.c:8714 +#: src/readelf.c:8728 msgid " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:8753 +#: src/readelf.c:8774 msgid "" "\n" "No line number statements." msgstr "" -#: src/readelf.c:8757 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:8777 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8811 +#: src/readelf.c:8827 #, c-format msgid " special opcode %u: address+%u = " msgstr "" -#: src/readelf.c:8815 +#: src/readelf.c:8831 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:8818 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:8841 +#: src/readelf.c:8857 msgid " end of sequence" msgstr "" -#: src/readelf.c:8859 +#: src/readelf.c:8875 #, fuzzy, c-format msgid " set address to " msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:8887 +#: src/readelf.c:8903 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" -#: src/readelf.c:8901 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr "" +#: src/readelf.c:8944 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8968 +#, c-format +msgid " set function name %s (0x%x)\n" +msgstr "" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8975 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8987 msgid " copy" msgstr "" -#: src/readelf.c:8929 +#: src/readelf.c:8998 #, c-format msgid " advance address by %u to " msgstr "" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr "" -#: src/readelf.c:8955 +#: src/readelf.c:9024 #, c-format msgid " set file to %<PRIu64>\n" msgstr "" -#: src/readelf.c:8966 +#: src/readelf.c:9035 #, c-format msgid " set column to %<PRIu64>\n" msgstr "" -#: src/readelf.c:8973 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr "" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr "" -#: src/readelf.c:8990 +#: src/readelf.c:9059 #, c-format msgid " advance address by constant %u to " msgstr "" -#: src/readelf.c:9010 +#: src/readelf.c:9079 #, c-format msgid " advance address by fixed value %u to \n" msgstr "" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr "" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:9035 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr "" @@ -5476,108 +5481,108 @@ msgstr "" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:9084 +#: src/readelf.c:9153 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9319 #, c-format msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:9290 +#: src/readelf.c:9359 #, fuzzy, c-format msgid "invalid loclists data" msgstr "Ungültige Daten" -#: src/readelf.c:9543 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:9891 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:9914 +#: src/readelf.c:9983 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "" -#: src/readelf.c:10015 +#: src/readelf.c:10084 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10027 +#: src/readelf.c:10096 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10109 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10069 +#: src/readelf.c:10138 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr "" -#: src/readelf.c:10077 +#: src/readelf.c:10146 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr "" -#: src/readelf.c:10102 +#: src/readelf.c:10171 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr "" -#: src/readelf.c:10109 +#: src/readelf.c:10178 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10190 #, c-format msgid " %<PRIu8> arguments:" msgstr "" -#: src/readelf.c:10136 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" -#: src/readelf.c:10381 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -5586,77 +5591,77 @@ msgid "" msgstr "" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10465 #, c-format msgid " *** error, missing string terminator\n" msgstr "" -#: src/readelf.c:10425 +#: src/readelf.c:10494 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10593 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10526 +#: src/readelf.c:10595 #, fuzzy, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10540 +#: src/readelf.c:10609 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10549 +#: src/readelf.c:10618 #, fuzzy, c-format msgid " Padding: %8<PRIx16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10603 +#: src/readelf.c:10672 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:10705 +#: src/readelf.c:10774 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:10728 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:10740 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:10755 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:10768 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:10782 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5665,142 +5670,142 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:10855 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:10882 +#: src/readelf.c:10951 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %#<PRIx64> contains %<PRId64> bytes :\n" msgstr "" -#: src/readelf.c:10911 +#: src/readelf.c:10980 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10929 +#: src/readelf.c:10998 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10936 +#: src/readelf.c:11005 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10943 +#: src/readelf.c:11012 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10950 +#: src/readelf.c:11019 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10957 +#: src/readelf.c:11026 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10971 +#: src/readelf.c:11040 #, c-format msgid "" "\n" " CU list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:10996 +#: src/readelf.c:11065 #, c-format msgid "" "\n" " TU list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:11025 +#: src/readelf.c:11094 #, c-format msgid "" "\n" " Address list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:11057 +#: src/readelf.c:11126 #, c-format msgid "" "\n" " Symbol table at offset %#<PRIx32> contains %zu slots:\n" msgstr "" -#: src/readelf.c:11195 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:11926 +#: src/readelf.c:11994 #, c-format msgid "" "\n" "%*s... <repeats %u more times> ..." msgstr "" -#: src/readelf.c:12438 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:12466 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr "" -#: src/readelf.c:12518 +#: src/readelf.c:12583 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/readelf.c:12552 +#: src/readelf.c:12616 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12575 +#: src/readelf.c:12639 #, c-format msgid "" "\n" "Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12622 +#: src/readelf.c:12686 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no data to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12713 src/readelf.c:12764 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12718 #, c-format msgid "" "\n" "Hex dump of section [%zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12659 +#: src/readelf.c:12723 #, c-format msgid "" "\n" @@ -5808,21 +5813,21 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12673 +#: src/readelf.c:12737 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no strings to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12705 +#: src/readelf.c:12769 #, c-format msgid "" "\n" "String section [%zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12710 +#: src/readelf.c:12774 #, c-format msgid "" "\n" @@ -5830,45 +5835,45 @@ msgid "" "offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12759 +#: src/readelf.c:12822 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:12789 +#: src/readelf.c:12852 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:12846 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:12849 +#: src/readelf.c:12910 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:12853 +#: src/readelf.c:12914 #, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" -#: src/readelf.c:12871 +#: src/readelf.c:12932 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:12876 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -5961,39 +5966,39 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr "" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "ungültiger Abschnitt" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:480 +#, fuzzy msgid "cannot get section header" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "" @@ -6154,27 +6159,24 @@ msgstr "" msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:585 -#, fuzzy, c-format +#: src/strings.c:584 +#, fuzzy msgid "lseek failed" msgstr "lseek64 fehlgeschlagen" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "re-mmap fehlgeschlagen" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "mprotect fehlgeschlagen" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" @@ -6239,54 +6241,51 @@ msgstr "" msgid "Discard symbols from object files." msgstr "" -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr "" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:479 +#, fuzzy msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "" -#: src/strip.c:761 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "" -#: src/strip.c:799 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6297,42 +6296,42 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:813 #, fuzzy, c-format msgid "%s: no support for stripping archive" msgstr "%s: Kein Eintrag %s in dem Archiv!\n" -#: src/strip.c:1047 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:1092 -#, fuzzy, c-format +#: src/strip.c:1094 +#, fuzzy msgid "cannot get number of phdrs" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1108 src/strip.c:1151 #, fuzzy, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "neue Datei konnte nicht angelegt werden" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1118 src/strip.c:1161 #, fuzzy, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "neue Datei konnte nicht angelegt werden" -#: src/strip.c:1240 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:1250 +#: src/strip.c:1251 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/strip.c:1259 +#: src/strip.c:1260 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Konnte Archiv '%s' nicht öffnen" @@ -6352,7 +6351,7 @@ msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" msgid "%s: error while getting shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1705 src/strip.c:2546 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" @@ -6362,67 +6361,66 @@ msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1793 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1859 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1866 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "" -#: src/strip.c:2079 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:2477 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:2500 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:2541 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:2559 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2595 src/strip.c:2615 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -6563,13 +6561,13 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s" msgid "cannot create directory '%s'" msgstr "konnte Verzeichnis nicht erstellen: %s" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 #: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 #: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" @@ -6580,117 +6578,125 @@ msgstr "konnte Symboltabelle nicht aktualisieren: %s" msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:593 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:848 +#: src/unstrip.c:849 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:851 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:868 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "ungültiger Offset %zu für Symbol %s" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1041 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1046 +#: src/unstrip.c:1047 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1052 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1057 +#: src/unstrip.c:1058 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1063 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1155 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1166 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1362 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1406 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1410 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "" @@ -6800,23 +6806,21 @@ msgstr "" msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "kein passendes Modul gefunden" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "mehr als ein passendes Modul" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -6860,7 +6864,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -6872,6 +6876,10 @@ msgstr "" msgid "Show instances of inlined functions" msgstr "" +#, fuzzy, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "konnte Verzeichnis nicht erstellen: %s" + #~ msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" #~ msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils.master.es\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2011-01-10 15:17-0300\n" "Last-Translator: Claudio Rodrigo Pereyra Diaz <claudiorodrigo@pereyradiaz." "com.ar>\n" @@ -39,11 +39,6 @@ msgid "" " - 'auto', 'tty', 'if-tty'\n" msgstr "" -#: lib/color.c:194 src/objdump.c:728 -#, fuzzy, c-format -msgid "cannot allocate memory" -msgstr "No se puede asignar sección PLT: %s" - #: lib/printversion.c:40 #, fuzzy, c-format msgid "" @@ -57,8 +52,8 @@ msgstr "" "garantÃa, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN " "DETERMINADO.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "memoria agotada" @@ -318,7 +313,7 @@ msgstr "código operativo desconocido " msgid ".debug_addr section missing" msgstr ".debug_ranges section faltante" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Opciones de selección de entrada:" @@ -552,7 +547,7 @@ msgid "No backend" msgstr "No hay segundo plano (Backend)" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -603,18 +598,18 @@ msgstr "" msgid " Args: " msgstr "" -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Build ID: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr " Versión del Enlazador: %.*s\n" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " OS: %s, ABI: " @@ -648,7 +643,7 @@ msgstr "tamaño inválido del operando fuente" msgid "invalid size of destination operand" msgstr "tamaño inválido del operando destino" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "codificación inválida" @@ -734,8 +729,8 @@ msgstr "no coinciden los datos/scn" msgid "invalid section header" msgstr "encabezamiento de sección inválida" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "datos inválidos" @@ -813,72 +808,81 @@ msgstr "no pueden copiar datos de sección: %s" msgid "cannot decompress data" msgstr "no pueden copiar datos de sección: %s" -#: src/addr2line.c:57 +#: src/addr2line.c:59 #, fuzzy msgid "Input format options:" msgstr "Opciones de selección de entrada:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "Manejar direcciones como compensaciones relativas a sección de NOMBRE." -#: src/addr2line.c:61 +#: src/addr2line.c:63 #, fuzzy msgid "Output format options:" msgstr "Formato de salida:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 #, fuzzy msgid "Print address before each entry" msgstr "Imprimir nombre de archivo antes de cada cadena." -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "Mostrar sólo nombres de base de ficheros fuente" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "" "Mostrar nombres de fichero absolutos mediante directorio de compilación" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "También mostrar nombres de función" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "También mostrar sÃmbolo o nombres de sección" -#: src/addr2line.c:68 +#: src/addr2line.c:70 #, fuzzy msgid "Also show symbol and the section names" msgstr "También mostrar sÃmbolo o nombres de sección" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "También mostrar marcas de lÃneas de tabla" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "" +"Mostrar nombres de fichero absolutos mediante directorio de compilación" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Misceláneos:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" @@ -886,26 +890,25 @@ msgstr "" "por defecto)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "[DIREC...]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "Sintaxis de sección requiere exactamente un módulo" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %#<PRIxMAX> lies outside section '%s'" msgstr "Compensación %#<PRIxMAX> se encuentra fuera de sección '%s'" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "no se puede encontrar sÃmbolo '%s'" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %#<PRIxMAX> lies outside contents of '%s'" msgstr "compensación %#<PRIxMAX> se encuentra fuera de contenido de '%s'" @@ -1074,112 +1077,110 @@ msgstr "no sepuede stat el archivo '%s'" msgid "no entry %s in archive\n" msgstr "no hay entrada %s en archivo\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "Falló al crear la tabla de dispersión" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "no sepuede insertar en tabla de dispersión" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "no se puede stat '%s'" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "no se puede leer el contenido de %s: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr " Imposible abrir %.*s" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "Falló al escribir %s" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "No se puede cambiar el modo de %s" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "No puede cambiar tiempo de modificación de %s" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "no sepuede renombrar fichero temporal para %.*s" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "no sepuede crear fichero nuevo" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "no se encuentra miembro de posición %s " -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: ¡no hay entrada %s en archive!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "no sepuede abrir %s" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "no sepuede efectuar stat %s" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr " %s no es un fichero ordinario " -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "no sepuede obtener descriptor ELF para %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "no sepuede leer %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, fuzzy, c-format msgid "cannot represent ar_date" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1489 +#: src/ar.c:1486 #, fuzzy, c-format msgid "cannot represent ar_uid" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1495 +#: src/ar.c:1492 #, fuzzy, c-format msgid "cannot represent ar_gid" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1501 +#: src/ar.c:1498 #, fuzzy, c-format msgid "cannot represent ar_mode" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/ar.c:1507 +#: src/ar.c:1504 #, fuzzy, c-format msgid "cannot represent ar_size" msgstr "no sepuede abrir %s" @@ -1208,195 +1209,195 @@ msgstr " El archivo '%s' es demasiado grande" msgid "cannot read ELF header of %s(%s): %s" msgstr "no se puede leer el encabezamiento ELF de %s(%s): %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 #, fuzzy #| msgid "cannot get ELF header" msgid "ELF header" msgstr "no se puede obtener el encabezamiento ELF" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 #, fuzzy #| msgid "Program Headers:" msgid "program headers" msgstr "encabezamientos de programa:" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 #, fuzzy #| msgid "Program Headers:" msgid "program header" msgstr "encabezamientos de programa:" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 #, fuzzy #| msgid "Section Headers:" msgid "section headers" msgstr "encabezamientos de sección:" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 #, fuzzy #| msgid "cannot get section header string table index" msgid "section header string table index" msgstr "no se puede obtener Ãndice de cadena de encabezamiento de sección" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 #, fuzzy msgid "could not obtain section header" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 #, fuzzy msgid "could not obtain section name" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 #, fuzzy #| msgid "Input selection options:" msgid "Classification options" msgstr "Opciones de selección de entrada:" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 #, fuzzy #| msgid "cannot find kernel modules" msgid "File is a linux kernel module" msgstr "no se pueden hallar módulos de kernel" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 #, fuzzy #| msgid "Output format:" msgid "Output flags" msgstr "Formato de salida:" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 #, fuzzy #| msgid "More than one output file name given." msgid "Do not output file names" msgstr "Se ha dado más de un nombre de archivo de salida." -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "FICHERO..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1630,14 +1631,14 @@ msgstr "%s %s differ: brecha" msgid "Invalid value '%s' for --gaps parameter." msgstr "Valor inválido '%s' para parámetro --gaps" -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 #: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "Imposible abrir '%s'" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "No puede crear descriptor ELF para '%s': %s" @@ -1647,7 +1648,7 @@ msgstr "No puede crear descriptor ELF para '%s': %s" msgid "cannot create EBL descriptor for '%s'" msgstr "no se puede crear el descriptor EBL para '%s'" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" @@ -1662,7 +1663,7 @@ msgstr "No se puede obtener contenido de sección %zu: %s" msgid "cannot get relocation: %s" msgstr "No se puede obtener reubicación: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "opción -o especificada dos veces" @@ -1683,7 +1684,7 @@ msgstr "tipo desconocido" msgid "No input file given" msgstr "archivo de entrada vacÃo" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, fuzzy, c-format msgid "Only one input file allowed together with '-o'" msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'" @@ -1937,7 +1938,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n" @@ -3545,7 +3546,7 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero core desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, fuzzy, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " @@ -3554,7 +3555,7 @@ msgstr "" "phdr[%d]: tipo de nota de fichero objeto desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, fuzzy, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " @@ -3563,40 +3564,40 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: no hay entradas de nota definidas para el tipo de archivo\n" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: no puede obtener contenido de sección de nota: %s\n" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: extra %<PRIu64> bytes después de la última nota\n" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de " "archivo\n" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" "Sección[%2d] '%s': no se puede obtener el contenido de sección de nota\n" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "Sección[%2d] '%s': extra %<PRIu64> bytes después de la última nota\n" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3604,145 +3605,145 @@ msgstr "" "Sólo ejecutables, objetos compartidos y ficheros core pueden tener " "encabezamientos de programas\n" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "no se puede obtener entrada de encabezamiento %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "entrada de encabezamiento de programa %d: tipo %#<PRIx64> de entrada de " "encabezamiento de programa desconocido\n" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "Más de una entrada INTERP en encabezamiento de programa\n" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "más de una entrada TLS en encabezamiento de programa\n" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "ejecutable estático no puede tener secciones dinámicas\n" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "Referencia de sección dinámica en encabezamiento de programa tiene " "compensación errada\n" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "No coinciden tamaño de sección dinámica en programa y encabezamiento de " "sección\n" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "Más de una entrada GNU_RELRO en encabezamiento de programa\n" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "Segmento cargable GNU_RELRO que se aplica no es de escritura\n" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "Banderas de segmento cargable [%u] no coinciden con banderas GNU_RELRO [%u]\n" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "Segmento %s no contenido en un segmento cargable\n" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" "Compensación de encabezamiento de programa en encabezamiento ELF y entrada " "PHDR no coinciden" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "Referencia de tabla de búsqueda de marco de llamada en encabezamiento de " "programa tiene una compensación errada\n" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "Tamaño de tabla de búsqueda de marco de llamada no coincide con programa y " "encabezamiento de sección\n" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME presente pero no la sección.eh_frame_hdr\n" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabla de búsqueda de marco de llamada debe ser asignada\n" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sección [%2zu] '%s' debe ser asignada\n" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "" "tabla de búsqueda de marco de llamada no debe tener permiso de escritura\n" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "tabla de búsqueda de marco de llamada no debe ser ejecutable\n" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" "entrada de encabezamiento de programa %d: tamaño de fichero mayor que el " "tamaño de memoria\n" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" "entrada de encabezamiento de programa %d: alineamiento no es potencia de 2\n" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3751,7 +3752,7 @@ msgstr "" "entrada de encabezamiento de programa %d: compensación de fichero y " "dirección virtual no módulo de alineación\n" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3760,111 +3761,111 @@ msgstr "" "ejecutable/DSO con sección .eh_frame_hdr no tiene una entrada de " "encabezamiento de programa PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "No se puede leer encabezamiento ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "no sepuede crear fichero nuevo" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "Bandera de reubicación de texto establecida pero no necesaria\n" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "Selección de entrada:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "Agregar RUTA a todos los nombres de ficheros" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "Usar RUTA como root de jerarquÃa de debuginfo" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "" "Localizar origen de reubicaciones de texto en FICHEROS (a.out por defecto)." #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "[FICHERO...]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "No se puede obtener encabezamiento ELF '%s': %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "'%s' es no un DSO o PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "obtener encabezamiento de sección get de sección %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "No se puede leer sección dinámica: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "no hay reubicaciones de texto reportado en '%s'" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "Error al leer fichero ELF" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, fuzzy, c-format msgid "cannot get program header count: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, fuzzy, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "" "Nos se puede obtener el Ãndice de encabezamiento de programa en compensación " "%d: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "No se puede obtener tabla de sÃmbolos %zu en '%s': %s" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" "No se puede obtener reubicación en Ãndice %d en sección %zu en '%s': %s" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s no compilado con -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "El archivo que contiene la función '%s' no está compilado con -fpic/-fPIC\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3873,7 +3874,7 @@ msgstr "" "el fichero que contiene la función '%s' podrÃa no estar compilado con -fpic/-" "fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3882,7 +3883,7 @@ msgstr "" "Tanto el fichero que contiene la función '%s' como el fichero que contiene " "la función '%s' no están compilados con -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3991,12 +3992,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: ERROR INTERNO %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "error al cerrar '%s'" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: No se reconoce el formato del fichero" @@ -4031,24 +4032,23 @@ msgstr "imposible restablecer compensación de archivo al inicio" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: no se reconoció el formato de fichero" -#: src/nm.c:705 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "No se puede crear el árbol de búsqueda" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "no se puede obtener Ãndice de cadena de encabezamiento de sección" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -4062,7 +4062,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4071,53 +4071,53 @@ msgstr "" "%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" "\n" -#: src/nm.c:776 +#: src/nm.c:773 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1246 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " -#: src/nm.c:1255 +#: src/nm.c:1251 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: Tamaño de sección `%s' no es múltiplo de tamaño de entrada" -#: src/nm.c:1336 +#: src/nm.c:1331 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Operación inválida" -#: src/nm.c:1622 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: No hay sÃmbolos" @@ -4161,11 +4161,11 @@ msgstr "No se especificó una operación.\n" msgid "while close `%s'" msgstr "mientras cierra `%s'" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "SÃMBOLO INVÃLIDO" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "SECCIÓN INVÃLIDA" @@ -4190,12 +4190,11 @@ msgid "Contents of section %s:\n" msgstr "Contenido de la sección %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "No se puede desensamblar" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:758 +#, fuzzy msgid "cannot create backend for elf file" msgstr "no sepuede crear fichero nuevo" @@ -4382,20 +4381,20 @@ msgstr "Sección de depuración DWARF desconocida `%s'.\n" msgid "cannot generate Elf descriptor: %s" msgstr "no se puede crear descriptor ELF: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 #: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" @@ -4406,8 +4405,8 @@ msgstr "No se puede obtener encabezamiento de sección: %s" msgid "cannot get section name" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "No se puede obtener el contenido %s: %s" @@ -4467,48 +4466,48 @@ msgstr "no se pudo leer encabezamiento ELF: %s" msgid "cannot create EBL handle" msgstr "no se puede crear EBL" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, fuzzy, c-format msgid "cannot read ELF: %s" msgstr "no sepuede leer %s: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "NONE (Ninguno)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (Fichero reubicable)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "EXEC (Fichero ejecutable)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (Fichero objeto compartido)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (Fichero núcleo)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS Specific: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "EspecÃfico del procesador: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4516,7 +4515,7 @@ msgstr "" "Encabezamiento ELF:\n" " Mágico: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4525,125 +4524,125 @@ msgstr "" "\n" " Clase: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " Datos: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Versión ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(actual)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " Versión ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Tipo: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " Máquina: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, fuzzy, c-format msgid " Machine: <unknown>: 0x%x\n" msgstr " Máquina: %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " Versión: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#<PRIx64>\n" msgstr " Dirección de punto de entrada: %#<PRIx64>\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: %<PRId64> %s\n" msgstr " Inicio de encabezamientos de programa: %<PRId64> %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr " (bytes en el archivo)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: %<PRId64> %s\n" msgstr " Inicio de encabezamientos de sección: %<PRId64> %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " Indicadores: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: %<PRId16> %s\n" msgstr " Tamaño de este encabezamiento: %<PRId16> %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(bytes)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: %<PRId16> %s\n" msgstr "" " Tamaño de las entradas en encabezamiento del programa: %<PRId16> %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %<PRId16>" msgstr " Cantidad de entradas de encabezados de programa: %<PRId16>" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (%<PRIu32> in [0].sh_info)" msgstr " (%<PRIu32> in [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr " ([0] no disponible)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: %<PRId16> %s\n" msgstr "" " Tamaño de las entradas en el encabezamiento de sección: %<PRId16> %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %<PRId16>" msgstr " Cantidad de entradas en los encabezamientos de sección: %<PRId16>" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (%<PRIu32> in [0].sh_size)" msgstr " (%<PRIu32> en [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (%<PRIu32> in [0].sh_link)" msgstr " (%<PRIu32> en [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4652,19 +4651,19 @@ msgstr "" " Ãndice de tabla de cadenas de sección de encabezamiento de : XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %<PRId16>\n" "\n" msgstr " Ãndice de tabla de cadenas de sección de encabezamiento: %<PRId16>\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#<PRIx64>:\n" @@ -4673,16 +4672,16 @@ msgstr "" "Hay %d encabezamientos de sección, comenzando en compensación %#<PRIx64>:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "no se puede obtener Ãndice de cadena de encabezamiento de sección" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "encabezamientos de sección:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4690,7 +4689,7 @@ msgstr "" "[Nr] Nombre Tipo Dirección Off Tamaño Inf Al " "Enlace banderas ES" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4698,36 +4697,36 @@ msgstr "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, fuzzy, c-format msgid "bad compression header for section %zd: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, fuzzy, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "No se pueden obtener datos para la sección %d: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "encabezamientos de programa:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Tipo Compensación Dirección Virtual Dirección " "FÃsica Tamaño de Fichero Tamaño de Memoria Alineación de bandera" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4735,12 +4734,12 @@ msgstr "" " Tipo Compensación Dirección Virtual Dirección " "FÃsica Tamaño de Fichero Tamaño de Memoria Alineación de bandera" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Solicitando intérprete de programa: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4750,12 +4749,12 @@ msgstr "" " Sección para asignación de segmento:\n" " Secciones de segmento..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4770,7 +4769,7 @@ msgstr[1] "" "\n" "Grupo de sección COMDAT [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4785,31 +4784,31 @@ msgstr[1] "" "\n" "Grupo de sección [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "<INVALID SYMBOL>" msgstr "<SÃMBOLO INVÃLIDO>" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "<INVALID SECTION>" msgstr "<SECCIÓN INVÃLIDA>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr ".debug_line section inválida" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4830,36 +4829,36 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " Tipo Valor\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteca compartida: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "Nombre-so de la biblioteca: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath de la biblioteca: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "Ruta de ejecución de la biblioteca: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (bytes)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4868,7 +4867,7 @@ msgstr "" "\n" "Tabla de sÃmbolos inválida en compensación %#0<PRIx64>\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4893,7 +4892,7 @@ msgstr[1] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4910,29 +4909,29 @@ msgstr[1] "" "Sección de reubicación [%2u] '%s' en compensación %#0<PRIx64> contiene " "entradas %d:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "<INVALID RELOC>" msgstr "<REUBIC INVÃLIDA>" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4947,40 +4946,40 @@ msgstr[1] "" "\n" "La tabla de sÃmbolos [%2u] '%s' contiene entradas %u:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] "sÃmbolos locales %lu Tabla de cadena: [%2u] '%s'\n" msgstr[1] " SÃmbolos locales %lu Tabla de cadenas: [%2u] '%s'\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Núm: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "sÃmbolo dinámico erróneo" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "nada" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| <unknown>" msgstr "| <desconocido>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -5001,17 +5000,17 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -5032,19 +5031,19 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" " %#06x: Versión: %hd Banderas: %s Ãndice: %hd Conteo: %hd Nombre: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Principal %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -5065,15 +5064,15 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -5098,22 +5097,22 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Longitud Número % of total Cobertura\n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5122,37 +5121,37 @@ msgstr "" " Número promedio de pruebas: búsqueda exitosa: %f\n" " búsqueda sin éxito: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "No se pueden obtener datos para la sección %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3452 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5162,7 +5161,7 @@ msgstr "" " Tamaño de Bitmask: %zu bytes %<PRIuFAST32>%% bits establecen segundo " "cambio de dispersión: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -5179,7 +5178,7 @@ msgstr[1] "" "Sección de lista de biblioteca [%2zu] '%s' en compensación %#0<PRIx64> " "contiene entradas %d:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5187,7 +5186,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:3614 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -5198,102 +5197,102 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de %<PRIu64> bytes con " "desplazamiento %#0<PRIx64>:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3655 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3696 #, c-format msgid " File: %11<PRIu32>\n" msgstr " File: %11<PRIu32>\n" -#: src/readelf.c:3748 +#: src/readelf.c:3745 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3748 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3754 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3761 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3767 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, fuzzy, c-format +#: src/readelf.c:3834 +#, fuzzy msgid "sprintf failure" msgstr "mprotect falló" -#: src/readelf.c:4319 +#: src/readelf.c:4316 msgid "empty block" msgstr "bloque vacÃo" -#: src/readelf.c:4322 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:4800 +#: src/readelf.c:4797 #, fuzzy, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" -#: src/readelf.c:4867 +#: src/readelf.c:4864 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4874 +#: src/readelf.c:4871 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4881 +#: src/readelf.c:4878 #, fuzzy, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4888 +#: src/readelf.c:4885 #, fuzzy, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4988 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <MATERIAL INUTIL SIN UTILIZAR EN EL RESTO DE LA SECCION>\n" -#: src/readelf.c:4996 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <MATERIAL INUTIL NO UTILIZADO> ... %<PRIu64> bytes ...\n" -#: src/readelf.c:5099 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5304,7 +5303,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " [ Código]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5313,20 +5312,20 @@ msgstr "" "\n" "Sección de abreviatura en compensación %<PRIu64>:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] compensación: %<PRId64>, hijos: %s, etiqueta: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5335,52 +5334,52 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5179 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, fuzzy, c-format msgid " Address size: %8<PRIu64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, fuzzy, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, fuzzy, c-format msgid "Unknown version" msgstr "versión desconocida" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, fuzzy, c-format msgid "unsupported address size" msgstr "no hay valor de dirección" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "no se ha podido obtener contenido de .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5395,12 +5394,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entradas %zu:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5408,7 +5407,7 @@ msgstr "" " Inicio [%*zu]: %0#*<PRIx64>, longitud: %5<PRIu64>, compensación CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5488 src/readelf.c:8425 #, fuzzy, c-format msgid "" "\n" @@ -5417,150 +5416,150 @@ msgstr "" "\n" "Tabla en compensación %Zu:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:5511 +#: src/readelf.c:5508 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5523 +#: src/readelf.c:5520 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5527 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5535 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5544 +#: src/readelf.c:5541 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5555 +#: src/readelf.c:5552 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:5610 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5651 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5674 src/readelf.c:9176 #, fuzzy, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5729 src/readelf.c:9231 #, fuzzy, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5768 src/readelf.c:9270 #, fuzzy, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:5823 +#: src/readelf.c:5820 #, fuzzy, c-format msgid "invalid range list data" msgstr "datos inválidos" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <DATOS INVÃLIDOS>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6104 src/readelf.c:9798 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacÃa\n" -#: src/readelf.c:6367 +#: src/readelf.c:6364 #, fuzzy msgid " <INVALID DATA>\n" msgstr " <DATOS INVÃLIDOS>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6621 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5570,7 +5569,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#<PRIx64>:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5579,65 +5578,65 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6790 src/readelf.c:6944 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:6808 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:6814 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:6924 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:6931 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:6968 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr "Puntero %-26sLSDA: %#<PRIx64>\n" -#: src/readelf.c:7053 +#: src/readelf.c:7050 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7060 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7082 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:7415 +#: src/readelf.c:7412 #, fuzzy, c-format msgid "invalid file (%<PRId64>): %s" msgstr "Archivo inválido" -#: src/readelf.c:7419 +#: src/readelf.c:7416 #, fuzzy, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:7423 +#: src/readelf.c:7420 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5648,12 +5647,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " [Offset]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7785 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7805 #, fuzzy, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5666,7 +5665,7 @@ msgstr "" "Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n" " Tipo de firma: %#<PRIx64>, Tipo de compensación: %#<PRIx64>\n" -#: src/readelf.c:7820 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5677,39 +5676,39 @@ msgstr "" " Versión: %<PRIu16>, Compensación de sección de abreviatura: %<PRIu64>, " "Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "no se puede obtener DIE en compensación: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7892 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "" "no se ha podido obtener etiqueta de DIE en compensación%<PRIu64> en sección " "'%s': %s" -#: src/readelf.c:7933 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "No se puede obtener próximo DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7980 #, fuzzy, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5720,7 +5719,7 @@ msgstr "" " Versión: %<PRIu16>, Compensación de sección de abreviatura: %<PRIu64>, " "Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n" -#: src/readelf.c:8037 +#: src/readelf.c:8032 #, fuzzy, c-format msgid "" "\n" @@ -5730,18 +5729,18 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" -#: src/readelf.c:8369 +#: src/readelf.c:8364 #, fuzzy, c-format msgid "unknown form: %s" msgstr "Forma %<PRIx64> desconocida" -#: src/readelf.c:8400 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "No se puede obtener sección de datos de lÃnea: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8516 #, fuzzy, c-format msgid "" "\n" @@ -5772,34 +5771,34 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8538 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "no se puede obtener versión de sÃmbolo: %s" -#: src/readelf.c:8532 +#: src/readelf.c:8546 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "no hay valor de dirección" -#: src/readelf.c:8540 +#: src/readelf.c:8554 #, fuzzy, c-format msgid "cannot handle segment selector size: %u\n" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:8550 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "datos inválidos en compensación %tu en sección [%zu] '%s'" -#: src/readelf.c:8565 +#: src/readelf.c:8579 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] " [%*<PRIuFAST8>] argumento %hhu \n" msgstr[1] " [%*<PRIuFAST8>] argumento %hhu\n" -#: src/readelf.c:8576 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5807,12 +5806,12 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8596 src/readelf.c:8673 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8667 #, fuzzy msgid "" "\n" @@ -5821,7 +5820,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:8714 +#: src/readelf.c:8728 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5829,7 +5828,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:8753 +#: src/readelf.c:8774 #, fuzzy msgid "" "\n" @@ -5838,7 +5837,7 @@ msgstr "" "\n" " Declaraciones de número de LÃnea:" -#: src/readelf.c:8757 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5846,121 +5845,132 @@ msgstr "" "\n" " Declaraciones de número de LÃnea:" -#: src/readelf.c:8777 +#: src/readelf.c:8793 #, fuzzy, c-format msgid "invalid maximum operations per instruction is zero" msgstr "longitud mÃnima inválida de tamaño de cadena coincidente" -#: src/readelf.c:8811 +#: src/readelf.c:8827 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " opcode especial %u: dirección+%u = %s, lÃnea%+d = %zu\n" -#: src/readelf.c:8815 +#: src/readelf.c:8831 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" " opcode especial %u: dirección+%u = %s, op_index = %u, lÃnea%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8857 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:8859 +#: src/readelf.c:8875 #, fuzzy, c-format msgid " set address to " msgstr "Establecer dirección a %s\n" -#: src/readelf.c:8887 +#: src/readelf.c:8903 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" "definir nuevo archivo: dir=%u, mtime=%<PRIu64>, longitud=%<PRIu64>, nombre=" "%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" +#: src/readelf.c:8944 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8968 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "También mostrar nombres de función" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8975 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8987 msgid " copy" msgstr "Copiar" -#: src/readelf.c:8929 +#: src/readelf.c:8998 #, fuzzy, c-format msgid " advance address by %u to " msgstr "Dirección de avance por %u a %s\n" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " lÃnea de avance por la constante %d a %<PRId64>\n" -#: src/readelf.c:8955 +#: src/readelf.c:9024 #, c-format msgid " set file to %<PRIu64>\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:8966 +#: src/readelf.c:9035 #, c-format msgid " set column to %<PRIu64>\n" msgstr " Establecer columna a %<PRIu64>\n" -#: src/readelf.c:8973 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr "Establecer '%s' a %<PRIuFAST8>\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:8990 +#: src/readelf.c:9059 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "Dirección de avance por constante %u a %s\n" -#: src/readelf.c:9010 +#: src/readelf.c:9079 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "dirección de avance por valor corregido %u a %s\n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:9035 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" @@ -5968,110 +5978,110 @@ msgstr " establecer isa para %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] " opcódigo con parámetro %<PRIu8> desconocido:" msgstr[1] " opcódigo con parámetros %<PRIu8> desconocido:" -#: src/readelf.c:9084 +#: src/readelf.c:9153 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9319 #, fuzzy, c-format msgid " <INVALID DATA>\n" msgstr " <DATOS INVÃLIDOS>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9359 #, fuzzy, c-format msgid "invalid loclists data" msgstr "datos inválidos" -#: src/readelf.c:9543 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " <INVALID DATA>\n" msgstr " <DATOS INVÃLIDOS>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "no es posible obtener datos de la sección de macro información: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** cadena no finalizada al final de la sección" -#: src/readelf.c:9914 +#: src/readelf.c:9983 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** cadena no finalizada al final de la sección" -#: src/readelf.c:10015 +#: src/readelf.c:10084 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:10027 +#: src/readelf.c:10096 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10109 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>" msgstr " Dirección de punto de entrada: %#<PRIx64>\n" -#: src/readelf.c:10069 +#: src/readelf.c:10138 #, fuzzy, c-format msgid " Offset length: %<PRIu8>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10077 +#: src/readelf.c:10146 #, fuzzy, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:10102 +#: src/readelf.c:10171 #, fuzzy, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " opcódigo con parámetro %<PRIu8> desconocido:" -#: src/readelf.c:10109 +#: src/readelf.c:10178 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10190 #, fuzzy, c-format msgid " %<PRIu8> arguments:" msgstr " [%*<PRIuFAST8>] argumento %hhu \n" -#: src/readelf.c:10136 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" " Compensación [%5d] DIE: %6<PRId64>, Compensación CU DIE: %6<PRId64>, " "nombre: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -6083,42 +6093,42 @@ msgstr "" " %*s String\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10465 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:10425 +#: src/readelf.c:10494 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10593 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10526 +#: src/readelf.c:10595 #, fuzzy, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10540 +#: src/readelf.c:10609 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10549 +#: src/readelf.c:10618 #, fuzzy, c-format msgid " Padding: %8<PRIx16>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10603 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -6127,7 +6137,7 @@ msgstr "" "\n" "Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -6136,22 +6146,22 @@ msgstr "" "\n" "Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -6159,7 +6169,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:10782 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -6172,12 +6182,12 @@ msgstr "" " Landing pad: %#<PRIx64>\n" " Action: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:10882 +#: src/readelf.c:10951 #, fuzzy, c-format msgid "" "\n" @@ -6186,37 +6196,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10980 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10929 +#: src/readelf.c:10998 #, fuzzy, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10936 +#: src/readelf.c:11005 #, fuzzy, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10943 +#: src/readelf.c:11012 #, fuzzy, c-format msgid " address offset: %#<PRIx32>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:10950 +#: src/readelf.c:11019 #, fuzzy, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10957 +#: src/readelf.c:11026 #, fuzzy, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:10971 +#: src/readelf.c:11040 #, fuzzy, c-format msgid "" "\n" @@ -6225,7 +6235,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11065 #, fuzzy, c-format msgid "" "\n" @@ -6234,7 +6244,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11094 #, fuzzy, c-format msgid "" "\n" @@ -6243,7 +6253,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11126 #, fuzzy, c-format msgid "" "\n" @@ -6252,18 +6262,18 @@ msgstr "" "\n" "Tabla de sÃmbolos inválida en compensación %#0<PRIx64>\n" -#: src/readelf.c:11195 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "no se puede depurar descriptor de contexto: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "no es posible convertir datos de la nota principal: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -6272,21 +6282,21 @@ msgstr "" "\n" "%*s... <repeats %u more times> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:12466 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12583 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "no se puede obtener el contenido de sección de nota: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6295,7 +6305,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de %<PRIu64> bytes en compensación %#0<PRIx64>:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6304,7 +6314,7 @@ msgstr "" "\n" "Segmento de nota de %<PRIu64> bytes en compensación %#0<PRIx64>:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12686 #, fuzzy, c-format msgid "" "\n" @@ -6313,12 +6323,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12713 src/readelf.c:12764 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "no se pueden obtener datos para sección [%Zu] '%s': %s" -#: src/readelf.c:12654 +#: src/readelf.c:12718 #, fuzzy, c-format msgid "" "\n" @@ -6328,7 +6338,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12723 #, fuzzy, c-format msgid "" "\n" @@ -6339,7 +6349,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12737 #, fuzzy, c-format msgid "" "\n" @@ -6348,7 +6358,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12769 #, fuzzy, c-format msgid "" "\n" @@ -6358,7 +6368,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12774 #, fuzzy, c-format msgid "" "\n" @@ -6369,7 +6379,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6378,7 +6388,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:12789 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6387,12 +6397,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:12846 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "no se puede obtener el Ãndice de sÃmbolo de archivo '%s': %s" -#: src/readelf.c:12849 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6401,7 +6411,7 @@ msgstr "" "\n" "Archivo '%s' no tiene Ãndice de sÃmbolo\n" -#: src/readelf.c:12853 +#: src/readelf.c:12914 #, fuzzy, c-format msgid "" "\n" @@ -6410,12 +6420,12 @@ msgstr "" "\n" "Ãndice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12932 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "no es posible extraer miembro en compensación %Zu en '%s': %s" -#: src/readelf.c:12876 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" @@ -6512,39 +6522,39 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "sección inválida" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:480 +#, fuzzy msgid "cannot get section header" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(TOTALES)\n" @@ -6708,27 +6718,24 @@ msgstr "Imprimir las cadenas de caracteres imprimibles en archivos." msgid "invalid value '%s' for %s parameter" msgstr "Valor inválido '%s' para parámetro %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "longitud mÃnima inválida de tamaño de cadena coincidente" -#: src/strings.c:585 -#, fuzzy, c-format +#: src/strings.c:584 +#, fuzzy msgid "lseek failed" msgstr "lseek64 falló" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "re-mmap falló" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "mprotect falló" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" @@ -6793,54 +6800,51 @@ msgstr "" msgid "Discard symbols from object files." msgstr "Descarta sÃmbolos de archivos objeto." -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "opción -f especificada dos veces" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "opción -F especificada dos veces" -#: src/strip.c:362 +#: src/strip.c:360 #, fuzzy, c-format msgid "cannot both keep and remove .comment section" msgstr "Quitar sección de comentario" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:479 +#, fuzzy msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "no sepuede stat fichero de entrada '%s'" -#: src/strip.c:761 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "mientras se abrÃa '%s'" -#: src/strip.c:799 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" @@ -6851,42 +6855,42 @@ msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:813 #, fuzzy, c-format msgid "%s: no support for stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" -#: src/strip.c:1047 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "No se puede abrir el segundo plano EBL" -#: src/strip.c:1092 -#, fuzzy, c-format +#: src/strip.c:1094 +#, fuzzy msgid "cannot get number of phdrs" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1108 src/strip.c:1151 #, fuzzy, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1118 src/strip.c:1161 #, fuzzy, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:1240 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:1250 +#: src/strip.c:1251 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "No se puede asignar sección PLT: %s" -#: src/strip.c:1259 +#: src/strip.c:1260 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "No se puede añadir nueva sección: %s" @@ -6906,7 +6910,7 @@ msgstr "%s: error al crear encabezamiento ELF: %s" msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1705 src/strip.c:2546 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" @@ -6916,67 +6920,67 @@ msgstr "%s: error al crear encabezamiento ELF: %s" msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "al crear sección de encabezamiento de sección: %s" -#: src/strip.c:1793 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "no se puede asignar espacio para los datos: %s" -#: src/strip.c:1859 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:1866 -#, fuzzy, c-format +#: src/strip.c:1862 +#, fuzzy msgid "no memory to create section header string table" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:2079 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:2477 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:2500 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "al computar la suma de verificación para información de depuración" -#: src/strip.c:2541 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error al leer el fichero: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "Error al terminar '%s': %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" @@ -7119,13 +7123,13 @@ msgstr "no pueden copiar datos de sección: %s" msgid "cannot create directory '%s'" msgstr "no se puede crear el directorio '%s'" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 #: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "no se puede obtener entrada de tabla de sÃmbolos: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 #: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" @@ -7136,123 +7140,131 @@ msgstr "no se puede actualizar tabla de sÃmbolos: %s" msgid "cannot update section header: %s" msgstr "no se puede actualizar encabezamiento de sección: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "no se puede actualizar reubicación: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "no se puede obtener versión de sÃmbolo: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:594 #, fuzzy, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "tipo de sección inesperado en [%Zu] con sh_link para symtab" -#: src/unstrip.c:848 +#: src/unstrip.c:849 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:851 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:868 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "compensación de cadena inválida en sÃmbolo [%Zu]" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "no se puede leer nombre [%Zu]: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1041 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr ".debug_line section inválida" -#: src/unstrip.c:1046 +#: src/unstrip.c:1047 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "No se puede obtener encabezamiento de sección 0th: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1052 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "no se puede obtener sección para sÃmbolos\n" -#: src/unstrip.c:1057 +#: src/unstrip.c:1058 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "no se puede obtener versión de sÃmbolo: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1063 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "no se puede leer sección '.gnu.prelink_undo': %s" -#: src/unstrip.c:1155 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1166 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "contenido inválido en sección '%s'" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "no se puede añadir nombre de sección a tabla de cadenas: %s" -#: src/unstrip.c:1362 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "" "no se pueden actualizar datos de tabla de cadenas de encabezamiento de " "sección: %s" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "no se puede obtener Ãndice de sección de tabla de cadenas de encabezamiento " "de sección: %s" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "No se puede obtener cuenta de sección: %s" -#: src/unstrip.c:1406 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "más secciones en el archivo despojado que en el archivo de depuración -- " "¿argumentos invertidos?" -#: src/unstrip.c:1410 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" @@ -7367,17 +7379,15 @@ msgid "cannot cache section addresses for module '%s': %s" msgstr "" "No puede almacenar en cache direcciones de sección para módulo '%s': %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "No se encontraron módulos coincidentes" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "coincidió con más de un módulo" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7385,7 +7395,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 #, fuzzy msgid "" "Combine stripped files with separate symbols and debug information.\n" @@ -7454,7 +7464,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -7467,6 +7477,10 @@ msgstr "También mostrar nombres de función" msgid "Show instances of inlined functions" msgstr "" +#, fuzzy, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "No se puede asignar sección PLT: %s" + #, fuzzy #~ msgid "" #~ " [%6tx] base address\n" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2009-09-20 15:32+0900\n" "Last-Translator: Hyu_gabaru Ryu_ichi <hyu_gabaru@yahoo.co.jp>\n" "Language-Team: Japanese <jp@li.org>\n" @@ -34,27 +34,19 @@ msgid "" " - 'auto', 'tty', 'if-tty'\n" msgstr "" -#: lib/color.c:194 src/objdump.c:728 -#, fuzzy, c-format -msgid "cannot allocate memory" -msgstr "PLT セクションを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" - #: lib/printversion.c:40 -#, fuzzy, c-format +#, c-format msgid "" "Copyright (C) %s The elfutils developers <%s>.\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -"Copyright (C) %s Red Hat, Inc.\n" -"This is free software; see the source for copying conditions. There is NO\n" -"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" -msgstr "メモリー消費済ã¿" +msgstr "メモリー枯渇" #: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 #: libelf/elf_error.c:60 @@ -64,7 +56,7 @@ msgstr "エラー無ã—" #: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:91 msgid "out of memory" -msgstr "メモリーä¸è¶³" +msgstr "メモリーä¸è¶³ã§ã™" #: libasm/asm_error.c:67 msgid "cannot create output file" @@ -72,7 +64,7 @@ msgstr "出力ファイルを作æˆã§ãã¾ã›ã‚“" #: libasm/asm_error.c:68 msgid "invalid parameter" -msgstr "ä¸å½“ãªãƒ‘ラメーター" +msgstr "ä¸å½“ãªãƒ‘ラメーターã§ã™" #: libasm/asm_error.c:69 msgid "cannot change mode of output file" @@ -84,46 +76,43 @@ msgstr "出力ファイルã®åå‰ã‚’変更ã§ãã¾ã›ã‚“" #: libasm/asm_error.c:71 msgid "duplicate symbol" -msgstr "é‡è¤‡ã‚·ãƒ³ãƒœãƒ«" +msgstr "é‡è¤‡ã‚·ãƒ³ãƒœãƒ«ã§ã™" #: libasm/asm_error.c:72 msgid "invalid section type for operation" -msgstr "æ“作ã«ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—" +msgstr "æ“作ã«ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã§ã™" #: libasm/asm_error.c:73 msgid "error during output of data" -msgstr "データã®å‡ºåŠ›ä¸ã«ã‚¨ãƒ©ãƒ¼" +msgstr "データ出力ä¸ã®ã‚¨ãƒ©ãƒ¼ã§ã™" #: libasm/asm_error.c:74 msgid "no backend support available" -msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚µãƒãƒ¼ãƒˆãŒåˆ©ç”¨ã§ãã¾ã›ã‚“" +msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚µãƒãƒ¼ãƒˆã‚’利用ã§ãã¾ã›ã‚“" #: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 #: libelf/elf_error.c:63 msgid "unknown error" -msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼" +msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ã§ã™" #: libcpu/i386_lex.l:122 -#, fuzzy, c-format -#| msgid "invalid page size value '%s': ignored" +#, c-format msgid "invalid character '%c' at line %d; ignored" -msgstr "ä¸å½“ãªãƒšãƒ¼ã‚¸ã‚µã‚¤ã‚ºå€¤ '%s': 無視ã—ã¾ã—ãŸ" +msgstr "ä¸å½“ãªæ–‡å— '%c' ㌠%d 行目ã«ã‚ã‚Šã¾ã™; 無視ã—ã¾ã—ãŸ" #: libcpu/i386_lex.l:123 -#, fuzzy, c-format -#| msgid "invalid page size value '%s': ignored" +#, c-format msgid "invalid character '\\%o' at line %d; ignored" -msgstr "ä¸å½“ãªãƒšãƒ¼ã‚¸ã‚µã‚¤ã‚ºå€¤ '%s': 無視ã—ã¾ã—ãŸ" +msgstr "ä¸å½“ãªæ–‡å— '\\%o' ㌠%d 行目ã«ã‚ã‚Šã¾ã™; 無視ã—ã¾ã—ãŸ" #: libcpu/i386_parse.y:554 -#, fuzzy, c-format -#| msgid "while reading linker script '%s': %s at line %d" +#, c-format msgid "while reading i386 CPU description: %s at line %d" -msgstr "リンカースクリプト '%1$s' èªè¾¼ã¿ä¸: %3$d 行目㮠%2$s" +msgstr "i386 CPU description ã®èªã¿è¾¼ã¿ä¸: %2$d 行目㮠%1$s" #: libdw/dwarf_error.c:59 msgid "invalid access" -msgstr "ä¸å½“ãªã‚¢ã‚¯ã‚»ã‚¹" +msgstr "ä¸å½“ãªã‚¢ã‚¯ã‚»ã‚¹ã§ã™" #: libdw/dwarf_error.c:60 msgid "no regular file" @@ -131,11 +120,11 @@ msgstr "一般ファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:61 msgid "I/O error" -msgstr "I/O エラー" +msgstr "I/O エラーã§ã™" #: libdw/dwarf_error.c:62 msgid "invalid ELF file" -msgstr "ä¸å½“㪠ELF ファイル" +msgstr "ä¸å½“㪠ELF ファイルã§ã™" #: libdw/dwarf_error.c:63 msgid "no DWARF information" @@ -143,31 +132,31 @@ msgstr "DWARF æƒ…å ±ãŒã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:64 msgid "cannot decompress DWARF" -msgstr "" +msgstr "DWARF を展開ã§ãã¾ã›ã‚“" #: libdw/dwarf_error.c:65 msgid "no ELF file" -msgstr "ELF ファイルãŒã‚ã‚Šã¾ã›ã‚“" +msgstr "ELF ファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:66 msgid "cannot get ELF header" -msgstr "ELF ヘッダーを得られã¾ã›ã‚“" +msgstr "ELF ヘッダーをå–å¾—ã§ãã¾ã›ã‚“" #: libdw/dwarf_error.c:68 msgid "not implemented" -msgstr "未実装" +msgstr "未実装ã§ã™" #: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159 msgid "invalid command" -msgstr "ä¸å½“ãªã‚³ãƒžãƒ³ãƒ‰" +msgstr "ä¸å½“ãªã‚³ãƒžãƒ³ãƒ‰ã§ã™" #: libdw/dwarf_error.c:70 msgid "invalid version" -msgstr "ä¸å½“ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³" +msgstr "ä¸å½“ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™" #: libdw/dwarf_error.c:71 msgid "invalid file" -msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«" +msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«ã§ã™" #: libdw/dwarf_error.c:72 msgid "no entries found" @@ -175,26 +164,23 @@ msgstr "é …ç›®ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:73 msgid "invalid DWARF" -msgstr "ä¸å½“㪠DWARF" +msgstr "ä¸å½“㪠DWARFã§ã™" #: libdw/dwarf_error.c:74 msgid "no string data" -msgstr "æ–‡å—データãŒã‚ã‚Šã¾ã›ã‚“" +msgstr "æ–‡å—列データã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:75 -#, fuzzy msgid ".debug_str section missing" -msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_str セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:76 -#, fuzzy msgid ".debug_line_str section missing" -msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_line_str セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:77 -#, fuzzy msgid ".debug_str_offsets section missing" -msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_str_offsets セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:78 msgid "no address value" @@ -202,23 +188,23 @@ msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:79 msgid "no constant value" -msgstr "固定値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" +msgstr "定数値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:80 msgid "no reference value" -msgstr "å‚照値ãŒã‚ã‚Šã¾ã›ã‚“" +msgstr "å‚照値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:81 msgid "invalid reference value" -msgstr "ä¸å½“ãªå‚照値" +msgstr "ä¸å½“ãªå‚照値ã§ã™" #: libdw/dwarf_error.c:82 msgid ".debug_line section missing" -msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_line セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:83 msgid "invalid .debug_line section" -msgstr "ä¸å½“㪠.debug_line セクション" +msgstr "ä¸å½“㪠.debug_line セクションã§ã™" #: libdw/dwarf_error.c:84 msgid "debug information too big" @@ -226,28 +212,25 @@ msgstr "デãƒãƒƒã‚°æƒ…å ±ãŒå¤§ãã™ãŽã¾ã™" #: libdw/dwarf_error.c:85 msgid "invalid DWARF version" -msgstr "ä¸å½“㪠DWARF ãƒãƒ¼ã‚¸ãƒ§ãƒ³" +msgstr "ä¸å½“㪠DWARF ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™" #: libdw/dwarf_error.c:86 msgid "invalid directory index" -msgstr "ä¸å½“ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ç´¢å¼•" +msgstr "ä¸å½“ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ç´¢å¼•ã§ã™" #: libdw/dwarf_error.c:87 libdwfl/libdwflP.h:73 msgid "address out of range" msgstr "アドレスãŒç¯„囲外ã§ã™" #: libdw/dwarf_error.c:88 -#, fuzzy msgid ".debug_loc section missing" -msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_loc セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:89 -#, fuzzy msgid ".debug_loclists section missing" -msgstr ".debug_line セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_loclists セクション見ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:90 -#, fuzzy msgid "not a location list value" msgstr "ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ãƒªã‚¹ãƒˆå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“" @@ -257,95 +240,91 @@ msgstr "ブãƒãƒƒã‚¯ãƒ‡ãƒ¼ã‚¿ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:92 msgid "invalid line index" -msgstr "ä¸å½“ãªè¡Œç´¢å¼•" +msgstr "ä¸å½“ãªè¡Œç´¢å¼•ã§ã™" #: libdw/dwarf_error.c:93 msgid "invalid address range index" -msgstr "ä¸å½“ãªã‚¢ãƒ‰ãƒ¬ã‚¹ç¯„囲索引" +msgstr "ä¸å½“ãªã‚¢ãƒ‰ãƒ¬ã‚¹ç¯„囲索引ã§ã™" #: libdw/dwarf_error.c:94 libdwfl/libdwflP.h:74 msgid "no matching address range" -msgstr "アドレス範囲ã«å¯¾å¿œã—ã¾ã›ã‚“" +msgstr "一致ã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ç¯„囲ãŒã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:95 msgid "no flag value" -msgstr "フラグ値ãŒã‚ã‚Šã¾ã›ã‚“" +msgstr "フラグ値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:96 libelf/elf_error.c:236 msgid "invalid offset" -msgstr "ä¸å½“ãªã‚ªãƒ•ã‚»ãƒƒãƒˆ" +msgstr "ä¸å½“ãªã‚ªãƒ•ã‚»ãƒƒãƒˆã§ã™" #: libdw/dwarf_error.c:97 msgid ".debug_ranges section missing" -msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_ranges セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:98 -#, fuzzy msgid ".debug_rnglists section missing" -msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_rnglists セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:99 msgid "invalid CFI section" -msgstr "ä¸å½“㪠CFI セクション" +msgstr "ä¸å½“㪠CFI セクションã§ã™" #: libdw/dwarf_error.c:100 msgid "no alternative debug link found" -msgstr "" +msgstr "代替デãƒãƒƒã‚°ãƒªãƒ³ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:101 -#, fuzzy msgid "invalid opcode" -msgstr "ä¸å½“ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰" +msgstr "ä¸å½“ãªã‚ªãƒšã‚³ãƒ¼ãƒ‰ã§ã™" #: libdw/dwarf_error.c:102 msgid "not a CU (unit) DIE" -msgstr "" +msgstr "CU (unit) DIE ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdw/dwarf_error.c:103 -#, fuzzy msgid "unknown language code" -msgstr "ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰" +msgstr "ä¸æ˜Žãªè¨€èªžã‚³ãƒ¼ãƒ‰ã§ã™" #: libdw/dwarf_error.c:104 -#, fuzzy msgid ".debug_addr section missing" -msgstr ".debug_ranges セクションãŒã‚ã‚Šã¾ã›ã‚“" +msgstr ".debug_addr セクションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" -msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:" +msgstr "入力é¸æŠžã‚ªãƒ—ション:" #: libdwfl/argp-std.c:48 msgid "Find addresses in FILE" -msgstr "ãµãã„ã‚‹ ä¸ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™" +msgstr "FILE ã®ä¸ã‹ã‚‰ アドレスを探ã™" #: libdwfl/argp-std.c:50 msgid "Find addresses from signatures found in COREFILE" -msgstr "COREFILE ä¸ã§è¦‹ã¤ã‹ã£ãŸç½²åã‹ã‚‰ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™" +msgstr "COREFILE ä¸ã§ 見ã¤ã‹ã£ãŸ ç½²åã‹ã‚‰ アドレスを 探ã™" #: libdwfl/argp-std.c:52 msgid "Find addresses in files mapped into process PID" -msgstr "プãƒã‚»ã‚¹ PID ã«å¯¾å¿œã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ä¸ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™" +msgstr "プãƒã‚»ã‚¹ PID 㫠対応ã™ã‚‹ ファイルä¸ã® アドレスを 探ã™" #: libdwfl/argp-std.c:54 msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" msgstr "" -"Linux ã® /proc/PID/maps å½¢å¼ã® ãµãã„ã‚‹ ã‹ã‚‰èªã¿è¾¼ã‚“ã ã‚‚ã®ã«å¯¾å¿œã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«" -"ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™" +"Linux ã® /proc/PID/maps å½¢å¼ã® FILE ã‹ã‚‰ èªã¿è¾¼ã‚“ã マッピング ã•ã‚ŒãŸ ファイ" +"ル ã‹ã‚‰ アドレスを 探ã™" #: libdwfl/argp-std.c:56 msgid "Find addresses in the running kernel" -msgstr "実行ä¸ã®ã‚«ãƒ¼ãƒãƒ«ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™" +msgstr "実行ä¸ã® カーãƒãƒ«ã‹ã‚‰ アドレスを 探ã™" #: libdwfl/argp-std.c:58 msgid "Kernel with all modules" -msgstr "å…¨ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»˜ãã®ã‚«ãƒ¼ãƒãƒ«" +msgstr "å…¨ã¦ã® モジュール付ã㮠カーãƒãƒ«" #: libdwfl/argp-std.c:60 src/stack.c:650 msgid "Search path for separate debuginfo files" -msgstr "分離ã—㟠debuginfo ファイルã¹ãパスを探ã™" +msgstr "分離ã•ã‚ŒãŸ debuginfo ファイルを 探索ã™ã‚‹ パス" #: libdwfl/argp-std.c:161 msgid "only one of -e, -p, -k, -K, or --core allowed" @@ -358,21 +337,20 @@ msgstr "カーãƒãƒ«ã‚·ãƒ³ãƒœãƒ«ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“" #. Non-fatal to have no modules since we do have the kernel. #: libdwfl/argp-std.c:238 msgid "cannot find kernel modules" -msgstr "カーãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘られã¾ã›ã‚“" +msgstr "カーãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/argp-std.c:255 msgid "cannot find kernel or modules" -msgstr "カーãƒãƒ«ã‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘られã¾ã›ã‚“" +msgstr "カーãƒãƒ«ã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/argp-std.c:294 #, c-format msgid "cannot read ELF core file: %s" -msgstr "ELF コアファイルをèªã‚ã¾ã›ã‚“: %s" +msgstr "ELF コアファイルをèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" #: libdwfl/argp-std.c:317 -#, fuzzy msgid "Not enough memory" -msgstr "メモリーä¸è¶³" +msgstr "メモリーãŒå分ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdwfl/argp-std.c:327 msgid "No modules recognized in core file" @@ -380,177 +358,166 @@ msgstr "コアファイルã®ä¸ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’èªè˜ã§ãã¾ã›ã‚“" #: libdwfl/libdwflP.h:54 msgid "See errno" -msgstr "" +msgstr "errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„" #: libdwfl/libdwflP.h:55 msgid "See elf_errno" -msgstr "" +msgstr "elf_errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„" #: libdwfl/libdwflP.h:56 msgid "See dwarf_errno" -msgstr "" +msgstr "dwarf_errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„" #: libdwfl/libdwflP.h:57 msgid "See ebl_errno (XXX missing)" -msgstr "" +msgstr "ebl_errno ã‚’å‚ç…§ã—ã¦ãã ã•ã„(XXX ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“)" #: libdwfl/libdwflP.h:58 msgid "gzip decompression failed" -msgstr "" +msgstr "gzip ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ" #: libdwfl/libdwflP.h:59 msgid "bzip2 decompression failed" -msgstr "" +msgstr "bzip2 ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ" #: libdwfl/libdwflP.h:60 msgid "LZMA decompression failed" -msgstr "" +msgstr "LZMA ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ" #: libdwfl/libdwflP.h:61 msgid "zstd decompression failed" -msgstr "" +msgstr "zstd ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ" #: libdwfl/libdwflP.h:62 msgid "no support library found for machine" -msgstr "" +msgstr "マシン用ã®ã‚µãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ–ラリãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:63 msgid "Callbacks missing for ET_REL file" -msgstr "" +msgstr "ET_REL ファイル用ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:64 msgid "Unsupported relocation type" -msgstr "" +msgstr "未対応ã®ãƒªãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã§ã™" #: libdwfl/libdwflP.h:65 msgid "r_offset is bogus" -msgstr "" +msgstr "r_offset ãŒå½ç‰©ã§ã™" #: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175 msgid "offset out of range" -msgstr "オフセットãŒç¯„囲を越ãˆã¦ã„ã‚‹" +msgstr "オフセットãŒç¯„囲外ã§ã™" #: libdwfl/libdwflP.h:67 -#, fuzzy msgid "relocation refers to undefined symbol" -msgstr "定義ã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã®å°åˆ·ã‚µã‚¤ã‚º" +msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ãŒæœªå®šç¾©ã‚·ãƒ³ãƒœãƒ«ã‚’å‚ç…§ã—ã¦ã„ã¾ã™" #: libdwfl/libdwflP.h:68 msgid "Callback returned failure" -msgstr "" +msgstr "コールãƒãƒƒã‚¯ãŒå¤±æ•—ã‚’è¿”ã—ã¾ã—ãŸ" #: libdwfl/libdwflP.h:69 -#, fuzzy msgid "No DWARF information found" -msgstr "DWARF æƒ…å ±ãŒã‚ã‚Šã¾ã›ã‚“" +msgstr "DWARF æƒ…å ±ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:70 msgid "No symbol table found" -msgstr "" +msgstr "シンボルテーブルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:71 -#, fuzzy msgid "No ELF program headers" -msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを得られã¾ã›ã‚“: %s" +msgstr "ELF プãƒã‚°ãƒ©ãƒ ヘッダーã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:72 msgid "address range overlaps an existing module" -msgstr "" +msgstr "アドレス範囲ãŒæ—¢å˜ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨é‡ãªã‚Šã¾ã™" #: libdwfl/libdwflP.h:75 msgid "image truncated" -msgstr "" +msgstr "イメージãŒåˆ‡ã‚Šè©°ã‚られã¦ã„ã¾ã™" #: libdwfl/libdwflP.h:76 -#, fuzzy msgid "ELF file opened" -msgstr "ファイルã®ã‚ªãƒ¼ãƒ—ンを追跡ã—ã¾ã™ã€‚" +msgstr "既㫠ELF ファイルを開ã„ã¦ã„ã¾ã™" #: libdwfl/libdwflP.h:77 -#, fuzzy msgid "not a valid ELF file" -msgstr "ä¸å½“㪠ELF ファイル" +msgstr "ä¸å½“㪠ELF ファイルã§ã™" #: libdwfl/libdwflP.h:78 -#, fuzzy msgid "cannot handle DWARF type description" -msgstr "Elf 記述åを生æˆã§ãã¾ã›ã‚“: %s" +msgstr "DWARF type description ã‚’æ“作ã§ãã¾ã›ã‚“" #: libdwfl/libdwflP.h:79 msgid "ELF file does not match build ID" -msgstr "" +msgstr "ELF ファイルãŒãƒ“ルド ID ã¨ä¸€è‡´ã—ã¾ã›ã‚“" #: libdwfl/libdwflP.h:80 -#, fuzzy msgid "corrupt .gnu.prelink_undo section data" -msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" +msgstr ".gnu.prelink_undo セクションデータãŒå£Šã‚Œã¦ã„ã¾ã™" #: libdwfl/libdwflP.h:81 msgid "Internal error due to ebl" -msgstr "" +msgstr "ebl ã«èµ·å› ã™ã‚‹å†…部エラー" #: libdwfl/libdwflP.h:82 msgid "Missing data in core file" -msgstr "" +msgstr "コアファイルã®ä¸ã«ãƒ‡ãƒ¼ã‚¿ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:83 -#, fuzzy msgid "Invalid register" -msgstr "ä¸å½“ãªãƒ‘ラメーター" +msgstr "ä¸å½“ãªãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼ã§ã™" #: libdwfl/libdwflP.h:84 msgid "Error reading process memory" -msgstr "" +msgstr "プãƒã‚»ã‚¹ãƒ¡ãƒ¢ãƒªãƒ¼ã®èªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã§ã™" #: libdwfl/libdwflP.h:85 msgid "Couldn't find architecture of any ELF" -msgstr "" +msgstr "ELF ã®ã‚¢ãƒ¼ã‚テクãƒãƒ£ãŒï¼‘ã¤ã‚‚見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #: libdwfl/libdwflP.h:86 msgid "Error parsing /proc filesystem" -msgstr "" +msgstr "/proc ファイルシステムã®ãƒ‘ースエラーã§ã™" #: libdwfl/libdwflP.h:87 -#, fuzzy msgid "Invalid DWARF" -msgstr "ä¸å½“㪠DWARF" +msgstr "ä¸å½“㪠DWARF ã§ã™" #: libdwfl/libdwflP.h:88 msgid "Unsupported DWARF" -msgstr "" +msgstr "未対応㮠DWARF ã§ã™" #: libdwfl/libdwflP.h:89 msgid "Unable to find more threads" -msgstr "" +msgstr "ã“れ以上スレッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:90 msgid "Dwfl already has attached state" -msgstr "" +msgstr "Dwfl ã¯æ—¢ã«ã‚¢ã‚¿ãƒƒãƒçŠ¶æ…‹ã§ã™" #: libdwfl/libdwflP.h:91 msgid "Dwfl has no attached state" -msgstr "" +msgstr "Dwfl ã¯ã‚¢ã‚¿ãƒƒãƒçŠ¶æ…‹ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libdwfl/libdwflP.h:92 msgid "Unwinding not supported for this architecture" -msgstr "" +msgstr "ã“ã®ã‚¢ãƒ¼ã‚テクãƒãƒ£ã«å¯¾å¿œã—ã¦ã„ãªã„å·»ã戻ã—ã§ã™" #: libdwfl/libdwflP.h:93 -#, fuzzy msgid "Invalid argument" -msgstr "ä¸å½“ãªãƒ‘ラメーター" +msgstr "ä¸å½“ãªå¼•æ•°ã§ã™" #: libdwfl/libdwflP.h:94 -#, fuzzy msgid "Not an ET_CORE ELF file" -msgstr "ä¸å½“㪠ELF ファイル" +msgstr "ET_CORE ELF ファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libebl/eblbackendname.c:41 msgid "No backend" msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -562,14 +529,14 @@ msgid "<unknown>: %#<PRIx64>" msgstr "<ä¸æ˜Ž>: %#<PRIx64>" #: libebl/eblobjnote.c:58 -#, fuzzy, c-format +#, c-format msgid "unknown SDT version %u\n" -msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³" +msgstr "ä¸æ˜Žãª SDT ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %u ã§ã™\n" #: libebl/eblobjnote.c:76 -#, fuzzy, c-format +#, c-format msgid "invalid SDT probe descriptor\n" -msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°å" +msgstr "ä¸å½“㪠SDT probe 記述åã§ã™\n" #: libebl/eblobjnote.c:126 #, c-format @@ -601,21 +568,21 @@ msgstr "" msgid " Args: " msgstr "" -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " -msgstr " ビルト ID: " +msgstr " ビルド ID: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr "" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " -msgstr " OS: %sã€ABI: " +msgstr "" #: libebl/eblosabiname.c:70 msgid "Stand alone" @@ -628,98 +595,96 @@ msgstr "<ä¸æ˜Ž>: %d" #: libelf/elf_error.c:67 msgid "unknown version" -msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³" +msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™" #: libelf/elf_error.c:71 msgid "unknown type" -msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—" +msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—ã§ã™" #: libelf/elf_error.c:75 msgid "invalid `Elf' handle" -msgstr "無効㪠`Elf' ã®å‡¦ç†" +msgstr "無効㪠`Elf' ã®ãƒãƒ³ãƒ‰ãƒ«ã§ã™" #: libelf/elf_error.c:79 msgid "invalid size of source operand" -msgstr "ソース演算åã®å¤§ãã•ãŒç„¡åŠ¹" +msgstr "ソース演算åã®å¤§ãã•ãŒç„¡åŠ¹ã§ã™" #: libelf/elf_error.c:83 msgid "invalid size of destination operand" -msgstr "宛先演算åã®å¤§ãã•ãŒç„¡åŠ¹" +msgstr "宛先演算åã®å¤§ãã•ãŒç„¡åŠ¹ã§ã™" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" -msgstr "無効ãªã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰" +msgstr "無効ãªã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã§ã™" #: libelf/elf_error.c:95 msgid "invalid file descriptor" -msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°å" +msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°åã§ã™" #: libelf/elf_error.c:99 -#, fuzzy msgid "invalid ELF file data" -msgstr "ä¸å½“㪠ELF ファイル" +msgstr "ä¸å½“㪠ELF ファイルデータã§ã™" #: libelf/elf_error.c:103 msgid "invalid operation" -msgstr "ä¸å½“ãªæ“作" +msgstr "ä¸å½“ãªæ“作ã§ã™" #: libelf/elf_error.c:107 msgid "ELF version not set" -msgstr "ELF ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¨å®šã•ã‚Œã¦ã„ãªã„" +msgstr "ELF ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“" #: libelf/elf_error.c:119 msgid "invalid fmag field in archive header" -msgstr "アーカイブヘッダーã®ä¸å½“㪠fmag é ˜åŸŸ" +msgstr "アーカイブヘッダーã®ä¸å½“㪠fmag é ˜åŸŸã§ã™" #: libelf/elf_error.c:123 msgid "invalid archive file" -msgstr "ä¸å½“ãªã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイル" +msgstr "ä¸å½“ãªã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイルã§ã™" #: libelf/elf_error.c:127 msgid "descriptor is not for an archive" -msgstr "記述åã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–用ã§ã¯ã‚ã‚Šã¾ã›ã‚“" +msgstr "記述åãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–用ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: libelf/elf_error.c:131 msgid "no index available" -msgstr "索引ãŒä½¿ãˆã¾ã›ã‚“" +msgstr "利用ã§ãる索引ãŒã‚ã‚Šã¾ã›ã‚“" #: libelf/elf_error.c:135 msgid "cannot read data from file" -msgstr "ファイルã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’èªã¿ã¾ã›ã‚“" +msgstr "ファイルã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“" #: libelf/elf_error.c:139 msgid "cannot write data to file" -msgstr "ファイルã¸ãƒ‡ãƒ¼ã‚¿ã‚’書ã‘ã¾ã›ã‚“" +msgstr "ファイルã¸ãƒ‡ãƒ¼ã‚¿ã‚’書ãè¾¼ã‚ã¾ã›ã‚“" #: libelf/elf_error.c:143 msgid "invalid binary class" -msgstr "ä¸å½“ãªãƒã‚¤ãƒŠãƒªãƒ¼ã‚¯ãƒ©ã‚¹" +msgstr "ä¸å½“ãªãƒã‚¤ãƒŠãƒªãƒ¼ã‚¯ãƒ©ã‚¹ã§ã™" #: libelf/elf_error.c:147 msgid "invalid section index" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•ã§ã™" #: libelf/elf_error.c:151 msgid "invalid operand" -msgstr "ä¸å½“ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰" +msgstr "ä¸å½“ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰ã§ã™" #: libelf/elf_error.c:155 msgid "invalid section" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã™" #: libelf/elf_error.c:163 msgid "executable header not created first" -msgstr "エクゼã‚ュータブルヘッダーãŒæœ€åˆã«ä½œã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" +msgstr "実行å¯èƒ½ãƒ˜ãƒƒãƒ€ãƒ¼ãŒæœ€åˆã«ä½œã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" #: libelf/elf_error.c:167 msgid "file descriptor disabled" -msgstr "ファイル記述åãŒæ©Ÿèƒ½ã—ã¾ã›ã‚“" +msgstr "ファイル記述åãŒç„¡åŠ¹åŒ–ã•ã‚Œã¦ã„ã¾ã™" #: libelf/elf_error.c:171 -#, fuzzy msgid "archive/member file descriptor mismatch" -msgstr "アーカイブ/メンãƒãƒ¼é ˜åŸŸãŒä¸æ•´åˆã§ã™" +msgstr "アーカイブ/メンãƒãƒ¼ã®ãƒ•ã‚¡ã‚¤ãƒ«è¨˜è¿°åã®ä¸æ•´åˆã§ã™" #: libelf/elf_error.c:179 msgid "cannot manipulate null section" @@ -727,21 +692,21 @@ msgstr "null セクションをæ“作ã§ãã¾ã›ã‚“" #: libelf/elf_error.c:183 msgid "data/scn mismatch" -msgstr "データ/scnãŒä¸æ•´åˆã§ã™" +msgstr "データ/scnã®ä¸æ•´åˆã§ã™" #: libelf/elf_error.c:187 msgid "invalid section header" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼ã§ã™" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" -msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" +msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿ã§ã™" #: libelf/elf_error.c:195 msgid "unknown data encoding" -msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰" +msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã§ã™" #: libelf/elf_error.c:199 msgid "section `sh_size' too small for data" @@ -749,15 +714,15 @@ msgstr "`sh_size' セクションãŒãƒ‡ãƒ¼ã‚¿ã«ã¯å°ã•ã™ãŽã¾ã™" #: libelf/elf_error.c:203 msgid "invalid section alignment" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³èª¿æ•´" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ©ã‚¤ãƒ³ãƒ¡ãƒ³ãƒˆã§ã™" #: libelf/elf_error.c:207 msgid "invalid section entry size" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³é …ç›®ã®å¤§ãã•" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³é …ç›®ã®å¤§ãã•ã§ã™" #: libelf/elf_error.c:211 msgid "update() for write on read-only file" -msgstr "èªè¾¼ã¿å°‚用ファイルã§ã®æ›¸è¾¼ã¿ã®ãŸã‚ã® update()" +msgstr "èªã¿è¾¼ã¿å°‚用ファイルã¸ã®æ›¸ãè¾¼ã¿ã® update() ã§ã™" #: libelf/elf_error.c:215 msgid "no such file" @@ -765,148 +730,150 @@ msgstr "ãã®ã‚ˆã†ãªãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“" #: libelf/elf_error.c:219 msgid "only relocatable files can contain section groups" -msgstr "リãƒã‚±ãƒ¼ã‚¿ãƒ–ルファイルã®ã¿ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™" +msgstr "リãƒã‚±ãƒ¼ã‚¿ãƒ–ルファイルã®ã¿ãŒã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™" #: libelf/elf_error.c:224 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" -"プãƒã‚°ãƒ©ãƒ ヘッダーã¯ã‚¨ã‚¯ã‚¼ã‚ュータブルã‹ã€å…±ç”¨ã‚ªãƒ–ジェクトã€ã‚³ã‚¢ãƒ•ã‚¡ã‚¤ãƒ«ã«ã®" -"ã¿èªã‚られã¦ã„ã¾ã™" +"プãƒã‚°ãƒ©ãƒ ヘッダーã¯ã€å®Ÿè¡Œå¯èƒ½ãƒ•ã‚¡ã‚¤ãƒ«ã€å…±æœ‰ã‚ªãƒ–ジェクトã€ã‚³ã‚¢ãƒ•ã‚¡ã‚¤ãƒ«ã«ã®ã¿" +"èªã‚られã¦ã„ã¾ã™" #: libelf/elf_error.c:231 msgid "file has no program header" msgstr "ファイルã«ãƒ—ãƒã‚°ãƒ©ãƒ ヘッダーãŒã‚ã‚Šã¾ã›ã‚“" #: libelf/elf_error.c:241 -#, fuzzy msgid "invalid section type" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã§ã™" #: libelf/elf_error.c:246 -#, fuzzy msgid "invalid section flags" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³" +msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ•ãƒ©ã‚°ã§ã™" #: libelf/elf_error.c:251 -#, fuzzy msgid "section does not contain compressed data" -msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" +msgstr "セクションãŒåœ§ç¸®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“" #: libelf/elf_error.c:256 msgid "section contains compressed data" -msgstr "" +msgstr "セクションãŒåœ§ç¸®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚“ã§ã„ã¾ã™" #: libelf/elf_error.c:261 -#, fuzzy msgid "unknown compression type" -msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—" +msgstr "ä¸æ˜Žãªåœ§ç¸®ã‚¿ã‚¤ãƒ—ã§ã™" #: libelf/elf_error.c:266 -#, fuzzy msgid "cannot compress data" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "データを圧縮ã§ãã¾ã›ã‚“" #: libelf/elf_error.c:271 -#, fuzzy msgid "cannot decompress data" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "データを展開ã§ãã¾ã›ã‚“" -#: src/addr2line.c:57 -#, fuzzy +#: src/addr2line.c:59 msgid "Input format options:" -msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:" +msgstr "入力フォーマットオプション:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." -msgstr "" +msgstr "アドレスを NAME セクション㫠対ã™ã‚‹ 相対 オフセット ã¨ã—㦠扱ã†" -#: src/addr2line.c:61 -#, fuzzy +#: src/addr2line.c:63 msgid "Output format options:" -msgstr "出力形å¼:" +msgstr "出力フォーマットオプション:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" -msgstr "" +msgstr "å„é …ç›®ã®å‰ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’表示" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" -msgstr "" +msgstr "ソースファイル㮠ベースãƒãƒ¼ãƒ ã®ã¿ 表示" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" -msgstr "" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" +msgstr "コンパイルディレクトリを 使用ã—㦠絶対ファイルåã‚’ 表示" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" -msgstr "" +msgstr "関数åも表示" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" -msgstr "" +msgstr "シンボルå ã¾ãŸã¯ セクションåã‚‚ 表示" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" -msgstr "" +msgstr "シンボルå㨠セクションåã‚‚ 表示" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" -msgstr "" +msgstr "行テーブルフラグも表示" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" +"アドレス㮠サブルーãƒãƒ³ã® インライン展開を 引ãèµ·ã“ã—㟠全ã¦ã® ソースä½ç½®ã‚’ " +"表示" -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" -msgstr "" +msgstr "デマングルã•ã‚ŒãŸ シンボルを 表示 (ARGã¯å¸¸ã«ç„¡è¦–ã•ã‚Œã‚‹ï¼‰" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" -msgstr "" +msgstr "å…¨ã¦ã® æƒ…å ±ã‚’ 一行㧠表示ã—〠å—下ã’ã™ã‚‹" + +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "コンパイルディレクトリを 使用ã—㦠絶対ファイルåã‚’ 表示" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" -msgstr "雑則:" +msgstr "Misc:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" +"ADDR ã®ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¨è¡Œã®æƒ…å ±ã‚’ 検索ã™ã‚‹ (デフォルトã§ã¯ a.out ã‹ã‚‰ï¼‰" #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %#<PRIxMAX> lies outside section '%s'" msgstr "" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" -msgstr "" +msgstr "シンボル '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %#<PRIxMAX> lies outside contents of '%s'" msgstr "" #: src/ar.c:67 msgid "Commands:" -msgstr "コマンド:" +msgstr "コマンド:" #: src/ar.c:68 msgid "Delete files from archive." @@ -922,23 +889,23 @@ msgstr "アーカイブ内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å°åˆ·ã€‚" #: src/ar.c:71 msgid "Quick append files to archive." -msgstr "アーカイブã¸ã®å³åº§ã®ãƒ•ã‚¡ã‚¤ãƒ«è¿½åŠ 。" +msgstr "アーカイブ㸠ファイルを ç´ æ—©ã è¿½åŠ ã€‚" #: src/ar.c:73 msgid "Replace existing or insert new file into archive." -msgstr "アーカイブã¸ã®æ—¢å˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç½®ãæ›ãˆã‹ã€æ–°ã—ã„ファイルã®æŒ¿å…¥ã€‚" +msgstr "アーカイブã®æ—¢å˜ãƒ•ã‚¡ã‚¤ãƒ«ã®ç½®ãæ›ãˆã¾ãŸã¯æ–°ã—ã„ファイルã®æŒ¿å…¥ã€‚" #: src/ar.c:74 msgid "Display content of archive." -msgstr "アーカイブã®å†…容ã®è¡¨ç¤º" +msgstr "アーカイブã®å†…容ã®è¡¨ç¤ºã€‚" #: src/ar.c:75 msgid "Extract files from archive." -msgstr "アーカイブã‹ã‚‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å–出ã—" +msgstr "アーカイブã‹ã‚‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å–出ã—。" #: src/ar.c:77 msgid "Command Modifiers:" -msgstr "コマンド修飾å:" +msgstr "コマンド修飾å:" #: src/ar.c:78 msgid "Preserve original dates." @@ -950,11 +917,11 @@ msgstr "åå‰ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ [COUNT] ã®ä½¿ç”¨ã€‚" #: src/ar.c:81 msgid "Do not replace existing files with extracted files." -msgstr "æ—¢å˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’抽出ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã§ç½®ãæ›ãˆãªã„。" +msgstr "抽出ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã§æ—¢å˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãæ›ãˆãªã„。" #: src/ar.c:82 msgid "Allow filename to be truncated if necessary." -msgstr "å¿…è¦ãªã‚‰ã°ãƒ•ã‚¡ã‚¤ãƒ«åã®åˆ‡ã‚Šæ¨ã¦ã‚’èªã‚る。" +msgstr "å¿…è¦ãªã‚‰ã° ファイルå㮠切り詰ã‚ã‚’ èªã‚る。" #: src/ar.c:84 msgid "Provide verbose output." @@ -978,7 +945,7 @@ msgstr "-b ã¨åŒã˜ã€‚" #: src/ar.c:89 msgid "Suppress message when library has to be created." -msgstr "ライブラリーを生æˆã—ãªã‘ã‚Œã°ãªã‚‰ãªã„時ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’抑æ¢ã™ã‚‹ã€‚" +msgstr "ライブラリーを 生作æˆãªã‘れ㰠ãªã‚‰ãªã„時㫠メッセージを 抑æ¢ã™ã‚‹ã€‚" #: src/ar.c:91 msgid "Use full path for file matching." @@ -986,17 +953,17 @@ msgstr "ファイル照åˆã«ãƒ•ãƒ«ãƒ‘スを使ã†ã€‚" #: src/ar.c:92 msgid "Update only older files in archive." -msgstr "アーカイブã®å¤ã„ファイルã®ã¿æ›´æ–°ã™ã‚‹ã€‚" +msgstr "アーカイブ㮠å¤ã„ ファイルã®ã¿ æ›´æ–°ã™ã‚‹ã€‚" #. Short description of program. #: src/ar.c:98 msgid "Create, modify, and extract from archives." -msgstr "アーカイブã‹ã‚‰ä½œæˆã‚„ã€ä¿®æ£ã€æŠ½å‡ºã™ã‚‹ã€‚" +msgstr "アーカイブã®ä½œæˆã‚„ä¿®æ£ã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã‹ã‚‰ã®æŠ½å‡ºã‚’è¡Œã†ã€‚" #. Strings for arguments in help texts. #: src/ar.c:101 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" -msgstr "[メンãƒãƒ¼] [åˆè¨ˆ] アーカイブ [ファイル...]" +msgstr "" #: src/ar.c:180 #, c-format @@ -1021,7 +988,7 @@ msgstr "COUNT パラメーターãŒå¿…è¦ã§ã™" #: src/ar.c:218 #, c-format msgid "invalid COUNT parameter %s" -msgstr "ä¸å½“㪠COUNT パラメーター %s" +msgstr "ä¸å½“㪠COUNT パラメーター %s ã§ã™" #: src/ar.c:225 #, c-format @@ -1036,7 +1003,7 @@ msgstr "アーカイブåãŒå¿…è¦ã§ã™" #: src/ar.c:244 #, c-format msgid "command option required" -msgstr "" +msgstr "コマンドオプションãŒå¿…è¦ã§ã™" #: src/ar.c:295 #, c-format @@ -1046,7 +1013,7 @@ msgstr "1ã¤ã‚’越ãˆã‚‹æ“作ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸ" #: src/ar.c:389 #, c-format msgid "cannot open archive '%s'" -msgstr "アーカイブ '%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“" +msgstr "アーカイブ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“" #: src/ar.c:399 #, c-format @@ -1061,135 +1028,133 @@ msgstr "%s: アーカイブファイルã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: src/ar.c:407 #, c-format msgid "cannot stat archive '%s'" -msgstr "アーカイブ㫠stat ã§ãã¾ã›ã‚“: '%s'" +msgstr "アーカイブ '%s' ã‚’ stat ã§ãã¾ã›ã‚“" #: src/ar.c:419 #, c-format msgid "no entry %s in archive\n" msgstr "アーカイブã«é …ç›® %s ãŒã‚ã‚Šã¾ã›ã‚“\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" -msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを生æˆã§ãã¾ã›ã‚“" +msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを作æˆã§ãã¾ã›ã‚“" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" -msgstr "ãƒãƒƒã‚·ãƒ¥ã«æŒ¿å…¥ã§ãã¾ã›ã‚“" +msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã«æŒ¿å…¥ã§ãã¾ã›ã‚“" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" -msgstr "'%s' ã« stat ã§ãã¾ã›ã‚“" +msgstr "'%s' ã‚’ stat ã§ãã¾ã›ã‚“" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" -msgstr "%s ã®å†…容をèªã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“: %s" +msgstr "%s ã®å†…容をèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "%.*s ã‚’é–‹ã‘ã¾ã›ã‚“" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" -msgstr "%s ã¸ã®æ›¸è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" +msgstr "%s ã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "%s ã®ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã§ãã¾ã›ã‚“" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "%s ã®æ›´æ–°æ™‚間を変更ã§ãã¾ã›ã‚“" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "一時ファイルを %.*s ã«åå‰å¤‰æ›´ã§ãã¾ã›ã‚“" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" -msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“" +msgstr "æ–°ã—ã„ファイルを作æˆã§ãã¾ã›ã‚“" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "ä½ç½®ãƒ¡ãƒ³ãƒãƒ¼ %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: é …ç›® %s ãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã«ã‚ã‚Šã¾ã›ã‚“!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "%s ã‚’ stat ã§ãã¾ã›ã‚“" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s ã¯ä¸€èˆ¬ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" -msgstr "%s ã® ELF 記述åを得られã¾ã›ã‚“: %s\n" +msgstr "%s ã® ELF 記述åã‚’å–å¾—ã§ãã¾ã›ã‚“: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" -msgstr "%s ã‚’èªã¿ã¾ã›ã‚“: %s" +msgstr "%s ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/ar.c:1483 -#, fuzzy, c-format +#: src/ar.c:1480 +#, c-format msgid "cannot represent ar_date" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "ar_date を表ç¾ã§ãã¾ã›ã‚“" -#: src/ar.c:1489 -#, fuzzy, c-format +#: src/ar.c:1486 +#, c-format msgid "cannot represent ar_uid" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "ar_uid を表ç¾ã§ãã¾ã›ã‚“" -#: src/ar.c:1495 -#, fuzzy, c-format +#: src/ar.c:1492 +#, c-format msgid "cannot represent ar_gid" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "ar_gid を表ç¾ã§ãã¾ã›ã‚“" -#: src/ar.c:1501 -#, fuzzy, c-format +#: src/ar.c:1498 +#, c-format msgid "cannot represent ar_mode" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "ar_mode を表ç¾ã§ãã¾ã›ã‚“" -#: src/ar.c:1507 -#, fuzzy, c-format +#: src/ar.c:1504 +#, c-format msgid "cannot represent ar_size" -msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“" +msgstr "ar_size を表ç¾ã§ãã¾ã›ã‚“" #: src/arlib-argp.c:32 msgid "Use zero for uid, gid, and date in archive members." -msgstr "" +msgstr "アーカイブメンãƒã® uid〠gid〠日付㫠ゼãƒã‚’ 使用ã™ã‚‹ã€‚" #: src/arlib-argp.c:34 msgid "Use actual uid, gid, and date in archive members." -msgstr "" +msgstr "アーカイブメンãƒã« 実際ã®uid〠gid〠日付を 使用ã™ã‚‹ã€‚" #: src/arlib-argp.c:63 #, c-format msgid "%s (default)" -msgstr "" +msgstr "%s (デフォルト)" #. The archive is too big. #: src/arlib.c:213 @@ -1200,197 +1165,192 @@ msgstr "アーカイブ '%s' ã¯å¤§ãã™ãŽã¾ã™" #: src/arlib.c:226 #, c-format msgid "cannot read ELF header of %s(%s): %s" -msgstr "%s(%s) ã® ELF ヘッダーをèªã‚ã¾ã›ã‚“: %s" +msgstr "%s(%s) ã® ELF ヘッダーをèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 -#, fuzzy -#| msgid "cannot get ELF header" +#: src/elfclassify.c:244 msgid "ELF header" -msgstr "ELF ヘッダーを得られã¾ã›ã‚“" +msgstr "" -#: src/elfclassify.c:256 -#, fuzzy -#| msgid "Program Headers:" +#: src/elfclassify.c:255 msgid "program headers" -msgstr "プãƒã‚°ãƒ©ãƒ ヘッダー:" +msgstr "" -#: src/elfclassify.c:265 -#, fuzzy -#| msgid "Program Headers:" +#: src/elfclassify.c:264 msgid "program header" -msgstr "プãƒã‚°ãƒ©ãƒ ヘッダー:" +msgstr "" -#: src/elfclassify.c:285 -#, fuzzy -#| msgid "Section Headers:" +#: src/elfclassify.c:284 msgid "section headers" -msgstr "セクションヘッダー:" +msgstr "" -#: src/elfclassify.c:296 -#, fuzzy -#| msgid "cannot get section header string table index" +#: src/elfclassify.c:295 msgid "section header string table index" -msgstr "セクションヘッダー文å—列テーブル索引ãŒå¾—られã¾ã›ã‚“" +msgstr "" -#: src/elfclassify.c:310 -#, fuzzy +#: src/elfclassify.c:309 msgid "could not obtain section header" -msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s" +msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: src/elfclassify.c:316 -#, fuzzy +#: src/elfclassify.c:315 msgid "could not obtain section name" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "セクションåã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 -#, fuzzy -#| msgid "Input selection options:" +#: src/elfclassify.c:876 msgid "Classification options" -msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:" +msgstr "分類オプション" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" +"ELF オブジェクト ã¾ãŸã¯ アーカイブ/é™çš„ライブラリ㫠見ãˆã‚‹ãƒ•ã‚¡ã‚¤ãƒ« (デフォル" +"ト)" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" +"ファイル㯠通常㮠ELF オブジェクト (アーカイブ/é™çš„ライブラリ ã§ãªã„)" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" -msgstr "" +msgstr "ファイル㯠ELF アーカイブ ã¾ãŸã¯ é™çš„ライブラリ" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" -msgstr "" +msgstr "ファイル㯠ELF コアダンプファイル" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" +"ファイル㯠シンボルテーブル ã¾ãŸã¯ .debug_* セクション付ãã® ã•ã‚‰ã«ã‚¹ãƒˆãƒªãƒƒãƒ—" +"å¯èƒ½ãª ELF ファイル" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" -msgstr "" +msgstr "ファイル㯠(主ã«ï¼‰ ELF 実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ (主ã¨ã—㦠DSO ã§ã¯ãªã„)" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" -msgstr "" +msgstr "ファイル㯠ELF 実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ (DSO ã‹ã‚‚ã—ã‚Œãªã„)" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" +"ファイル㯠(主ã«ï¼‰ ELF 共有オブジェクト(DSO) (主ã¨ã—㦠実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ " +"ã§ãªã„)" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" +"ファイル㯠ELF 共有オブジェクト(DSO) (実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‚ã—ã‚Œãªã„)" -#: src/elfclassify.c:907 -#, fuzzy -#| msgid "cannot find kernel modules" +#: src/elfclassify.c:906 msgid "File is a linux kernel module" -msgstr "カーãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘られã¾ã›ã‚“" +msgstr "ファイル㯠linux カーãƒãƒ« モジュール" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" +"ファイル㯠デãƒãƒƒã‚°å°‚用 ELF ファイル (分離ã—㟠.debug〠.dwo ã¾ãŸã¯ dwz マル" +"ãƒãƒ•ã‚¡ã‚¤ãƒ«ï¼‰" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" +"ファイル㯠ãƒãƒ¼ãƒ‰å¯èƒ½ãª ELF オブジェクト (プãƒã‚°ãƒ©ãƒ ã¾ãŸã¯ 共有オブジェク" +"ト)" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" -msgstr "" +msgstr "入力フラグ" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" +"通常 (シンボリックリンク ã‚„ 特別デãƒã‚¤ã‚¹ ã§ãªã„) ファイルã®ã¿ã‚’ 分類ã™ã‚‹" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" -msgstr "" +msgstr "処ç†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ 標準入力ã‹ã‚‰ 改行区切り㧠èªã¿è¾¼ã‚€" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" -msgstr "" +msgstr "処ç†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ 標準入力ã‹ã‚‰ ASCII ヌル文å—区切り㧠èªã¿è¾¼ã‚€" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" -msgstr "" +msgstr "標準入力ã‹ã‚‰ ファイルを èªã¿è¾¼ã¾ãªã„ (デフォルト)" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" +"圧縮ファイル ã¾ãŸã¯ 組ã¿è¾¼ã¿ï¼ˆã‚«ãƒ¼ãƒãƒ«ï¼‰ ELF イメージ ã®ã‚ªãƒ¼ãƒ—ンを 試ã¿ã‚‹" -#: src/elfclassify.c:956 -#, fuzzy -#| msgid "Output format:" +#: src/elfclassify.c:955 msgid "Output flags" -msgstr "出力形å¼:" +msgstr "出力フラグ" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" -msgstr "" +msgstr "改行区切り㧠ファイルåã‚’ 出力ã™ã‚‹" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" -msgstr "" +msgstr "ASCII ヌル文å—区切り㧠ファイルåã‚’ 出力ã™ã‚‹" -#: src/elfclassify.c:962 -#, fuzzy -#| msgid "More than one output file name given." +#: src/elfclassify.c:961 msgid "Do not output file names" -msgstr "ã²ã¨ã¤ã‚’越ãˆã‚‹å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸã€‚" +msgstr "ファイルåを出力ã—ãªã„" -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" +"ファイルåã‚’ 表示ã™ã‚‹ãªã‚‰ã°ã€ 一致ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ 表示ã™ã‚‹ (デフォルト)" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" -msgstr "" +msgstr "ファイルåã‚’ 表示ã™ã‚‹ãªã‚‰ã°ã€ 一致ã—ãªã„ファイルを 表示ã™ã‚‹" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" -msgstr "" +msgstr "è¿½åŠ ã®ãƒ•ãƒ©ã‚°" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" -msgstr "" +msgstr "è¿½åŠ ã®æƒ…å ±ã‚’ 出力ã™ã‚‹ (複数回指定ã•ã‚Œã†ã‚‹ï¼‰" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" -msgstr "" +msgstr "ã„ãã¤ã‹ã®ã‚¨ãƒ©ãƒ¼å‡ºåŠ›ã‚’ 抑制ã™ã‚‹ ( --verbose ã®å対)" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." -msgstr "ãµãã„ã‚‹..." +msgstr "" -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1431,34 +1391,36 @@ msgstr "" #: src/elfcmp.c:60 msgid "Control options:" -msgstr "" +msgstr "制御オプション:" #: src/elfcmp.c:62 msgid "Output all differences, not just the first" -msgstr "" +msgstr "最åˆã®ã‚‚ã®ã«é™ã‚‰ãšã€ å…¨ã¦ã®å·®ç•°ã‚’ 出力ã™ã‚‹" #: src/elfcmp.c:63 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" msgstr "" +"ãƒãƒ¼ãƒ‰å¯èƒ½ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® gap 㮠扱ã„ã‚’ 制御ã™ã‚‹ [ignore|match] (デフォルト: " +"ignore)" #: src/elfcmp.c:65 msgid "Ignore permutation of buckets in SHT_HASH section" -msgstr "" +msgstr "SHT_HASH セクション㮠ãƒã‚±ãƒƒãƒˆã® 並ã¹æ›¿ãˆã‚’ 無視" #: src/elfcmp.c:67 msgid "Ignore differences in build ID" -msgstr "" +msgstr "ビルド ID ã®å·®ç•°ã‚’ 無視" #: src/elfcmp.c:68 msgid "Output nothing; yield exit status only" -msgstr "" +msgstr "何も出力ã—ãªã„。 終了ステータスã®ã¿ã‚’生ã˜ã•ã›ã‚‹" #. Short description of program. #: src/elfcmp.c:75 msgid "Compare relevant parts of two ELF files for equality." -msgstr "" +msgstr "ï¼’ã¤ã® ELF ファイル㮠関連ã®ã‚る部分㮠ç‰ä¾¡æ€§ã‚’ 比較ã™ã‚‹ã€‚" #. Strings for arguments in help texts. #: src/elfcmp.c:79 @@ -1467,12 +1429,12 @@ msgstr "" #: src/elfcmp.c:141 msgid "Invalid number of parameters.\n" -msgstr "" +msgstr "ä¸å½“ãªãƒ‘ラメータ数ã§ã™\n" #: src/elfcmp.c:172 src/elfcmp.c:177 #, c-format msgid "cannot get ELF header of '%s': %s" -msgstr "" +msgstr "'%s' ã® ELF ヘッダーをå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:203 #, c-format @@ -1480,9 +1442,9 @@ msgid "%s %s diff: ELF header" msgstr "" #: src/elfcmp.c:210 src/elfcmp.c:213 -#, fuzzy, c-format +#, c-format msgid "cannot get section count of '%s': %s" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "'%s' ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼æ•°ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:218 #, c-format @@ -1490,19 +1452,19 @@ msgid "%s %s diff: section count" msgstr "" #: src/elfcmp.c:225 src/elfcmp.c:228 -#, fuzzy, c-format +#, c-format msgid "cannot get program header count of '%s': %s" -msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを得られã¾ã›ã‚“: %s" +msgstr "'%s' ã®ãƒ—ãƒã‚°ãƒ©ãƒ ヘッダー数をå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:233 -#, fuzzy, c-format +#, c-format msgid "%s %s diff: program header count" -msgstr "ファイルã«ãƒ—ãƒã‚°ãƒ©ãƒ ヘッダーãŒã‚ã‚Šã¾ã›ã‚“" +msgstr "" #: src/elfcmp.c:241 src/elfcmp.c:244 -#, fuzzy, c-format +#, c-format msgid "cannot get hdrstrndx of '%s': %s" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "'%s' ã® hdrstrndx ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:249 #, c-format @@ -1515,9 +1477,9 @@ msgid "%s %s differ: section [%zu], [%zu] name" msgstr "" #: src/elfcmp.c:330 -#, fuzzy, c-format +#, c-format msgid "%s %s differ: section [%zu] '%s' header" -msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" +msgstr "" #: src/elfcmp.c:338 src/elfcmp.c:344 #, c-format @@ -1525,16 +1487,14 @@ msgid "cannot get content of section %zu in '%s': %s" msgstr "" #: src/elfcmp.c:353 -#, fuzzy, c-format +#, c-format msgid "symbol table [%zu] in '%s' has zero sh_entsize" msgstr "" -"\n" -"シンボルテーブル [%2u] '%s' ã«ã¯ %u 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n" #: src/elfcmp.c:365 src/elfcmp.c:371 #, c-format msgid "cannot get symbol in '%s': %s" -msgstr "" +msgstr "'%s' ã®ã‚·ãƒ³ãƒœãƒ«ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:393 #, c-format @@ -1552,9 +1512,9 @@ msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "" #: src/elfcmp.c:451 -#, fuzzy, c-format +#, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" -msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s" +msgstr "" #: src/elfcmp.c:462 #, c-format @@ -1599,7 +1559,7 @@ msgstr "" #: src/elfcmp.c:595 src/elfcmp.c:600 #, c-format msgid "cannot load data of '%s': %s" -msgstr "" +msgstr "'%s' ã®ãƒ‡ãƒ¼ã‚¿ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:619 src/elfcmp.c:625 #, c-format @@ -1619,70 +1579,69 @@ msgstr "" #: src/elfcmp.c:706 #, c-format msgid "Invalid value '%s' for --gaps parameter." -msgstr "" +msgstr "--gaps パラメータ ã«å¯¾ã™ã‚‹ä¸å½“ãªå€¤ '%s' ã§ã™" -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 #: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "'%s' ã‚’é–‹ã‘ã¾ã›ã‚“" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" -msgstr "" +msgstr "'%s' ã® ELF 記述åを作æˆã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:743 #, c-format msgid "cannot create EBL descriptor for '%s'" -msgstr "" +msgstr "'%s' ã® EBL 記述åを作æˆã§ãã¾ã›ã‚“" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" -msgstr "" +msgstr "セクション %zu ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:771 #, c-format msgid "cannot get content of section %zu: %s" -msgstr "" +msgstr "セクション %zu ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/elfcmp.c:781 src/elfcmp.c:795 #, c-format msgid "cannot get relocation: %s" -msgstr "" +msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "-o オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" #: src/elfcompress.c:124 -#, fuzzy, c-format +#, c-format msgid "-t option specified twice" -msgstr "-f オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" +msgstr "-t オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" #: src/elfcompress.c:133 -#, fuzzy, c-format +#, c-format msgid "unknown compression type '%s'" -msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—" +msgstr "ä¸æ˜Žãªåœ§ç¸®ã‚¿ã‚¤ãƒ— '%s'" #. We need at least one input file. #: src/elfcompress.c:145 src/elfcompress.c:1345 -#, fuzzy, c-format +#, c-format msgid "No input file given" -msgstr "入力ファイルãŒç©ºã§ã™" +msgstr "入力ファイルãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" -#: src/elfcompress.c:151 src/elfcompress.c:1350 -#, fuzzy, c-format +#: src/elfcompress.c:151 src/elfcompress.c:1349 +#, c-format msgid "Only one input file allowed together with '-o'" -msgstr "'-o' 㨠'-f' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“" +msgstr "'-o' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“" #: src/elfcompress.c:1307 -#, fuzzy msgid "Place (de)compressed output into FILE" -msgstr "ã¯ãŽå–ã£ãŸå‡ºåŠ›ã‚’ ãµãã„ã‚‹ ã«ç½®ã" +msgstr "圧縮(展開)ã—ãŸå‡ºåŠ›ã‚’ FILE ã«ç½®ã" #: src/elfcompress.c:1310 msgid "" @@ -1696,10 +1655,12 @@ msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" +"圧縮(展開)ã™ã‚‹ セクションå。 SECTION 㯠拡張 ワイルドカード パターン(デ" +"フォルト㧠'.?(z)debug*')" #: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" -msgstr "" +msgstr "圧縮(展開) ã•ã‚Œã¦ã„ã‚‹ å„セクション ã«å¯¾ã™ã‚‹ メッセージを 表示" #: src/elfcompress.c:1319 msgid "" @@ -1712,21 +1673,20 @@ msgid "Relax a few rules to handle slightly broken ELF files" msgstr "å°‘ã—壊れ㟠ELF ファイルをå–り扱ã†ãŸã‚ã«ãƒ«ãƒ¼ãƒ«ã‚’å°‘ã—ç·©å’Œã™ã‚‹" #: src/elfcompress.c:1325 -#, fuzzy msgid "Be silent when a section cannot be compressed" -msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" +msgstr "セクションを圧縮ã§ããªã„ã¨ãã«é™ã‹ã«ã™ã‚‹" #: src/elfcompress.c:1335 msgid "Compress or decompress sections in an ELF file." -msgstr "" +msgstr "ELF ファイル㮠セクションを 圧縮 ã¾ãŸã¯ 展開ã™ã‚‹" #: src/elflint.c:63 msgid "Be extremely strict, flag level 2 features." -msgstr "éžå¸¸ã«åŽ³å¯†ã«ã‚„ã£ã¦ãã ã•ã„ã€ãƒ•ãƒ©ã‚°ãƒ¬ãƒ™ãƒ« 2 機能。" +msgstr "éžå¸¸ã«åŽ³æ ¼ã«ã™ã‚‹ã€‚ フラグレベル 2 機能。" #: src/elflint.c:64 msgid "Do not print anything if successful" -msgstr "æˆåŠŸã—ãŸã‚‰ä½•ã‚‚å°åˆ·ã—ãªã„" +msgstr "æˆåŠŸã—ãŸå ´åˆã¯ä½•ã‚‚表示ã—ãªã„" #: src/elflint.c:65 msgid "Binary is a separate debuginfo file" @@ -1737,7 +1697,8 @@ msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" msgstr "" -"ãƒã‚¤ãƒŠãƒªãƒ¼ã¯ GNU ld ã§ä½œæˆã•ã‚Œã€å¾“ã£ã¦ã‚る方法ã§å£Šã‚Œã¦ã„ã‚‹ã®ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã‚‹" +"ãƒã‚¤ãƒŠãƒªãƒ¼ã¯ GNU ld ã§ä½œæˆã•ã‚Œã€ 従ã£ã¦ã€ ã‚る方法㧠壊れるã“ã¨ãŒ 知られã¦ã„" +"ã‚‹" #. Short description of program. #: src/elflint.c:73 @@ -1745,14 +1706,14 @@ msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "ELF ファイル㌠gABI/psABI 仕様ã¸æº–æ‹ ã—ã¦ã„ã‚‹ã‹ã®åŽ³å¯†ãªãƒã‚§ãƒƒã‚¯ã€‚" #: src/elflint.c:154 src/readelf.c:368 -#, fuzzy, c-format +#, c-format msgid "cannot open input file '%s'" -msgstr "入力ファイルを開ã‘ã¾ã›ã‚“" +msgstr "入力ファイル '%s' ã‚’é–‹ã‘ã¾ã›ã‚“" #: src/elflint.c:161 -#, fuzzy, c-format +#, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" -msgstr "Elf 記述åを生æˆã§ãã¾ã›ã‚“: %s\n" +msgstr "'%s' ã«å¯¾ã™ã‚‹ Elf 記述åを生æˆã§ãã¾ã›ã‚“: %s\n" #: src/elflint.c:180 #, c-format @@ -1770,7 +1731,7 @@ msgstr "ファイルåãŒã‚ã‚Šã¾ã›ã‚“。\n" #: src/elflint.c:284 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" -msgstr "副-ELF 記述åを解放ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s\n" +msgstr "sub-ELF 記述åを解放ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s\n" #. We cannot do anything. #: src/elflint.c:292 @@ -1799,7 +1760,7 @@ msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "ä¸æ˜Žãª OS ABI e_ident[%d] == '%s'\n" #: src/elflint.c:380 -#, fuzzy, c-format +#, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "ä¸æ˜Žãª ABI ãƒãƒ¼ã‚¸ãƒ§ãƒ³ e_ident[%d] == %d\n" @@ -1865,7 +1826,7 @@ msgid "Can only check %u headers, shnum was %u\n" msgstr "" #: src/elflint.c:487 -#, fuzzy, c-format +#, c-format msgid "invalid number of program header table entries\n" msgstr "プãƒã‚°ãƒ©ãƒ ãƒ˜ãƒƒãƒ€ãƒ¼é …ç›®æ•°ã¨ã—ã¦ä¸å½“ãªæ•°\n" @@ -1914,16 +1875,16 @@ msgstr "" "一部分ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n" #: src/elflint.c:594 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" -"セクション [%2d] '%s': セクショングループ [%2zu] '%s' ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’継" -"続ã—ã¦ã„ã¾ã›ã‚“\n" +"セクション [%2d] '%s': セクショングループ [%2zu] '%s' ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚ˆã‚Š" +"å‰ã«ã‚ã‚Šã¾ã›ã‚“\n" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" @@ -3362,325 +3323,333 @@ msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" msgstr "" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " "program header entry" msgstr "" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" -msgstr "" +msgstr "入力é¸æŠžï¼š" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" -msgstr "" +msgstr "å…¨ã¦ã® ファイルåã«å¯¾ã—㦠PATH ã‚’å…ˆé 㫠付ã‘åŠ ãˆã‚‹" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" -msgstr "" +msgstr "debuginfo 階層㮠ルートã¨ã—㦠PATH を使用ã™ã‚‹" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "" +"FILE (デフォルトã§ã¯ a.out)㮠テã‚スト リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã® ソースを 検索ã™ã‚‹" #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" -msgstr "[ãµãã„ã‚‹...]" +msgstr "" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" -msgstr "" +msgstr "ELF ヘッダー '%s' ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" -msgstr "" +msgstr "'%s' 㯠DSO ã¾ãŸã¯ PIE ã§ã¯ã‚ã‚Šã¾ã›ã‚“" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" -msgstr "" +msgstr "dynamic セクションをèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" -msgstr "" +msgstr "ELF ファイルã®èªã¿è¾¼ã¿ä¸" -#: src/findtextrel.c:314 -#, fuzzy, c-format +#: src/findtextrel.c:315 +#, c-format msgid "cannot get program header count: %s" -msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを得られã¾ã›ã‚“: %s" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダー数をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 -#, fuzzy, c-format +#: src/findtextrel.c:326 src/findtextrel.c:341 +#, c-format msgid "cannot get program header index at offset %zd: %s" -msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを得られã¾ã›ã‚“: %s" +msgstr "オフセット %zd ã«ä½ç½®ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ヘッダー索引をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" -msgstr "" +msgstr "%s 㯠-fpic/-fPIC 付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã¾ã›ã‚“\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" +"関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯ -fpic/-fPIC 付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã¾ã›ã‚“\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" +"関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯ -fpic/-fPIC 付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ãªã„ã‹ã‚‚ã—ã‚Œã¾" +"ã›ã‚“\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " "function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" +"関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ« ã¾ãŸã¯ 関数 '%s' ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯ -fpic/-fPIC 付ãã§" +"コンパイルã•ã‚Œã¦ã„ã¾ã›ã‚“\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" msgstr "" +"リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ 書ãè¾¼ã¿ç¦æ¢ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® オフセット %llu ã«ä½ç½®ã™ã‚‹ãƒ¡ãƒ¢ãƒªã‚’ " +"ä¿®æ£ã—ã¾ã™\n" #: src/nm.c:66 src/strip.c:70 msgid "Output selection:" -msgstr "出力é¸æŠž:" +msgstr "出力é¸æŠžï¼š" #: src/nm.c:67 msgid "Display debugger-only symbols" -msgstr "デãƒãƒƒã‚¬ãƒ¼å°‚用シンボルを表示" +msgstr "デãƒãƒƒã‚¬å°‚用シンボルを表示" #: src/nm.c:68 msgid "Display only defined symbols" -msgstr "定義ã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã®ã¿ã‚’表示" +msgstr "定義済ã¿ã‚·ãƒ³ãƒœãƒ«ã®ã¿ã‚’表示" #: src/nm.c:71 msgid "Display dynamic symbols instead of normal symbols" -msgstr "通常シンボルã®ä»£ã‚ã‚Šã«å‹•çš„シンボルを表示" +msgstr "通常シンボル㮠代ã‚り㫠動的シンボルを 表示" #: src/nm.c:72 msgid "Display only external symbols" @@ -3692,23 +3661,23 @@ msgstr "未定義シンボルã®ã¿ã‚’表示" #: src/nm.c:75 msgid "Include index for symbols from archive members" -msgstr "アーカイブメンãƒãƒ¼ã‹ã‚‰ã®ã‚·ãƒ³ãƒœãƒ«ã®ç´¢å¼•ã‚’å«ã‚ã‚‹" +msgstr "アーカイブメンãƒã‹ã‚‰ã® シンボル㮠索引を å«ã‚ã‚‹" #: src/nm.c:77 src/size.c:54 msgid "Output format:" -msgstr "出力形å¼:" +msgstr "出力形å¼ï¼š" #: src/nm.c:79 msgid "Print name of the input file before every symbol" -msgstr "å…¨ã¦ã®ã‚·ãƒ³ãƒœãƒ«ã®å‰ã«å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«åã‚’å°åˆ·" +msgstr "å„シンボル㮠å‰ã« 入力ファイルåã‚’ 表示" #: src/nm.c:82 msgid "" "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " "default is `sysv'" msgstr "" -"出力形å¼ã¨ã—㦠FORMATを使ã†ã€‚FORMAT 㯠`bsd'ã‹ã€`sysv'ã€`posix' ã®ã©ã‚Œã‹ã€‚çœ" -"略値㯠`sysv'" +"出力形å¼ã¨ã—㦠FORMAT を使ã†ã€‚ FORMAT 㯠`bsd'ã€`sysv'ã€`posix' ã®ã„ãšã‚Œã‹ã€‚" +"デフォルト㯠`sysv'" #: src/nm.c:84 msgid "Same as --format=bsd" @@ -3720,24 +3689,23 @@ msgstr "--format=posix ã¨åŒã˜" #: src/nm.c:86 src/size.c:60 msgid "Use RADIX for printing symbol values" -msgstr "シンボル値をå°åˆ·ã™ã‚‹ãŸã‚ã« RADIX を使ã†" +msgstr "シンボル値㮠表示㫠RADIX を使ã†" #: src/nm.c:87 -#, fuzzy msgid "Mark special symbols" -msgstr "å¼±ã„シンボルã«å°ã‚’点ã‘ã‚‹" +msgstr "特別ãªã‚·ãƒ³ãƒœãƒ«ã«å°ã‚’点ã‘ã‚‹" #: src/nm.c:89 msgid "Print size of defined symbols" -msgstr "定義ã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ã®å°åˆ·ã‚µã‚¤ã‚º" +msgstr "定義済ã¿ã‚·ãƒ³ãƒœãƒ«ã®ã‚µã‚¤ã‚ºã‚’表示" #: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 msgid "Output options:" -msgstr "出力オプション:" +msgstr "出力オプション:" #: src/nm.c:92 msgid "Sort symbols numerically by address" -msgstr "シンボルをアドレスã«ã‚ˆã‚Šæ•°å€¤çš„ã«ä¸¦ã¹æ›¿ãˆã‚‹" +msgstr "シンボルを アドレスã«ã‚ˆã‚Š 数値的㫠並ã¹æ›¿ãˆã‚‹" #: src/nm.c:94 msgid "Do not sort the symbols" @@ -3749,17 +3717,16 @@ msgstr "並ã¹æ›¿ãˆã®æ„味を逆ã«ã™ã‚‹" #: src/nm.c:98 msgid "Decode low-level symbol names into source code names" -msgstr "" +msgstr "低水準㮠シンボルåã‚’ ソースコード上㮠åå‰ã« デコードã™ã‚‹" #. Short description of program. #: src/nm.c:105 msgid "List symbols from FILEs (a.out by default)." -msgstr "ãµãã„ã‚‹ ã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’表示 (デフォルトã§ã¯a.out)。" +msgstr "FILE ã®ã‚·ãƒ³ãƒœãƒ«ã‚’一覧表示 (デフォルトã§ã¯a.out)。" #: src/nm.c:116 src/objdump.c:79 -#, fuzzy msgid "Output formatting" -msgstr "出力形å¼:" +msgstr "出力形å¼ï¼š" #: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 #, fuzzy, c-format @@ -3767,12 +3734,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: 内部エラー %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "'%s' ã‚’é–‰ã˜ã¦ã„る最ä¸" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: ファイル形å¼ã‚’èªè˜ã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -3807,24 +3774,23 @@ msgstr "アーカイブã®ã‚ªãƒ•ã‚»ãƒƒãƒˆã‚’最åˆã«ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“ msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: ファイル形å¼ã‚’èªè˜ã§ãã¾ã›ã‚“" -#: src/nm.c:705 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "検索ツリーを生æˆã§ãã¾ã›ã‚“" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文å—列テーブル索引ãŒå¾—られã¾ã›ã‚“" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -3838,7 +3804,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3847,84 +3813,83 @@ msgstr "" "%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" "\n" -#: src/nm.c:776 +#: src/nm.c:773 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1246 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: セクションã®é …ç›®ã®å¤§ãã• `%s' ã¯äºˆæœŸã—ãŸã‚‚ã®ã¨ã¯ç•°ãªã‚Šã¾ã™" -#: src/nm.c:1255 +#: src/nm.c:1251 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: セクション `%s' ã®å¤§ãã•ã¯é …ç›®ã®å¤§ãã•ã®æ•´æ•°å€ã§ã¯ã‚ã‚Šã¾ã›ã‚“" -#: src/nm.c:1336 +#: src/nm.c:1331 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: セクションã®é …ç›®ã®å¤§ãã• `%s' ã¯äºˆæœŸã—ãŸã‚‚ã®ã¨ã¯ç•°ãªã‚Šã¾ã™" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: ä¸å½“ãªæ“作" -#: src/nm.c:1622 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: シンボルãŒã‚ã‚Šã¾ã›ã‚“" #: src/objdump.c:52 msgid "Mode selection:" -msgstr "" +msgstr "モードé¸æŠžï¼š" #: src/objdump.c:53 msgid "Display relocation information." -msgstr "" +msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ æƒ…å ±ã® è¡¨ç¤º" #: src/objdump.c:55 msgid "Display the full contents of all sections requested" -msgstr "" +msgstr "è¦æ±‚ã•ã‚ŒãŸ å…¨ã¦ã® セクション㮠最大é™ã® 内容を 表示" #: src/objdump.c:57 msgid "Display assembler code of executable sections" -msgstr "" +msgstr "実行å¯èƒ½ セクション㮠アセンブラコードを 表示" #: src/objdump.c:59 -#, fuzzy msgid "Output content selection:" -msgstr "出力é¸æŠž:" +msgstr "出力内容é¸æŠž:" #: src/objdump.c:61 msgid "Only display information for section NAME." -msgstr "" +msgstr "NAME セクションã®æƒ…å ±ã®ã¿ã‚’表示" #. Short description of program. #: src/objdump.c:67 msgid "Show information from FILEs (a.out by default)." -msgstr "" +msgstr "FILE ã‹ã‚‰æƒ…å ±ã‚’è¡¨ç¤ºã™ã‚‹ (デフォルトã§ã¯ a.out)" #: src/objdump.c:218 src/readelf.c:582 msgid "No operation specified.\n" @@ -3935,11 +3900,11 @@ msgstr "æ“作ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³" @@ -3961,19 +3926,17 @@ msgid "Contents of section %s:\n" msgstr "" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" -msgstr "" +msgstr "逆アセンブルã§ãã¾ã›ã‚“" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:758 msgid "cannot create backend for elf file" -msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“" +msgstr "elf ファイル用ã«ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’作æˆã§ãã¾ã›ã‚“" #. Short description of program. #: src/ranlib.c:63 msgid "Generate an index to speed access to archives." -msgstr "" +msgstr "アーカイブã¸ã®ã‚¢ã‚¯ã‚»ã‚¹åŠ 速ã®ãŸã‚ã®ç´¢å¼•ç”Ÿæˆ" #. Strings for arguments in help texts. #: src/ranlib.c:66 @@ -3983,12 +3946,12 @@ msgstr "" #: src/ranlib.c:102 #, c-format msgid "Archive name required" -msgstr "" +msgstr "アーカイブåãŒå¿…è¦ã§ã™" #: src/ranlib.c:166 #, c-format msgid "'%s' is no archive" -msgstr "" +msgstr "'%s' ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: src/ranlib.c:201 #, c-format @@ -3996,14 +3959,14 @@ msgid "error while freeing sub-ELF descriptor: %s" msgstr "" #: src/readelf.c:97 -#, fuzzy msgid "ELF input selection:" -msgstr "出力é¸æŠž:" +msgstr "ELF入力é¸æŠžï¼š" #: src/readelf.c:99 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" msgstr "" +"ELF 入力データã¨ã—㦠SECTION (デフォルトã§ã¯ .gnu_debugdata) を使用ã™ã‚‹" #: src/readelf.c:102 msgid "" @@ -4012,9 +3975,8 @@ msgid "" msgstr "" #: src/readelf.c:104 -#, fuzzy msgid "ELF output selection:" -msgstr "出力é¸æŠž:" +msgstr "ELF出力é¸æŠžï¼š" #: src/readelf.c:106 msgid "All these plus -p .strtab -p .dynstr -p .comment" @@ -4030,7 +3992,7 @@ msgstr "ELF ファイルヘッダーを表示" #: src/readelf.c:110 msgid "Display histogram of bucket list lengths" -msgstr "ãƒã‚±ãƒƒãƒˆãƒªã‚¹ãƒˆé•·ã®æŸ±çŠ¶å›³ã‚’表示" +msgstr "ãƒã‚±ãƒƒãƒˆãƒªã‚¹ãƒˆé•·ã®ãƒ’ストグラムを表示" #: src/readelf.c:111 msgid "Display the program headers" @@ -4041,47 +4003,40 @@ msgid "Display relocations" msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’表示" #: src/readelf.c:114 -#, fuzzy msgid "Display the section groups" -msgstr "セクションã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’表示" +msgstr "セクショングループを表示" #: src/readelf.c:115 -#, fuzzy msgid "Display the sections' headers" -msgstr "セクションã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’表示" +msgstr "セクションヘッダーを表示" #: src/readelf.c:118 -#, fuzzy msgid "Display the symbol table sections" -msgstr "シンボルテーブルを表示" +msgstr "シンボルテーブルセクションを表示" #: src/readelf.c:120 -#, fuzzy msgid "Display (only) the dynamic symbol table" -msgstr "外部シンボルã®ã¿ã‚’表示" +msgstr "動的シンボルテーブル(ã®ã¿ï¼‰ã‚’表示" #: src/readelf.c:121 msgid "Display versioning information" -msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°æƒ…å ±ã®è¡¨ç¤º" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°æƒ…å ±ã‚’è¡¨ç¤º" #: src/readelf.c:122 -#, fuzzy msgid "Display the ELF notes" -msgstr "コアノートを表示" +msgstr "ELF notes を表示" #: src/readelf.c:124 -#, fuzzy msgid "Display architecture specific information, if any" msgstr "(ã‚‚ã—ã‚ã‚Œã°)アーã‚テクãƒãƒ£ãƒ¼å›ºæœ‰ã®æƒ…å ±ã‚’è¡¨ç¤º" #: src/readelf.c:126 msgid "Display sections for exception handling" -msgstr "例外をå–り扱ã†ãŸã‚ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’表示" +msgstr "例外ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’表示" #: src/readelf.c:128 -#, fuzzy msgid "Additional output selection:" -msgstr "出力é¸æŠž:" +msgstr "è¿½åŠ ã®å‡ºåŠ›é¸æŠžï¼š" #: src/readelf.c:130 #, fuzzy @@ -4095,11 +4050,11 @@ msgstr "" #: src/readelf.c:134 msgid "Dump the uninterpreted contents of SECTION, by number or name" -msgstr "æ•°å—ã‹åå‰ã§è§£é‡ˆã§ããªã„セクションã®å†…容をダンプã™ã‚‹" +msgstr "SECTION 㮠未解釈㮠内容を ダンプã™ã‚‹ã€‚ ç•ªå· ã¾ãŸã¯ åå‰ã§æŒ‡å®šã™ã‚‹" #: src/readelf.c:136 msgid "Print string contents of sections" -msgstr "セクションã®æ–‡å—列内容をå°åˆ·ã™ã‚‹" +msgstr "セクションã®æ–‡å—列内容を表示" #: src/readelf.c:139 msgid "Display the symbol index of an archive" @@ -4107,7 +4062,7 @@ msgstr "アーカイブã®ã‚·ãƒ³ãƒœãƒ«ç´¢å¼•ã‚’表示" #: src/readelf.c:141 msgid "Output control:" -msgstr "出力制御:" +msgstr "出力制御:" #: src/readelf.c:143 msgid "Do not find symbol names for addresses in DWARF data" @@ -4132,7 +4087,7 @@ msgstr "" #. Short description of program. #: src/readelf.c:154 msgid "Print information from ELF file in human-readable form." -msgstr "ELF ファイルã‹ã‚‰äººé–“ãŒèªã‚ã‚‹å½¢ã§æƒ…å ±ã‚’å°åˆ·ã™ã‚‹ã€‚" +msgstr "ELF ファイルã‹ã‚‰äººé–“ãŒèªã‚ã‚‹å½¢ã§æƒ…å ±ã‚’è¡¨ç¤ºã™ã‚‹ã€‚" #. Look up once. #: src/readelf.c:350 @@ -4153,45 +4108,45 @@ msgstr "ä¸æ˜Žãª DWARF デãƒãƒƒã‚°ã‚»ã‚¯ã‚·ãƒ§ãƒ³ `%s'.\n" msgid "cannot generate Elf descriptor: %s" msgstr "Elf 記述åを生æˆã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "セクションをå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 #: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" -msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s" +msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/readelf.c:663 -#, fuzzy, c-format +#, c-format msgid "cannot get section name" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "セクションåã‚’å–å¾—ã§ãã¾ã›ã‚“" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" -msgstr "%s ã®å†…容を得られã¾ã›ã‚“: %s" +msgstr "%s ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/readelf.c:688 -#, fuzzy, c-format +#, c-format msgid "cannot create temp file '%s'" -msgstr "æ–°ã—ã„ファイル '%s' を生æˆã§ãã¾ã›ã‚“: %s" +msgstr "一時ファイル '%s' を作æˆã§ãã¾ã›ã‚“" #: src/readelf.c:697 -#, fuzzy, c-format +#, c-format msgid "cannot write section data" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "セクションデータを書ãè¾¼ã¿ã§ãã¾ã›ã‚“" #: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 #, c-format @@ -4199,14 +4154,14 @@ msgid "error while closing Elf descriptor: %s" msgstr "Elf 記述åã‚’é–‰ã˜ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s" #: src/readelf.c:710 -#, fuzzy, c-format +#, c-format msgid "error while rewinding file descriptor" -msgstr "Elf 記述åã‚’é–‰ã˜ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼: %s" +msgstr "ファイル記述åã‚’å·»ã戻ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼" #: src/readelf.c:744 #, c-format msgid "'%s' is not an archive, cannot print archive index" -msgstr "'%s' ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ãªãã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–索引をå°åˆ·ã§ãã¾ã›ã‚“" +msgstr "'%s' ã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ãªãã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–索引を表示ã§ãã¾ã›ã‚“" #: src/readelf.c:848 #, c-format @@ -4231,55 +4186,55 @@ msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s" #: src/readelf.c:940 #, c-format msgid "cannot read ELF header: %s" -msgstr "ELF ヘッダーãŒèªã‚ã¾ã›ã‚“: %s" +msgstr "ELF ヘッダーをèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" #: src/readelf.c:948 #, c-format msgid "cannot create EBL handle" -msgstr "EBL ヘッダーを生æˆã§ãã¾ã›ã‚“" +msgstr "EBL ãƒãƒ³ãƒ‰ãƒ«ã‚’作æˆã§ãã¾ã›ã‚“" -#: src/readelf.c:961 -#, fuzzy, c-format +#: src/readelf.c:959 +#, c-format msgid "cannot determine number of program headers: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダã®æ•°ã‚’決定ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:993 -#, fuzzy, c-format +#: src/readelf.c:991 +#, c-format msgid "cannot read ELF: %s" -msgstr "%s ã‚’èªã¿ã¾ã›ã‚“: %s" +msgstr "ELFã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "ãªã— (ãªã—)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (リãƒã‚±ãƒ¼ã‚¿ãƒ–ルファイル)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "(EXEC (実行ファイル)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (共用オブジェクトファイル)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (コアファイル)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS 固有: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "プãƒã‚»ãƒƒã‚µãƒ¼å›ºæœ‰: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4287,7 +4242,7 @@ msgstr "" "ELF ヘッダー:\n" " マジック: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4296,123 +4251,123 @@ msgstr "" "\n" " クラス: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " データ: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " è˜åˆ¥ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(ç¾åœ¨)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " ABI ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " タイプ: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " マシン : %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, fuzzy, c-format msgid " Machine: <unknown>: 0x%x\n" msgstr " マシン : %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#<PRIx64>\n" msgstr " å…¥å£ç‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹ : %#<PRIx64>\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: %<PRId64> %s\n" msgstr " プãƒã‚°ãƒ©ãƒ ヘッダーã®é–‹å§‹: %<PRId64> %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "(ファイルã¸ã®ãƒã‚¤ãƒˆæ•°)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: %<PRId64> %s\n" msgstr " セクションヘッダーã®é–‹å§‹: %<PRId64> %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " フラグ: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: %<PRId16> %s\n" msgstr " ã“ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã®å¤§ãã•: %<PRId16> %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(ãƒã‚¤ãƒˆ)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: %<PRId16> %s\n" msgstr " プãƒã‚°ãƒ©ãƒ ãƒ˜ãƒƒãƒ€ãƒ¼é …ç›®ã®å¤§ãã•:%<PRId16> %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, fuzzy, c-format msgid " Number of program headers entries: %<PRId16>" msgstr " プãƒã‚°ãƒ©ãƒ ãƒ˜ãƒƒãƒ€ãƒ¼é …ç›®ã®æ•° : %<PRId16>\n" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, fuzzy, c-format msgid " (%<PRIu32> in [0].sh_info)" msgstr "([0].sh_link ã® %<PRIu32>)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr "([0]ã¯ä½¿ãˆã¾ã›ã‚“)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: %<PRId16> %s\n" msgstr " ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼é …ç›®ã®å¤§ãã•:%<PRId16> %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %<PRId16>" msgstr " ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼é …ç›®ã®æ•° : %<PRId16>" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (%<PRIu32> in [0].sh_size)" msgstr " ([0].sh_size ã® %<PRIu32>)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (%<PRIu32> in [0].sh_link)" msgstr "([0].sh_link ã® %<PRIu32>)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4421,7 +4376,7 @@ msgstr "" " セクションヘッダー文å—列テーブル索引: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %<PRId16>\n" @@ -4430,12 +4385,12 @@ msgstr "" " セクションヘッダー文å—列テーブル索引: %<PRId16>\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#<PRIx64>:\n" @@ -4444,16 +4399,16 @@ msgstr "" "オフセット %2$#<PRIx64> ã‹ã‚‰å§‹ã¾ã‚‹ %1$d 個ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãƒ˜ãƒƒãƒ€ãƒ¼ãŒã‚ã‚Šã¾ã™:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "セクションヘッダー文å—列テーブル索引ãŒå¾—られã¾ã›ã‚“" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "セクションヘッダー:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4461,7 +4416,7 @@ msgstr "" "[番] åå‰ ã‚¿ã‚¤ãƒ— アドレス オフセ 大ãã• ES フラグLk " "Inf Al" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4469,35 +4424,35 @@ msgstr "" "[番] åå‰ ã‚¿ã‚¤ãƒ— アドレス オフセ 大ãã• ES " "フラグLk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, fuzzy, c-format msgid "bad compression header for section %zd: %s" msgstr "セクションヘッダー文å—列セクションを生æˆã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, fuzzy, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "プãƒã‚°ãƒ©ãƒ ヘッダー:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " タイプ オフセ 仮アドレス 物アドレス ãƒ•ã‚¡ã‚¤é‡ ãƒ¡ãƒ¢é‡ Flg 調整 " -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4505,12 +4460,12 @@ msgstr "" " タイプ オフセ 仮想アドレス 物ç†ã‚¢ãƒ‰ãƒ¬ã‚¹ ファイルé‡ãƒ¡ãƒ¢" "é‡ Flg 調整 " -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[プãƒã‚°ãƒ©ãƒ 割込ã¿ã‚’è¦æ±‚: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4520,12 +4475,12 @@ msgstr "" " セクションã‹ã‚‰ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã¸ã®ãƒžãƒƒãƒ“ング:\n" " セグメント セクション..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを得られã¾ã›ã‚“: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4538,7 +4493,7 @@ msgstr[0] "" "ç½²å '%3$s' ã‚’æŒã¤ COMDAT セクショングループ [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®" "é …ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4551,31 +4506,31 @@ msgstr[0] "" "ç½²å '%3$s' ã‚’æŒã¤ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ— [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …ç›®ãŒã‚" "ã‚Šã¾ã™:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "<INVALID SYMBOL>" msgstr "<ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«>" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "<INVALID SECTION>" msgstr "<ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ä¸å½“㪠.debug_line セクション" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4591,36 +4546,36 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " タイプ 値\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "共用ライブラリー: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "ライブラリー so å: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "ライブラリー rパス: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "ライブラリー run パス: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (ãƒã‚¤ãƒˆ)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4629,7 +4584,7 @@ msgstr "" "\n" "オフセット %#0<PRIx64> ã«ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ル\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4650,7 +4605,7 @@ msgstr[0] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4663,29 +4618,29 @@ msgstr[0] "" "オフセット %3$#0<PRIx64> ã®ãƒªãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$2u] '%2$s' ã«ã¯ %4$d " "個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 åå‰\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 åå‰\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "<INVALID RELOC>" msgstr "<ä¸å½“ãªRELOC>" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 ä»˜åŠ å\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 ä»˜åŠ å\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4697,39 +4652,39 @@ msgstr[0] "" "\n" "シンボルテーブル [%2u] '%s' ã«ã¯ %u 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] " %lu ãƒãƒ¼ã‚«ãƒ«ã‚·ãƒ³ãƒœãƒ«æ–‡å—列テーブル: [%2u] '%s'\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " æ•° : 値 大ã タイプ Bind Vis Ndx åå‰\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " æ•° : 値 大ã タイプ Bind Vis Ndx åå‰\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "ä¸æ£ãªå‹•çš„シンボル" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "ãªã—" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| <unknown>" msgstr "| <ä¸æ˜Ž>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4745,17 +4700,17 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hu ファイル: %s æ•°: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: åå‰: %s フラグ: %s ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -4771,18 +4726,18 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hd フラグ: %s 索引: %hd æ•°: %hd åå‰: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: 親 %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -4798,15 +4753,15 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *ãƒãƒ¼ã‚«ãƒ«* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *ã‚°ãƒãƒ¼ãƒãƒ«* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -4824,22 +4779,22 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, fuzzy, no-c-format msgid " Length Number % of total Coverage\n" msgstr " é•·ã• æ•° 全体ã®% 範囲 \n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, fuzzy, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4848,37 +4803,37 @@ msgstr "" " テストã®å¹³å‡æ•°: 検索æˆåŠŸ: %f\n" " 検索失敗: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3452 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4888,7 +4843,7 @@ msgstr "" " ビットマスクã®å¤§ãã•: %zu ãƒã‚¤ãƒˆ %<PRIuFAST32>%% ビットè¨å®š 第2ãƒãƒƒã‚·ãƒ¥ã‚·ãƒ•" "ト: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4901,7 +4856,7 @@ msgstr[0] "" "オフセット %3$#0<PRIx64> ã®ãƒ©ã‚¤ãƒ–ラリー一覧セクション [%1$2zu] '%2$s' ã«ã¯ " "%4$d 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4909,7 +4864,7 @@ msgstr "" " ライブラリー タイムスタンプ ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãƒãƒ¼" "ジョン フラグ" -#: src/readelf.c:3614 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -4920,102 +4875,101 @@ msgstr "" "オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ã‚ªãƒ–ジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:3631 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " 所有者 大ãã•\n" -#: src/readelf.c:3655 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3696 #, c-format msgid " File: %11<PRIu32>\n" msgstr " ファイル: %11<PRIu32>\n" -#: src/readelf.c:3748 +#: src/readelf.c:3745 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>ã€%s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3748 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3754 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3761 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3767 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, c-format +#: src/readelf.c:3834 msgid "sprintf failure" msgstr "" -#: src/readelf.c:4319 +#: src/readelf.c:4316 msgid "empty block" msgstr "空ブãƒãƒƒã‚¯" -#: src/readelf.c:4322 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "%zu ãƒã‚¤ãƒˆã®ãƒ–ãƒãƒƒã‚¯:" -#: src/readelf.c:4800 +#: src/readelf.c:4797 #, fuzzy, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" -#: src/readelf.c:4867 +#: src/readelf.c:4864 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "" -#: src/readelf.c:4874 +#: src/readelf.c:4871 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "" -#: src/readelf.c:4881 +#: src/readelf.c:4878 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "" -#: src/readelf.c:4888 +#: src/readelf.c:4885 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr "" -#: src/readelf.c:4996 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5026,7 +4980,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5035,20 +4989,20 @@ msgstr "" "\n" "オフセット %<PRIu64> ã®ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語をèªã‚“ã§ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %<PRId64>ã€å: %sã€ã‚¿ã‚°: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5057,52 +5011,52 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5182 +#: src/readelf.c:5179 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, fuzzy, c-format msgid " Address size: %8<PRIu64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, fuzzy, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, fuzzy, c-format msgid "Unknown version" msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, fuzzy, c-format msgid "unsupported address size" msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5115,19 +5069,19 @@ msgstr[0] "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" msgstr "" " [%*zu] 開始: %0#*<PRIx64>ã€é•·ã•: %5<PRIu64>ã€CU DIE オフセット: %6<PRId64>\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5488 src/readelf.c:8425 #, fuzzy, c-format msgid "" "\n" @@ -5136,152 +5090,152 @@ msgstr "" "\n" "オフセット %Zu ã®ãƒ†ãƒ¼ãƒ–ル:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:5511 +#: src/readelf.c:5508 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5523 +#: src/readelf.c:5520 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5527 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5535 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5544 +#: src/readelf.c:5541 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5555 +#: src/readelf.c:5552 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:5610 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5651 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5674 src/readelf.c:9176 #, fuzzy, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5729 src/readelf.c:9231 #, fuzzy, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5768 src/readelf.c:9270 #, fuzzy, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " 所有者 大ãã•\n" -#: src/readelf.c:5823 +#: src/readelf.c:5820 #, fuzzy, c-format msgid "invalid range list data" msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr "アドレスを %s ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6104 src/readelf.c:9798 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼãƒçµ‚端\n" -#: src/readelf.c:6367 +#: src/readelf.c:6364 #, fuzzy msgid " <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6621 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5290,7 +5244,7 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> ã® ãƒ•ãƒ¬ãƒ¼ãƒ æƒ…å ±å‘¼å‡ºã—セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:6692 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5299,65 +5253,65 @@ msgstr "" "\n" " [%6tx] ゼãƒçµ‚端\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6790 src/readelf.c:6944 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ä¸å½“ãªæ‹¡å¤§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰" -#: src/readelf.c:6808 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:6814 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "LSDA ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰:" -#: src/readelf.c:6924 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:6931 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:6968 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sLSDA ãƒã‚¤ãƒ³ã‚¿ãƒ¼: %#<PRIx64>\n" -#: src/readelf.c:7053 +#: src/readelf.c:7050 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "属性コードを得られã¾ã›ã‚“: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7060 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "属性様å¼ã‚’得られã¾ã›ã‚“: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7082 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "属性値を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7415 +#: src/readelf.c:7412 #, fuzzy, c-format msgid "invalid file (%<PRId64>): %s" msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«" -#: src/readelf.c:7419 +#: src/readelf.c:7416 #, fuzzy, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:7423 +#: src/readelf.c:7420 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5368,12 +5322,12 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7785 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7805 #, fuzzy, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5385,7 +5339,7 @@ msgstr "" " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§" "ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n" -#: src/readelf.c:7820 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5396,39 +5350,39 @@ msgstr "" " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§" "ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られã¾ã›ã‚“: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7892 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "" "セクション '%2$s' ä¸ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$<PRIu64> ã® DIE ã®ã‚¿ã‚°ã‚’得られã¾ã›ã‚“: " "%3$s" -#: src/readelf.c:7933 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7980 #, fuzzy, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5439,7 +5393,7 @@ msgstr "" " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§" "ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n" -#: src/readelf.c:8037 +#: src/readelf.c:8032 #, fuzzy, c-format msgid "" "\n" @@ -5449,18 +5403,18 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:8369 +#: src/readelf.c:8364 #, fuzzy, c-format msgid "unknown form: %s" msgstr "ä¸æ˜Žãªæ§˜å¼ %<PRIx64>" -#: src/readelf.c:8400 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8516 #, fuzzy, c-format msgid "" "\n" @@ -5490,33 +5444,33 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:8524 -#, fuzzy, c-format +#: src/readelf.c:8538 +#, c-format msgid "cannot handle .debug_line version: %u\n" -msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" +msgstr ".debug_line ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’扱ãˆã¾ã›ã‚“: %u\n" -#: src/readelf.c:8532 -#, fuzzy, c-format +#: src/readelf.c:8546 +#, c-format msgid "cannot handle address size: %u\n" -msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" +msgstr "アドレスサイズを扱ãˆã¾ã›ã‚“: %u\n" -#: src/readelf.c:8540 -#, fuzzy, c-format +#: src/readelf.c:8554 +#, c-format msgid "cannot handle segment selector size: %u\n" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "セグメントセレクタサイズを扱ãˆã¾ã›ã‚“: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "セクション [%2$zu] '%3$s' ä¸ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$tu ã«ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:8565 +#: src/readelf.c:8579 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] " [%*<PRIuFAST8>] %hhu パラメーター\n" -#: src/readelf.c:8576 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5524,12 +5478,12 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8596 src/readelf.c:8673 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8667 #, fuzzy msgid "" "\n" @@ -5538,7 +5492,7 @@ msgstr "" "\n" " 呼出ã—サイトテーブル:" -#: src/readelf.c:8714 +#: src/readelf.c:8728 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5546,7 +5500,7 @@ msgstr "" "ファイルåテーブル:\n" " Entry Dir 時刻 大ãã• åå‰" -#: src/readelf.c:8753 +#: src/readelf.c:8774 #, fuzzy msgid "" "\n" @@ -5555,7 +5509,7 @@ msgstr "" "\n" "è¡Œ ç•ªå· æ–‡:" -#: src/readelf.c:8757 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5563,119 +5517,129 @@ msgstr "" "\n" "è¡Œ ç•ªå· æ–‡:" -#: src/readelf.c:8777 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8811 +#: src/readelf.c:8827 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " 特殊命令コード %u: アドレス+%u = %s, è¡Œ%+d = %zu\n" -#: src/readelf.c:8815 +#: src/readelf.c:8831 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, è¡Œ%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8857 #, fuzzy msgid " end of sequence" msgstr "列ã®çµ‚ã‚ã‚Š" -#: src/readelf.c:8859 +#: src/readelf.c:8875 #, fuzzy, c-format msgid " set address to " msgstr "アドレスを %s ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:8887 +#: src/readelf.c:8903 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" "新ファイルを定義ã™ã‚‹: dir=%uã€mtime=%<PRIu64>ã€é•·ã•h=%<PRIu64>ã€åå‰=%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8917 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを %<PRIu64> ã«è¨å®šã™ã‚‹\n" +#: src/readelf.c:8944 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8968 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "関数åも表示" + #. Unknown, ignore it. -#: src/readelf.c:8906 -#, fuzzy +#: src/readelf.c:8975 msgid " unknown opcode" -msgstr "ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰" +msgstr "ä¸æ˜Žãªã‚ªãƒšã‚³ãƒ¼ãƒ‰" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8987 msgid " copy" msgstr "複写" -#: src/readelf.c:8929 +#: src/readelf.c:8998 #, fuzzy, c-format msgid " advance address by %u to " msgstr "アドレスを %u ã ã‘進ã‚㦠%s ã«ã™ã‚‹\n" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr "行を定数 %d ã ã‘進ã‚㦠%<PRId64> ã«ã™ã‚‹\n" -#: src/readelf.c:8955 +#: src/readelf.c:9024 #, c-format msgid " set file to %<PRIu64>\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:8966 +#: src/readelf.c:9035 #, c-format msgid " set column to %<PRIu64>\n" msgstr "カラムを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:8973 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " '%s' ã‚’ %<PRIuFAST8> ã«è¨å®šã™ã‚‹\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr "基本ブãƒãƒƒã‚¯ãƒ•ãƒ©ã‚°ã‚’è¨å®šã™ã‚‹" -#: src/readelf.c:8990 +#: src/readelf.c:9059 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "アドレスを定数 %u ã ã‘済ã‚㦠%s ã«ã™ã‚‹\n" -#: src/readelf.c:9010 +#: src/readelf.c:9079 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "アドレスを固定値 %u ã ã‘進ã‚㦠%s ã«ã™ã‚‹\n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr "プãƒãƒãƒ¼ã‚°çµ‚了フラグをè¨å®šã™ã‚‹" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr "エピãƒãƒ¼ã‚°é–‹å§‹ãƒ•ãƒ©ã‚°ã‚’è¨å®šã™ã‚‹" -#: src/readelf.c:9035 +#: src/readelf.c:9104 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" @@ -5683,103 +5647,103 @@ msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] " %<PRIu8> 個ã®ãƒ‘ラメーターã®ã‚ã‚‹ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰:" -#: src/readelf.c:9084 -#, fuzzy, c-format +#: src/readelf.c:9153 +#, c-format msgid "cannot get .debug_loclists content: %s" -msgstr ".debug_loc ã®å†…容を得られã¾ã›ã‚“: %s" +msgstr ".debug_loclists ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9319 #, fuzzy, c-format msgid " <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9359 #, fuzzy, c-format msgid "invalid loclists data" msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:9543 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9825 src/readelf.c:10869 #, fuzzy msgid " <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクãƒæƒ…å ±ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®çµ‚端ã—ã¦ã„ãªã„æ–‡å—列" -#: src/readelf.c:9914 +#: src/readelf.c:9983 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** 最後ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®çµ‚端ã—ã¦ã„ãªã„æ–‡å—列" -#: src/readelf.c:10015 +#: src/readelf.c:10084 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " 所有者 大ãã•\n" -#: src/readelf.c:10027 +#: src/readelf.c:10096 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10109 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>" msgstr " å…¥å£ç‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹ : %#<PRIx64>\n" -#: src/readelf.c:10069 +#: src/readelf.c:10138 #, fuzzy, c-format msgid " Offset length: %<PRIu8>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10077 +#: src/readelf.c:10146 #, fuzzy, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:10102 +#: src/readelf.c:10171 #, fuzzy, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " %<PRIu8> 個ã®ãƒ‘ラメーターã®ã‚ã‚‹ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰:" -#: src/readelf.c:10109 +#: src/readelf.c:10178 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10190 #, fuzzy, c-format msgid " %<PRIu8> arguments:" msgstr " [%*<PRIuFAST8>] %hhu パラメーター\n" -#: src/readelf.c:10136 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" @@ -5787,7 +5751,7 @@ msgstr "" # # "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s æ–‡å—列\n" ãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã®ã¯ä½•æ•…? å–ã‚Šæ•¢ãˆãš fuzzy扱ㄠ-#: src/readelf.c:10381 +#: src/readelf.c:10450 #, fuzzy, c-format msgid "" "\n" @@ -5799,42 +5763,42 @@ msgstr "" " %4$*s æ–‡å—列\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10465 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** æ–‡å—列ã®èªè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼: %s\n" -#: src/readelf.c:10425 +#: src/readelf.c:10494 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10593 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10526 +#: src/readelf.c:10595 #, fuzzy, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10540 +#: src/readelf.c:10609 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10549 +#: src/readelf.c:10618 #, fuzzy, c-format msgid " Padding: %8<PRIx16>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10603 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -5843,7 +5807,7 @@ msgstr "" "\n" "呼出ã—フレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -5852,22 +5816,22 @@ msgstr "" "\n" "例外å–扱ã„テーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr "呼出ã—サイトコード化: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -5875,7 +5839,7 @@ msgstr "" "\n" " 呼出ã—サイトテーブル:" -#: src/readelf.c:10782 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5888,12 +5852,12 @@ msgstr "" " 離ç€é™¸å ´: %#<PRIx64>\n" " 行動: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "ä¸å½“㪠TType コード化" -#: src/readelf.c:10882 +#: src/readelf.c:10951 #, fuzzy, c-format msgid "" "\n" @@ -5903,37 +5867,37 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10980 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10929 +#: src/readelf.c:10998 #, fuzzy, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10936 +#: src/readelf.c:11005 #, fuzzy, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10943 +#: src/readelf.c:11012 #, fuzzy, c-format msgid " address offset: %#<PRIx32>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:10950 +#: src/readelf.c:11019 #, fuzzy, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10957 +#: src/readelf.c:11026 #, fuzzy, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:10971 +#: src/readelf.c:11040 #, fuzzy, c-format msgid "" "\n" @@ -5943,7 +5907,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11065 #, fuzzy, c-format msgid "" "\n" @@ -5953,7 +5917,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11094 #, fuzzy, c-format msgid "" "\n" @@ -5963,7 +5927,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11126 #, fuzzy, c-format msgid "" "\n" @@ -5972,18 +5936,18 @@ msgstr "" "\n" "オフセット %#0<PRIx64> ã«ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ル\n" -#: src/readelf.c:11195 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "デãƒãƒƒã‚°å†…容記述åを得られã¾ã›ã‚“: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータã®å¤‰æ›ãŒã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -5992,21 +5956,21 @@ msgstr "" "\n" "%*s... < %u 回ã®ç¹°è¿”ã—> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " 所有者 データ大ãã•ã‚¿ã‚¤ãƒ—\n" -#: src/readelf.c:12466 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12518 -#, fuzzy, c-format +#: src/readelf.c:12583 +#, c-format msgid "cannot get content of note: %s" -msgstr "ノートセクションã®å†…容を得られã¾ã›ã‚“: %s" +msgstr "ノートセクションã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6016,7 +5980,7 @@ msgstr "" "オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:12575 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6025,7 +5989,7 @@ msgstr "" "\n" "オフセット %2$#0<PRIx64> ã® %1$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚°ãƒ¡ãƒ³ãƒˆ:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12686 #, fuzzy, c-format msgid "" "\n" @@ -6034,12 +5998,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12713 src/readelf.c:12764 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12718 #, fuzzy, c-format msgid "" "\n" @@ -6049,7 +6013,7 @@ msgstr "" "オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン" "プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12723 #, fuzzy, c-format msgid "" "\n" @@ -6060,7 +6024,7 @@ msgstr "" "オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン" "プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12737 #, fuzzy, c-format msgid "" "\n" @@ -6069,7 +6033,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n" -#: src/readelf.c:12705 +#: src/readelf.c:12769 #, fuzzy, c-format msgid "" "\n" @@ -6079,7 +6043,7 @@ msgstr "" "オフセット %4$#0<PRIx64> æ–‡å—列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ" "イトã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12774 #, fuzzy, c-format msgid "" "\n" @@ -6090,7 +6054,7 @@ msgstr "" "オフセット %4$#0<PRIx64> æ–‡å—列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ" "イトã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6099,7 +6063,7 @@ msgstr "" "\n" "セクション [%lu] ãŒã‚ã‚Šã¾ã›ã‚“" -#: src/readelf.c:12789 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6108,12 +6072,12 @@ msgstr "" "\n" "セクション '%s' ãŒã‚ã‚Šã¾ã›ã‚“" -#: src/readelf.c:12846 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブã®ã‚·ãƒ³ãƒœãƒ«ç´¢å¼• '%s' を得られã¾ã›ã‚“: %s" -#: src/readelf.c:12849 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6122,21 +6086,21 @@ msgstr "" "\n" "アーカイブ '%s' ã«ã¯ã‚·ãƒ³ãƒœãƒ«ç´¢å¼•ãŒã‚ã‚Šã¾ã›ã‚“\n" -#: src/readelf.c:12853 -#, fuzzy, c-format +#: src/readelf.c:12914 +#, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" "\n" -"アーカイブ '%s' ã®ç´¢å¼•ã«ã¯ %Zu é …ç›®ã‚ã‚Šã¾ã™:\n" +"アーカイブ '%s' ã®ç´¢å¼•ã¯ %zu 個ã®é …目をæŒã¡ã¾ã™:\n" -#: src/readelf.c:12871 -#, fuzzy, c-format +#: src/readelf.c:12932 +#, c-format msgid "cannot extract member at offset %zu in '%s': %s" -msgstr "'%2$s' 㮠オフセット %1$Zu ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’抽出ã§ãã¾ã›ã‚“: %3$s" +msgstr "'%2$s' 㮠オフセット %1$zu ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’抽出ã§ãã¾ã›ã‚“: %3$s" -#: src/readelf.c:12876 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンãƒãƒ¼ '%s' ã«ã¯ä»¥ä¸‹ãŒã‚ã‚Šã¾ã™:\n" @@ -6146,8 +6110,8 @@ msgid "" "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " "is `bsd'" msgstr "" -"出力形å¼ã¨ã—㦠FORMAT を使ã£ã¦ãã ã•ã„。FORMAT 㯠`bsd'ã‹ã€`sysv' ã®ã©ã¡ã‚‰ã‹" -"ã§ã™ã€‚çœç•¥å€¤ã¯ `bsd'ã§ã™" +"出力形å¼ã¨ã—㦠FORMAT を使ã£ã¦ãã ã•ã„。 FORMAT 㯠`bsd'〠`sysv' ã®ã©ã¡ã‚‰ã‹" +"ã§ã™ã€‚ デフォルト㯠`bsd'ã§ã™" #: src/size.c:58 msgid "Same as `--format=sysv'" @@ -6171,11 +6135,11 @@ msgstr "`--radix=16' ã¨åŒã˜" #: src/size.c:66 msgid "Similar to `--format=sysv' output but in one line" -msgstr "`--format=sysv' ã®å‡ºåŠ›ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€1è¡Œã§ã™" +msgstr "`--format=sysv' ã®å‡ºåŠ›ã¨ ä¼¼ã¦ã„ã¾ã™ãŒã€ 1è¡Œã§ã™" #: src/size.c:70 msgid "Print size and permission flags for loadable segments" -msgstr "ãƒãƒ¼ãƒ‰å¯èƒ½ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã®ãŸã‚ã®å°åˆ·ã®å¤§ãã•ã¨è¨±å¯ãƒ•ãƒ©ã‚°" +msgstr "ãƒãƒ¼ãƒ‰å¯èƒ½ã‚»ã‚°ãƒ¡ãƒ³ãƒˆ ã®å¤§ãã•ã¨ 許å¯ãƒ•ãƒ©ã‚°ã® 表示" #: src/size.c:71 msgid "Display the total sizes (bsd only)" @@ -6184,7 +6148,7 @@ msgstr "åˆè¨ˆã®å¤§ãã•ã‚’表示 (bsd ã®ã¿)" #. Short description of program. #: src/size.c:76 msgid "List section sizes of FILEs (a.out by default)." -msgstr "ãµãã„ã‚‹ ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®å¤§ãã•ã®ä¸€è¦§ (çœç•¥å€¤ã¯ a.out)" +msgstr "FILE ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã® 大ãã•ã® 一覧表示 (デフォルトã§ã¯ a.out)" #: src/size.c:240 #, c-format @@ -6231,39 +6195,36 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 -#, fuzzy -#| msgid "invalid section" +#: src/size.c:419 msgctxt "sysv" msgid "section" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³" +msgstr "" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:480 msgid "cannot get section header" -msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s" +msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(åˆè¨ˆ)\n" @@ -6273,9 +6234,9 @@ msgid "-p PID should be a positive process id." msgstr "" #: src/stack.c:493 -#, fuzzy, c-format +#, c-format msgid "Cannot open core file '%s'" -msgstr "アーカイブ '%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“" +msgstr "コアファイル'%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“" #: src/stack.c:553 #, c-format @@ -6298,68 +6259,67 @@ msgid "One of -p PID or --core COREFILE should be given." msgstr "" #: src/stack.c:645 -#, fuzzy msgid "Show stack of process PID" -msgstr "検索ツリーを生æˆã§ãã¾ã›ã‚“" +msgstr "process PID ã®ã‚¹ã‚¿ãƒƒã‚¯ã‚’表示" #: src/stack.c:647 msgid "Show stack found in COREFILE" -msgstr "" +msgstr "COREFILE ã§è¦‹ã¤ã‹ã£ãŸã‚¹ã‚¿ãƒƒã‚¯ã‚’表示" #: src/stack.c:648 msgid "(optional) EXECUTABLE that produced COREFILE" -msgstr "" +msgstr "(optional) COREFILE を生æˆã—㟠EXECUTABLE" #: src/stack.c:652 -#, fuzzy msgid "Output selection options:" -msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:" +msgstr "出力é¸æŠžã‚ªãƒ—ション:" #: src/stack.c:654 -#, fuzzy msgid "Additionally show frame activation" -msgstr "出力é¸æŠž:" +msgstr "frame activation ã‚’ ã•ã‚‰ã« 表示" #: src/stack.c:656 msgid "Additionally try to lookup DWARF debuginfo name for frame address" -msgstr "" +msgstr "フレームアドレス㫠対ã™ã‚‹ DWARF debuginfo name ã®æ¤œç´¢ã‚’ ã•ã‚‰ã«è©¦ã¿ã‚‹" #: src/stack.c:659 msgid "" "Additionally show inlined function frames using DWARF debuginfo if available " "(implies -d)" msgstr "" +"å¯èƒ½ã§ã‚れ㰠DWARF debuginfo を使ã£ã¦ インライン 関数㮠フレームを表示 (暗黙" +"çš„ã« -d ã‚’ä¼´ã†ï¼‰" #: src/stack.c:661 msgid "Additionally show module file information" -msgstr "" +msgstr "モジュール ãƒ•ã‚¡ã‚¤ãƒ«æƒ…å ±ã‚’ ã•ã‚‰ã« 表示" #: src/stack.c:663 -#, fuzzy msgid "Additionally show source file information" -msgstr "出力é¸æŠž:" +msgstr "ソース ãƒ•ã‚¡ã‚¤ãƒ«æƒ…å ±ã‚’ ã•ã‚‰ã« 表示" #: src/stack.c:665 msgid "" "Show all additional information (activation, debugname, inlines, module and " "source)" msgstr "" +"å…¨ã¦ã® è¿½åŠ æƒ…å ±ã‚’ 表示 (activation, debugname, inlines, module, source)" #: src/stack.c:667 msgid "Do not resolve address to function symbol name" -msgstr "" +msgstr "アドレスを 関数シンボルå㫠解決ã—ãªã„" #: src/stack.c:669 msgid "Show raw function symbol names, do not try to demangle names" -msgstr "" +msgstr "生㮠関数シンボルåã‚’ 表示ã—〠デマングルを 試ã¿ãªã„" #: src/stack.c:671 msgid "Show module build-id, load address and pc offset" -msgstr "" +msgstr "モジュール㮠ビルド IDã€ãƒãƒ¼ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ PC オフセット を表示" #: src/stack.c:673 msgid "Show the backtrace of only one thread" -msgstr "" +msgstr "1ã¤ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã ã‘ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’表示" #: src/stack.c:675 msgid "Show at most MAXFRAMES per thread (default 256, use 0 for unlimited)" @@ -6368,6 +6328,8 @@ msgstr "" #: src/stack.c:677 msgid "Show module memory map with build-id, elf and debug files detected" msgstr "" +"検出ã•ã‚ŒãŸ ビルド ID〠elf〠debug ファイル付ã㧠モジュール㮠メモリマップ" +"ã‚’ 表示" #: src/stack.c:685 msgid "" @@ -6384,96 +6346,94 @@ msgstr "" #: src/stack.c:760 #, c-format msgid "Couldn't show any frames." -msgstr "" +msgstr "フレームを表示ã§ãã¾ã›ã‚“" #: src/strings.c:65 msgid "Output Selection:" -msgstr "" +msgstr "出力é¸æŠžï¼š" #: src/strings.c:66 msgid "Scan entire file, not only loaded sections" -msgstr "" +msgstr "ãƒãƒ¼ãƒ‰ã•ã‚Œã‚‹ セクションã ã‘ ã§ãªã ファイル全体を スã‚ャンã™ã‚‹" #: src/strings.c:68 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" -msgstr "" +msgstr "ヌル終端ã•ã‚ŒãŸ MIN-LEN æ–‡å—以上㮠シーケンス ã®ã¿ã‚’ 表示" #: src/strings.c:69 msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" msgstr "" +"æ–‡å—サイズ㨠エンディアンを é¸æŠžï¼š s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B," +"L} = 32-bit" #: src/strings.c:73 msgid "Print name of the file before each string." -msgstr "" +msgstr "å„æ–‡å—列㮠å‰ã« ファイルåを表示" #: src/strings.c:75 msgid "Print location of the string in base 8, 10, or 16 respectively." -msgstr "" +msgstr "æ–‡å—列㮠ä½ç½®ã‚’ 基数 8〠10〠16 㧠å„々表示" #: src/strings.c:76 msgid "Alias for --radix=o" -msgstr "" +msgstr "--radix=o ã¨åŒã˜" #. Short description of program. #: src/strings.c:83 msgid "Print the strings of printable characters in files." -msgstr "" +msgstr "ファイルä¸ã®è¡¨ç¤ºå¯èƒ½æ–‡å—ã‹ã‚‰ãªã‚‹æ–‡å—列を表示ã™ã‚‹ã€‚" #: src/strings.c:256 src/strings.c:291 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:585 -#, c-format +#: src/strings.c:584 msgid "lseek failed" msgstr "" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" #: src/strip.c:71 msgid "Place stripped output into FILE" -msgstr "ã¯ãŽå–ã£ãŸå‡ºåŠ›ã‚’ ãµãã„ã‚‹ ã«ç½®ã" +msgstr "ストリップã—㟠出力を FILE ã«ç½®ã" #: src/strip.c:72 msgid "Extract the removed sections into FILE" -msgstr "抽出ã—ãŸå–り除ã„ãŸã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ ãµãã„ã‚‹ ã«ç½®ã" +msgstr "抽出ã—㦠å–り除ã„㟠セクションを FILE ã«ç½®ã" #: src/strip.c:73 msgid "Embed name FILE instead of -f argument" -msgstr "-f パラメーターã®ä»£ã‚ã‚Šã« åå‰ ãµãã„ã‚‹ を有効ã«ã™ã‚‹" +msgstr "-f 引数㮠代ã‚ã‚Šã« åå‰ FILE を有効ã«ã™ã‚‹" #: src/strip.c:77 msgid "Remove all debugging symbols" -msgstr "デãƒãƒƒã‚°ç”¨ã®ã‚·ãƒ³ãƒœãƒ«ã‚’å…¨ã¦å–り除ã" +msgstr "デãƒãƒƒã‚°ç”¨ シンボルを 全㦠å–り除ã" #: src/strip.c:81 msgid "Remove section headers (not recommended)" -msgstr "" +msgstr "セクションヘッダーを å–り除ã (éžæŽ¨å¥¨ï¼‰" #: src/strip.c:83 msgid "Copy modified/access timestamps to the output" -msgstr "ä¿®æ£/アクセスタイムスタンプを出力ã¸è¤‡å†™ã™ã‚‹" +msgstr "ä¿®æ£/アクセス タイムスタンプを 出力㸠複製ã™ã‚‹" #: src/strip.c:85 msgid "" @@ -6499,66 +6459,67 @@ msgid "" "Remove the named section. SECTION is an extended wildcard pattern. May be " "given more than once. Only non-allocated sections can be removed." msgstr "" +"指定ã•ã‚ŒãŸ セクションを å–り除ã。 SECTION 㯠拡張 ワイルド カード パター" +"ン。 2回以上 与㈠られã¦ã‚‚ よã„。割り当㦠ã•ã‚Œãªã„ セクション ã®ã¿ å–り除ã‘" +"る。" #: src/strip.c:91 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." msgstr "" +"指定ã•ã‚ŒãŸ セクションを ä¿æŒã™ã‚‹ã€‚ SECTION 㯠拡張 ワイルド カード パター" +"ン。 2回以上 与㈠られã¦ã‚‚ よã„。" #. Short description of program. #: src/strip.c:98 msgid "Discard symbols from object files." -msgstr "オブジェクトファイルã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’ç ´æ£„ã™ã‚‹" +msgstr "オブジェクトファイルã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’æ¨ã¦åŽ»ã‚‹" -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "'-o' 㨠'-f' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "-f オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "-F オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" -#: src/strip.c:362 -#, fuzzy, c-format +#: src/strip.c:360 +#, c-format msgid "cannot both keep and remove .comment section" -msgstr ".comment セクションをå–り除ã" +msgstr ".comment セクションをä¿æŒã—ã¤ã¤å–り除ãã“ã¨ã¯ã§ãã¾ã›ã‚“" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:479 msgid "bad relocation" -msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’表示" +msgstr "" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "入力ファイル '%s' ã‚’ stat ã§ãã¾ã›ã‚“" -#: src/strip.c:761 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "'%s' ã‚’é–‹ã„ã¦ã„ã‚‹é–“" -#: src/strip.c:799 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆã¾ã›ã‚“" @@ -6569,45 +6530,44 @@ msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆ #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 -#, fuzzy, c-format +#: src/strip.c:813 +#, c-format msgid "%s: no support for stripping archive" -msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆã¾ã›ã‚“" +msgstr "%s: アーカイブã®ã‚¹ãƒˆãƒªãƒƒãƒ—ã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“" -#: src/strip.c:1047 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "EBL ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é–‹ã‘ã¾ã›ã‚“" -#: src/strip.c:1092 -#, fuzzy, c-format +#: src/strip.c:1094 msgid "cannot get number of phdrs" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "phdrs ã®æ•°ã‚’å–å¾—ã§ãã¾ã›ã‚“" -#: src/strip.c:1106 src/strip.c:1149 -#, fuzzy, c-format +#: src/strip.c:1108 src/strip.c:1151 +#, c-format msgid "cannot create new ehdr for file '%s': %s" -msgstr "æ–°ã—ã„ファイル '%s' を生æˆã§ãã¾ã›ã‚“: %s" +msgstr "ファイル '%s' ã®æ–°ã—ã„ ehdr を作æˆã§ãã¾ã›ã‚“: %s" -#: src/strip.c:1116 src/strip.c:1159 -#, fuzzy, c-format +#: src/strip.c:1118 src/strip.c:1161 +#, c-format msgid "cannot create new phdr for file '%s': %s" -msgstr "æ–°ã—ã„ファイル '%s' を生æˆã§ãã¾ã›ã‚“: %s" +msgstr "ファイル '%s' ã®æ–°ã—ã„ phdr を作æˆã§ãã¾ã›ã‚“: %s" -#: src/strip.c:1240 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "ä¸é©æ ¼ãªãƒ•ã‚¡ã‚¤ãƒ« '%s'" -#: src/strip.c:1250 -#, fuzzy, c-format +#: src/strip.c:1251 +#, c-format msgid "Cannot remove allocated section '%s'" -msgstr "PLT セクションを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "割り当ã¦ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ '%s' ã¯å–り除ã‘ã¾ã›ã‚“" -#: src/strip.c:1259 -#, fuzzy, c-format +#: src/strip.c:1260 +#, c-format msgid "Cannot both keep and remove section '%s'" -msgstr "0番目ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’得られã¾ã›ã‚“: %s" +msgstr "セクション '%s' ã‚’ä¿æŒã—ã¤ã¤å–り除ãã“ã¨ã¯ã§ãã¾ã›ã‚“" #: src/strip.c:1624 src/strip.c:1739 #, c-format @@ -6615,125 +6575,126 @@ msgid "while generating output file: %s" msgstr "出力ファイルを生æˆã—ã¦ã„ã‚‹é–“: %s" #: src/strip.c:1688 -#, fuzzy, c-format +#, c-format msgid "%s: error while updating ELF header: %s" -msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" +msgstr "%s: ELF ヘッダーã®æ›´æ–°ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" #: src/strip.c:1697 -#, fuzzy, c-format +#, c-format msgid "%s: error while getting shdrstrndx: %s" -msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" +msgstr "%s: shdrstrndx ã®å–å¾—ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:1705 src/strip.c:2550 -#, fuzzy, c-format +#: src/strip.c:1705 src/strip.c:2546 +#, c-format msgid "%s: error updating shdrstrndx: %s" -msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" +msgstr "%s: shdrstrndx ã®æ›´æ–°ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" #: src/strip.c:1722 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' ã®ãŸã‚ã®å‡ºåŠ›ã‚’準備ã—ã¦ã„ã‚‹é–“" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生æˆã—ã¦ã„ã‚‹é–“: %s" -#: src/strip.c:1793 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" -#: src/strip.c:1859 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文å—列テーブルを生æˆä¸: %s" -#: src/strip.c:1866 -#, fuzzy, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" -msgstr "セクションヘッダー文å—列テーブルを生æˆä¸: %s" +msgstr "セクションヘッダー文å—列テーブルを作æˆã™ã‚‹ãƒ¡ãƒ¢ãƒªãŒã‚ã‚Šã¾ã›ã‚“" -#: src/strip.c:2079 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込ã¿ä¸: %s" -#: src/strip.c:2477 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "'%s' を生æˆä¸" -#: src/strip.c:2500 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "デãƒãƒƒã‚°æƒ…å ±ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ を計算ä¸" -#: src/strip.c:2541 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:2559 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: ファイルをèªè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:2599 src/strip.c:2619 -#, fuzzy, c-format +#: src/strip.c:2595 src/strip.c:2615 +#, c-format msgid "while writing '%s'" -msgstr "'%s' を書込ã¿ä¸: %s" +msgstr "書ãè¾¼ã¿ä¸ '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' ã®çµ‚了ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "'%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ã¨å¤‰æ›´æ—¥ä»˜ã‚’è¨å®šã§ãã¾ã›ã‚“" #: src/unstrip.c:66 msgid "Match MODULE against file names, not module names" -msgstr "" +msgstr "モジュールåã§ã¯ãªã ファイルå㧠MODULE を一致ã•ã›ã‚‹" #: src/unstrip.c:67 msgid "Silently skip unfindable files" -msgstr "" +msgstr "見ã¤ã‹ã‚‰ãªã„ ファイルを é™ã‹ã« スã‚ップ" #: src/unstrip.c:70 msgid "Place output into FILE" -msgstr "" +msgstr "出力を FILE ã«ç½®ã" #: src/unstrip.c:72 msgid "Create multiple output files under DIRECTORY" -msgstr "" +msgstr "複数㮠出力ファイルを DIRECTORY ã®ä¸‹ã« 作æˆ" #: src/unstrip.c:73 msgid "Use module rather than file names" -msgstr "" +msgstr "ファイルåã§ã¯ãªã モジュールåã‚’ 使用" #: src/unstrip.c:75 msgid "Create output for modules that have no separate debug information" -msgstr "" +msgstr "分離ã•ã‚ŒãŸ デãƒãƒƒã‚°æƒ…å ±ã‚’ æŒãŸãªã„ モジュール用㫠出力を 作æˆ" #: src/unstrip.c:78 msgid "Apply relocations to section contents in ET_REL files" -msgstr "" +msgstr "ET_REL ファイル㮠セクション内容㫠リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ é©ç”¨" #: src/unstrip.c:80 msgid "Only list module and file names, build IDs" -msgstr "" +msgstr "モジュールå〠ファイルå〠ビルドID㮠リスト表示ã®ã¿" #: src/unstrip.c:82 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" +"ã„ãã¤ã‹ã® ELF ヘッダー ㌠一致ã—ãªã„ よã†ã« 見ãˆãŸ ã¨ã—ã¦ã‚‚ ファイル㮠çµåˆ" +"ã‚’ 強制" #: src/unstrip.c:126 #, c-format @@ -6753,216 +6714,225 @@ msgstr "" #: src/unstrip.c:185 #, c-format msgid "output directory '%s'" -msgstr "" +msgstr "出力ディレクトリ '%s'" #: src/unstrip.c:194 #, c-format msgid "exactly two file arguments are required" -msgstr "" +msgstr "ã¡ã‚‡ã†ã©ï¼’ã¤ã®å¼•æ•°ãŒå¿…è¦ã§ã™" #: src/unstrip.c:200 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" +"明示的ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用ã™ã‚‹éš›ã¯ -m, -a, -R, -i オプションã¯èªã‚られã¦ã„ã¾ã›ã‚“" #: src/unstrip.c:213 #, c-format msgid "-o or -d is required when using implicit files" -msgstr "" +msgstr "暗黙的ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用ã™ã‚‹éš›ã¯ -o ã¾ãŸã¯ -d ãŒå¿…è¦ã§ã™" #: src/unstrip.c:236 #, c-format msgid "cannot create ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを作æˆã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:240 -#, fuzzy, c-format +#, c-format msgid "cannot get shdrstrndx:%s" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "shdrstrndx ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーをå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:254 -#, fuzzy, c-format +#, c-format msgid "cannot get new zero section: %s" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "æ–°ã—ã„ zero セクションをå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:257 -#, fuzzy, c-format +#, c-format msgid "cannot update new zero section: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "æ–°ã—ã„ zero セクションを更新ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:261 #, c-format msgid "cannot copy ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを複製ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 -#, fuzzy, c-format +#, c-format msgid "cannot get number of program headers: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダ数をå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" -msgstr "" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを作æˆã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:276 #, c-format msgid "cannot copy program header: %s" -msgstr "" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを複製ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:286 #, c-format msgid "cannot copy section header: %s" -msgstr "" +msgstr "セクションヘッダーを複製ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" -msgstr "" +msgstr "セクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" -msgstr "" +msgstr "セクションデータを複製ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:319 #, c-format msgid "cannot create directory '%s'" -msgstr "" +msgstr "ディレクトリ '%s' を作æˆã§ãã¾ã›ã‚“" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 #: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" -msgstr "" +msgstr "ã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ãƒ«é …ç›®ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 #: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" -msgstr "" +msgstr "シンボルテーブルを更新ã§ãã¾ã›ã‚“: %s" #: src/unstrip.c:419 #, c-format msgid "cannot update section header: %s" +msgstr "セクションヘッダーを更新ã§ãã¾ã›ã‚“: %s" + +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" msgstr "" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" +msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã§ãã¾ã›ã‚“: %s" + +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" msgstr "" -#: src/unstrip.c:580 +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" -msgstr "" +msgstr "シンボルãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:848 -#, fuzzy, c-format +#: src/unstrip.c:849 +#, c-format msgid "cannot get symbol section data: %s" -msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" +msgstr "シンボルセクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:850 -#, fuzzy, c-format +#: src/unstrip.c:851 +#, c-format msgid "cannot get string section data: %s" -msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" +msgstr "æ–‡å—列セクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:867 -#, fuzzy, c-format +#: src/unstrip.c:868 +#, c-format msgid "invalid string offset in symbol [%zu]" -msgstr "シンボル %2$sã®ä¸æ£ãªã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$zu " +msgstr "シンボル [%zu] ã®ä¸ã«ä¸å½“ãªæ–‡å—列オフセットãŒã‚ã‚Šã¾ã™" -#: src/unstrip.c:1025 src/unstrip.c:1433 -#, fuzzy, c-format +#: src/unstrip.c:1026 src/unstrip.c:1434 +#, c-format msgid "cannot read section [%zu] name: %s" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "セクション [%zu] ã®åå‰ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/unstrip.c:1040 -#, fuzzy, c-format +#: src/unstrip.c:1041 +#, c-format msgid "bad sh_link for group section: %s" -msgstr "ä¸å½“㪠.debug_line セクション" +msgstr "グループセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸ sh_link ã§ã™: %s" -#: src/unstrip.c:1046 -#, fuzzy, c-format +#: src/unstrip.c:1047 +#, c-format msgid "couldn't get shdr for group section: %s" -msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" +msgstr "グループセクションã«å¯¾ã™ã‚‹ shdr ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s" -#: src/unstrip.c:1051 -#, fuzzy, c-format +#: src/unstrip.c:1052 +#, c-format msgid "bad data for group symbol section: %s" -msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" +msgstr "グループシンボルセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸãƒ‡ãƒ¼ã‚¿ã§ã™: %s" -#: src/unstrip.c:1057 -#, fuzzy, c-format +#: src/unstrip.c:1058 +#, c-format msgid "couldn't get symbol for group section: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "グループセクションã«å¯¾ã™ã‚‹ã‚·ãƒ³ãƒœãƒ«ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s" -#: src/unstrip.c:1062 -#, fuzzy, c-format +#: src/unstrip.c:1063 +#, c-format msgid "bad symbol name for group section: %s" -msgstr "セクションヘッダー文å—列セクションを生æˆã§ãã¾ã›ã‚“: %s" +msgstr "グループセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸã‚·ãƒ³ãƒœãƒ«åã§ã™: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1155 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1166 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1362 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1406 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1410 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "" @@ -6973,19 +6943,19 @@ msgid "cannot add new section: %s" msgstr "" #: src/unstrip.c:1758 -#, fuzzy, c-format +#, c-format msgid "symbol [%zu] has invalid section index" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•" +msgstr "シンボル [%zu] ãŒä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•ã‚’æŒã£ã¦ã„ã¾ã™" #: src/unstrip.c:1790 -#, fuzzy, c-format +#, c-format msgid "group has invalid section index [%zd]" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•" +msgstr "グループãŒä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼• [%zd] ã‚’æŒã£ã¦ã„ã¾ã™" #: src/unstrip.c:2065 -#, fuzzy, c-format +#, c-format msgid "cannot read section data: %s" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "セクションデータをèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" #: src/unstrip.c:2094 #, c-format @@ -7072,23 +7042,21 @@ msgstr "" msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7132,18 +7100,20 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" #: tests/dwflmodtest.c:209 -#, fuzzy msgid "Additionally show function names" -msgstr "出力é¸æŠž:" +msgstr "関数åã‚’ ã•ã‚‰ã« 表示" #: tests/dwflmodtest.c:210 msgid "Show instances of inlined functions" -msgstr "" +msgstr "インライン関数ã®å®Ÿä½“を表示" + +#~ msgid "cannot allocate memory" +#~ msgstr "メモリーを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“" #, fuzzy #~ msgid "" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2021-02-22 16:25+0100\n" "Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n" "Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n" @@ -41,11 +41,6 @@ msgstr "" " • „neverâ€, „noâ€, „noneâ€\n" " • „autoâ€, „ttyâ€, „if-ttyâ€\n" -#: lib/color.c:194 src/objdump.c:728 -#, c-format -msgid "cannot allocate memory" -msgstr "nie można przydzielić pamiÄ™ci" - #: lib/printversion.c:40 #, c-format msgid "" @@ -59,8 +54,8 @@ msgstr "" "BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyÅ›lnej gwarancji PRZYDATNOÅšCI\n" "HANDLOWEJ albo PRZYDATNOÅšCI DO OKREÅšLONYCH ZASTOSOWAŃ.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "pamięć wyczerpana" @@ -307,7 +302,7 @@ msgstr "nieznany kod jÄ™zyka" msgid ".debug_addr section missing" msgstr "brak sekcji .debug_addr" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Opcje wyboru wejÅ›cia:" @@ -534,7 +529,7 @@ msgid "No backend" msgstr "Brak zaplecza" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -585,18 +580,18 @@ msgstr " Nazwa: " msgid " Args: " msgstr " Parametry: " -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Identyfikator kopii: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr " Wersja konsolidatora: %.*s\n" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " System operacyjny: %s, ABI: " @@ -630,7 +625,7 @@ msgstr "nieprawidÅ‚owy rozmiar operandu źródÅ‚owego" msgid "invalid size of destination operand" msgstr "nieprawidÅ‚owy rozmiar operandu docelowego" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "nieprawidÅ‚owe kodowanie" @@ -715,8 +710,8 @@ msgstr "dane/scn nie zgadzajÄ… siÄ™" msgid "invalid section header" msgstr "nieprawidÅ‚owy nagłówek sekcji" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "nieprawidÅ‚owe dane" @@ -788,47 +783,49 @@ msgstr "nie można kompresować danych" msgid "cannot decompress data" msgstr "nie można dekompresować danych" -#: src/addr2line.c:57 +#: src/addr2line.c:59 msgid "Input format options:" msgstr "Opcje formatowania wejÅ›cia:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "Traktuje adresy jako offsety wzglÄ™dne do sekcji NAZWA." -#: src/addr2line.c:61 +#: src/addr2line.c:63 msgid "Output format options:" msgstr "Opcje formatowania wyjÅ›cia:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "WyÅ›wietla adres pliku przed każdym wpisem" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "WyÅ›wietla tylko podstawowe nazwy plików źródÅ‚owych" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "WyÅ›wietla bezwzglÄ™dne nazwy plików używajÄ…c katalogu kompilacji" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "WyÅ›wietla także nazwy funkcji" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "WyÅ›wietla także nazwy symboli lub sekcji" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "WyÅ›wietla także nazwy symboli i sekcji" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "WyÅ›wietla także flagi tabeli wierszy" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -836,22 +833,28 @@ msgstr "" "WyÅ›wietla wszystkie poÅ‚ożenia źródÅ‚owe, które spowodowaÅ‚y wstawione " "rozszerzenie podprogramów pod tym adresem." -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" "WyÅ›wietla symbole z usuniÄ™tym dekorowaniem (PARAMETR jest zawsze ignorowany)" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "WyÅ›wietla wszystkie informacje w jednym wierszy i wyrównuje wstawki" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "WyÅ›wietla bezwzglÄ™dne nazwy plików używajÄ…c katalogu kompilacji" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Różne:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" @@ -859,26 +862,25 @@ msgstr "" "w a.out)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "[ADRES…]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "SkÅ‚adnia sekcji wymaga dokÅ‚adnie jednego moduÅ‚u" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %#<PRIxMAX> lies outside section '%s'" msgstr "offset %#<PRIxMAX> leży poza sekcjÄ… „%sâ€" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "nie można odnaleźć symbolu „%sâ€" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %#<PRIxMAX> lies outside contents of '%s'" msgstr "offset %#<PRIxMAX> leży poza zawartoÅ›ciÄ… „%sâ€" @@ -1047,112 +1049,110 @@ msgstr "nie można wykonać stat na archiwum „%sâ€" msgid "no entry %s in archive\n" msgstr "brak wpisu %s w archiwum\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "nie można utworzyć tabeli mieszajÄ…cej" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "nie można umieÅ›cić w tabeli mieszajÄ…cej" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "nie można wykonać stat na „%sâ€" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "nie można odczytać zawartoÅ›ci %s: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "nie można otworzyć %.*s" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "zapisanie %s siÄ™ nie powiodÅ‚o" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "nie można zmienić trybu %s" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "nie można zmienić czasu modyfikacji %s" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "nie można zmienić nazwy pliku tymczasowego na %.*s" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "nie można utworzyć nowego pliku" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "nie odnaleziono poÅ‚ożenia elementu %s" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: brak wpisu %s w archiwum.\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "nie można otworzyć %s" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "nie można wykonać stat na %s" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s nie jest zwykÅ‚ym plikiem" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "nie można uzyskać deskryptora ELF dla %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "nie można odczytać %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, c-format msgid "cannot represent ar_date" msgstr "nie można przedstawić ar_date" -#: src/ar.c:1489 +#: src/ar.c:1486 #, c-format msgid "cannot represent ar_uid" msgstr "nie można przedstawić ar_uid" -#: src/ar.c:1495 +#: src/ar.c:1492 #, c-format msgid "cannot represent ar_gid" msgstr "nie można przedstawić ar_gid" -#: src/ar.c:1501 +#: src/ar.c:1498 #, c-format msgid "cannot represent ar_mode" msgstr "nie można przedstawić ar_mode" -#: src/ar.c:1507 +#: src/ar.c:1504 #, c-format msgid "cannot represent ar_size" msgstr "nie można przedstawić ar_size" @@ -1181,73 +1181,73 @@ msgstr "archiwum „%s†jest za duże" msgid "cannot read ELF header of %s(%s): %s" msgstr "nie można odczytać nagłówka ELF %s(%s): %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "otwieranie" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "odczytywanie" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 msgid "ELF header" msgstr "nagłówek ELF" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 msgid "program headers" msgstr "nagłówki programu" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 msgid "program header" msgstr "nagłówek programu" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 msgid "section headers" msgstr "nagłówki sekcji" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 msgid "section header string table index" msgstr "sekcja nagłówek ciÄ…g tabela indeks" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 msgid "could not obtain section header" msgstr "nie można uzyskać nagłówka sekcji" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 msgid "could not obtain section name" msgstr "nie można uzyskać nazwy sekcji" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "zapisywanie do standardowego wyjÅ›cia" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "odczytywanie ze standardowego wejÅ›cia" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 msgid "Classification options" msgstr "Opcje klasyfikacji" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" "Plik wyglÄ…da jak obiekt ELF lub archiwum/biblioteka statyczna (domyÅ›lnie)" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" "Plik jest zwykÅ‚ym obiektem ELF (nie jest archiwum/bibliotekÄ… statycznÄ…)" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "Plik jest archiwum lub bibliotekÄ… statycznÄ… ELF" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "Plik jest plikiem zrzutu core ELF" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" @@ -1255,60 +1255,60 @@ msgstr "" "Plik jest plikiem ELF z tabelÄ… symboli lub sekcjami .debug_* i może być " "dalej okrojony" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "Plik jest (głównie) wykonywalnym programem ELF (nie jest głównie DSO)" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "Plik jest wykonywalnym programem ELF (może być także DSO)" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" "Plik jest (głównie) obiektem współdzielonym ELF (DSO) (nie jest głównie " "plikiem wykonywalnym)" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" "Plik jest obiektem współdzielonym ELF (DSO) (może być także plikiem " "wykonywalnym)" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 msgid "File is a linux kernel module" msgstr "Plik jest moduÅ‚em jÄ…dra Linux" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" "Plik jest wyÅ‚Ä…cznie plikiem debugowania ELF (oddzielne .debug, .dwo lub " "wieloplikowe dwz)" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" "Plik jest wczytywalnym obiektem ELF (programem lub obiektem współdzielonym)" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "Flagi wejÅ›cia" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" "Klasyfikuje tylko zwykÅ‚e (niebÄ™dÄ…ce dowiÄ…zaniami symbolicznymi lub " "urzÄ…dzeniami specjalnymi) pliki" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" "Odczytuje także nazwy plików do przetworzenia ze standardowego wejÅ›cia, " "rozdzielone znakami nowego wiersza" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" @@ -1316,57 +1316,57 @@ msgstr "" "Odczytuje także nazwy plików do przetworzenia ze standardowego wejÅ›cia, " "rozdzielone bajtami NUL ASCII" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "Bez odczytywania plików ze standardowego wejÅ›cia (domyÅ›lnie)" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "Próbuje otwierać skompresowane pliki lub osadzone obrazy ELF (jÄ…dra)" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 msgid "Output flags" msgstr "Flagi wyjÅ›cia" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "WyÅ›wietla nazwy plików, rozdzielone znakami nowego wiersza" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "WyÅ›wietla nazwy plików, rozdzielone znakami NUL ASCII" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 msgid "Do not output file names" msgstr "Bez wyÅ›wietlania nazw plików" -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "Podczas wyÅ›wietlana nazw plików wyÅ›wietla pasujÄ…ce pliki (domyÅ›lnie)" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "Podczas wyÅ›wietlania nazw plików wyÅ›wietla niepasujÄ…ce pliki" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "Dodatkowe flagi" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "WyÅ›wietla dodatkowe informacje (można podać wiele razy)" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "Zmniejsza wyjÅ›cie bÅ‚Ä™dów (odpowiednik opcji --verbose)" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "PLIK…" -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1633,14 +1633,14 @@ msgstr "%s %s różniÄ… siÄ™: luka" msgid "Invalid value '%s' for --gaps parameter." msgstr "NieprawidÅ‚owa wartość „%s†dla parametru --gaps." -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 #: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "nie można otworzyć „%sâ€" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "nie można utworzyć deskryptora ELF dla „%sâ€: %s" @@ -1650,7 +1650,7 @@ msgstr "nie można utworzyć deskryptora ELF dla „%sâ€: %s" msgid "cannot create EBL descriptor for '%s'" msgstr "nie można utworzyć deskryptora EBL dla „%sâ€" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "nie można uzyskać nagłówka sekcji dla sekcji %zu: %s" @@ -1665,7 +1665,7 @@ msgstr "nie można uzyskać zawartoÅ›ci sekcji %zu: %s" msgid "cannot get relocation: %s" msgstr "nie można uzyskać relokacji: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "OpcjÄ™ -o podano dwukrotnie" @@ -1686,7 +1686,7 @@ msgstr "nieznany typ kompresji „%sâ€" msgid "No input file given" msgstr "Nie podano pliku wejÅ›ciowego" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "Tylko jeden plik wejÅ›ciowy jest dozwolony z „-oâ€" @@ -1941,7 +1941,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "sekcja [%2d] „%sâ€: nie można uzyskać danych sekcji\n" @@ -3511,7 +3511,7 @@ msgstr "" "sekcja [%2d]: „%sâ€: nieznany typ notatki pliku core %<PRIu32> pod offsetem " "%zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " @@ -3520,7 +3520,7 @@ msgstr "" "phdr[%d]: nieznany typ notatki pliku obiektu %<PRIu32> o nazwie wÅ‚aÅ›ciciela " "„%s†pod offsetem %zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " @@ -3529,37 +3529,37 @@ msgstr "" "sekcja [%2d] „%sâ€: nieznany typ notatki pliku obiektu %<PRIu32> o nazwie " "wÅ‚aÅ›ciciela „%s†pod offsetem %zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: brak okreÅ›lonych wpisów notatek dla typu pliku\n" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: nie można uzyskać zawartoÅ›ci sekcji notatki: %s\n" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: dodatkowe %<PRIu64> B po ostatniej notatce\n" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "sekcja [%2d] „%sâ€: brak okreÅ›lonych wpisów notatek dla typu pliku\n" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "sekcja [%2d] „%sâ€: nie można uzyskać zawartoÅ›ci sekcji notatek\n" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "sekcja [%2d] „%sâ€: dodatkowe %<PRIu64> B po ostatniej notatce\n" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3567,135 +3567,135 @@ msgstr "" "tylko pliki wykonywalne, obiekty współdzielone i pliki core mogÄ… mieć " "nagłówki programu\n" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "nie można uzyskać wpisu nagłówka programu %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "wpis nagłówka programu %d: nieznany typ wpisu nagłówka programu %#<PRIx64>\n" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "wiÄ™cej niż jeden wpis INTERP w nagłówku programu\n" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "wiÄ™cej niż jeden wpis TLS w nagłówku programu\n" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "statyczny plik wykonywalny nie może mieć sekcji dynamicznych\n" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "odniesienie sekcji dynamicznej w nagłówku programu ma bÅ‚Ä™dny offset\n" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "różne rozmiary sekcji dynamicznej w nagłówku programu i sekcji\n" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "wiÄ™cej niż jeden wpis GNU_RELRO w nagłówku programu\n" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "wczytywalny segment wskazywany przez GNU_RELRO nie jest zapisywalny\n" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "flagi wczytywalnego segmentu [%u] nie pasujÄ… do flag GNU_RELRO [%u]\n" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" "flagi GNU_RELRO [%u] nie sÄ… podzbiorem flag wczytywalnego segmentu [%u]\n" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "segment %s nie zawiera siÄ™ we wczytywalnym segmencie\n" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" "offsety nagłówka programu w nagłówku ELF i wpisie PHDR nie zgadzajÄ… siÄ™" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "odniesienie tabeli wyszukiwania ramki wywoÅ‚ania w nagłówku programu ma " "bÅ‚Ä™dny offset\n" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "różne rozmiary tabel wyszukiwania ramki wywoÅ‚ania w nagłówku programu " "i sekcji\n" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME jest obecne, ale brak sekcji .eh_frame_hdr\n" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabela wyszukiwania ramki wywoÅ‚ania musi być przydzielona\n" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sekcja [%2zu] „%sâ€: musi być przydzielona\n" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "tabela wyszukiwania ramki wywoÅ‚ania nie może być zapisywalna\n" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sekcja [%2zu] „%s†nie może być zapisywalna\n" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "tabela wyszukiwania ramki wywoÅ‚ania nie może być wykonywalna\n" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sekcja [%2zu] „%s†nie może być wykonywalna\n" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "wpis nagłówka programu %d: rozmiar pliku wiÄ™kszy niż rozmiar pamiÄ™ci\n" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "wpis nagłówka programu %d: wyrównanie nie jest potÄ™gÄ… 2\n" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3704,7 +3704,7 @@ msgstr "" "wpis nagłówka programu %d: offset w pliku i adres wirtualny nie sÄ… " "wielokrotnoÅ›ciÄ… wyrównania\n" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3713,106 +3713,106 @@ msgstr "" "plik wykonywalny/DSO z sekcjÄ… .eh_frame_hdr nie ma wpisu nagłówka programu " "PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "nie można odczytać nagłówka ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, c-format msgid "cannot create backend for ELF file\n" msgstr "nie można utworzyć zaplecza dla pliku ELF\n" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "Wybór wejÅ›cia:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "DoÅ‚Ä…cza ÅšCIEÅ»KĘ do wszystkich nazw plików" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "Używa ÅšCIEÅ»KI jako korzenia dla hierarchii debuginfo" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "Odnajduje źródÅ‚o relokacji tekstu w PLIKACH (domyÅ›lnie a.out)." #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "[PLIK…]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "nie można uzyskać nagłówka ELF „%sâ€: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "„%s†nie jest DSO ani PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "uzyskiwanie nagłówka sekcji dla sekcji %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "nie można odczytać sekcji dynamicznej: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "brak relokacji tekstu w „%sâ€" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "podczas odczytywania pliku ELF" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, c-format msgid "cannot get program header count: %s" msgstr "nie można uzyskać liczby nagłówków programu: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "nie można uzyskać indeksu nagłówka programu pod offsetem %zd: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "nie można uzyskać sekcji tabeli symboli %zu w „%sâ€: %s" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "nie można uzyskać relokacji pod indeksem %d w sekcji %zu w „%sâ€: %s" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s nie zostaÅ‚ skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "plik zawierajÄ…cy funkcjÄ™ „%s†nie zostaÅ‚ skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3820,7 +3820,7 @@ msgid "" msgstr "" "plik zawierajÄ…cy funkcjÄ™ „%s†mógÅ‚ nie zostać skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3829,7 +3829,7 @@ msgstr "" "plik zawierajÄ…cy funkcjÄ™ „%s†lub plik zawierajÄ…cy funkcjÄ™ „%s†nie zostaÅ‚ " "skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3936,12 +3936,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: BÅÄ„D WEWNĘTRZNY %d (%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "podczas zamykania „%sâ€" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: nie rozpoznano formatu pliku" @@ -3975,24 +3975,23 @@ msgstr "nie można przywrócić offsetu w archiwum na poczÄ…tek" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: nie rozpoznano formatu pliku" -#: src/nm.c:705 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "nie można utworzyć drzewa wyszukiwania" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "nie można uzyskać indeksu tabeli ciÄ…gów nagłówków sekcji" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -4006,7 +4005,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4015,7 +4014,7 @@ msgstr "" "%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n" "\n" -#: src/nm.c:776 +#: src/nm.c:773 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4023,45 +4022,45 @@ msgid "Name" msgstr " Nazwa: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1246 #, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: rozmiar wpisu w sekcji %zd „%s†nie jest tym, czego oczekiwano" -#: src/nm.c:1255 +#: src/nm.c:1251 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: rozmiar sekcji %zd „%s†nie jest wielokrotnoÅ›ciÄ… rozmiaru wpisu" -#: src/nm.c:1336 +#: src/nm.c:1331 #, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: wpisy (%zd) w sekcji %zd „%s†sÄ… za duże" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: nieprawidÅ‚owe dziaÅ‚anie" -#: src/nm.c:1622 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: brak symboli" @@ -4104,11 +4103,11 @@ msgstr "Nie podano dziaÅ‚ania.\n" msgid "while close `%s'" msgstr "podczas zamykania „%sâ€" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "NIEPRAWIDÅOWY SYMBOL" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "NIEPRAWIDÅOWA SEKCJA" @@ -4133,12 +4132,10 @@ msgid "Contents of section %s:\n" msgstr "Zawartość sekcji %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "nie można deasemblować" -#: src/objdump.c:760 -#, c-format +#: src/objdump.c:758 msgid "cannot create backend for elf file" msgstr "nie można utworzyć zaplecza dla pliku ELF" @@ -4324,20 +4321,20 @@ msgstr "Nieznana sekcja debugowania DWARF „%sâ€.\n" msgid "cannot generate Elf descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "nie można okreÅ›lić liczby sekcji: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "nie można uzyskać sekcji: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 #: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" @@ -4348,8 +4345,8 @@ msgstr "nie można uzyskać nagłówka sekcji: %s" msgid "cannot get section name" msgstr "nie można uzyskać nazwy sekcji" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "nie można uzyskać zwartoÅ›ci %s: %s" @@ -4409,48 +4406,48 @@ msgstr "nie można odczytać nagłówka ELF: %s" msgid "cannot create EBL handle" msgstr "nie można utworzyć uchwytu EBL" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "nie można okreÅ›lić liczby nagłówków programu: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, c-format msgid "cannot read ELF: %s" msgstr "nie można odczytać danych ELF: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "NONE (żaden)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (plik relokowalny)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "EXEC (plik wykonywalny)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (plik obiektu współdzielonego)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (plik core)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "Zależny od systemu: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Zależny od procesora: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4458,7 +4455,7 @@ msgstr "" "Nagłówek ELF:\n" " Magic: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4467,123 +4464,123 @@ msgstr "" "\n" " Klasa: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " Dane: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Wersja Ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(bieżąca)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " System operacyjny/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " Wersja ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " Komputer: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, c-format msgid " Machine: <unknown>: 0x%x\n" msgstr " Komputer: <nieznany>: 0x%x\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " Wersja: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#<PRIx64>\n" msgstr " Adres punktu wejÅ›ciowego: %#<PRIx64>\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: %<PRId64> %s\n" msgstr " PoczÄ…tek nagłówków programu: %<PRId64> %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "(bajtów w pliku)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: %<PRId64> %s\n" msgstr " PoczÄ…tek nagłówków sekcji: %<PRId64> %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " Flagi: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: %<PRId16> %s\n" msgstr " Rozmiar tego nagłówka: %<PRId16> %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(bajtów)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: %<PRId16> %s\n" msgstr " Rozmiar wpisów nagłówka programu: %<PRId16> %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %<PRId16>" msgstr " Liczba wpisów nagłówków programu: %<PRId16>" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (%<PRIu32> in [0].sh_info)" msgstr " (%<PRIu32> w [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr " ([0] niedostÄ™pny)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: %<PRId16> %s\n" msgstr " Rozmiar wpisów nagłówka sekcji: %<PRId16> %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %<PRId16>" msgstr " Liczba wpisów nagłówków sekcji: %<PRId16>" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (%<PRIu32> in [0].sh_size)" msgstr " (%<PRIu32> w [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (%<PRIu32> in [0].sh_link)" msgstr " (%<PRIu32> w [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4592,7 +4589,7 @@ msgstr "" " Indeks tabeli ciÄ…gów nagłówków sekcji: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %<PRId16>\n" @@ -4601,12 +4598,12 @@ msgstr "" " Indeks tabeli ciÄ…gów nagłówków sekcji: %<PRId16>\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, c-format msgid "cannot get number of sections: %s" msgstr "nie można uzyskać liczby sekcji: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, c-format msgid "" "There are %zd section headers, starting at offset %#<PRIx64>:\n" @@ -4615,16 +4612,16 @@ msgstr "" "Liczba nagłówków sekcji: %zd, rozpoczynajÄ…cych siÄ™ od offsetu %#<PRIx64>:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, c-format msgid "cannot get section header string table index: %s" msgstr "nie można uzyskać indeksu tabeli ciÄ…gów nagłówków sekcji: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "Nagłówki sekcji:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4632,7 +4629,7 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozm. ES Flagi Lk " "Inf Al" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4640,36 +4637,36 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozmiar ES " "Flagi Lk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr " [Kompresja Rozmiar Al]" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr " [Kompresja Rozmiar Al]" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, c-format msgid "bad compression header for section %zd: %s" msgstr "bÅ‚Ä™dny nagłówek kompresji dla sekcji %zd: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "bÅ‚Ä™dny rozmiar kompresji gnu dla sekcji %zd: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "Nagłówki programu:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Typ Offset AdresWirt AdresFiz RozmPlik RozmPam Flg " "Wyrównanie" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4677,12 +4674,12 @@ msgstr "" " Typ Offset AdresWirtualny AdresFizyczny RozmPlik " "RozmPam Flg Wyrównanie" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[WywoÅ‚anie interpretera programu: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4692,12 +4689,12 @@ msgstr "" " Mapowanie sekcji do segmentów:\n" " Segment sekcji…" -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4715,7 +4712,7 @@ msgstr[2] "" "\n" "Grupa sekcji COMDAT [%2zu] „%s†z podpisem „%s†zawiera %zu wpisów:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4733,31 +4730,31 @@ msgstr[2] "" "\n" "Grupa sekcji [%2zu] „%s†z podpisem „%s†zawiera %zu wpisów:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "<INVALID SYMBOL>" msgstr "<NIEPRAWIDÅOWY SYMBOL>" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "<INVALID SECTION>" msgstr "<NIEPRAWIDÅOWY SEKCJA>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "Nie można dekompresować sekcji" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "nie można uzyskać nagłówka sekcji [%zd]: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, c-format msgid "invalid sh_link value in section %zu" msgstr "nieprawidÅ‚owa wartość sh_link w sekcji %zu" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4783,36 +4780,36 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "'%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " Typ Wartość\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteka współdzielona: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "soname biblioteki: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "rpath biblioteki: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "runpath biblioteki: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (bajtów)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4821,7 +4818,7 @@ msgstr "" "\n" "NieprawidÅ‚owa tabela symboli pod offsetem %#0<PRIx64>\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4850,7 +4847,7 @@ msgstr[2] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4868,30 +4865,30 @@ msgstr[2] "" "\n" "Sekcja relokacji [%2u] „%s†pod offsetem %#0<PRIx64> zawiera %d wpisów:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "<INVALID RELOC>" msgstr "<NIEPRAWIDÅOWA RELOKACJA>" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4909,7 +4906,7 @@ msgstr[2] "" "\n" "Tabela symboli [%2u] „%s†zawiera %u wpisów:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4917,33 +4914,33 @@ msgstr[0] " %lu symbol lokalny Tabela ciÄ…gów: [%2u] „%sâ€\n" msgstr[1] " %lu symbole lokalne Tabela ciÄ…gów: [%2u] „%sâ€\n" msgstr[2] " %lu symboli lokalnych Tabela ciÄ…gów: [%2u] „%sâ€\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "bÅ‚Ä™dny symbol dynamiczny" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "brak" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| <unknown>" msgstr "| <nieznany>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4969,17 +4966,17 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "„%sâ€\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Wersja: %hu Plik: %s Licznik: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nazwa: %s Flagi: %s Wersja: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -5005,19 +5002,19 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "„%sâ€\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" " %#06x: Wersja: %hd Flagi: %s Indeks: %hd Licznik: %hd Nazwa: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Rodzic %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -5040,15 +5037,15 @@ msgstr[2] "" "Sekcja symboli wersji [%2u] „%s†zawiera %d wpisów:\n" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] „%sâ€" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *lokalny* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *globalny* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -5079,22 +5076,22 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "„%sâ€\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " DÅ‚ugość Liczba % caÅ‚oÅ›ci Pokrycie\n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5103,37 +5100,37 @@ msgstr "" " Åšrednia liczba testów: udane wyszukania: %f\n" "\t\t\t nieudane wyszukania: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "nie można uzyskać danych dla sekcji %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "nieprawidÅ‚owe dane w sekcji sysv.hash %d" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, c-format msgid "invalid chain in sysv.hash section %d" msgstr "nieprawidÅ‚owy Å‚aÅ„cuch w sekcji sysv.hash %d" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "nieprawidÅ‚owe dane w sekcji sysv.hash64 %d" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "nieprawidÅ‚owy Å‚aÅ„cuch w sekcji sysv.hash64 %d" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "nieprawidÅ‚owe dane w sekcji gnu.hash %d" -#: src/readelf.c:3452 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5143,7 +5140,7 @@ msgstr "" " Rozmiar maski bitowej: %zu B %<PRIuFAST32>%% b ustawionych drugie " "przesuniÄ™cie skrótu: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -5164,7 +5161,7 @@ msgstr[2] "" "Sekcja listy bibliotek [%2zu] „%s†pod offsetem %#0<PRIx64> zawiera %d " "wpisów:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5172,7 +5169,7 @@ msgstr "" " Biblioteka Czas Suma k. Wersja " "Flagi" -#: src/readelf.c:3614 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -5182,102 +5179,101 @@ msgstr "" "\n" "Sekcja atrybutów obiektu [%2zu] „%s†%<PRIu64> B pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " WÅ‚aÅ›ciciel Rozmiar\n" -#: src/readelf.c:3655 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3696 #, c-format msgid " File: %11<PRIu32>\n" msgstr " Plik: %11<PRIu32>\n" -#: src/readelf.c:3748 +#: src/readelf.c:3745 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3748 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3754 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3761 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3767 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, c-format +#: src/readelf.c:3834 msgid "sprintf failure" msgstr "sprintf siÄ™ nie powiodÅ‚o" -#: src/readelf.c:4319 +#: src/readelf.c:4316 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:4322 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "blok o %zu B:" -#: src/readelf.c:4800 +#: src/readelf.c:4797 #, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%2<PRIuMAX>] %s <SKRÓCONE>\n" -#: src/readelf.c:4867 +#: src/readelf.c:4864 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> zostaÅ‚o użyte z różnymi rozmiarami adresu" -#: src/readelf.c:4874 +#: src/readelf.c:4871 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> zostaÅ‚o użyte z różnymi rozmiarami offsetu" -#: src/readelf.c:4881 +#: src/readelf.c:4878 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> zostaÅ‚o użyte z różnymi adresami podstawowymi" -#: src/readelf.c:4888 +#: src/readelf.c:4885 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "%s %#<PRIx64> zostaÅ‚o użyte z różnymi atrybutami %s i %s" -#: src/readelf.c:4988 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <NIEUÅ»YWANE ÅšMIECIE W RESZCIE SEKCJI>\n" -#: src/readelf.c:4996 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <NIEUÅ»YWANE ÅšMIECIE>… %<PRIu64> B…\n" -#: src/readelf.c:5099 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5288,7 +5284,7 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" " [ Kod]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5297,20 +5293,20 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %<PRIu64>:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** bÅ‚Ä…d podczas odczytywania skrótu: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] offset: %<PRId64>, potomek: %s, znacznik: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5319,52 +5315,52 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5179 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "nie można uzyskać danych sekcji .debug_addr: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, c-format msgid " Length: %8<PRIu64>\n" msgstr " DÅ‚ugość: %8<PRIu64>\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " Wersja DWARF: %8<PRIu16>\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, c-format msgid " Address size: %8<PRIu64>\n" msgstr " Rozmiar adresu: %8<PRIu64>\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " Rozmiar segmentu: %8<PRIu64>\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, c-format msgid "Unknown version" msgstr "Nieznana wersja" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, c-format msgid "unsupported address size" msgstr "nieobsÅ‚ugiwany rozmiar adresu" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "nieobsÅ‚ugiwany rozmiar segmentu" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5382,12 +5378,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %zu wpisów:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5395,7 +5391,7 @@ msgstr "" " [%*zu] poczÄ…tek: %0#*<PRIx64>, dÅ‚ugość: %5<PRIu64>, offset CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5488 src/readelf.c:8425 #, c-format msgid "" "\n" @@ -5404,13 +5400,13 @@ msgstr "" "\n" "Tabela pod offsetem %zu:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "nieprawidÅ‚owe dane w sekcji [%zu] „%sâ€" -#: src/readelf.c:5511 +#: src/readelf.c:5508 #, c-format msgid "" "\n" @@ -5419,27 +5415,27 @@ msgstr "" "\n" " DÅ‚ugość: %6<PRIu64>\n" -#: src/readelf.c:5523 +#: src/readelf.c:5520 #, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " Wersja DWARF: %6<PRIuFAST16>\n" -#: src/readelf.c:5527 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "nieobsÅ‚ugiwana wersja aranges" -#: src/readelf.c:5538 +#: src/readelf.c:5535 #, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " Offset CU: %6<PRIx64>\n" -#: src/readelf.c:5544 +#: src/readelf.c:5541 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr " Offset adresu: %6<PRIu64>\n" -#: src/readelf.c:5555 +#: src/readelf.c:5552 #, c-format msgid "" " Segment size: %6<PRIu64>\n" @@ -5448,17 +5444,17 @@ msgstr "" " Rozmiar segmentu: %6<PRIu64>\n" "\n" -#: src/readelf.c:5610 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr " %zu B wypeÅ‚nienia\n" -#: src/readelf.c:5654 +#: src/readelf.c:5651 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_rnglists: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5674 src/readelf.c:9176 #, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" @@ -5467,42 +5463,42 @@ msgstr "" "Tabela pod offsetem 0x%<PRIx64>:\n" "\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5729 src/readelf.c:9231 #, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " Wpisy offsetu: %8<PRIu64>\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr " Nieznana podstawa CU: " -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr " Podstawa CU [%6<PRIx64>]: " -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr " Brak powiÄ…zania z CU.\n" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "za dużo wpisów offsetu dla dÅ‚ugoÅ›ci jednostki" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5768 src/readelf.c:9270 #, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " Offsety zaczynajÄ…ce siÄ™ w 0x%<PRIx64>:\n" -#: src/readelf.c:5823 +#: src/readelf.c:5820 #, c-format msgid "invalid range list data" msgstr "nieprawidÅ‚owe dane listy zakresów" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" @@ -5511,12 +5507,12 @@ msgstr "" " %zu B wypeÅ‚nienia\n" "\n" -#: src/readelf.c:6025 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" @@ -5525,7 +5521,7 @@ msgstr "" "\n" " Nieznana podstawa CU: " -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" @@ -5534,30 +5530,30 @@ msgstr "" "\n" " Podstawa CU [%6<PRIx64>]: " -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6094 src/readelf.c:9788 msgid "base address" msgstr "adres podstawowy" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6104 src/readelf.c:9798 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:6367 +#: src/readelf.c:6364 msgid " <INVALID DATA>\n" msgstr " <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6621 #, c-format msgid "cannot get ELF: %s" msgstr "nie można uzyskać ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5566,7 +5562,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywoÅ‚ania [%2zu] „%s†pod offsetem %#<PRIx64>:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5575,65 +5571,65 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6790 src/readelf.c:6944 #, c-format msgid "invalid augmentation length" msgstr "nieprawidÅ‚owa dÅ‚ugość powiÄ™kszenia" -#: src/readelf.c:6808 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:6814 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:6924 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (offset: %#<PRIx64>)" -#: src/readelf.c:6931 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (koÅ„czÄ…cy offset: %#<PRIx64>)" -#: src/readelf.c:6968 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sWskaźnik LSDA: %#<PRIx64>\n" -#: src/readelf.c:7053 +#: src/readelf.c:7050 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "DIE [%<PRIx64>] nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7060 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "DIE [%<PRIx64>] nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7082 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%<PRIx64>] nie można uzyskać wartoÅ›ci atrybutu „%s†(%s): %s" -#: src/readelf.c:7415 +#: src/readelf.c:7412 #, c-format msgid "invalid file (%<PRId64>): %s" msgstr "nieprawidÅ‚owy plik (%<PRId64>): %s" -#: src/readelf.c:7419 +#: src/readelf.c:7416 #, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr "brak plików źródÅ‚owych dla CU [%<PRIx64>]" -#: src/readelf.c:7423 +#: src/readelf.c:7420 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "nie można uzyskać CU DWARF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5644,12 +5640,12 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" " [Offset]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7785 #, c-format msgid "cannot get next unit: %s" msgstr "nie można uzyskać nastÄ™pnej jednostki: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7805 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5662,7 +5658,7 @@ msgstr "" "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" " Podpis typu: %#<PRIx64>, offset typu: %#<PRIx64> [%<PRIx64>]\n" -#: src/readelf.c:7820 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5673,38 +5669,38 @@ msgstr "" " Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: " "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr " Typ jednostki: %s (%<PRIu8>)" -#: src/readelf.c:7857 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "nieznana wersja (%d) lub typ jednostki (%d)" -#: src/readelf.c:7886 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7892 #, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "" "nie można uzyskać znacznika DIE pod offsetem [%<PRIx64>] w sekcji „%sâ€: %s" -#: src/readelf.c:7933 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "nie można uzyskać nastÄ™pnego DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać nastÄ™pnego DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7980 #, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5715,7 +5711,7 @@ msgstr "" " Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: " "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" -#: src/readelf.c:8037 +#: src/readelf.c:8032 #, c-format msgid "" "\n" @@ -5726,18 +5722,18 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" "\n" -#: src/readelf.c:8369 +#: src/readelf.c:8364 #, c-format msgid "unknown form: %s" msgstr "nieznana forma: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "nie można uzyskać danych sekcji danych wiersza: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8516 #, c-format msgid "" "\n" @@ -5770,27 +5766,27 @@ msgstr "" "\n" "Instrukcje:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8538 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "nie można obsÅ‚użyć wersji .debug_line: %u\n" -#: src/readelf.c:8532 +#: src/readelf.c:8546 #, c-format msgid "cannot handle address size: %u\n" msgstr "nie można obsÅ‚użyć rozmiaru adresu: %u\n" -#: src/readelf.c:8540 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "nie można obsÅ‚użyć rozmiaru selektora segmentu: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "nieprawidÅ‚owe dane pod offsetem %tu w sekcji [%zu] „%sâ€" -#: src/readelf.c:8565 +#: src/readelf.c:8579 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" @@ -5798,7 +5794,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu parametr\n" msgstr[1] " [%*<PRIuFAST8>] %hhu parametry\n" msgstr[2] " [%*<PRIuFAST8>] %hhu parametrów\n" -#: src/readelf.c:8576 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5806,12 +5802,12 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8596 src/readelf.c:8673 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8653 +#: src/readelf.c:8667 msgid "" "\n" "File name table:" @@ -5819,11 +5815,11 @@ msgstr "" "\n" "Tabela nazw plików:" -#: src/readelf.c:8714 +#: src/readelf.c:8728 msgid " Entry Dir Time Size Name" msgstr " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:8753 +#: src/readelf.c:8774 msgid "" "\n" "No line number statements." @@ -5831,7 +5827,7 @@ msgstr "" "\n" "Brak instrukcji numerów wierszy." -#: src/readelf.c:8757 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5839,118 +5835,129 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:8777 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "nieprawidÅ‚owe maksimum operacji na instrukcjÄ™ wynosi zero" -#: src/readelf.c:8811 +#: src/readelf.c:8827 #, c-format msgid " special opcode %u: address+%u = " msgstr " instrukcja specjalna %u: adres+%u = " -#: src/readelf.c:8815 +#: src/readelf.c:8831 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", op_index = %u, wiersz%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr ", wiersz%+d = %zu\n" -#: src/readelf.c:8836 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8857 msgid " end of sequence" msgstr " koniec sekwencji" -#: src/readelf.c:8859 +#: src/readelf.c:8875 #, c-format msgid " set address to " msgstr " ustawienie adresu na " -#: src/readelf.c:8887 +#: src/readelf.c:8903 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" " definicja nowego pliku: dir=%u, mtime=%<PRIu64>, dÅ‚ugość=%<PRIu64>, nazwa=" "%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" +#: src/readelf.c:8944 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8968 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "WyÅ›wietla także nazwy funkcji" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8975 msgid " unknown opcode" msgstr " nieznana instrukcja" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8987 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:8929 +#: src/readelf.c:8998 #, c-format msgid " advance address by %u to " msgstr " zwiÄ™kszenie adresu o %u do " -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr ", op_index do %u" -#: src/readelf.c:8945 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " zwiÄ™kszenie wiersza o staÅ‚Ä… %d do %<PRId64>\n" -#: src/readelf.c:8955 +#: src/readelf.c:9024 #, c-format msgid " set file to %<PRIu64>\n" msgstr " ustawienie pliku na %<PRIu64>\n" -#: src/readelf.c:8966 +#: src/readelf.c:9035 #, c-format msgid " set column to %<PRIu64>\n" msgstr " ustawienie kolumny na %<PRIu64>\n" -#: src/readelf.c:8973 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " ustawienie „%s†na %<PRIuFAST8>\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:8990 +#: src/readelf.c:9059 #, c-format msgid " advance address by constant %u to " msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… %u do " -#: src/readelf.c:9010 +#: src/readelf.c:9079 #, c-format msgid " advance address by fixed value %u to \n" msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… wartość %u do \n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr " ustawienie flagi koÅ„ca prologu" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr " ustawienie flagi poczÄ…tku epilogu" -#: src/readelf.c:9035 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" @@ -5958,7 +5965,7 @@ msgstr " ustawienie isa na %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" @@ -5966,101 +5973,101 @@ msgstr[0] " nieznana instrukcja z %<PRIu8> parametrem:" msgstr[1] " nieznana instrukcja z %<PRIu8> parametrami:" msgstr[2] " nieznana instrukcja z %<PRIu8> parametrami:" -#: src/readelf.c:9084 +#: src/readelf.c:9153 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_loclists: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9319 #, c-format msgid " <INVALID DATA>\n" msgstr " <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9359 #, c-format msgid "invalid loclists data" msgstr "nieprawidÅ‚owe dane loclists" -#: src/readelf.c:9543 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_log: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " <INVALID DATA>\n" msgstr " <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "nie można uzyskać danych sekcji informacji o makrach: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** niezakoÅ„czony ciÄ…g na koÅ„cu sekcji" -#: src/readelf.c:9914 +#: src/readelf.c:9983 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** brak parametru DW_MACINFO_start_file na koÅ„cu sekcji" -#: src/readelf.c:10015 +#: src/readelf.c:10084 #, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Offset: 0x%<PRIx64>\n" -#: src/readelf.c:10027 +#: src/readelf.c:10096 #, c-format msgid " Version: %<PRIu16>\n" msgstr " Wersja: %<PRIu16>\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr " nieznana wersja, nie można przetworzyć sekcji\n" -#: src/readelf.c:10040 +#: src/readelf.c:10109 #, c-format msgid " Flag: 0x%<PRIx8>" msgstr " Flaga: 0x%<PRIx8>" -#: src/readelf.c:10069 +#: src/readelf.c:10138 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr " DÅ‚ugość offsetu: %<PRIu8>\n" -#: src/readelf.c:10077 +#: src/readelf.c:10146 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " Offset .debug_line: 0x%<PRIx64>\n" -#: src/readelf.c:10102 +#: src/readelf.c:10171 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " tabela instrukcji rozszerzenia, %<PRIu8> elementów:\n" -#: src/readelf.c:10109 +#: src/readelf.c:10178 #, c-format msgid " [%<PRIx8>]" msgstr " [%<PRIx8>]" -#: src/readelf.c:10121 +#: src/readelf.c:10190 #, c-format msgid " %<PRIu8> arguments:" msgstr " Parametry %<PRIu8>:" -#: src/readelf.c:10136 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr " brak parametrów." -#: src/readelf.c:10337 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr " [%5d] offset DIE: %6<PRId64>, offset CU DIE: %6<PRId64>, nazwa: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -6072,42 +6079,42 @@ msgstr "" " %*s CiÄ…g\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10465 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** bÅ‚Ä…d, brak znaku koÅ„czÄ…cego ciÄ…g\n" -#: src/readelf.c:10425 +#: src/readelf.c:10494 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "nie można uzyskać danych sekcji .debug_str_offsets: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10593 #, c-format msgid " Length: %8<PRIu64>\n" msgstr " DÅ‚ugość: %8<PRIu64>\n" -#: src/readelf.c:10526 +#: src/readelf.c:10595 #, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " Rozmiar offsetu: %8<PRIu8>\n" -#: src/readelf.c:10540 +#: src/readelf.c:10609 #, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " Wersja DWARF: %8<PRIu16>\n" -#: src/readelf.c:10549 +#: src/readelf.c:10618 #, c-format msgid " Padding: %8<PRIx16>\n" msgstr " WypeÅ‚nienie: %8<PRIx16>\n" -#: src/readelf.c:10603 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -6116,7 +6123,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywoÅ‚ania [%2zu] „.eh_frame_hdrâ€:\n" -#: src/readelf.c:10705 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -6125,22 +6132,22 @@ msgstr "" "\n" "Sekcja tabeli obsÅ‚ugiwania wyjÄ…tków [%2zu] „.gcc_except_tableâ€:\n" -#: src/readelf.c:10728 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywoÅ‚ania: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -6148,7 +6155,7 @@ msgstr "" "\n" " Tabela strony wywoÅ‚ania:" -#: src/readelf.c:10782 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -6161,12 +6168,12 @@ msgstr "" " LÄ…dowisko: %#<PRIx64>\n" " DziaÅ‚anie: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "nieprawidÅ‚owe kodowanie TType" -#: src/readelf.c:10882 +#: src/readelf.c:10951 #, c-format msgid "" "\n" @@ -6175,37 +6182,37 @@ msgstr "" "\n" "Sekcja GDB [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %<PRId64> B:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10980 #, c-format msgid " Version: %<PRId32>\n" msgstr " Wersja: %<PRId32>\n" -#: src/readelf.c:10929 +#: src/readelf.c:10998 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " offset CU: %#<PRIx32>\n" -#: src/readelf.c:10936 +#: src/readelf.c:11005 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " offset TU: %#<PRIx32>\n" -#: src/readelf.c:10943 +#: src/readelf.c:11012 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr " offset adresu: %#<PRIx32>\n" -#: src/readelf.c:10950 +#: src/readelf.c:11019 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " offset symbolu: %#<PRIx32>\n" -#: src/readelf.c:10957 +#: src/readelf.c:11026 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " offset staÅ‚ej: %#<PRIx32>\n" -#: src/readelf.c:10971 +#: src/readelf.c:11040 #, c-format msgid "" "\n" @@ -6214,7 +6221,7 @@ msgstr "" "\n" " Lista CU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11065 #, c-format msgid "" "\n" @@ -6223,7 +6230,7 @@ msgstr "" "\n" " Lista TU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11094 #, c-format msgid "" "\n" @@ -6232,7 +6239,7 @@ msgstr "" "\n" " Lista adresów pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11126 #, c-format msgid "" "\n" @@ -6241,18 +6248,18 @@ msgstr "" "\n" " Tabela symboli pod offsetem %#<PRIx32> zawiera %zu gniazd:\n" -#: src/readelf.c:11195 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "nie można konwertować danych notatki core: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -6261,21 +6268,21 @@ msgstr "" "\n" "%*s… <powtarza siÄ™ jeszcze %u razy>…" -#: src/readelf.c:12438 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " WÅ‚aÅ›ciciel Rozmiar danych Typ\n" -#: src/readelf.c:12466 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12583 #, c-format msgid "cannot get content of note: %s" msgstr "nie można uzyskać zawartoÅ›ci notatki: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6285,7 +6292,7 @@ msgstr "" "Segment notatki [%2zu] „%s†o dÅ‚ugoÅ›ci %<PRIu64> B pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6294,7 +6301,7 @@ msgstr "" "\n" "Segment notatki o dÅ‚ugoÅ›ci %<PRIu64> B pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12686 #, c-format msgid "" "\n" @@ -6303,12 +6310,12 @@ msgstr "" "\n" "Sekcja [%zu] „%s†nie ma danych do zrzucenia.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12713 src/readelf.c:12764 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "nie można uzyskać danych dla sekcji [%zu] „%sâ€: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12718 #, c-format msgid "" "\n" @@ -6318,7 +6325,7 @@ msgstr "" "Segment zrzutu szesnastkowego [%zu] „%sâ€, %<PRIu64> B pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12723 #, c-format msgid "" "\n" @@ -6329,7 +6336,7 @@ msgstr "" "Zrzut szesnastkowy sekcji [%zu] „%sâ€, %<PRIu64> B (%zd nieskompresowanych) " "pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12737 #, c-format msgid "" "\n" @@ -6338,7 +6345,7 @@ msgstr "" "\n" "Sekcja [%zu] „%s†nie ma ciÄ…gów do zrzucenia.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12769 #, c-format msgid "" "\n" @@ -6347,7 +6354,7 @@ msgstr "" "\n" "Sekcja ciÄ…gów [%zu] „%s†zawiera %<PRIu64> B pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12774 #, c-format msgid "" "\n" @@ -6358,7 +6365,7 @@ msgstr "" "Sekcja ciÄ…gów [%zu] „%s†zawiera %<PRIu64> B (%zd nieskompresowanych) pod " "offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6367,7 +6374,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:12789 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6376,12 +6383,12 @@ msgstr "" "\n" "sekcja „%s†nie istnieje" -#: src/readelf.c:12846 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "nie można uzyskać indeksu symboli archiwum „%sâ€: %s" -#: src/readelf.c:12849 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6390,7 +6397,7 @@ msgstr "" "\n" "Archiwum „%s†nie ma indeksu symboli\n" -#: src/readelf.c:12853 +#: src/readelf.c:12914 #, c-format msgid "" "\n" @@ -6399,12 +6406,12 @@ msgstr "" "\n" "Indeks archiwum „%s†ma %zu wpisów:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12932 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "nie można wydobyć elementów pod offsetem %zu w „%sâ€: %s" -#: src/readelf.c:12876 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum „%s†zawiera:\n" @@ -6498,39 +6505,38 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "nieprawidÅ‚owa sekcja" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:480 msgid "cannot get section header" msgstr "nie można uzyskać nagłówka sekcji" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(CAÅKOWITE)\n" @@ -6711,27 +6717,23 @@ msgstr "WyÅ›wietla ciÄ…gi znaków drukowalnych w plikach." msgid "invalid value '%s' for %s parameter" msgstr "nieprawidÅ‚owa wartość „%s†dla parametru %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "nieprawidÅ‚owa minimalna dÅ‚ugość dopasowanego rozmiaru ciÄ…gu" -#: src/strings.c:585 -#, c-format +#: src/strings.c:584 msgid "lseek failed" msgstr "lseek siÄ™ nie powiodÅ‚o" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "ponowne mmap siÄ™ nie powiodÅ‚o" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "mprotect siÄ™ nie powiodÅ‚o" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "Pomijanie sekcji %zd „%s†dane poza plikiem" @@ -6807,13 +6809,11 @@ msgstr "" msgid "Discard symbols from object files." msgstr "Odrzuca symbole z plików obiektów." -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "Użyto --reloc-debug-sections bez opcji -f" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" @@ -6821,42 +6821,40 @@ msgstr "" "Opcja --reloc-debug-sections-only jest niezgodna z -f, -g, --remove-comment " "i --remove-section" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "Tylko jeden plik wejÅ›ciowy jest dozwolony z „-o†i „-fâ€" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "OpcjÄ™ -f podano dwukrotnie" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "OpcjÄ™ -F podano dwukrotnie" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr "nie można jednoczeÅ›nie zachować i usunąć sekcji .comment" -#: src/strip.c:481 -#, c-format +#: src/strip.c:479 msgid "bad relocation" msgstr "bÅ‚Ä™dna relokacja" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "nie można wykonać stat na pliku wejÅ›ciowym „%sâ€" -#: src/strip.c:761 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "podczas otwierania „%sâ€" -#: src/strip.c:799 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" @@ -6867,42 +6865,41 @@ msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:813 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: brak obsÅ‚ugi okrajania archiwum" -#: src/strip.c:1047 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:1092 -#, c-format +#: src/strip.c:1094 msgid "cannot get number of phdrs" msgstr "nie można uzyskać liczby phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1108 src/strip.c:1151 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "nie można utworzyć nowego ehdr dla pliku „%sâ€: %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1118 src/strip.c:1161 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "nie można utworzyć nowego phdr dla pliku „%sâ€: %s" -#: src/strip.c:1240 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "plik „%s†ma bÅ‚Ä™dny format" -#: src/strip.c:1250 +#: src/strip.c:1251 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Nie można usunąć przydzielonej sekcji „%sâ€" -#: src/strip.c:1259 +#: src/strip.c:1260 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Nie można jednoczeÅ›nie zachować i usunąć sekcji „%sâ€" @@ -6922,7 +6919,7 @@ msgstr "%s: bÅ‚Ä…d podczas aktualizowania nagłówka ELF: %s" msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: bÅ‚Ä…d podczas uzyskiwania shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1705 src/strip.c:2546 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: bÅ‚Ä…d podczas aktualizowania shdrstrndx: %s" @@ -6932,67 +6929,66 @@ msgstr "%s: bÅ‚Ä…d podczas aktualizowania shdrstrndx: %s" msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjÅ›cia dla „%sâ€" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1793 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1859 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "podczas tworzenia tabeli ciÄ…gów nagłówka sekcji: %s" -#: src/strip.c:1866 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "brak pamiÄ™ci do utworzenia tabeli ciÄ…gów nagłówka sekcji" -#: src/strip.c:2079 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "Nie można usunąć symbolu [%zd] z przydzielonej tabeli symboli [%zd]" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania „%sâ€: %s" -#: src/strip.c:2477 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia „%sâ€" -#: src/strip.c:2500 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:2541 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: bÅ‚Ä…d podczas tworzenia nagłówka ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: bÅ‚Ä…d podczas odczytywania pliku: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania „%sâ€" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "bÅ‚Ä…d podczas koÅ„czenia „%sâ€: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostÄ™pu i modyfikacji „%sâ€" @@ -7135,13 +7131,13 @@ msgstr "nie można skopiować danych sekcji: %s" msgid "cannot create directory '%s'" msgstr "nie można utworzyć katalogu „%sâ€" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 #: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "nie można uzyskać wpisu tabeli symboli: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 #: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" @@ -7152,119 +7148,127 @@ msgstr "nie można zaktualizować tabeli symboli: %s" msgid "cannot update section header: %s" msgstr "nie można zaktualizować nagłówka sekcji: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "nie można zaktualizować relokacji: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "nie można uzyskać wersji symbolu: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "nieoczekiwany typ sekcji w [%zu] z sh_link do tabeli symboli" -#: src/unstrip.c:848 +#: src/unstrip.c:849 #, c-format msgid "cannot get symbol section data: %s" msgstr "nie można uzyskać danych sekcji symboli: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:851 #, c-format msgid "cannot get string section data: %s" msgstr "nie można uzyskać danych sekcji ciÄ…gów: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:868 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "nieprawidÅ‚owy offset ciÄ…gu w symbolu [%zu]" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "nie można odczytać nazwy sekcji [%zu]: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1041 #, c-format msgid "bad sh_link for group section: %s" msgstr "bÅ‚Ä™dne sh_link dla sekcji grupy: %s" -#: src/unstrip.c:1046 +#: src/unstrip.c:1047 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "nie można uzyskać shdr dla sekcji grupy: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1052 #, c-format msgid "bad data for group symbol section: %s" msgstr "bÅ‚Ä™dne dane dla sekcji symboli grupy: %s" -#: src/unstrip.c:1057 +#: src/unstrip.c:1058 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "nie można uzyskać symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1063 #, c-format msgid "bad symbol name for group section: %s" msgstr "bÅ‚Ä™dna nazwa symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "nie można odnaleźć pasujÄ…cej sekcji dla [%zu] „%sâ€" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "nie można odczytać sekcji „.gnu.prelink_undoâ€: %s" -#: src/unstrip.c:1155 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "przepeÅ‚nienie z shnum = %zu w sekcji „%sâ€" -#: src/unstrip.c:1166 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "nieprawidÅ‚owa zawartość w sekcji „%sâ€" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "nie można nazwy sekcji do tabeli ciÄ…gów: %s" -#: src/unstrip.c:1362 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "nie można zaktualizować danych tabeli ciÄ…gów nagłówków sekcji: %s" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "nie można uzyskać indeksu sekcji tabeli ciÄ…gów nagłówków sekcji: %s" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" -#: src/unstrip.c:1406 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "wiÄ™cej sekcji w okrojonym pliku niż w pliku debugowania — odwrócono " "parametry?" -#: src/unstrip.c:1410 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "brak sekcji w okrojonym pliku" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "nie można odczytać tabeli ciÄ…gów nagłówków sekcji: %s" @@ -7379,17 +7383,15 @@ msgid "cannot cache section addresses for module '%s': %s" msgstr "" "nie można utworzyć pamiÄ™ci podrÄ™cznej adresów sekcji dla moduÅ‚u „%sâ€: %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "nie odnaleziono pasujÄ…cych modułów" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "pasuje wiÄ™cej niż jeden moduÅ‚" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7397,7 +7399,7 @@ msgstr "" "OKROJONY-PLIK PLIK-DEBUGOWANIA\n" "[MODUÅ…]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7474,7 +7476,7 @@ msgstr "" "source IDENTYFIKATOR-KOPII /NAZWA-PLIKU\n" "source ÅšCIEÅ»KA /NAZWA-PLIKU\n" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "Uruchamia plik wykonywalny" @@ -7485,3 +7487,7 @@ msgstr "Dodatkowo wyÅ›wietla nazwy funkcji" #: tests/dwflmodtest.c:210 msgid "Show instances of inlined functions" msgstr "WyÅ›wietla wystÄ…pienia wstawionych funkcji" + +#, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "nie można przydzielić pamiÄ™ci" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2020-03-28 14:59+0200\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n" @@ -41,11 +41,6 @@ msgstr "" " - «never», «no», «none»\n" " - «auto», «tty», «if-tty»\n" -#: lib/color.c:194 src/objdump.c:728 -#, c-format -msgid "cannot allocate memory" -msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ пам’ÑÑ‚ÑŒ" - #: lib/printversion.c:40 #, c-format msgid "" @@ -58,8 +53,8 @@ msgstr "" "початкових кодах. Умовами Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐЕ передбачено жодних " "гарантій, зокрема гарантій працездатноÑÑ‚Ñ– або придатноÑÑ‚Ñ– Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ— мети.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "пам’ÑÑ‚ÑŒ вичерпано" @@ -309,7 +304,7 @@ msgstr "невідомий код мови" msgid ".debug_addr section missing" msgstr "пропущено розділ .debug_addr" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Вибір параметрів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:" @@ -538,7 +533,7 @@ msgid "No backend" msgstr "Ðемає Ñервера" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -589,18 +584,18 @@ msgstr "Ðазва: " msgid " Args: " msgstr " Ðрг.: " -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Ід. збираннÑ: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr " ВерÑÑ–Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°: %.*s\n" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " ОС: %s, ABI: " @@ -634,7 +629,7 @@ msgstr "некоректна розмірніÑÑ‚ÑŒ вхідного парамРmsgid "invalid size of destination operand" msgstr "некоректна розмірніÑÑ‚ÑŒ вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "некоректне кодуваннÑ" @@ -719,8 +714,8 @@ msgstr "невідповідніÑÑ‚ÑŒ полів data/scn" msgid "invalid section header" msgstr "некоректний заголовок розділу" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "некоректні дані" @@ -792,47 +787,49 @@ msgstr "неможливо ÑтиÑнути дані" msgid "cannot decompress data" msgstr "неможливо розпакувати дані" -#: src/addr2line.c:57 +#: src/addr2line.c:59 msgid "Input format options:" msgstr "Параметри Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… даних:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "Вважати адреÑи зміщеннÑми відноÑно розділу ÐÐЗВÐ." -#: src/addr2line.c:61 +#: src/addr2line.c:63 msgid "Output format options:" msgstr "Параметри Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "Виводити адреÑу перед кожним запиÑом" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "Показувати лише базові назви файлів коду програми" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "Показувати абÑолютні назви файлів з викориÑтаннÑм каталогу збираннÑ" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "Показувати також назви функцій" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "Показувати також назви Ñимволів та розділів" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "Показувати також назви Ñимволів та розділів" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "Показувати також прапорці Ñ€Ñдків таблиці" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -840,46 +837,51 @@ msgstr "" "Показати уÑÑ– міÑÑ†Ñ Ñƒ початковому коді, у Ñких було виÑвлено вбудоване " "Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ за вказаною адреÑою." -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "Виводити розшифровані Ñимволи (ÐРГ завжди ігноруєтьÑÑ)" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "ВивеÑти уÑÑ– дані у один Ñ€Ñдок Ñ– додати відÑтупи до перенеÑених Ñ€Ñдків" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "Показувати абÑолютні назви файлів з викориÑтаннÑм каталогу збираннÑ" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Інше:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "Шукати ÐДРЕСИ у файлах кодів та даних про Ñ€Ñдки (типово, у a.out)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "[ÐДРЕСÐ...]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "СинтакÑÐ¸Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² вимагає точного одного модулÑ" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %#<PRIxMAX> lies outside section '%s'" msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %#<PRIxMAX> розташовано поза межами розділу «%s»" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñимвол «%s»" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %#<PRIxMAX> lies outside contents of '%s'" msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %#<PRIxMAX> розташовано поза межами вміÑту «%s»" @@ -1051,112 +1053,110 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані архіву «%s» за Ð msgid "no entry %s in archive\n" msgstr "у архіві немає запиÑу %s\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "не вдалоÑÑ Ñтворити таблицю хешів" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "не вдалоÑÑ Ð²Ñтавити Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ таблиці хешів" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані з «%s» за допомогою stat" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ з %s: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %.*s" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати %s" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ права доÑтупу до %s" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ чаÑову мітку зміни %s" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ файл тимчаÑових даних на %.*s" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "не вдалоÑÑ Ñтворити файл" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "не виÑвлено елемента позиції %s" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: у архіві немає запиÑу %s!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані %s за допомогою stat" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s не Ñ” звичайним файлом" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ деÑкриптор ELF Ð´Ð»Ñ %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, c-format msgid "cannot represent ar_date" msgstr "неможливо предÑтавити ar_date" -#: src/ar.c:1489 +#: src/ar.c:1486 #, c-format msgid "cannot represent ar_uid" msgstr "неможливо предÑтавити ar_uid" -#: src/ar.c:1495 +#: src/ar.c:1492 #, c-format msgid "cannot represent ar_gid" msgstr "неможливо предÑтавити ar_gid" -#: src/ar.c:1501 +#: src/ar.c:1498 #, c-format msgid "cannot represent ar_mode" msgstr "неможливо предÑтавити ar_mode" -#: src/ar.c:1507 +#: src/ar.c:1504 #, c-format msgid "cannot represent ar_size" msgstr "неможливо предÑтавити ar_size" @@ -1187,197 +1187,197 @@ msgstr "розмір архіву «%s» Ñ” занадто великим" msgid "cannot read ELF header of %s(%s): %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF з %s(%s): %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 #, fuzzy #| msgid "cannot get ELF header" msgid "ELF header" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 #, fuzzy #| msgid "Program Headers:" msgid "program headers" msgstr "Заголовки програми:" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 #, fuzzy #| msgid "Program Headers:" msgid "program header" msgstr "Заголовки програми:" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 #, fuzzy #| msgid "Section Headers:" msgid "section headers" msgstr "Заголовки розділів:" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 #, fuzzy #| msgid "cannot get section header string table index" msgid "section header string table index" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 #, fuzzy #| msgid "cannot get section header" msgid "could not obtain section header" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 #, fuzzy #| msgid "cannot get section name" msgid "could not obtain section name" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 #, fuzzy #| msgid "Input selection options:" msgid "Classification options" msgstr "Вибір параметрів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 #, fuzzy #| msgid "cannot find kernel modules" msgid "File is a linux kernel module" msgstr "не вдалоÑÑ Ð²Ð¸Ñвити модулі Ñдра" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 #, fuzzy #| msgid "Output format:" msgid "Output flags" msgstr "Формат виводу:" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 #, fuzzy #| msgid "More than one output file name given." msgid "Do not output file names" msgstr "Вказано декілька назв файлів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…." -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "ФÐЙЛ..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1609,14 +1609,14 @@ msgstr "%s %s diff: проміжок" msgid "Invalid value '%s' for --gaps parameter." msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» параметра --gaps." -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 #: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "не вдалоÑÑ Ñтворити деÑкриптор ELF Ð´Ð»Ñ Â«%s»: %s" @@ -1626,7 +1626,7 @@ msgstr "не вдалоÑÑ Ñтворити деÑкриптор ELF Ð´Ð»Ñ Â«% msgid "cannot create EBL descriptor for '%s'" msgstr "не вдалоÑÑ Ñтворити деÑкриптор EBL Ð´Ð»Ñ Â«%s»" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу %zu: %s" @@ -1641,7 +1641,7 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу %zu: %s" msgid "cannot get relocation: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ переÑуваннÑ: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "параметр -o вказано двічі" @@ -1662,7 +1662,7 @@ msgstr "невідомий тип ÑтиÑÐ½ÐµÐ½Ð½Ñ Â«%s»" msgid "No input file given" msgstr "Ðе надано файла вхідних даних" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "З параметром «-o» можна викориÑтовувати лише один файл вхідних даних" @@ -1922,7 +1922,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу\n" @@ -3520,7 +3520,7 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки файла core %<PRIu32> за зміщеннÑм " "%zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " @@ -3529,7 +3529,7 @@ msgstr "" "phdr[%d]: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із іменем " "влаÑника «%s» за зміщеннÑм %zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " @@ -3538,39 +3538,39 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із " "іменем влаÑника «%s» за зміщеннÑм %zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток: %s\n" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: зайві %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтаннього запиÑу нотатки\n" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "розділ [%2d] «%s»: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток\n" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" "розділ [%2d] «%s»: додаткові %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтанньої нотатки\n" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3578,66 +3578,66 @@ msgstr "" "заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів " "Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ файлів core\n" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: невідомий тип запиÑу заголовка програми " "%#<PRIx64>\n" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ INTERP у заголовку програми\n" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ TLS у заголовку програми\n" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "у Ñтатичному виконуваному файлі не може бути динамічних розділів\n" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° динамічний розділ у заголовку програми має помилкове зміщеннÑ\n" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "розміри динамічного розділу у заголовку програми та у заголовку розділу не " "збігаютьÑÑ\n" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ GNU_RELRO у заголовку програми\n" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" "придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмент, до Ñкого звертаєтьÑÑ GNU_RELRO, " "непридатний до запиÑу\n" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "прапорці придатного до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмента [%u] не відповідають прапорцÑм " "GNU_RELRO [%u]\n" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" @@ -3645,76 +3645,76 @@ msgstr "" "прапорці GNU_RELRO [%u] не Ñ” підмножиною прапорців завантажуваного Ñегмента " "[%u]\n" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "Ñегмент %s не міÑтитьÑÑ Ñƒ завантаженому Ñегменті\n" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми у заголовку ELF Ñ– Ð·Ð°Ð¿Ð¸Ñ PHDR не збігаютьÑÑ" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° таблицю вікон викликів у заголовку програми має помилкове " "зміщеннÑ\n" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку " "розділу не збігаютьÑÑ\n" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "Ñ–Ñнує PT_GNU_EH_FRAME, хоча немає розділу .eh_frame_hdr\n" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’ÑÑ‚Ñ–\n" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "розділ [%2zu] «%s» має бути розміщено у пам’ÑÑ‚Ñ–\n" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до запиÑу\n" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до запиÑу\n" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до виконаннÑ\n" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконаннÑ\n" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: розмір файла перевищує об’єм пам’ÑÑ‚Ñ–\n" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” Ñтепенем 2\n" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3723,7 +3723,7 @@ msgstr "" "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ файлі Ñ– віртуальна адреÑа не " "ÑпіввідноÑÑÑ‚ÑŒÑÑ Ð· вирівнюваннÑм\n" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3732,109 +3732,109 @@ msgstr "" "виконуваний модуль/DSO з розділом .eh_frame_hdr не міÑтить запиÑу заголовка " "програми PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "не вдалоÑÑ Ñтворити файл" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" "вÑтановлено прапорець переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту, але такий прапорець не потрібен\n" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "Вибір параметрів виводу даних:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "Додавати ШЛЯХ до вÑÑ–Ñ… назв файлів" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "ВикориÑтовувати ШЛЯХ Ñк кореневий каталог Ð´Ð»Ñ Ñ–Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ— debuginfo" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "Шукає джерело переÑуваного текÑту у ФÐЙЛÐÐ¥ (типово, a.out)." #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "[ФÐЙЛ...]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF «%s»: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "«%s» не Ñ” DSO або PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу get розділу %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ динамічний розділ: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "у «%s» не виÑвлено переÑувань текÑту" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° ELF" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, c-format msgid "cannot get program header count: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ заголовків програми: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми за зміщеннÑм %zd: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ таблицю Ñимволів розділу %zu у «%s»: %s" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° індекÑом %d у розділі %zu у «%s»: %s" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s не зібрано з -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "файл, що міÑтить функцію «%s», не було зібрано з параметрами -fpic/-fPIC\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3843,7 +3843,7 @@ msgstr "" "файл, що міÑтить функцію «%s», ймовірно, не було зібрано з параметрами -" "fpic/-fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3852,7 +3852,7 @@ msgstr "" "файл, що міÑтить функцію «%s», або файл, що міÑтить функцію «%s», зібрано " "без параметрів -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3959,12 +3959,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: Ð’ÐУТРІШÐЯ ПОМИЛКР%d (%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла" @@ -3998,24 +3998,23 @@ msgstr "не вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ Ð msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла" -#: src/nm.c:705 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "не вдалоÑÑ Ñтворити дерево пошуку" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -4029,7 +4028,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4038,7 +4037,7 @@ msgstr "" "%*s%-*s %-*s ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ %-*s %*s Розділ\n" "\n" -#: src/nm.c:776 +#: src/nm.c:773 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4046,45 +4045,45 @@ msgid "Name" msgstr "Ðазва: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1246 #, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: розмір запиÑу у розділі %zd «%s» не Ñ” очікуваним" -#: src/nm.c:1255 +#: src/nm.c:1251 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: розмір розділу %zd «%s» не Ñ” кратним до розміру запиÑу" -#: src/nm.c:1336 +#: src/nm.c:1331 #, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: запиÑи (%zd) у розділі %zd, «%s» Ñ” завеликим" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: некоректна діÑ" -#: src/nm.c:1622 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: немає Ñимволів" @@ -4127,11 +4126,11 @@ msgstr "Ðе вказано дії.\n" msgid "while close `%s'" msgstr "під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "ÐЕКОРЕКТÐИЙ СИМВОЛ" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "ÐЕКОРЕКТÐИЙ РОЗДІЛ" @@ -4156,12 +4155,11 @@ msgid "Contents of section %s:\n" msgstr "ВміÑÑ‚ розділу %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "не вдалоÑÑ Ð´Ð¸Ð·Ð°Ñемблювати" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:758 +#, fuzzy msgid "cannot create backend for elf file" msgstr "не вдалоÑÑ Ñтворити файл" @@ -4346,20 +4344,20 @@ msgstr "Ðевідомий діагноÑтичний розділ DWARF «%s». msgid "cannot generate Elf descriptor: %s" msgstr "не вдалоÑÑ Ñтворити деÑкриптор Elf: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 #: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" @@ -4370,8 +4368,8 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу: msgid "cannot get section name" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані %s: %s" @@ -4431,48 +4429,48 @@ msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF: %s" msgid "cannot create EBL handle" msgstr "не вдалоÑÑ Ñтворити деÑкриптор EBL" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ заголовків програми: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, c-format msgid "cannot read ELF: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ ELF: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "NONE (Ðемає)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (Придатний до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "EXEC (Виконуваний файл)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (Файл об’єктів Ñпільного викориÑтаннÑ)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (Файл Ñдра)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "ОС-Ñпецифічне: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Специфічне Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4480,7 +4478,7 @@ msgstr "" "Заголовок ELF:\n" " Magic: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4489,123 +4487,123 @@ msgstr "" "\n" " КлаÑ: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " Дані: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " ВерÑÑ–Ñ Ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(поточний)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " ОС/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " ВерÑÑ–Ñ ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Тип: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " Ðрхітектура: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, c-format msgid " Machine: <unknown>: 0x%x\n" msgstr " Ðрхітектура: <невідома>: 0x%x\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " ВерÑÑ–Ñ: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#<PRIx64>\n" msgstr " ÐдреÑа вхідної точки: %#<PRIx64>\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: %<PRId64> %s\n" msgstr " Початок заголовків програм: %<PRId64> %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "(байтів у файл)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: %<PRId64> %s\n" msgstr " Початок заголовків розділів: %<PRId64> %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " Прапорці: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: %<PRId16> %s\n" msgstr " Розмір цього заголовка: %<PRId16> %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(байтів)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: %<PRId16> %s\n" msgstr " Розмір запиÑів заголовка програми: %<PRId16> %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %<PRId16>" msgstr " КількіÑÑ‚ÑŒ запиÑів заголовків програми: %<PRId16>" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (%<PRIu32> in [0].sh_info)" msgstr " (%<PRIu32> у [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr " ([0] недоÑтупний)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: %<PRId16> %s\n" msgstr " Розмір запиÑів заголовків розділів: %<PRId16> %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %<PRId16>" msgstr " КількіÑÑ‚ÑŒ запиÑів заголовків розділів: %<PRId16>" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (%<PRIu32> in [0].sh_size)" msgstr " (%<PRIu32> у [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (%<PRIu32> in [0].sh_link)" msgstr " (%<PRIu32> у [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4614,7 +4612,7 @@ msgstr "" " Ð†Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %<PRId16>\n" @@ -4623,12 +4621,12 @@ msgstr "" " Ð†Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: %<PRId16>\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, c-format msgid "cannot get number of sections: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, c-format msgid "" "There are %zd section headers, starting at offset %#<PRIx64>:\n" @@ -4637,16 +4635,16 @@ msgstr "" "ВиÑвлено %zd заголовків розділів, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ — %#<PRIx64>:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, c-format msgid "cannot get section header string table index: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "Заголовки розділів:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4654,7 +4652,7 @@ msgstr "" "[â„– ] Ðазва Тип Ðдр Змі Розмір ES Прап Lk " "Інф Al" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4662,35 +4660,35 @@ msgstr "" "[â„– ] Ðазва Тип Ðдр Змі Розмір ES " "Прап Lk Інф Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr " [СтиÑÐºÐ°Ð½Ð½Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðл]" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr " [СтиÑÐºÐ°Ð½Ð½Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðл]" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, c-format msgid "bad compression header for section %zd: %s" msgstr "помилковий заголовок ÑтиÑÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zd: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑтиÑненого розміру gnu Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zd: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "Заголовки програми:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Тип Зміщен ВіртÐдр ФізÐдр РозмФайл РозмПам Пра Вирів" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4698,12 +4696,12 @@ msgstr "" " Тип Зміщен ВіртÐдр ФізÐдр " "РозмФайлРозмПам Пра Вирів" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Запит щодо інтерпретатора програми: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4713,12 +4711,12 @@ msgstr "" " Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² на Ñегмент:\n" " Розділи Ñегмента..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок програми: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4736,7 +4734,7 @@ msgstr[2] "" "\n" "Група розділів COMDAT [%2zu] «%s» з підпиÑом «%s» міÑтить %zu запиÑів:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4754,31 +4752,31 @@ msgstr[2] "" "\n" "Група розділів [%2zu] «%s» з підпиÑом «%s» міÑтить %zu запиÑів:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "<INVALID SYMBOL>" msgstr "<ÐЕКОРЕКТÐИЙ СИМВОЛ>" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "<INVALID SECTION>" msgstr "<ÐЕКОРЕКТÐИЙ РОЗДІЛ>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ розділ" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу [%zd]: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, c-format msgid "invalid sh_link value in section %zu" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link у розділі %zu" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4801,36 +4799,36 @@ msgstr[2] "" "Динамічний Ñегмент міÑтить %lu запиÑів:\n" " Ðдр: %#0*<PRIx64> ЗміщеннÑ: %#08<PRIx64> ПоÑ. на розділ: [%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " Тип ЗначеннÑ\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "Спільна бібліотека: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "Ðазва so бібліотеки: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath бібліотеки: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "Runpath бібліотеки: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (байт)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4839,7 +4837,7 @@ msgstr "" "\n" "Ðекоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів за зміщеннÑм %#0<PRIx64>\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4868,7 +4866,7 @@ msgstr[2] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4886,30 +4884,30 @@ msgstr[2] "" "\n" "Розділ переÑÑƒÐ²Ð°Ð½Ð½Ñ [%2u] «%s» за зміщеннÑм %#0<PRIx64> міÑтить %d запиÑів:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "<INVALID RELOC>" msgstr "<ÐЕКОРЕКТÐЕ ПЕРЕМІЩЕÐÐЯ>" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва додатка\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr "" " Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¢Ð¸Ð¿ Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ðазва додатка\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4927,7 +4925,7 @@ msgstr[2] "" "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів [%2u] «%s» міÑтить %u запиÑів:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4935,33 +4933,33 @@ msgstr[0] " %lu лок. Ñимвол Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: [%2u] « msgstr[1] " %lu лок. Ñимволи Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: [%2u] «%s»\n" msgstr[2] " %lu лок. Ñимволів Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: [%2u] «%s»\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " â„–â„– Знач. Роз. Тип Зв’Ñз Вид. Інд Ðазва\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " â„–â„– Знач. Роз. Тип Зв’Ñз Вид. Інд Ðазва\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "помилковий динамічний Ñимвол" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "немає" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| <unknown>" msgstr "| <невідомо>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4984,17 +4982,17 @@ msgstr[2] "" "Розділ потреби у верÑÑ–ÑÑ… [%2u] «%s», що міÑтить %d запиÑів:\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: ВерÑÑ–Ñ: %hu Файл: %s Кть: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Ðазва: %s Прап: %s ВерÑÑ–Ñ: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -5017,18 +5015,18 @@ msgstr[2] "" "Розділ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ— [%2u] «%s», що міÑтить %d запиÑів:\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: ВерÑÑ–Ñ: %hd Прап.: %s ІндекÑ: %hd К-Ñ‚ÑŒ: %hd Ðазва: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: батьківÑький %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -5051,15 +5049,15 @@ msgstr[2] "" "Розділ Ñимволів верÑій [%2u] «%s», що міÑтить %d запиÑів:\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *локальний* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *загальний* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -5087,22 +5085,22 @@ msgstr[2] "" "блоками):\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Довжина Ðомер % від загал. ПокриттÑ\n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5111,37 +5109,37 @@ msgstr "" " Ð¡ÐµÑ€ÐµÐ´Ð½Ñ ÐºÑ–Ð»ÑŒÐºÑ–ÑÑ‚ÑŒ теÑтів: уÑпішний пошук: %f\n" "\t\t\t неуÑпішний пошук: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "некоректні дані у розділі sysv.hash %d" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, c-format msgid "invalid chain in sysv.hash section %d" msgstr "некоректний ланцюжок у розділі sysv.hash %d" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "некоректні дані у розділі sysv.hash64 %d" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "некоректний ланцюжок у розділі sysv.hash64 %d" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "некоректні дані у розділі gnu.hash %d" -#: src/readelf.c:3452 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5151,7 +5149,7 @@ msgstr "" " Розмір бітової маÑки: %zu байтів %<PRIuFAST32>%% вÑтановлених бітів зÑув " "2-го хешу: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -5172,7 +5170,7 @@ msgstr[2] "" "Розділ ÑпиÑку бібліотек [%2zu] «%s» за зміщеннÑм %#0<PRIx64> міÑтить %d " "запиÑів:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5180,7 +5178,7 @@ msgstr "" " Бібліотека ЧаÑовий штамп ВерÑÑ–Ñ Ñуми " "Прапорці" -#: src/readelf.c:3614 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -5191,102 +5189,101 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм " "%#0<PRIx64>:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " ВлаÑник Розмір\n" -#: src/readelf.c:3655 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3696 #, c-format msgid " File: %11<PRIu32>\n" msgstr " Файл: %11<PRIu32>\n" -#: src/readelf.c:3748 +#: src/readelf.c:3745 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3748 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3754 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3761 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3767 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 -#, c-format +#: src/readelf.c:3834 msgid "sprintf failure" msgstr "помилка sprintf" -#: src/readelf.c:4319 +#: src/readelf.c:4316 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:4322 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:4800 +#: src/readelf.c:4797 #, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%2<PRIuMAX>] %s <ОБРІЗÐÐО>\n" -#: src/readelf.c:4867 +#: src/readelf.c:4864 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> викориÑтано з різними розмірами адреÑ" -#: src/readelf.c:4874 +#: src/readelf.c:4871 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> викориÑтано з різними розмірами зміщень" -#: src/readelf.c:4881 +#: src/readelf.c:4878 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> викориÑтано з різними базовими адреÑами" -#: src/readelf.c:4888 +#: src/readelf.c:4885 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "%s %#<PRIx64> викориÑтано з різними атрибутами, %s Ñ– %s" -#: src/readelf.c:4988 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <ÐЕВИКОРИСТОВУВÐÐІ ДÐÐІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4996 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <ÐЕВИКОРИСТОВУВÐÐІ ДÐÐІ> ... %<PRIu64> байтів ...\n" -#: src/readelf.c:5099 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5297,7 +5294,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" " [ Код]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5306,20 +5303,20 @@ msgstr "" "\n" "Розділ Ñкорочень за зміщеннÑм %<PRIu64>:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÑкороченнÑ: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] зміщеннÑ: %<PRId64>, дочірній: %s, мітка: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5328,54 +5325,54 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5179 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_addr: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, c-format msgid " Length: %8<PRIu64>\n" msgstr " Довжина: %8<PRIu64>\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, c-format msgid " Address size: %8<PRIu64>\n" msgstr " Розмір адреÑи: %8<PRIu64>\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, c-format msgid " Segment size: %8<PRIu64>\n" msgstr "" " Розмір Ñегмента: %8<PRIu64>\n" "\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, c-format msgid "Unknown version" msgstr "Ðевідома верÑÑ–Ñ" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, c-format msgid "unsupported address size" msgstr "непідтримуваний розмір адреÑи" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "непідтримуваний розмір Ñегмента" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані get .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5393,12 +5390,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщеннÑм %#<PRIx64> міÑтить %zu запиÑів:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5406,7 +5403,7 @@ msgstr "" " [%*zu] початок: %0#*<PRIx64>, довжина: %5<PRIu64>, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5488 src/readelf.c:8425 #, c-format msgid "" "\n" @@ -5415,13 +5412,13 @@ msgstr "" "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм %zu:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "некоректні дані у розділі [%zu] «%s»" -#: src/readelf.c:5511 +#: src/readelf.c:5508 #, c-format msgid "" "\n" @@ -5430,27 +5427,27 @@ msgstr "" "\n" " Довжина: %6<PRIu64>\n" -#: src/readelf.c:5523 +#: src/readelf.c:5520 #, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " верÑÑ–Ñ DWARF: %6<PRIuFAST16>\n" -#: src/readelf.c:5527 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "непідтримувана верÑÑ–Ñ aranges" -#: src/readelf.c:5538 +#: src/readelf.c:5535 #, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU: %6<PRIx64>\n" -#: src/readelf.c:5544 +#: src/readelf.c:5541 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr " Розмір адреÑи: %6<PRIu64>\n" -#: src/readelf.c:5555 +#: src/readelf.c:5552 #, c-format msgid "" " Segment size: %6<PRIu64>\n" @@ -5459,17 +5456,17 @@ msgstr "" " Розмір Ñегмента: %6<PRIu64>\n" "\n" -#: src/readelf.c:5610 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr " %zu байтів доповненнÑ\n" -#: src/readelf.c:5654 +#: src/readelf.c:5651 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_rnglists: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5674 src/readelf.c:9176 #, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" @@ -5478,42 +5475,42 @@ msgstr "" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм 0x%<PRIx64>:\n" "\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5729 src/readelf.c:9231 #, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " ЗапиÑи зміщеннÑ: %8<PRIu64>\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr " Ðевідома оÑнова CU: " -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr " ОÑнова CU [%6<PRIx64>]: " -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr " Ðе пов'Ñзано із CU.\n" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "забагато запиÑів зÑуву Ð´Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ модулÑ" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5768 src/readelf.c:9270 #, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " ЗміщеннÑ, що починаютьÑÑ Ð· 0x%<PRIx64>:\n" -#: src/readelf.c:5823 +#: src/readelf.c:5820 #, c-format msgid "invalid range list data" msgstr "некоректні дані ÑпиÑку діапазонів" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" @@ -5522,12 +5519,12 @@ msgstr "" " %zu байтів доповненнÑ\n" "\n" -#: src/readelf.c:6025 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" @@ -5536,7 +5533,7 @@ msgstr "" "\n" " Ðевідома оÑнова CU: " -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" @@ -5545,31 +5542,31 @@ msgstr "" "\n" " ОÑнова CU [%6<PRIx64>]: " -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6104 src/readelf.c:9798 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній ÑпиÑок\n" -#: src/readelf.c:6367 +#: src/readelf.c:6364 msgid " <INVALID DATA>\n" msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6621 #, c-format msgid "cannot get ELF: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5578,7 +5575,7 @@ msgstr "" "\n" "Розділ відомоÑтей щодо вікна викликів [%2zu] «%s» за зміщеннÑм %#<PRIx64>:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5587,65 +5584,65 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6790 src/readelf.c:6944 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшеннÑ" -#: src/readelf.c:6808 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи FDE: " -#: src/readelf.c:6814 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° LSDA: " -#: src/readelf.c:6924 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (зміщеннÑ: %#<PRIx64>)" -#: src/readelf.c:6931 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ кінцÑ: %#<PRIx64>)" -#: src/readelf.c:6968 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sвказівник LSDA: %#<PRIx64>\n" -#: src/readelf.c:7053 +#: src/readelf.c:7050 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ код атрибута: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7060 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ форму атрибута: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7082 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° «%s» (%s): %s" -#: src/readelf.c:7415 +#: src/readelf.c:7412 #, c-format msgid "invalid file (%<PRId64>): %s" msgstr "некоректний файл (%<PRId64>): %s" -#: src/readelf.c:7419 +#: src/readelf.c:7416 #, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr "немає srcfiles Ð´Ð»Ñ CU [%<PRIx64>]" -#: src/readelf.c:7423 +#: src/readelf.c:7420 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ CU DWARF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5656,12 +5653,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщеннÑм %#<PRIx64>:\n" " [ЗміщеннÑ]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7785 #, c-format msgid "cannot get next unit: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ наÑтупний модуль: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7805 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5674,7 +5671,7 @@ msgstr "" "%<PRIu8>, Розмір зміщеннÑ: %<PRIu8>\n" " ÐŸÑ–Ð´Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64> [%<PRIx64>]\n" -#: src/readelf.c:7820 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5685,38 +5682,38 @@ msgstr "" " ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, " "ЗміщеннÑ: %<PRIu8>\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr " Тип модулÑ: %s (%<PRIu8>)" -#: src/readelf.c:7857 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "невідома верÑÑ–Ñ (%d) або тип Ð¼Ð¾Ð´ÑƒÐ»Ñ (%d)" -#: src/readelf.c:7886 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ DIE: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7892 #, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "" "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ мітку DIE за зміщеннÑм [%<PRIu64>] у розділі «%s»: %s" -#: src/readelf.c:7933 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7980 #, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5727,7 +5724,7 @@ msgstr "" " ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, " "ЗміщеннÑ: %<PRIu8>\n" -#: src/readelf.c:8037 +#: src/readelf.c:8032 #, c-format msgid "" "\n" @@ -5738,18 +5735,18 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" "\n" -#: src/readelf.c:8369 +#: src/readelf.c:8364 #, c-format msgid "unknown form: %s" msgstr "невідома форма: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу лінійних даних: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8516 #, c-format msgid "" "\n" @@ -5782,27 +5779,27 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8538 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ верÑÑ–ÑŽ .debug_line: %u\n" -#: src/readelf.c:8532 +#: src/readelf.c:8546 #, c-format msgid "cannot handle address size: %u\n" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір адреÑи: %u\n" -#: src/readelf.c:8540 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір Ñелектора Ñегментів: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщеннÑм %tu у розділі [%zu] «%s»" -#: src/readelf.c:8565 +#: src/readelf.c:8579 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" @@ -5810,7 +5807,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu аргумент\n" msgstr[1] " [%*<PRIuFAST8>] %hhu аргументи\n" msgstr[2] " [%*<PRIuFAST8>] %hhu аргументів\n" -#: src/readelf.c:8576 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5818,12 +5815,12 @@ msgstr "" "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8596 src/readelf.c:8673 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8653 +#: src/readelf.c:8667 msgid "" "\n" "File name table:" @@ -5831,11 +5828,11 @@ msgstr "" "\n" " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð°Ð·Ð² файлів:" -#: src/readelf.c:8714 +#: src/readelf.c:8728 msgid " Entry Dir Time Size Name" msgstr " Ð—Ð°Ð¿Ð¸Ñ ÐšÐ°Ñ‚ Ð§Ð°Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðазва" -#: src/readelf.c:8753 +#: src/readelf.c:8774 #, fuzzy msgid "" "\n" @@ -5844,7 +5841,7 @@ msgstr "" "\n" "Оператори номерів Ñ€Ñдків:" -#: src/readelf.c:8757 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5852,118 +5849,129 @@ msgstr "" "\n" "Оператори номерів Ñ€Ñдків:" -#: src/readelf.c:8777 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "некоректну кількіÑÑ‚ÑŒ операцій на інÑтрукцію прирівнÑно до нулÑ" -#: src/readelf.c:8811 +#: src/readelf.c:8827 #, c-format msgid " special opcode %u: address+%u = " msgstr " Ñпеціальний код операції %u: адреÑа+%u = " -#: src/readelf.c:8815 +#: src/readelf.c:8831 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", індекÑ_оп = %u, Ñ€Ñдок%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr ", Ñ€Ñдок%+d = %zu\n" -#: src/readelf.c:8836 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8857 msgid " end of sequence" msgstr " кінець поÑлідовноÑÑ‚Ñ–" -#: src/readelf.c:8859 +#: src/readelf.c:8875 #, c-format msgid " set address to " msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " -#: src/readelf.c:8887 +#: src/readelf.c:8903 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" " Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ файла: dir=%u, mtime=%<PRIu64>, довжина=%<PRIu64>, назва=" "%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr " вÑтановити Ñ€Ð¾Ð·Ñ€Ñ–Ð·Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ %u\n" +#: src/readelf.c:8944 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8968 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "Показувати також назви функцій" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8975 msgid " unknown opcode" msgstr " невідомий код операції" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8987 msgid " copy" msgstr " копіÑ" -#: src/readelf.c:8929 +#: src/readelf.c:8998 #, c-format msgid " advance address by %u to " msgstr " Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи на %u до " -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr ", op_index до %u" -#: src/readelf.c:8945 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " проÑувати Ñ€Ñдок на Ñталу %d до %<PRId64>\n" -#: src/readelf.c:8955 +#: src/readelf.c:9024 #, c-format msgid " set file to %<PRIu64>\n" msgstr " вÑтановити файл у %<PRIu64>\n" -#: src/readelf.c:8966 +#: src/readelf.c:9035 #, c-format msgid " set column to %<PRIu64>\n" msgstr " вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика %<PRIu64>\n" -#: src/readelf.c:8973 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " вÑтановити «%s» у %<PRIuFAST8>\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr " вÑтановити прапорець базового блоку" -#: src/readelf.c:8990 +#: src/readelf.c:9059 #, c-format msgid " advance address by constant %u to " msgstr " збільшити адреÑу на Ñталу величину %u до " -#: src/readelf.c:9010 +#: src/readelf.c:9079 #, c-format msgid " advance address by fixed value %u to \n" msgstr " збільшити адреÑу на фікÑовану величину %u до \n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr " вÑтановити прапорець ÐºÑ–Ð½Ñ†Ñ Ð²Ñтупу" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr " вÑтановити прапорець початку епілогу" -#: src/readelf.c:9035 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr " вÑтановити isa у %u\n" @@ -5971,7 +5979,7 @@ msgstr " вÑтановити isa у %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" @@ -5979,102 +5987,102 @@ msgstr[0] " невідомий код операції з %<PRIu8> Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ msgstr[1] " невідомий код операції з %<PRIu8> параметрами:" msgstr[2] " невідомий код операції з %<PRIu8> параметрами:" -#: src/readelf.c:9084 +#: src/readelf.c:9153 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loclists: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9319 #, fuzzy, c-format msgid " <INVALID DATA>\n" msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9359 #, c-format msgid "invalid loclists data" msgstr "некоректні дані loclists" -#: src/readelf.c:9543 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loc: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " <INVALID DATA>\n" msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу відомоÑтей щодо макроÑів: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений Ñ€Ñдок наприкінці розділу" -#: src/readelf.c:9914 +#: src/readelf.c:9983 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** пропущено аргумент DW_MACINFO_start_file наприкінці розділу" -#: src/readelf.c:10015 +#: src/readelf.c:10084 #, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " ЗміщеннÑ: 0x%<PRIx64>\n" -#: src/readelf.c:10027 +#: src/readelf.c:10096 #, c-format msgid " Version: %<PRIu16>\n" msgstr " ВерÑÑ–Ñ: %<PRIu16>\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома верÑÑ–Ñ, не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розділ\n" -#: src/readelf.c:10040 +#: src/readelf.c:10109 #, c-format msgid " Flag: 0x%<PRIx8>" msgstr " Прапорець: 0x%<PRIx8>" -#: src/readelf.c:10069 +#: src/readelf.c:10138 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr " Довжина зміщеннÑ: %<PRIu8>\n" -#: src/readelf.c:10077 +#: src/readelf.c:10146 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ .debug_line: 0x%<PRIx64>\n" -#: src/readelf.c:10102 +#: src/readelf.c:10171 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ¾Ð´Ñ–Ð² операцій розширень, запиÑів — %<PRIu8>:\n" -#: src/readelf.c:10109 +#: src/readelf.c:10178 #, c-format msgid " [%<PRIx8>]" msgstr " [%<PRIx8>]" -#: src/readelf.c:10121 +#: src/readelf.c:10190 #, c-format msgid " %<PRIu8> arguments:" msgstr " %<PRIu8> аргументів:" -#: src/readelf.c:10136 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:10337 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" " [%5d] Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ DIE: %6<PRId64>, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU DIE: %6<PRId64>, назва: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -6086,42 +6094,42 @@ msgstr "" " %*s Ð Ñдок\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10465 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** помилка, пропущено роздільник Ñ€Ñдків\n" -#: src/readelf.c:10425 +#: src/readelf.c:10494 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_str_offsets: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10593 #, c-format msgid " Length: %8<PRIu64>\n" msgstr " Довжина: %8<PRIu64>\n" -#: src/readelf.c:10526 +#: src/readelf.c:10595 #, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " Розмір зÑуву: %8<PRIu8>\n" -#: src/readelf.c:10540 +#: src/readelf.c:10609 #, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n" -#: src/readelf.c:10549 +#: src/readelf.c:10618 #, c-format msgid " Padding: %8<PRIx16>\n" msgstr " ЗаповненнÑ: %8<PRIx16>\n" -#: src/readelf.c:10603 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -6130,7 +6138,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -6139,22 +6147,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:%#x " -#: src/readelf.c:10768 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -6162,7 +6170,7 @@ msgstr "" "\n" " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:" -#: src/readelf.c:10782 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -6175,12 +6183,12 @@ msgstr "" " МіÑце заÑтоÑуваннÑ: %#<PRIx64>\n" " ДіÑ: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "некоректне ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ TType" -#: src/readelf.c:10882 +#: src/readelf.c:10951 #, c-format msgid "" "\n" @@ -6189,37 +6197,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщеннÑм %#<PRIx64> міÑтить %<PRId64> байтів:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10980 #, c-format msgid " Version: %<PRId32>\n" msgstr " ВерÑÑ–Ñ: %<PRId32>\n" -#: src/readelf.c:10929 +#: src/readelf.c:10998 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU: %#<PRIx32>\n" -#: src/readelf.c:10936 +#: src/readelf.c:11005 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ TU: %#<PRIx32>\n" -#: src/readelf.c:10943 +#: src/readelf.c:11012 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: %#<PRIx32>\n" -#: src/readelf.c:10950 +#: src/readelf.c:11019 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñимволу: %#<PRIx32>\n" -#: src/readelf.c:10957 +#: src/readelf.c:11026 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " Ñтале зміщеннÑ: %#<PRIx32>\n" -#: src/readelf.c:10971 +#: src/readelf.c:11040 #, c-format msgid "" "\n" @@ -6228,7 +6236,7 @@ msgstr "" "\n" " СпиÑок CU зі зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11065 #, c-format msgid "" "\n" @@ -6237,7 +6245,7 @@ msgstr "" "\n" " СпиÑок TU зі зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11094 #, c-format msgid "" "\n" @@ -6246,7 +6254,7 @@ msgstr "" "\n" " СпиÑок Ð°Ð´Ñ€ÐµÑ Ð·Ñ– зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11126 #, c-format msgid "" "\n" @@ -6255,18 +6263,18 @@ msgstr "" "\n" " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів за зміщеннÑм %#<PRIx32> міÑтить %zu позицій:\n" -#: src/readelf.c:11195 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ деÑкриптор контекÑту зневаджуваннÑ: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ дані запиÑу Ñдра: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -6275,21 +6283,21 @@ msgstr "" "\n" "%*s... <повторюєтьÑÑ %u разів> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " ВлаÑник Розм. даних Тип\n" -#: src/readelf.c:12466 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12583 #, c-format msgid "cannot get content of note: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ нотатки: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6299,7 +6307,7 @@ msgstr "" "Розділ запиÑів (note) [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм " "%#0<PRIx64>:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6308,7 +6316,7 @@ msgstr "" "\n" "Сегмент запиÑів з %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12686 #, c-format msgid "" "\n" @@ -6317,12 +6325,12 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міÑтитьÑÑ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12713 src/readelf.c:12764 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [%zu] «%s»: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12718 #, c-format msgid "" "\n" @@ -6331,7 +6339,7 @@ msgstr "" "\n" "ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12723 #, c-format msgid "" "\n" @@ -6342,7 +6350,7 @@ msgstr "" "ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів (%zd неÑтиÑнено) за " "зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12737 #, c-format msgid "" "\n" @@ -6351,7 +6359,7 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міÑтитьÑÑ Ñ€Ñдків Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12769 #, c-format msgid "" "\n" @@ -6360,7 +6368,7 @@ msgstr "" "\n" "Розділ Ñ€Ñдків [%zu] «%s» міÑтить %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12774 #, c-format msgid "" "\n" @@ -6371,7 +6379,7 @@ msgstr "" "Ð Ñдок розділу [%zu] «%s» міÑтить %<PRIu64> байти (%zd неÑтиÑнено) на " "зміщенні %#0<PRIx64>:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6380,7 +6388,7 @@ msgstr "" "\n" "розділу [%lu] не Ñ–Ñнує" -#: src/readelf.c:12789 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6389,12 +6397,12 @@ msgstr "" "\n" "розділу «%s» не Ñ–Ñнує" -#: src/readelf.c:12846 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ покажчик Ñимволів архіву «%s»: %s" -#: src/readelf.c:12849 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6403,7 +6411,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика Ñимволів\n" -#: src/readelf.c:12853 +#: src/readelf.c:12914 #, c-format msgid "" "\n" @@ -6412,12 +6420,12 @@ msgstr "" "\n" "Покажчик архіву «%s» міÑтить %zu запиÑів:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12932 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ елемент за зміщеннÑм %zu у «%s»: %s" -#: src/readelf.c:12876 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» міÑтить:\n" @@ -6514,39 +6522,38 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (прикл. %s)" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "некоректний розділ" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:480 msgid "cannot get section header" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(ЗÐГÐЛОМ)\n" @@ -6729,27 +6736,23 @@ msgstr "ВивеÑти Ñ€Ñдки файлів з Ñимволів, придат msgid "invalid value '%s' for %s parameter" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» параметра %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "некоректна мінімальна довжина розмірноÑÑ‚Ñ– Ñ€Ñдка Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ" -#: src/strings.c:585 -#, c-format +#: src/strings.c:584 msgid "lseek failed" msgstr "помилка lseek" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "помилка повторного викориÑÑ‚Ð°Ð½Ð½Ñ mmap" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "помилка mprotect" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "ПропуÑкаємо дані %zd «%s» поза файлом" @@ -6826,13 +6829,11 @@ msgstr "" msgid "Discard symbols from object files." msgstr "Відкинути Ñимволи з об’єктних файлів" -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "--reloc-debug-sections викориÑтано без -f" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" @@ -6840,43 +6841,41 @@ msgstr "" "--reloc-debug-sections-only Ñ” неÑуміÑним із -f, -g, --remove-comment та --" "remove-section" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "" "Разом з «-o» або «-f» можна викориÑтовувати лише один файл вхідних даних" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "параметр -f вказано двічі" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "параметр -F вказано двічі" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr "неможливо одночаÑно зберегти Ñ– вилучити розділ .comment" -#: src/strip.c:481 -#, c-format +#: src/strip.c:479 msgid "bad relocation" msgstr "помилкове переÑуваннÑ" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані з вхідного файла «%s» за допомогою stat" -#: src/strip.c:761 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "під Ñ‡Ð°Ñ Ñпроби Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»" -#: src/strip.c:799 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6889,42 +6888,41 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:813 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: підтримки Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ вміÑту з архіву не передбачено" -#: src/strip.c:1047 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ канал Ñервера EBL" -#: src/strip.c:1092 -#, c-format +#: src/strip.c:1094 msgid "cannot get number of phdrs" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1108 src/strip.c:1151 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "не вдалоÑÑ Ñтворити ehdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1118 src/strip.c:1161 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "не вдалоÑÑ Ñтворити phdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s" -#: src/strip.c:1240 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»" -#: src/strip.c:1250 +#: src/strip.c:1251 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Ðеможливо вилучити розміщений у пам'ÑÑ‚Ñ– розділ «%s»" -#: src/strip.c:1259 +#: src/strip.c:1260 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Ðеможливо одночаÑно зберегти та вилучити розділ «%s»" @@ -6944,7 +6942,7 @@ msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° E msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1705 src/strip.c:2546 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ shdrstrndx: %s" @@ -6954,68 +6952,67 @@ msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ shdrstrndx: %s" msgid "while preparing output for '%s'" msgstr "під Ñ‡Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… даних Ð´Ð»Ñ Â«%s»" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ заголовка розділу: %s" -#: src/strip.c:1793 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити дані розділу: %s" -#: src/strip.c:1859 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу: %s" -#: src/strip.c:1866 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "недоÑтатньо пам'ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу" -#: src/strip.c:2079 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" "Ðеможливо вилучити Ñимвол [%zd] з розміщеної у пам'ÑÑ‚Ñ– таблиці Ñимволів [%zd]" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу «%s»: %s" -#: src/strip.c:2477 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Â«%s»" -#: src/strip.c:2500 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "під Ñ‡Ð°Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ñ— Ñуми Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних даних" -#: src/strip.c:2541 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "під Ñ‡Ð°Ñ Ñпроби запиÑу «%s»" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Â«%s»: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалоÑÑ Ð²Ñтановити права доÑтупу та дату зміни «%s»" @@ -7163,13 +7160,13 @@ msgstr "не вдалоÑÑ Ñкопіювати дані розділу: %s" msgid "cannot create directory '%s'" msgstr "не вдалоÑÑ Ñтворити каталог «%s»" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 #: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñимволів: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 #: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" @@ -7180,120 +7177,128 @@ msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ таблицю Ñимволів: %s" msgid "cannot update section header: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ заголовок розділу: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ переÑуваннÑ: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ верÑÑ–ÑŽ Ñимволу: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "неочікуваний тип розділу у [%zu] з поÑиланнÑм sh_link на symtab" -#: src/unstrip.c:848 +#: src/unstrip.c:849 #, c-format msgid "cannot get symbol section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñимволів: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:851 #, c-format msgid "cannot get string section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñ€Ñдків: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:868 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "некоректне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ñдка у Ñимволі [%zu]" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ назву розділу [%zu]: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1041 #, c-format msgid "bad sh_link for group section: %s" msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1046 +#: src/unstrip.c:1047 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ shdr Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1052 #, c-format msgid "bad data for group symbol section: %s" msgstr "помилкові дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñимволів груп: %s" -#: src/unstrip.c:1057 +#: src/unstrip.c:1058 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1063 #, c-format msgid "bad symbol name for group section: %s" msgstr "помилкова назва Ñимволу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідний розділ Ð´Ð»Ñ [%zu] «%s»" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ «.gnu.prelink_undo»: %s" -#: src/unstrip.c:1155 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· shnum = %zu у розділі «%s»" -#: src/unstrip.c:1166 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "некоректний вміÑÑ‚ розділу «%s»" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ назву розділу до таблиці Ñ€Ñдків: %s" -#: src/unstrip.c:1362 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дані заголовка розділу у таблиці Ñ€Ñдків: %s" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ заголовка розділу у таблиці Ñ€Ñдків: %s" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s" -#: src/unstrip.c:1406 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "у очищеному файлі більше розділів ніж у файлі з даними Ð´Ð»Ñ Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ â€” " "помилковий порÑдок параметрів?" -#: src/unstrip.c:1410 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "у очищеному файлі немає розділів" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ таблицю Ñ€Ñдків заголовка розділу: %s" @@ -7407,17 +7412,15 @@ msgstr "у модулі «%s» файл «%s» не очищено strip" msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалоÑÑ ÐºÐµÑˆÑƒÐ²Ð°Ñ‚Ð¸ адреÑи розділів Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "відповідних модулів не виÑвлено" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "вÑтановлено відповідніÑÑ‚ÑŒ декількох модулів" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7425,7 +7428,7 @@ msgstr "" "ОЧИЩЕÐИЙ-ФÐЙЛ ФÐЙЛ-DEBUG\n" "[МОДУЛЬ...]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7500,7 +7503,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "ЗапуÑтити виконуваний файл" @@ -7512,6 +7515,10 @@ msgstr "Додатково вивеÑти назви функцій" msgid "Show instances of inlined functions" msgstr "ВивеÑти екземплÑри вбудованих функцій" +#, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ пам’ÑÑ‚ÑŒ" + #~ msgid "" #~ " [%6tx] base address\n" #~ " " diff --git a/src/ChangeLog b/src/ChangeLog index 2c7be185..fd87ce2f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,114 @@ +2022-04-24 Mark Wielaard <mark@klomp.org> + + * elfclassify.c (main): Use classify_flag_no_stdin for no-std in options. + +2022-04-19 Mark Wielaard <mark@klomp.org> + + * readelf.c (get_dyn_ents): Define dyn_mem outside the while loop. + +2022-03-01 Di Chen <dichen@redhat.com> + + * readelf.c (get_dyn_ents): New function. + (handle_dynamic): Use get_dyn_ents to get the actual number of + Dynamic entries in the section. + +2022-03-27 Mark Wielaard <mark@klomp.org> + + * addr2line.c: Replace error (EXIT_FAILURE, ...) with error_exit(...). + * ar.c: Likewise. + * arlib.c: Likewise. + * elfcompress.c: Likewise. + * nm.c: Likewise. + * objdump.c: Likewise. + * readelf.c: Likewise. + * size.c: Likewise. + * strings.c: Likewise. + * strip.c: Likewise. + * unstrip.c: Likewise. + +2022-03-24 Mark Wielaard <mark@klomp.org> + + * elflint.c (check_note_data): Recognize NT_FDO_PACKAGING_METADATA. + +2022-03-11 Mark Wielaard <mark@klomp.org> + + * addr2line.c (OPT_RELATIVE): New constant. + (options): Add --relative. + (use_comp_dir): Initialize to true. + (parse_opt): Handle OPT_RELATIVE. + +2021-12-04 Mark Wielaard <mark@klomp.org> + + * readelf.c (print_ehdr): Pass sizeof (buf) - 1 to strncpy. + +2021-10-20 John M Mellor-Crummey <johnmc@rice.edu> + + * readelf.c (print_debug_line_section): Try to read + debug_str_offset if available. Handle DW_LNE_NVIDIA_inlined_call + and DW_LNE_NVIDIA_set_function_name. + +2021-10-06 Mark Wielaard <mark@klomp.org> + + * elflint.c (check_sections): Don't dereference databits if bad. + +2021-09-09 Dmitry V. Levin <ldv@altlinux.org> + + * findtextrel.c: Include "libeu.h". + (open_rootdir_file): New function. + (process_file): Use it to open file inside rootdir. + * Makefile.am (findtextrel_no_Wstack_usage): Remove. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * objdump.c (show_disasm): Replace asprintf followed by + error(EXIT_FAILURE) with xasprintf. + * readelf.c (handle_gnu_hash): Likewise. + * unstrip.c (handle_output_dir_module, main): Likewise. + + * elflint.c (check_sections): Remove cast of xcalloc return value. + * findtextrel.c (process_file): Remove casts of malloc and realloc + return values. + * nm.c (get_local_names, show_symbols_sysv, show_symbols): Remove + casts of xmalloc return values. + * readelf.c (print_hash_info, handle_sysv_hash, handle_sysv_hash64, + handle_gnu_hash): Remove cast of xcalloc return value. + (print_debug_units): Remove casts of xmalloc return values. + * strip.c (handle_elf): Remove casts of xcalloc and xmalloc return + values. + +2021-09-05 Dmitry V. Levin <ldv@altlinux.org> + + * Makefile.am (AM_LDFLAGS): Add $(STACK_USAGE_NO_ERROR). + +2021-08-20 Saleem Abdulrasool <abdulras@google.com> + + * elfclassify.c: Remove error.h include. + +2021-03-18 Timm Bäder <tbaeder@redhat.com> + + * readelf.c (run_advance_pc): New static inline function + lifted from... + (print_debug_line_section): ... here. Define advance_pc + using run_advance_pc. + +2021-07-03 Mark Wielaard <mark@klomp.org> + + * readelf.c (compare_listptr): Fix dwarf_attr_name argument. + +2021-06-18 Mark Wielaard <mark@klomp.org> + + * unstrip.c (adjust_relocs): Check gelf_getrel and geld_getrela. + +2021-06-18 Mark Wielaard <mark@klomp.org> + + * strip.c (remove_debug_relocations): Check gelf_update results. + (update_section_size): Likewise. + +2021-06-06 Sergei Trofimovich <slyfox@gentoo.org> + + * elflint.c (buffer_left): Mark as 'static' to avoid external linkage + failure. + 2021-05-12 Dmitry V. Levin <ldv@altlinux.org> * elfcompress.c (process_file): Return 1 instead of -1 in case of an diff --git a/src/Makefile.am b/src/Makefile.am index 88d0ac8f..6cc019da 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,7 +23,7 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm -AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw +AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw $(STACK_USAGE_NO_ERROR) bin_PROGRAMS = readelf nm size strip elflint findtextrel addr2line \ elfcmp objdump ranlib strings ar unstrip stack elfcompress \ @@ -61,7 +61,6 @@ nm_no_Wstack_usage = yes size_no_Wstack_usage = yes strip_no_Wstack_usage = yes elflint_no_Wstack_usage = yes -findtextrel_no_Wstack_usage = yes elfcmp_no_Wstack_usage = yes objdump_no_Wstack_usage = yes ranlib_no_Wstack_usage = yes diff --git a/src/addr2line.c b/src/addr2line.c index 34945046..25db2926 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -1,5 +1,6 @@ /* Locate source files and line information for given addresses Copyright (C) 2005-2010, 2012, 2013, 2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> This file is part of elfutils. Written by Ulrich Drepper <drepper@redhat.com>, 2005. @@ -49,7 +50,8 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; /* Values for the parameters which have no short form. */ #define OPT_DEMANGLER 0x100 -#define OPT_PRETTY 0x101 /* 'p' is already used to select the process. */ +#define OPT_PRETTY 0x101 /* 'p' is already used to select the process. */ +#define OPT_RELATIVE 0x102 /* 'r' is something else in binutils addr2line. */ /* Definitions of arguments for argp functions. */ static const struct argp_option options[] = @@ -62,7 +64,7 @@ static const struct argp_option options[] = { "addresses", 'a', NULL, 0, N_("Print address before each entry"), 0 }, { "basenames", 's', NULL, 0, N_("Show only base names of source files"), 0 }, { "absolute", 'A', NULL, 0, - N_("Show absolute file names using compilation directory"), 0 }, + N_("Show absolute file names using compilation directory (default)"), 0 }, { "functions", 'f', NULL, 0, N_("Also show function names"), 0 }, { "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 }, { "symbols-sections", 'x', NULL, 0, N_("Also show symbol and the section names"), 0 }, @@ -74,6 +76,8 @@ static const struct argp_option options[] = N_("Show demangled symbols (ARG is always ignored)"), 0 }, { "pretty-print", OPT_PRETTY, NULL, 0, N_("Print all information on one line, and indent inlines"), 0 }, + { "relative", OPT_RELATIVE, NULL, 0, + N_("Show relative file names without compilation directory"), 0 }, { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 }, /* Unsupported options. */ @@ -111,7 +115,7 @@ static bool print_addresses; static bool only_basenames; /* True if absolute file names based on DW_AT_comp_dir should be shown. */ -static bool use_comp_dir; +static bool use_comp_dir = true; /* True if line flags should be shown. */ static bool show_flags; @@ -236,6 +240,10 @@ parse_opt (int key, char *arg, struct argp_state *state) use_comp_dir = true; break; + case OPT_RELATIVE: + use_comp_dir = false; + break; + case 'f': show_functions = true; break; @@ -516,8 +524,7 @@ adjust_to_section (const char *name, uintmax_t *addr, Dwfl *dwfl) Dwfl_Module *mod = NULL; if (dwfl_getmodules (dwfl, &see_one_module, &mod, 0) != 0 || mod == NULL) - error (EXIT_FAILURE, 0, _("Section syntax requires" - " exactly one module")); + error_exit (0, _("Section syntax requires exactly one module")); int nscn = dwfl_module_relocations (mod); for (int i = 0; i < nscn; ++i) @@ -386,8 +386,8 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf, if (miss_allowed) return -1; - error (EXIT_FAILURE, errno, _("cannot open archive '%s'"), - arfname); + error_exit (errno, _("cannot open archive '%s'"), + arfname); } if (elf != NULL) @@ -396,16 +396,16 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf, *elf = elf_begin (fd, cmd, NULL); if (*elf == NULL) - error (EXIT_FAILURE, 0, _("cannot open archive '%s': %s"), - arfname, elf_errmsg (-1)); + error_exit (0, _("cannot open archive '%s': %s"), + arfname, elf_errmsg (-1)); if (flags == O_RDONLY && elf_kind (*elf) != ELF_K_AR) - error (EXIT_FAILURE, 0, _("%s: not an archive file"), arfname); + error_exit (0, _("%s: not an archive file"), arfname); } if (st != NULL && fstat (fd, st) != 0) - error (EXIT_FAILURE, errno, _("cannot stat archive '%s'"), - arfname); + error_exit (errno, _("cannot stat archive '%s'"), + arfname); return fd; } @@ -469,14 +469,13 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, int fd = open_archive (arfname, O_RDONLY, 0, &elf, NULL, false); if (hcreate (2 * argc) == 0) - error (EXIT_FAILURE, errno, _("cannot create hash table")); + error_exit (errno, _("cannot create hash table")); for (int cnt = 0; cnt < argc; ++cnt) { ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] }; if (hsearch (entry, ENTER) == NULL) - error (EXIT_FAILURE, errno, - _("cannot insert into hash table")); + error_exit (errno, _("cannot insert into hash table")); } struct stat st; @@ -924,14 +923,13 @@ do_oper_delete (const char *arfname, char **argv, int argc, int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, false); if (hcreate (2 * argc) == 0) - error (EXIT_FAILURE, errno, _("cannot create hash table")); + error_exit (errno, _("cannot create hash table")); for (int cnt = 0; cnt < argc; ++cnt) { ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] }; if (hsearch (entry, ENTER) == NULL) - error (EXIT_FAILURE, errno, - _("cannot insert into hash table")); + error_exit (errno, _("cannot insert into hash table")); } arlib_init (); @@ -1131,7 +1129,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, if (oper != oper_qappend) { if (hcreate (2 * argc) == 0) - error (EXIT_FAILURE, errno, _("cannot create hash table")); + error_exit (errno, _("cannot create hash table")); for (int cnt = 0; cnt < argc; ++cnt) { @@ -1139,8 +1137,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, entry.key = full_path ? argv[cnt] : basename (argv[cnt]); entry.data = &argv[cnt]; if (hsearch (entry, ENTER) == NULL) - error (EXIT_FAILURE, errno, - _("cannot insert into hash table")); + error_exit (errno, _("cannot insert into hash table")); } } @@ -1214,7 +1211,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, next: cmd = elf_next (subelf); if (elf_end (subelf) != 0) - error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1)); + error_exit (0, "%s: %s", arfname, elf_errmsg (-1)); } if (oper != oper_qappend) @@ -1222,8 +1219,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, no_old: if (member != NULL) - error (EXIT_FAILURE, 0, _("position member %s not found"), - member); + error_exit (0, _("position member %s not found"), + member); if (oper == oper_move) { @@ -1305,8 +1302,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, found[cnt]->mem = elf_rawfile (newelf, &found[cnt]->size); if (found[cnt]->mem == NULL || elf_cntl (newelf, ELF_C_FDDONE) != 0) - error (EXIT_FAILURE, 0, _("cannot read %s: %s"), - argv[cnt], elf_errmsg (-1)); + error_exit (0, _("cannot read %s: %s"), + argv[cnt], elf_errmsg (-1)); close (newfd); @@ -1374,7 +1371,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, || (arhdr = elf_getarhdr (subelf)) == NULL) /* This should never happen since we already looked at the archive content. But who knows... */ - error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1)); + error_exit (0, "%s: %s", arfname, elf_errmsg (-1)); arlib_add_symbols (subelf, arfname, arhdr->ar_name, cur_off); diff --git a/src/arlib.c b/src/arlib.c index a14c44d3..c09fc3c6 100644 --- a/src/arlib.c +++ b/src/arlib.c @@ -210,8 +210,8 @@ arlib_add_symbols (Elf *elf, const char *arfname, const char *membername, { if (sizeof (off) > sizeof (uint32_t) && off > ~((uint32_t) 0)) /* The archive is too big. */ - error (EXIT_FAILURE, 0, _("the archive '%s' is too large"), - arfname); + error_exit (0, _("the archive '%s' is too large"), + arfname); /* We only add symbol tables for ELF files. It makes not much sense to add symbols from executables but we do so for compatibility. @@ -223,8 +223,8 @@ arlib_add_symbols (Elf *elf, const char *arfname, const char *membername, GElf_Ehdr ehdr_mem; GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); if (ehdr == NULL) - error (EXIT_FAILURE, 0, _("cannot read ELF header of %s(%s): %s"), - arfname, membername, elf_errmsg (-1)); + error_exit (0, _("cannot read ELF header of %s(%s): %s"), + arfname, membername, elf_errmsg (-1)); GElf_Word symtype; if (ehdr->e_type == ET_REL) diff --git a/src/elfclassify.c b/src/elfclassify.c index fe7eeeed..25fe9a65 100644 --- a/src/elfclassify.c +++ b/src/elfclassify.c @@ -19,7 +19,6 @@ #include <system.h> #include <argp.h> -#include <error.h> #include <fcntl.h> #include <gelf.h> #include <stdbool.h> @@ -947,7 +946,7 @@ separated by newlines"), 2 }, { "stdin0", classify_flag_stdin0, NULL, 0, N_("Also read file names to process from standard input, \ separated by ASCII NUL bytes"), 2 }, - { "no-stdin", classify_flag_stdin, NULL, 0, + { "no-stdin", classify_flag_no_stdin, NULL, 0, N_("Do not read files from standard input (default)"), 2 }, { "compressed", 'z', NULL, 0, N_("Try to open compressed files or embedded (kernel) ELF images"), diff --git a/src/elfcompress.c b/src/elfcompress.c index 2c6d91ba..92f2fac8 100644 --- a/src/elfcompress.c +++ b/src/elfcompress.c @@ -1342,12 +1342,11 @@ main (int argc, char **argv) /* Should already be handled by ARGP_KEY_NO_ARGS case above, just sanity check. */ if (remaining >= argc) - error (EXIT_FAILURE, 0, N_("No input file given")); + error_exit (0, N_("No input file given")); /* Likewise for the ARGP_KEY_ARGS case above, an extra sanity check. */ if (foutput != NULL && remaining + 1 < argc) - error (EXIT_FAILURE, 0, - N_("Only one input file allowed together with '-o'")); + error_exit (0, N_("Only one input file allowed together with '-o'")); elf_version (EV_CURRENT); diff --git a/src/elflint.c b/src/elflint.c index 85cc7833..d919936f 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -3434,7 +3434,7 @@ buffer_pos (Elf_Data *data, const unsigned char *p) return p - (const unsigned char *) data->d_buf; } -inline size_t +static inline size_t buffer_left (Elf_Data *data, const unsigned char *p) { return (const unsigned char *) data->d_buf + data->d_size - p; @@ -3705,7 +3705,7 @@ check_sections (Ebl *ebl, GElf_Ehdr *ehdr) return; /* Allocate array to count references in section groups. */ - scnref = (int *) xcalloc (shnum, sizeof (int)); + scnref = xcalloc (shnum, sizeof (int)); /* Check the zeroth section first. It must not have any contents and the section header must contain nonzero value at most in the @@ -4102,7 +4102,7 @@ section [%2zu] '%s' has type NOBITS but is read from the file in segment of prog bad = (databits == NULL || databits->d_size != shdr->sh_size); for (size_t idx = 0; - idx < databits->d_size && ! bad; + ! bad && idx < databits->d_size; idx++) bad = ((char *) databits->d_buf)[idx] != 0; @@ -4384,6 +4384,13 @@ section [%2d] '%s': unknown core file note type %" PRIu32 else goto unknown_note; + case NT_FDO_PACKAGING_METADATA: + if (nhdr.n_namesz == sizeof ELF_NOTE_FDO + && strcmp (data->d_buf + name_offset, ELF_NOTE_FDO) == 0) + break; + else + goto unknown_note; + case 0: /* Linux vDSOs use a type 0 note for the kernel version word. */ if (nhdr.n_namesz == sizeof "Linux" diff --git a/src/findtextrel.c b/src/findtextrel.c index 220ee909..ecb1d118 100644 --- a/src/findtextrel.c +++ b/src/findtextrel.c @@ -36,6 +36,7 @@ #include <unistd.h> #include <printversion.h> +#include "libeu.h" #include "system.h" struct segments @@ -181,30 +182,31 @@ noop (void *arg __attribute__ ((unused))) static int -process_file (const char *fname, bool more_than_one) +open_rootdir_file (const char *fname) { - int result = 0; - void *knownsrcs = NULL; - - size_t fname_len = strlen (fname); - size_t rootdir_len = strlen (rootdir); + char *new_fname = NULL; const char *real_fname = fname; + if (fname[0] == '/' && (rootdir[0] != '/' || rootdir[1] != '\0')) - { - /* Prepend the user-provided root directory. */ - char *new_fname = alloca (rootdir_len + fname_len + 2); - *((char *) mempcpy (stpcpy (mempcpy (new_fname, rootdir, rootdir_len), - "/"), - fname, fname_len)) = '\0'; - real_fname = new_fname; - } + real_fname = new_fname = xasprintf ("%s/%s", rootdir, fname); int fd = open (real_fname, O_RDONLY); if (fd == -1) - { - error (0, errno, _("cannot open '%s'"), fname); - return 1; - } + error (0, errno, _("cannot open '%s'"), fname); + + free (new_fname); + return fd; +} + + +static int +process_file (const char *fname, bool more_than_one) +{ + int result = 0; + void *knownsrcs = NULL; + int fd = open_rootdir_file (fname); + if (fd == -1) + return 1; Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); if (elf == NULL) @@ -304,8 +306,7 @@ process_file (const char *fname, bool more_than_one) /* Get the address ranges for the loaded segments. */ size_t nsegments_max = 10; size_t nsegments = 0; - struct segments *segments - = (struct segments *) malloc (nsegments_max * sizeof (segments[0])); + struct segments *segments = malloc (nsegments_max * sizeof (segments[0])); if (segments == NULL) error (1, errno, _("while reading ELF file")); @@ -334,9 +335,7 @@ process_file (const char *fname, bool more_than_one) { nsegments_max *= 2; segments - = (struct segments *) realloc (segments, - nsegments_max - * sizeof (segments[0])); + = realloc (segments, nsegments_max * sizeof (segments[0])); if (segments == NULL) { error (0, 0, _("\ @@ -362,18 +361,10 @@ cannot get program header index at offset %zd: %s"), is specified with an absolute path. */ if (dw == NULL && fname[0] == '/') { - size_t debuginfo_rootlen = strlen (debuginfo_root); - char *difname = (char *) alloca (rootdir_len + debuginfo_rootlen - + fname_len + 8); - strcpy (mempcpy (stpcpy (mempcpy (mempcpy (difname, rootdir, - rootdir_len), - debuginfo_root, - debuginfo_rootlen), - "/"), - fname, fname_len), - ".debug"); - + char *difname = + xasprintf("%s%s/%s.debug", rootdir, debuginfo_root, fname); fd2 = open (difname, O_RDONLY); + free (difname); if (fd2 != -1 && (elf2 = elf_begin (fd2, ELF_C_READ_MMAP, NULL)) != NULL) dw = dwarf_begin_elf (elf2, DWARF_C_READ, NULL); @@ -137,8 +137,8 @@ static int handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, #define INTERNAL_ERROR(fname) \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) /* Internal representation of symbols. */ @@ -378,7 +378,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } @@ -390,7 +390,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } @@ -687,8 +687,7 @@ get_local_names (Dwarf *dbg) } /* We have all the information. Create a record. */ - struct local_name *newp - = (struct local_name *) xmalloc (sizeof (*newp)); + struct local_name *newp = xmalloc (sizeof (*newp)); newp->name = name; newp->file = dwarf_filesrc (files, fileidx, NULL, NULL); newp->lineno = lineno; @@ -701,8 +700,7 @@ get_local_names (Dwarf *dbg) struct local_name **tres = tsearch (newp, &local_root, local_compare); if (tres == NULL) - error (EXIT_FAILURE, errno, - _("cannot create search tree")); + error_exit (errno, _("cannot create search tree")); else if (*tres != newp) free (newp); } @@ -736,14 +734,13 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, bool scnnames_malloced = shnum * sizeof (const char *) > 128 * 1024; const char **scnnames; if (scnnames_malloced) - scnnames = (const char **) xmalloc (sizeof (const char *) * shnum); + scnnames = xmalloc (sizeof (const char *) * shnum); else scnnames = (const char **) alloca (sizeof (const char *) * shnum); /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* Cache the section names. */ Elf_Scn *scn = NULL; @@ -1235,8 +1232,7 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* The section is that large. */ size_t size = shdr->sh_size; @@ -1332,15 +1328,14 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, can use the data memory instead of copying again if what we read is a 64 bit file. */ if (nentries > SIZE_MAX / sizeof (GElf_SymX)) - error (EXIT_FAILURE, 0, - _("%s: entries (%zd) in section %zd `%s' is too large"), - fullname, nentries, elf_ndxscn (scn), - elf_strptr (ebl->elf, shstrndx, shdr->sh_name)); + error_exit (0, _("%s: entries (%zd) in section %zd `%s' is too large"), + fullname, nentries, elf_ndxscn (scn), + elf_strptr (ebl->elf, shstrndx, shdr->sh_name)); GElf_SymX *sym_mem; if (nentries * sizeof (GElf_SymX) < MAX_STACK_ALLOC) sym_mem = (GElf_SymX *) alloca (nentries * sizeof (GElf_SymX)); else - sym_mem = (GElf_SymX *) xmalloc (nentries * sizeof (GElf_SymX)); + sym_mem = xmalloc (nentries * sizeof (GElf_SymX)); /* Iterate over all symbols. */ #ifdef USE_DEMANGLE diff --git a/src/objdump.c b/src/objdump.c index 3a93248c..b32de17d 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -100,8 +100,8 @@ static int handle_elf (Elf *elf, const char *prefix, const char *fname, #define INTERNAL_ERROR(fname) \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) /* List of sections which should be used. */ @@ -255,7 +255,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while close `%s'"), fname); + error_exit (errno, _("while close `%s'"), fname); return result; } @@ -267,7 +267,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while close `%s'"), fname); + error_exit (errno, _("while close `%s'"), fname); return result; } @@ -684,7 +684,7 @@ show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx) { DisasmCtx_t *ctx = disasm_begin (ebl, ebl->elf, NULL /* XXX TODO */); if (ctx == NULL) - error (EXIT_FAILURE, 0, _("cannot disassemble")); + error_exit (0, _("cannot disassemble")); Elf_Scn *scn = NULL; while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) @@ -717,15 +717,14 @@ show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx) info.address_color = color_address; info.bytes_color = color_bytes; - if (asprintf (&fmt, "%s%%7m %s%%.1o,%s%%.2o,%s%%.3o,,%s%%.4o%s%%.5o%%34a %s%%l", - color_mnemonic ?: "", - color_operand1 ?: "", - color_operand2 ?: "", - color_operand3 ?: "", - color_operand4 ?: "", - color_operand5 ?: "", - color_label ?: "") < 0) - error (EXIT_FAILURE, errno, _("cannot allocate memory")); + fmt = xasprintf ("%s%%7m %s%%.1o,%s%%.2o,%s%%.3o,,%s%%.4o%s%%.5o%%34a %s%%l", + color_mnemonic ?: "", + color_operand1 ?: "", + color_operand2 ?: "", + color_operand3 ?: "", + color_operand4 ?: "", + color_operand5 ?: "", + color_label ?: ""); } else { @@ -756,8 +755,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname, /* Get the backend for this object file type. */ Ebl *ebl = ebl_openbackend (elf); if (ebl == NULL) - error (EXIT_FAILURE, 0, - _("cannot create backend for elf file")); + error_exit (0, _("cannot create backend for elf file")); printf ("%s: elf%d-%s\n\n", fname, gelf_getclass (elf) == ELFCLASS32 ? 32 : 64, @@ -778,8 +776,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); int result = 0; if (print_disasm) diff --git a/src/readelf.c b/src/readelf.c index 9b472622..4b6aab2b 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -828,7 +828,7 @@ create_dwfl (int fd, const char *fname) /* Duplicate an fd for dwfl_report_offline to swallow. */ int dwfl_fd = dup (fd); if (unlikely (dwfl_fd < 0)) - error (EXIT_FAILURE, errno, "dup"); + error_exit (errno, "dup"); /* Use libdwfl in a trivial way to open the libdw handle for us. This takes care of applying relocations to DWARF data in ET_REL files. */ @@ -951,15 +951,13 @@ process_elf_file (Dwfl_Module *dwflmod, int fd) /* Determine the number of sections. */ if (unlikely (elf_getshdrnum (ebl->elf, &shnum) < 0)) - error (EXIT_FAILURE, 0, - _("cannot determine number of sections: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot determine number of sections: %s"), + elf_errmsg (-1)); /* Determine the number of phdrs. */ if (unlikely (elf_getphdrnum (ebl->elf, &phnum) < 0)) - error (EXIT_FAILURE, 0, - _("cannot determine number of program headers: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot determine number of program headers: %s"), + elf_errmsg (-1)); /* For an ET_REL file, libdwfl has adjusted the in-core shdrs and may have applied relocation to some sections. If there are any @@ -1172,7 +1170,7 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) (uint32_t) shdr->sh_link); else { - strncpy (buf, _(" ([0] not available)"), sizeof (buf)); + strncpy (buf, _(" ([0] not available)"), sizeof (buf) - 1); buf[sizeof (buf) - 1] = '\0'; } @@ -1226,9 +1224,8 @@ print_shdr (Ebl *ebl, GElf_Ehdr *ehdr) { size_t sections; if (unlikely (elf_getshdrnum (ebl->elf, §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 +1235,8 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ /* Get the section header string table index. */ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header string table index: %s"), + elf_errmsg (-1)); puts (_("Section Headers:")); @@ -1262,15 +1258,15 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ Elf_Scn *scn = elf_getscn (ebl->elf, cnt); if (unlikely (scn == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section: %s"), + elf_errmsg (-1)); /* Get the section header. */ GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header: %s"), + elf_errmsg (-1)); char flagbuf[20]; char *cp = flagbuf; @@ -1436,9 +1432,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) size_t sections; if (unlikely (elf_getshdrnum (ebl->elf, §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 +1442,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); puts (_("\n Section to Segment mapping:\n Segment Sections...")); @@ -1461,8 +1455,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &phdr_mem); /* This must not happen. */ if (unlikely (phdr == NULL)) - error (EXIT_FAILURE, 0, _("cannot get program header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get program header: %s"), + elf_errmsg (-1)); /* Iterate over the sections. */ bool in_relro = false; @@ -1472,16 +1466,15 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) Elf_Scn *scn = elf_getscn (ebl->elf, inner); /* This should not happen. */ if (unlikely (scn == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section: %s"), + elf_errmsg (-1)); /* Get the section header. */ GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header: %s"), + elf_errmsg (-1)); if (shdr->sh_size > 0 /* Compare allocated sections by VMA, unallocated @@ -1598,8 +1591,7 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf32_Word *grpref = (Elf32_Word *) data->d_buf; @@ -1661,10 +1653,9 @@ print_scngrp (Ebl *ebl) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section [%zd] header: %s"), - elf_ndxscn (scn), - elf_errmsg (-1)); + error_exit (0, _("cannot get section [%zd] header: %s"), + elf_ndxscn (scn), + elf_errmsg (-1)); } handle_scngrp (ebl, scn, shdr); } @@ -1781,6 +1772,24 @@ print_dt_posflag_1 (int class, GElf_Xword d_val) } +static size_t +get_dyn_ents (Elf_Data * dyn_data) +{ + GElf_Dyn *dyn; + GElf_Dyn dyn_mem; + size_t dyn_idx = 0; + do + { + dyn = gelf_getdyn(dyn_data, dyn_idx, &dyn_mem); + if (dyn != NULL) + ++dyn_idx; + } + while (dyn != NULL && dyn->d_tag != DT_NULL); + + return dyn_idx; +} + + static void handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) { @@ -1790,38 +1799,38 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) Elf_Data *data; size_t cnt; size_t shstrndx; - size_t sh_entsize; + size_t dyn_ents; /* Get the data of the section. */ data = elf_getdata (scn, NULL); if (data == NULL) return; + /* Get the dynamic section entry number */ + dyn_ents = get_dyn_ents (data); + /* Get the section header string table index. */ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); - - sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); + error_exit (0, _("cannot get section header string table index")); glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); printf (ngettext ("\ \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ \nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - shdr->sh_size / sh_entsize), - (unsigned long int) (shdr->sh_size / sh_entsize), + dyn_ents), + (unsigned long int) dyn_ents, class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, shdr->sh_offset, (int) shdr->sh_link, elf_strptr (ebl->elf, shstrndx, glink->sh_name)); fputs_unlocked (_(" Type Value\n"), stdout); - for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) + for (cnt = 0; cnt < dyn_ents; ++cnt) { GElf_Dyn dynmem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); @@ -2005,8 +2014,7 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); if (shdr->sh_info != 0) printf (ngettext ("\ @@ -2195,8 +2203,7 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); if (shdr->sh_info != 0) printf (ngettext ("\ @@ -2373,8 +2380,8 @@ print_symtab (Ebl *ebl, int type) size_t shstrndx; const char *sname; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, + _("cannot get section header string table index")); sname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); if (sname == NULL || strcmp (sname, symbol_table_section) != 0) continue; @@ -2388,9 +2395,9 @@ print_symtab (Ebl *ebl, int type) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section [%zd] header: %s"), - elf_ndxscn (scn), elf_errmsg (-1)); + error_exit (0, + _("cannot get section [%zd] header: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); } handle_symtab (ebl, scn, shdr); } @@ -2449,15 +2456,14 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); GElf_Shdr glink_mem; GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); /* Now we can compute the number of entries in the section. */ unsigned int nsyms = data->d_size / (class == ELFCLASS32 @@ -2715,15 +2721,14 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); GElf_Shdr glink_mem; GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); printf (ngettext ("\ \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", @@ -2791,15 +2796,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); GElf_Shdr glink_mem; GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); int class = gelf_getclass (ebl->elf); printf (ngettext ("\ @@ -2878,8 +2882,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* We have to find the version definition section and extract the version names. */ @@ -3102,8 +3105,8 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) &glink_mem); size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); /* Print the header. */ printf (ngettext ("\ @@ -3165,7 +3168,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx, uint_fast32_t maxlength, Elf32_Word nbucket, uint_fast32_t nsyms, uint32_t *lengths, const char *extrastr) { - uint32_t *counts = (uint32_t *) xcalloc (maxlength + 1, sizeof (uint32_t)); + uint32_t *counts = xcalloc (maxlength + 1, sizeof (uint32_t)); for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) ++counts[lengths[cnt]]; @@ -3266,7 +3269,7 @@ handle_sysv_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[2]; Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + nbucket]; - uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); + uint32_t *lengths = xcalloc (nbucket, sizeof (uint32_t)); uint_fast32_t maxlength = 0; uint_fast32_t nsyms = 0; @@ -3332,7 +3335,7 @@ handle_sysv_hash64 (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) Elf64_Xword *bucket = &((Elf64_Xword *) data->d_buf)[2]; Elf64_Xword *chain = &((Elf64_Xword *) data->d_buf)[2 + nbucket]; - uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); + uint32_t *lengths = xcalloc (nbucket, sizeof (uint32_t)); uint_fast32_t maxlength = 0; uint_fast32_t nsyms = 0; @@ -3410,7 +3413,7 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) if (used_buf > data->d_size) goto invalid_data; - lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); + lengths = xcalloc (nbucket, sizeof (uint32_t)); Elf32_Word *bitmask = &((Elf32_Word *) data->d_buf)[4]; Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[4 + bitmask_words]; @@ -3448,17 +3451,15 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) nbits += (word & 0x0000ffff) + ((word >> 16) & 0x0000ffff); } - char *str; - if (unlikely (asprintf (&str, _("\ + char *str = xasprintf (_("\ Symbol Bias: %u\n\ Bitmask Size: %zu bytes %" PRIuFAST32 "%% bits set 2nd hash shift: %u\n"), - (unsigned int) symbias, - bitmask_words * sizeof (Elf32_Word), - ((nbits * 100 + 50) - / (uint_fast32_t) (bitmask_words + (unsigned int) symbias, + bitmask_words * sizeof (Elf32_Word), + ((nbits * 100 + 50) + / (uint_fast32_t) (bitmask_words * sizeof (Elf32_Word) * 8)), - (unsigned int) shift) == -1)) - error (EXIT_FAILURE, 0, _("memory exhausted")); + (unsigned int) shift); print_hash_info (ebl, scn, shdr, shstrndx, maxlength, nbucket, nsyms, lengths, str); @@ -3476,8 +3477,7 @@ handle_hash (Ebl *ebl) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf_Scn *scn = NULL; while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) @@ -3497,9 +3497,8 @@ handle_hash (Ebl *ebl) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section [%zd] header: %s"), - elf_ndxscn (scn), elf_errmsg (-1)); + error_exit (0, _("cannot get section [%zd] header: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); } if (shdr->sh_type == SHT_HASH) @@ -3526,8 +3525,7 @@ print_liblist (Ebl *ebl) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) { @@ -3596,8 +3594,7 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) { @@ -3834,7 +3831,7 @@ print_dwarf_addr (Dwfl_Module *dwflmod, : (address_size == 0 ? printf ("%#" PRIx64, address) : printf ("%#0*" PRIx64, 2 + address_size * 2, address)))) < 0) - error (EXIT_FAILURE, 0, _("sprintf failure")); + error_exit (0, _("sprintf failure")); } @@ -4887,7 +4884,7 @@ compare_listptr (const void *a, const void *b) error (0, 0, _("%s %#" PRIx64 " used with different attribute %s and %s"), - name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr), + name, (uint64_t) p1->offset, dwarf_attr_name (p1->attr), dwarf_attr_name (p2->attr)); } } @@ -7744,7 +7741,7 @@ print_debug_units (Dwfl_Module *dwflmod, return; int maxdies = 20; - Dwarf_Die *dies = (Dwarf_Die *) xmalloc (maxdies * sizeof (Dwarf_Die)); + Dwarf_Die *dies = xmalloc (maxdies * sizeof (Dwarf_Die)); /* New compilation unit. */ Dwarf_Half version; @@ -7916,9 +7913,7 @@ print_debug_units (Dwfl_Module *dwflmod, /* Make room for the next level's DIE. */ if (level + 1 == maxdies) - dies = (Dwarf_Die *) xrealloc (dies, - (maxdies += 10) - * sizeof (Dwarf_Die)); + dies = xrealloc (dies, (maxdies += 10) * sizeof (Dwarf_Die)); int res = dwarf_child (&dies[level], &dies[level + 1]); if (res > 0) @@ -8373,6 +8368,23 @@ print_form_data (Dwarf *dbg, int form, const unsigned char *readp, return readp; } +/* Only used via run_advance_pc() macro */ +static inline void +run_advance_pc (unsigned int op_advance, + unsigned int minimum_instr_len, + unsigned int max_ops_per_instr, + unsigned int *op_addr_advance, + Dwarf_Word *address, + unsigned int *op_index) +{ + const unsigned int advanced_op_index = (*op_index) + op_advance; + + *op_addr_advance = minimum_instr_len * (advanced_op_index + / max_ops_per_instr); + *address = *address + *op_addr_advance; + *op_index = advanced_op_index % max_ops_per_instr; +} + static void print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) @@ -8465,6 +8477,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, header_length = read_8ubyte_unaligned_inc (dbg, linep); } + const unsigned char *header_start = linep; + /* Next the minimum instruction length. */ if ((size_t) (lineendp - linep) < 1) goto invalid_data; @@ -8748,10 +8762,17 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, ++linep; } + unsigned int debug_str_offset = 0; + if (unlikely (linep == header_start + header_length - 4)) + { + /* CUBINs contain an unsigned 4-byte offset */ + debug_str_offset = read_4ubyte_unaligned_inc (dbg, linep); + } + if (linep == lineendp) { puts (_("\nNo line number statements.")); - return; + continue; } puts (_("\nLine number statements:")); @@ -8763,13 +8784,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, /* Apply the "operation advance" from a special opcode or DW_LNS_advance_pc (as per DWARF4 6.2.5.1). */ unsigned int op_addr_advance; - inline void advance_pc (unsigned int op_advance) - { - op_addr_advance = minimum_instr_len * ((op_index + op_advance) - / max_ops_per_instr); - address += op_addr_advance; - op_index = (op_index + op_advance) % max_ops_per_instr; - } +#define advance_pc(op_advance) run_advance_pc(op_advance, minimum_instr_len, \ + max_ops_per_instr, &op_addr_advance, &address, &op_index) if (max_ops_per_instr == 0) { @@ -8901,6 +8917,59 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, printf (_(" set discriminator to %u\n"), u128); break; + case DW_LNE_NVIDIA_inlined_call: + { + if (unlikely (linep >= lineendp)) + goto invalid_data; + + unsigned int context; + get_uleb128 (context, linep, lineendp); + + if (unlikely (linep >= lineendp)) + goto invalid_data; + + unsigned int function_name; + get_uleb128 (function_name, linep, lineendp); + function_name += debug_str_offset; + + Elf_Data *str_data = dbg->sectiondata[IDX_debug_str]; + char *function_str; + if (str_data == NULL || function_name >= str_data->d_size + || memchr (str_data->d_buf + function_name, '\0', + str_data->d_size - function_name) == NULL) + function_str = "???"; + else + function_str = (char *) str_data->d_buf + function_name; + + printf (_(" set inlined context %u," + " function name %s (0x%x)\n"), + context, function_str, function_name); + break; + } + + case DW_LNE_NVIDIA_set_function_name: + { + if (unlikely (linep >= lineendp)) + goto invalid_data; + + unsigned int function_name; + get_uleb128 (function_name, linep, lineendp); + function_name += debug_str_offset; + + Elf_Data *str_data = dbg->sectiondata[IDX_debug_str]; + char *function_str; + if (str_data == NULL || function_name >= str_data->d_size + || memchr (str_data->d_buf + function_name, '\0', + str_data->d_size - function_name) == NULL) + function_str = "???"; + else + function_str = (char *) str_data->d_buf + function_name; + + printf (_(" set function name %s (0x%x)\n"), + function_str, function_name); + } + break; + default: /* Unknown, ignore it. */ puts (_(" unknown opcode")); @@ -11335,8 +11404,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* If the .debug_info section is listed as implicitly required then we must make sure to handle it before handling any other debug @@ -11509,7 +11577,7 @@ print_core_item (unsigned int colno, char sep, unsigned int wrap, int out_len = vasprintf (&out, format, ap); va_end (ap); if (out_len == -1) - error (EXIT_FAILURE, 0, _("memory exhausted")); + error_exit (0, _("memory exhausted")); size_t n = name_width + sizeof ": " - 1 + out_len; @@ -11559,8 +11627,8 @@ convert (Elf *core, Elf_Type type, uint_fast16_t count, ? elf32_xlatetom : elf64_xlatetom) (&valuedata, &indata, elf_getident (core, NULL)[EI_DATA]); if (d == NULL) - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), + elf_errmsg (-1)); return data + indata.d_size; } @@ -12186,8 +12254,7 @@ handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos) Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_AUXV); if (data == NULL) elf_error: - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1)); const size_t nauxv = descsz / gelf_fsize (core, ELF_T_AUXV, 1, EV_CURRENT); for (size_t i = 0; i < nauxv; ++i) @@ -12297,8 +12364,7 @@ handle_siginfo_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) { Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE); if (data == NULL) - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1)); unsigned char const *ptr = data->d_buf; unsigned char const *const end = data->d_buf + data->d_size; @@ -12355,8 +12421,7 @@ handle_file_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) { Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE); if (data == NULL) - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1)); unsigned char const *ptr = data->d_buf; unsigned char const *const end = data->d_buf + data->d_size; @@ -12529,8 +12594,7 @@ handle_notes (Ebl *ebl, GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf_Scn *scn = NULL; while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) @@ -12740,8 +12804,7 @@ for_each_section_argument (Elf *elf, const struct section_argument *list, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); for (const struct section_argument *a = list; a != NULL; a = a->next) { @@ -12761,8 +12824,8 @@ for_each_section_argument (Elf *elf, const struct section_argument *list, } if (gelf_getshdr (scn, &shdr_mem) == NULL) - error (EXIT_FAILURE, 0, _("cannot get section header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header: %s"), + elf_errmsg (-1)); name = elf_strptr (elf, shstrndx, shdr_mem.sh_name); (*dump) (scn, &shdr_mem, name); } @@ -12809,8 +12872,7 @@ print_strings (Ebl *ebl) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf_Scn *scn; GElf_Shdr shdr_mem; @@ -12842,9 +12904,8 @@ dump_archive_index (Elf *elf, const char *fname) { int result = elf_errno (); if (unlikely (result != ELF_E_NO_INDEX)) - error (EXIT_FAILURE, 0, - _("cannot get symbol index of archive '%s': %s"), - fname, elf_errmsg (result)); + error_exit (0, _("cannot get symbol index of archive '%s': %s"), + fname, elf_errmsg (result)); else printf (_("\nArchive '%s' has no symbol index\n"), fname); return; @@ -12867,9 +12928,9 @@ dump_archive_index (Elf *elf, const char *fname) #if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 7) while (1) #endif - error (EXIT_FAILURE, 0, - _("cannot extract member at offset %zu in '%s': %s"), - as_off, fname, elf_errmsg (-1)); + error_exit (0, + _("cannot extract member at offset %zu in '%s': %s"), + as_off, fname, elf_errmsg (-1)); const Elf_Arhdr *h = elf_getarhdr (subelf); @@ -102,8 +102,8 @@ static void handle_elf (Elf *elf, const char *fullname, const char *fname); static void show_bsd_totals (void); #define INTERNAL_ERROR(fname) \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) /* User-selectable options. */ @@ -237,7 +237,7 @@ parse_opt (int key, char *arg, else if (likely (strcmp (arg, "sysv") == 0)) format = format_sysv; else - error (EXIT_FAILURE, 0, _("Invalid format: %s"), arg); + error_exit (0, _("Invalid format: %s"), arg); break; case OPT_RADIX: @@ -248,7 +248,7 @@ parse_opt (int key, char *arg, else if (strcmp (arg, "o") == 0 || strcmp (arg, "8") == 0) radix = radix_octal; else - error (EXIT_FAILURE, 0, _("Invalid radix: %s"), arg); + error_exit (0, _("Invalid radix: %s"), arg); break; case 't': @@ -285,7 +285,7 @@ process_file (const char *fname) INTERNAL_ERROR (fname); if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return 0; } @@ -294,7 +294,7 @@ process_file (const char *fname) int result = handle_ar (fd, elf, NULL, fname); if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } @@ -305,7 +305,7 @@ process_file (const char *fname) } if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); error (0, 0, _("%s: file format not recognized"), fname); @@ -394,8 +394,7 @@ show_sysv (Elf *elf, const char *prefix, const char *fname, /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* First round over the sections: determine the longest section name. */ Elf_Scn *scn = NULL; @@ -466,8 +465,7 @@ show_sysv_one_line (Elf *elf) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* Iterate over all sections. */ GElf_Off total = 0; @@ -479,7 +477,7 @@ show_sysv_one_line (Elf *elf) GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section header")); + error_exit (0, _("cannot get section header")); /* Ignore all sections which are not used at runtime. */ if ((shdr->sh_flags & SHF_ALLOC) == 0) diff --git a/src/strings.c b/src/strings.c index eb278f8e..04aac3b6 100644 --- a/src/strings.c +++ b/src/strings.c @@ -298,8 +298,7 @@ parse_opt (int key, char *arg, case ARGP_KEY_FINI: /* Compute the length in bytes of any match. */ if (min_len <= 0 || min_len > INT_MAX / bytes_per_char) - error (EXIT_FAILURE, 0, - _("invalid minimum length of matched string size")); + error_exit (0, _("invalid minimum length of matched string size")); min_len_bytes = min_len * bytes_per_char; break; @@ -582,7 +581,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) // XXX Eventually add flag which avoids this if the position // XXX is known to match. if (from != 0 && lseek (fd, from, SEEK_SET) != from) - error (EXIT_FAILURE, errno, _("lseek failed")); + error_exit (errno, _("lseek failed")); return read_block_no_mmap (fd, fname, from, to - from); } @@ -599,7 +598,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) if (mmap (elfmap, elfmap_size, PROT_READ, MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, from) == MAP_FAILED) - error (EXIT_FAILURE, errno, _("re-mmap failed")); + error_exit (errno, _("re-mmap failed")); elfmap_base = elfmap; } @@ -636,7 +635,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) and for this we have to make the data writable. */ if (unlikely (mprotect (elfmap, keep_area, PROT_READ | PROT_WRITE) != 0)) - error (EXIT_FAILURE, errno, _("mprotect failed")); + error_exit (errno, _("mprotect failed")); elfmap_base = elfmap + keep_area; } @@ -663,7 +662,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) if (mmap (remap_base, read_now, PROT_READ, MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, handled_to) == MAP_FAILED) - error (EXIT_FAILURE, errno, _("re-mmap failed")); + error_exit (errno, _("re-mmap failed")); elfmap_off = handled_to; process_chunk (fname, remap_base - to_keep, diff --git a/src/strip.c b/src/strip.c index 70fc8c03..30a1f9da 100644 --- a/src/strip.c +++ b/src/strip.c @@ -130,8 +130,8 @@ static void cleanup_debug (void); #define INTERNAL_ERROR(fname) \ do { \ cleanup_debug (); \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)); \ + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)); \ } while (0) @@ -243,14 +243,13 @@ main (int argc, char *argv[]) return EXIT_FAILURE; if (reloc_debug && debug_fname == NULL) - error (EXIT_FAILURE, 0, - _("--reloc-debug-sections used without -f")); + error_exit (0, _("--reloc-debug-sections used without -f")); if (reloc_debug_only && (debug_fname != NULL || remove_secs != NULL || remove_comment == true || remove_debug == true)) - error (EXIT_FAILURE, 0, - _("--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --remove-section")); + error_exit (0, + _("--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --remove-section")); /* Tell the library which version we are expecting. */ elf_version (EV_CURRENT); @@ -264,8 +263,7 @@ main (int argc, char *argv[]) input file. */ if ((output_fname != NULL || debug_fname != NULL) && remaining + 1 < argc) - error (EXIT_FAILURE, 0, _("\ -Only one input file allowed together with '-o' and '-f'")); + error_exit (0, _("Only one input file allowed together with '-o' and '-f'")); /* Process all the remaining files. */ do @@ -478,7 +476,7 @@ relocate (Elf *elf, GElf_Addr offset, const GElf_Sxword addend, || tdata->d_size - offset < size) { cleanup_debug (); - error (EXIT_FAILURE, 0, _("bad relocation")); + error_exit (0, _("bad relocation")); } /* When the symbol value is zero then for SHT_REL @@ -705,17 +703,21 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, relocate_failed: if (relidx != next) { + int updated; if (is_rela) - gelf_update_rela (reldata, next, rel_p); + updated = gelf_update_rela (reldata, next, rel_p); else - gelf_update_rel (reldata, next, rel_p); + updated = gelf_update_rel (reldata, next, rel_p); + if (updated == 0) + INTERNAL_ERROR (fname); } ++next; } nrels = next; shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize; - gelf_update_shdr (scn, shdr); + if (gelf_update_shdr (scn, shdr) == 0) + INTERNAL_ERROR (fname); if (is_gnu_compressed) { @@ -952,7 +954,8 @@ update_section_size (Elf_Scn *scn, GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); shdr->sh_size = newdata->d_size; - (void) gelf_update_shdr (scn, shdr); + if (gelf_update_shdr (scn, shdr) == 0) + INTERNAL_ERROR (fname); if (debugelf != NULL) { /* libelf will use d_size to set sh_size. */ @@ -1057,7 +1060,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, the debug file if the file would not contain any information. */ size_t debug_fname_len = strlen (debug_fname); - tmp_debug_fname = (char *) xmalloc (debug_fname_len + sizeof (".XXXXXX")); + tmp_debug_fname = xmalloc (debug_fname_len + sizeof (".XXXXXX")); strcpy (mempcpy (tmp_debug_fname, debug_fname, debug_fname_len), ".XXXXXX"); @@ -1080,8 +1083,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); } /* Get the number of phdrs in the old file. */ @@ -1089,7 +1091,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (elf_getphdrnum (elf, &phnum) != 0) { cleanup_debug (); - error (EXIT_FAILURE, 0, _("cannot get number of phdrs")); + error_exit (0, _("cannot get number of phdrs")); } /* We now create a new ELF descriptor for the same file. We @@ -1191,8 +1193,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, table. Maybe some weird tool created an ELF file without one. The other one is used for the debug link section. */ if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC) - shdr_info = (struct shdr_info *) xcalloc (shnum + 2, - sizeof (struct shdr_info)); + shdr_info = xcalloc (shnum + 2, sizeof (struct shdr_info)); else { shdr_info = (struct shdr_info *) alloca ((shnum + 2) @@ -1620,9 +1621,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (scn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while generating output file: %s"), - elf_errmsg (-1)); + error_exit (0, _("while generating output file: %s"), + elf_errmsg (-1)); } bool discard_section = (shdr_info[cnt].idx > 0 @@ -1719,8 +1719,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shst == NULL) { cleanup_debug (); - error (EXIT_FAILURE, errno, _("while preparing output for '%s'"), - output_fname ?: fname); + error_exit (errno, _("while preparing output for '%s'"), + output_fname ?: fname); } /* Assign new section numbers. */ @@ -1735,8 +1735,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].newscn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while generating output file: %s"), + error_exit (0, + _("while generating output file: %s"), elf_errmsg (-1)); } @@ -1780,9 +1780,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].newscn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while create section header section: %s"), - elf_errmsg (-1)); + error_exit (0, _("while create section header section: %s"), + elf_errmsg (-1)); } elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); @@ -1790,8 +1789,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].data == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, _("cannot allocate section data: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot allocate section data: %s"), + elf_errmsg (-1)); } char *debug_basename = basename (debug_fname_embed ?: debug_fname); @@ -1843,9 +1842,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].newscn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while create section header section: %s"), - elf_errmsg (-1)); + error_exit (0, _("while create section header section: %s"), + elf_errmsg (-1)); } elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); @@ -1855,15 +1853,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shstrtab_data == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while create section header string table: %s"), - elf_errmsg (-1)); + error_exit (0, _("while create section header string table: %s"), + elf_errmsg (-1)); } if (dwelf_strtab_finalize (shst, shstrtab_data) == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("no memory to create section header string table")); + error_exit (0, _("no memory to create section header string table")); } /* We have to set the section size. */ @@ -1975,8 +1971,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, } shdr_info[cnt].newsymidx - = (Elf32_Word *) xcalloc (shdr_info[cnt].data->d_size - / elsize, sizeof (Elf32_Word)); + = xcalloc (shdr_info[cnt].data->d_size / elsize, + sizeof (Elf32_Word)); bool last_was_local = true; size_t destidx; @@ -2760,7 +2756,7 @@ cannot set access and modification date of '%s'"), fname); } if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } diff --git a/src/unstrip.c b/src/unstrip.c index e488e810..3472637a 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -225,7 +225,7 @@ parse_opt (int key, char *arg, struct argp_state *state) do \ { \ if (unlikely (!(call))) \ - error (EXIT_FAILURE, 0, msg, elf_errmsg (-1)); \ + error_exit (0, msg, elf_errmsg (-1)); \ } while (0) /* Copy INELF to newly-created OUTELF, exit via error for any problems. */ @@ -316,7 +316,7 @@ make_directories (const char *path) if (errno == ENOENT) make_directories (dir); else - error (EXIT_FAILURE, errno, _("cannot create directory '%s'"), dir); + error_exit (errno, _("cannot create directory '%s'"), dir); } free (dir); } @@ -440,7 +440,7 @@ adjust_reloc (GElf_Xword *info, if (ndx != STN_UNDEF) { if (ndx > map_size) - error (EXIT_FAILURE, 0, "bad symbol ndx section"); + error_exit (0, "bad symbol ndx section"); *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info)); } } @@ -456,12 +456,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { case SHT_REL: if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "REL section cannot have zero sh_entsize"); + error_exit (0, "REL section cannot have zero sh_entsize"); for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i) { GElf_Rel rel_mem; GElf_Rel *rel = gelf_getrel (data, i, &rel_mem); + ELF_CHECK (rel != NULL, _("gelf_getrel failed: %s")); adjust_reloc (&rel->r_info, map, map_size); ELF_CHECK (gelf_update_rel (data, i, rel), _("cannot update relocation: %s")); @@ -470,12 +471,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, case SHT_RELA: if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "RELA section cannot have zero sh_entsize"); + error_exit (0, "RELA section cannot have zero sh_entsize"); for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i) { GElf_Rela rela_mem; GElf_Rela *rela = gelf_getrela (data, i, &rela_mem); + ELF_CHECK (rela != NULL, _("gelf_getrela failed: %s")); adjust_reloc (&rela->r_info, map, map_size); ELF_CHECK (gelf_update_rela (data, i, rela), _("cannot update relocation: %s")); @@ -499,13 +501,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, /* We must expand the table and rejigger its contents. */ { if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "HASH section cannot have zero sh_entsize"); + error_exit (0, "HASH section cannot have zero sh_entsize"); if (symshdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "Symbol table cannot have zero sh_entsize"); + error_exit (0, "Symbol table cannot have zero sh_entsize"); const size_t nsym = symshdr->sh_size / symshdr->sh_entsize; const size_t onent = shdr->sh_size / shdr->sh_entsize; if (data->d_size != shdr->sh_size) - error (EXIT_FAILURE, 0, "HASH section has inconsistent size"); + error_exit (0, "HASH section has inconsistent size"); #define CONVERT_HASH(Hash_Word) \ { \ @@ -515,7 +517,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, const Hash_Word *const old_bucket = &old_hash[2]; \ const Hash_Word *const old_chain = &old_bucket[nbucket]; \ if (onent != 2 + nbucket + nchain) \ - error (EXIT_FAILURE, 0, "HASH section has inconsistent entsize"); \ + error_exit (0, "HASH section has inconsistent entsize"); \ \ const size_t nent = 2 + nbucket + nsym; \ Hash_Word *const new_hash = xcalloc (nent, sizeof new_hash[0]); \ @@ -560,10 +562,9 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, /* We must expand the table and move its elements around. */ { if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, - "GNU_versym section cannot have zero sh_entsize"); + error_exit (0, "GNU_versym section cannot have zero sh_entsize"); if (symshdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "Symbol table cannot have zero sh_entsize"); + error_exit (0, "Symbol table cannot have zero sh_entsize"); const size_t nent = symshdr->sh_size / symshdr->sh_entsize; const size_t onent = shdr->sh_size / shdr->sh_entsize; assert (nent >= onent); @@ -589,9 +590,9 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, break; default: - error (EXIT_FAILURE, 0, - _("unexpected section type in [%zu] with sh_link to symtab"), - elf_ndxscn (inscn)); + error_exit (0, + _("unexpected section type in [%zu] with sh_link to symtab"), + elf_ndxscn (inscn)); } } @@ -630,7 +631,7 @@ add_new_section_symbols (Elf_Scn *old_symscn, size_t old_shnum, GElf_Shdr *shdr = gelf_getshdr (symscn, &shdr_mem); ELF_CHECK (shdr != NULL, _("cannot get section header: %s")); if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "Symbol table section cannot have zero sh_entsize"); + error_exit (0, "Symbol table section cannot have zero sh_entsize"); const size_t nsym = shdr->sh_size / shdr->sh_entsize; size_t symndx_map[nsym - 1]; @@ -863,8 +864,8 @@ collect_symbols (Elf *outelf, bool rel, Elf_Scn *symscn, Elf_Scn *strscn, if (sym->st_name >= strdata->d_size || memrchr (strdata->d_buf + sym->st_name, '\0', strdata->d_size - sym->st_name) == NULL) - error (EXIT_FAILURE, 0, - _("invalid string offset in symbol [%zu]"), i); + error_exit (0, + _("invalid string offset in symbol [%zu]"), i); struct symbol *s = &table[i - 1]; s->map = &map[i - 1]; @@ -946,13 +947,13 @@ compare_symbols_output (const void *a, const void *b) /* binutils always puts section symbols in section index order. */ CMP (shndx); else if (s1 != s2) - error (EXIT_FAILURE, 0, "section symbols in unexpected order"); + error_exit (0, "section symbols in unexpected order"); } /* Nothing really matters, so preserve the original order. */ CMP (map); else if (s1 != s2) - error (EXIT_FAILURE, 0, "found two identical symbols"); + error_exit (0, "found two identical symbols"); } return cmp; @@ -1022,8 +1023,8 @@ static inline const char * get_section_name (size_t ndx, const GElf_Shdr *shdr, const Elf_Data *shstrtab) { if (shdr->sh_name >= shstrtab->d_size) - error (EXIT_FAILURE, 0, _("cannot read section [%zu] name: %s"), - ndx, elf_errmsg (-1)); + error_exit (0, _("cannot read section [%zu] name: %s"), + ndx, elf_errmsg (-1)); return shstrtab->d_buf + shdr->sh_name; } @@ -1037,30 +1038,30 @@ get_group_sig (Elf *elf, GElf_Shdr *shdr) Elf_Scn *symscn = elf_getscn (elf, shdr->sh_link); if (symscn == NULL) - error (EXIT_FAILURE, 0, _("bad sh_link for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("bad sh_link for group section: %s"), + elf_errmsg (-1)); GElf_Shdr symshdr_mem; GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem); if (symshdr == NULL) - error (EXIT_FAILURE, 0, _("couldn't get shdr for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("couldn't get shdr for group section: %s"), + elf_errmsg (-1)); Elf_Data *symdata = elf_getdata (symscn, NULL); if (symdata == NULL) - error (EXIT_FAILURE, 0, _("bad data for group symbol section: %s"), - elf_errmsg (-1)); + error_exit (0, _("bad data for group symbol section: %s"), + elf_errmsg (-1)); GElf_Sym sym_mem; GElf_Sym *sym = gelf_getsym (symdata, shdr->sh_info, &sym_mem); if (sym == NULL) - error (EXIT_FAILURE, 0, _("couldn't get symbol for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("couldn't get symbol for group section: %s"), + elf_errmsg (-1)); const char *sig = elf_strptr (elf, symshdr->sh_link, sym->st_name); if (sig == NULL) - error (EXIT_FAILURE, 0, _("bad symbol name for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("bad symbol name for group section: %s"), + elf_errmsg (-1)); return sig; } @@ -1152,8 +1153,8 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, bool class32 = ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32; size_t shsize = class32 ? sizeof (Elf32_Shdr) : sizeof (Elf64_Shdr); if (unlikely (shnum == 0 || shnum > SIZE_MAX / shsize + 1)) - error (EXIT_FAILURE, 0, _("overflow with shnum = %zu in '%s' section"), - (size_t) shnum, ".gnu.prelink_undo"); + error_exit (0, _("overflow with shnum = %zu in '%s' section"), + (size_t) shnum, ".gnu.prelink_undo"); --shnum; @@ -1163,8 +1164,8 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, src.d_type = ELF_T_SHDR; if ((size_t) (src.d_buf - undodata->d_buf) > undodata->d_size || undodata->d_size - (src.d_buf - undodata->d_buf) != src.d_size) - error (EXIT_FAILURE, 0, _("invalid contents in '%s' section"), - ".gnu.prelink_undo"); + error_exit (0, _("invalid contents in '%s' section"), + ".gnu.prelink_undo"); const size_t shdr_bytes = shnum * shsize; void *shdr = xmalloc (shdr_bytes); @@ -1361,7 +1362,7 @@ new_shstrtab (Elf *unstripped, size_t unstripped_shnum, ELF_CHECK (elf_flagdata (strtab_data, ELF_C_SET, ELF_F_DIRTY), _("cannot update section header string table data: %s")); if (dwelf_strtab_finalize (strtab, strtab_data) == NULL) - error (EXIT_FAILURE, 0, "Not enough memory to create string table"); + error_exit (0, "Not enough memory to create string table"); /* Update the sh_name fields of sections we aren't modifying later. */ for (size_t i = 0; i < unstripped_shnum - 1; ++i) @@ -1403,11 +1404,11 @@ copy_elided_sections (Elf *unstripped, Elf *stripped, _("cannot get section count: %s")); if (unlikely (stripped_shnum > unstripped_shnum)) - error (EXIT_FAILURE, 0, _("\ + error_exit (0, _("\ more sections in stripped file than debug file -- arguments reversed?")); if (unlikely (stripped_shnum == 0)) - error (EXIT_FAILURE, 0, _("no sections in stripped file")); + error_exit (0, _("no sections in stripped file")); /* Used as sanity check for allocated section offset, if the section offset needs to be preserved. We want to know the max size of the @@ -1430,8 +1431,8 @@ more sections in stripped file than debug file -- arguments reversed?")); sections[i].name = elf_strptr (stripped, stripped_shstrndx, shdr->sh_name); if (sections[i].name == NULL) - error (EXIT_FAILURE, 0, _("cannot read section [%zu] name: %s"), - elf_ndxscn (scn), elf_errmsg (-1)); + error_exit (0, _("cannot read section [%zu] name: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); sections[i].scn = scn; sections[i].outscn = NULL; sections[i].strent = NULL; @@ -1550,9 +1551,8 @@ more sections in stripped file than debug file -- arguments reversed?")); } if (sec == NULL) - error (EXIT_FAILURE, 0, - _("cannot find matching section for [%zu] '%s'"), - elf_ndxscn (scn), name); + error_exit (0, _("cannot find matching section for [%zu] '%s'"), + elf_ndxscn (scn), name); sec->outscn = scn; } @@ -1687,17 +1687,17 @@ more sections in stripped file than debug file -- arguments reversed?")); if (sec->shdr.sh_link != SHN_UNDEF) { if (sec->shdr.sh_link > ndx_sec_num) - error (EXIT_FAILURE, 0, - "section [%zd] has invalid sh_link %" PRId32, - elf_ndxscn (sec->scn), sec->shdr.sh_link); + error_exit (0, + "section [%zd] has invalid sh_link %" PRId32, + elf_ndxscn (sec->scn), sec->shdr.sh_link); shdr_mem.sh_link = ndx_section[sec->shdr.sh_link - 1]; } if (SH_INFO_LINK_P (&sec->shdr) && sec->shdr.sh_info != 0) { if (sec->shdr.sh_info > ndx_sec_num) - error (EXIT_FAILURE, 0, - "section [%zd] has invalid sh_info %" PRId32, - elf_ndxscn (sec->scn), sec->shdr.sh_info); + error_exit (0, + "section [%zd] has invalid sh_info %" PRId32, + elf_ndxscn (sec->scn), sec->shdr.sh_info); shdr_mem.sh_info = ndx_section[sec->shdr.sh_info - 1]; } @@ -1715,9 +1715,9 @@ more sections in stripped file than debug file -- arguments reversed?")); if (stripped_ehdr->e_type != ET_REL && (shdr_mem.sh_flags & SHF_ALLOC)) { if (max_off > 0 && sec->shdr.sh_offset > (Elf64_Off) max_off) - error (EXIT_FAILURE, 0, - "allocated section offset too large [%zd] %" PRIx64, - elf_ndxscn (sec->scn), sec->shdr.sh_offset); + error_exit (0, + "allocated section offset too large [%zd] %" PRIx64, + elf_ndxscn (sec->scn), sec->shdr.sh_offset); shdr_mem.sh_offset = sec->shdr.sh_offset; placed[elf_ndxscn (sec->outscn) - 1] = true; @@ -1738,8 +1738,8 @@ more sections in stripped file than debug file -- arguments reversed?")); Elf_Data *shndxdata = NULL; /* XXX */ if (shdr_mem.sh_entsize == 0) - error (EXIT_FAILURE, 0, - "SYMTAB section cannot have zero sh_entsize"); + error_exit (0, + "SYMTAB section cannot have zero sh_entsize"); for (size_t i = 1; i < shdr_mem.sh_size / shdr_mem.sh_entsize; ++i) { GElf_Sym sym_mem; @@ -1754,8 +1754,8 @@ more sections in stripped file than debug file -- arguments reversed?")); if (shndx != SHN_UNDEF && shndx < SHN_LORESERVE) { if (shndx >= stripped_shnum) - error (EXIT_FAILURE, 0, - _("symbol [%zu] has invalid section index"), i); + error_exit (0, + _("symbol [%zu] has invalid section index"), i); shndx = ndx_section[shndx - 1]; if (shndx < SHN_LORESERVE) @@ -1786,8 +1786,8 @@ more sections in stripped file than debug file -- arguments reversed?")); Elf32_Word *shndx = (Elf32_Word *) outdata->d_buf; for (size_t i = 1; i < shdr_mem.sh_size / sizeof (Elf32_Word); ++i) if (shndx[i] == SHN_UNDEF || shndx[i] >= stripped_shnum) - error (EXIT_FAILURE, 0, - _("group has invalid section index [%zd]"), i); + error_exit (0, + _("group has invalid section index [%zd]"), i); else shndx[i] = ndx_section[shndx[i] - 1]; } @@ -1813,8 +1813,8 @@ more sections in stripped file than debug file -- arguments reversed?")); GElf_Shdr *shdr = gelf_getshdr (unstripped_symtab, &shdr_mem); ELF_CHECK (shdr != NULL, _("cannot get section header: %s")); if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, - "unstripped SYMTAB section cannot have zero sh_entsize"); + error_exit (0, + "unstripped SYMTAB section cannot have zero sh_entsize"); const size_t unstripped_nsym = shdr->sh_size / shdr->sh_entsize; /* First collect all the symbols from both tables. */ @@ -1934,7 +1934,7 @@ more sections in stripped file than debug file -- arguments reversed?")); } if (dwelf_strtab_finalize (symstrtab, symstrdata) == NULL) - error (EXIT_FAILURE, 0, "Not enough memory to create symbol table"); + error_exit (0, "Not enough memory to create symbol table"); elf_flagdata (symstrdata, ELF_C_SET, ELF_F_DIRTY); @@ -2192,7 +2192,7 @@ DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"), (stripped_ehdr->e_type == ET_REL ? DEFFILEMODE : ACCESSPERMS)); if (outfd < 0) - error (EXIT_FAILURE, errno, _("cannot open '%s'"), output_file); + error_exit (errno, _("cannot open '%s'"), output_file); Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL); ELF_CHECK (outelf != NULL, _("cannot create ELF descriptor: %s")); @@ -2221,7 +2221,7 @@ open_file (const char *file, bool writable) { int fd = open (file, writable ? O_RDWR : O_RDONLY); if (fd < 0) - error (EXIT_FAILURE, errno, _("cannot open '%s'"), file); + error_exit (errno, _("cannot open '%s'"), file); return fd; } @@ -2304,13 +2304,13 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, &file, NULL); if (file == NULL) - error (EXIT_FAILURE, 0, - _("cannot find stripped file for module '%s': %s"), - modname, dwfl_errmsg (-1)); + error_exit (0, + _("cannot find stripped file for module '%s': %s"), + modname, dwfl_errmsg (-1)); else - error (EXIT_FAILURE, 0, - _("cannot open stripped file '%s' for module '%s': %s"), - modname, file, dwfl_errmsg (-1)); + error_exit (0, + _("cannot open stripped file '%s' for module '%s': %s"), + modname, file, dwfl_errmsg (-1)); } Elf *debug = dwarf_getelf (dwfl_module_getdwarf (mod, &bias)); @@ -2323,13 +2323,13 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, &file); if (file == NULL) - error (EXIT_FAILURE, 0, - _("cannot find debug file for module '%s': %s"), - modname, dwfl_errmsg (-1)); + error_exit (0, + _("cannot find debug file for module '%s': %s"), + modname, dwfl_errmsg (-1)); else - error (EXIT_FAILURE, 0, - _("cannot open debug file '%s' for module '%s': %s"), - modname, file, dwfl_errmsg (-1)); + error_exit (0, + _("cannot open debug file '%s' for module '%s': %s"), + modname, file, dwfl_errmsg (-1)); } if (debug == stripped) @@ -2341,8 +2341,8 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, const char *file; const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, &file, NULL); - error (EXIT_FAILURE, 0, _("module '%s' file '%s' is not stripped"), - modname, file); + error_exit (0, _("module '%s' file '%s' is not stripped"), + modname, file); } } @@ -2371,10 +2371,10 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, get sh_addr values assigned have them, even ones not used in DWARF. They might still be used in the symbol table. */ if (dwfl_module_relocations (mod) < 0) - error (EXIT_FAILURE, 0, - _("cannot cache section addresses for module '%s': %s"), - dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - dwfl_errmsg (-1)); + error_exit (0, + _("cannot cache section addresses for module '%s': %s"), + dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + dwfl_errmsg (-1)); } handle_file (output_file, create_dirs, stripped, &stripped_ehdr, debug); @@ -2399,9 +2399,7 @@ handle_output_dir_module (const char *output_dir, Dwfl_Module *mod, bool force, if (file == NULL && ignore) return; - char *output_file; - if (asprintf (&output_file, "%s/%s", output_dir, modnames ? name : file) < 0) - error (EXIT_FAILURE, 0, _("memory exhausted")); + char *output_file = xasprintf ("%s/%s", output_dir, modnames ? name : file); handle_dwfl_module (output_file, true, force, mod, all, ignore, relocate); @@ -2502,7 +2500,7 @@ handle_implicit_modules (const struct arg_info *info) struct match_module_info mmi = { info->args, NULL, info->match_files }; ptrdiff_t offset = dwfl_getmodules (info->dwfl, &match_module, &mmi, 0); if (offset == 0) - error (EXIT_FAILURE, 0, _("no matching modules found")); + error_exit (0, _("no matching modules found")); if (info->list) do @@ -2512,7 +2510,7 @@ handle_implicit_modules (const struct arg_info *info) else if (info->output_dir == NULL) { if (dwfl_getmodules (info->dwfl, &match_module, &mmi, offset) != 0) - error (EXIT_FAILURE, 0, _("matched more than one module")); + error_exit (0, _("matched more than one module")); handle_dwfl_module (info->output_file, false, info->force, mmi.found, info->all, info->ignore, info->relocate); } @@ -2604,9 +2602,7 @@ or - if no debuginfo was found, or . if FILE contains the debug information.\ if (info.output_dir != NULL) { - char *file; - if (asprintf (&file, "%s/%s", info.output_dir, info.args[0]) < 0) - error (EXIT_FAILURE, 0, _("memory exhausted")); + char *file = xasprintf ("%s/%s", info.output_dir, info.args[0]); handle_explicit_files (file, true, info.force, info.args[0], info.args[1]); free (file); diff --git a/tests/.gitignore b/tests/.gitignore index d0e83da2..99d04819 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -85,6 +85,7 @@ /next-files /next-lines /next_cfi +/nvidia_extended_linemap_libdw /peel_type /rdwrmmap /read_unaligned diff --git a/tests/ChangeLog b/tests/ChangeLog index 38e92659..44b8df88 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,379 @@ +2022-04-24 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-webapi-concurrency.sh: Fix PR number in xfail. + +2022-04-23 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-webapi-concurrency.sh: Lower parallel lookups. + +2022-03-01 Di Chen <dichen@redhat.com> + + * alldts.c (dtflags): Put DT_NULL last. + * run-alldts.sh: NULL comes last. + * run-readelf-d.sh: Adjust Dynamic entries, remove DT_NULL + padding. + +2022-04-14 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-federation-sqlite.sh: Don't try to corrupt + sqlite database. + +2022-04-13 Aaron Merey <amerey@redhat.com> + + * Makefile.am (TESTS): Remove run-debuginfod-000-permission.sh + and add run-debuginfod-negative-cache.sh. + (EXTRA_DIST): Likewise. + * run-debuginfod-federation-link.sh: Update comments about + negative-hit file. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + +2022-03-20 Mark Wielaard <mark@klomp.org> + + * run-large-elf-file.sh: Check elf class of addsections binary. + +2021-12-17 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-query-retry.sh: Use /bin/sh instead of /bin/ls. + +2021-12-09 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod-subr.sh (xfail): New proc. + * run-debuginfod-webapi-concurrency.sh: New test for -C. + * Makefile.am: List it. + +2021-12-04 Mark Wielaard <mark@klomp.org> + + * Makefile.am (EXTRA_NLIST_CFLAGS): New variable depends on + USE_ADDRESS_SANITIZER. + (test_nlist_CFLAGS): Add EXTRA_NLIST_CFLAGS. + +2021-12-04 Mark Wielaard <mark@klomp.org> + + * varlocs.c (dwarf_encoding_string): Return "<unknown encoding>" instead + of NULL. + (dwarf_tag_string): Return "<unknown tag>" instead of NULL. + (dwarf_attr_string): Return "<unknown attr>" instead of NULL. + (dwarf_form_string): Return "<unknown form>" instead of NULL. + (dwarf_opcode_string): Return "<unknown opcode>" instead of NULL. + (print_expr): Remove assert. + +2021-11-18 Mark Wielaard <mark@klomp.org> + + * Makefile.am (dwfl_proc_attach_LDFLAGS): Add -rdynamic. + +2021-11-11 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-000-permission.sh: Don't set DEBUGINFOD_TIMEOUT. + * run-debuginfod-archive-groom.sh: Likewise. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-archive-test.sh: Likewise. + * run-debuginfod-artifact-running.sh: Likewise. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-federation-link.sh: Likewise. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-malformed.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + * run-debuginfod-writable.sh: Likewise. + +2021-11-05 Frank Ch. Eigler <fche@redhat.com> + + PR28430 + * run-debuginfod-extraction-passive.sh: New test. + * Makefile.am (TESTS, EXTRA_DIST): Add it. + +2021-10-20 John M Mellor-Crummey <johnmc@rice.edu> + + * nvidia_extended_linemap_libdw.c: New file. + * run-nvidia-extended-linemap-libdw.sh: New test. + * run-nvidia-extended-linemap-readelf.sh: Likewise. + * testfile_nvidia_linemap.bz2: New test file. + * .gitignore: Add nvidia_extended_linemap_libdw. + * Makefile.am (check_PROGRAMS): Add nvidia_extended_linemap_libdw. + (TESTS): Add run-nvidia-extended-linemap-libdw.sh and + run-nvidia-extended-linemap-readelf.sh + (EXTRA_DIST): Likewise and testfile_nvidia_linemap.bz2. + (nvidia_extended_linemap_libdw_LDADD): New variable. + +2021-11-08 Mark Wielaard <mark@klomp.org> + + * Makefile.am (TESTS): Add run-readelf-fat-lto.sh. + (EXTRA_DIST): Add run-readelf-fat-lto.sh and + testfile-dwarf5-fat-lto.o.bz2. + * run-readelf-fat-lto.sh: New test. + * testfile-dwarf5-fat-lto.o.bz2: New test file. + +2021-11-04 Frank Ch. Eigler <fche@redhat.com> + + PR28514 + * run-debuginfod-archive-groom.sh: Look for new groom metric. + +2021-10-23 Frank Ch. Eigler <fche@redhat.com> + + PR28240 + * run-debuginfod-000-permission.sh, -writable.sh: + Correct negative-cache file permission checking. + +2021-10-06 Mark Wielaard <mark@klomp.org> + + * show-die-info.c (handle): Handle dwarf_attr_string returning NULL. + +2021-10-06 Di Chen <dichen@redhat.com> + + PR28242 + * run-debuginfod-000-permission.sh: Expect artifacttype metrics. + +2021-09-17 Noah Sanci <nsanci@redhat.com> + + * run-debuginfod-response-header.sh: removed checking for Connection + and Cache-Control in response headers. + +2021-09-08 Mark Wielaard <mark@klomp.org> + + * run-varlocs-vars.sh: New test. + * testfile-vars-clang-dwarf4-32.o.bz2: New test file. + * testfile-vars-clang-dwarf4-64.o.bz2: Likewise. + * testfile-vars-clang-dwarf5-32.o.bz2: Likewise. + * testfile-vars-clang-dwarf5-64.o.bz2: Likewise. + * testfile-vars-gcc-dwarf4-32.o.bz2: Likewise. + * testfile-vars-gcc-dwarf4-64.o.bz2: Likewise. + * testfile-vars-gcc-dwarf5-32.o.bz2: Likewise. + * testfile-vars-gcc-dwarf5-64.o.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add new test and test files. + (TESTS): Add run-varlocs-vars.sh. + +2021-09-09 Mark Wielaard <mark@klomp.org> + + * debuginfod-subr.sh: set -o functrace. + (cleanup): Disable trap 0. + (err): Disable trap ERR. + * run-debuginfod-fd-prefetch-caches.sh: Use || true when grep -c fails. + +2021-09-09 Mark Wielaard <mark@klomp.org> + + * debuginfod-subr.sh: set -o errtrace. + (cleanup): Don't fail kill or wait. Only trap on normal exit. + (err): Don't fail curl metrics. Call cleanup. + * run-debuginfod-federation-link.sh: Use separate client caches + for both servers and debuginfod client. Remove duplicate valgrind + disabling. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + +2021-09-13 Noah Sanci <nsanci@redhat.com> + + * Makefile.am: added run-debuginfod-percent-escape.sh to TESTS and + EXTRA_DIST. + +2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + + * elfcopy.c (copy_elf): Remove cast of malloc return value. + +2021-09-07 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-archive-groom.sh: Wait for initial scan and groom + cycle before making any changes to the scan dirs. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-artifact-running.sh: Wait for initial scan cycle + before making any changes to the scan dirs. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-federation-link.sh: Don't wait twice for the initial + scan. + +2021-09-06 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-archive-groom.sh: Wait for initial scan and groom + cycle. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-archive-test.sh: Wait for initial scan cycle. + * run-debuginfod-artifact-running.sh: Likewise. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-federation-link.sh: Likewise. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-malformed.sh: Likewise. + * run-debuginfod-regex.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + * run-debuginfod-writable.sh: Likewise. + +2021-09-06 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-archive-groom.sh: Set DEBUGINFOD_URLS after starting + debuginfod server. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-federation-link.sh: Don't set DEBUGINFOD_URLS. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-federation-metrics.sh: Add comment why invalid + DEBUGINFOD_URLS is set. + +2021-09-06 Mark Wielaard <mark@klomp.org> + + * debuginfod-subr.sh (err): Change ports to port in for loop so both + PORT1 and PORT2 are used. + (get_ports): Simplify port selection by using for 50 for PORT1 and + second 50 for PORT2. + +2021-09-06 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-file.sh: Set DEBUGINFOD_CACHE_PATH. Export + correct DEBUGINFOD_URLS. + * run-debuginfod-query-retry.sh: Add DEBUGINFOD_CACHE_PATH + to env. + +2021-09-03 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-000-permission.sh: Set DEBUGINFOD_CACHE_PATH + and use an unique sqlite db. + * run-debuginfod-archive-groom.sh: Likewise. + * run-debuginfod-archive-test.sh: Likewise. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-duplicate-urls.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-fd-prefetch-caches.sh: Likewise. + * run-debuginfod-malformed.sh: Likewise. + * run-debuginfod-sizetime.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + * run-debuginfod-writable.sh: Likewise. + +2021-09-03 Mark Wielaard <mark@klomp.org> + + * debuginfod-subr.sh (EXTRA_DIST): Add debuginfod-subr.sh. + +2021-08-20 Noah Sanci <nsanci@redhat.com> + + * run-debuginfod-response-headers.sh: Ensures custom http response + headers are used and functional + * Makefile.am: Added the above new file to TESTS and EXTRA_DIST + +2021-08-28 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-find.sh: Use ":memory:" for the + forwarded-ttl-limit tests. + +2021-08-28 Mark Wielaard <mark@klomp.org> + + * run-debuginfod-find.sh: Use clean, separate databases for + forwarded-ttl-limit tests. + +2021-08-20 Di Chen <dichen@redhat.com> + + * run-debuginfod-find.sh: Add test for X-Forwarded-For hops limit. + +2021-08-20 Noah Sanci <nsanci@redhat.com> + + * debuginfod-find.sh: Separated file into + run-debuginfod-000-permission.sh, + run-debuginfod-archive-groom.sh, + run-debuginfod-archive-rename.sh, + run-debuginfod-archive-test.sh, + run-debuginfod-artifact-running.sh, + run-debuginfod-dlopen.sh, + run-debuginfod-duplicate-urls.sh, + run-debuginfod-extraction.sh, + run-debuginfod-fd-prefetch-caches.sh, + run-debuginfod-federation-link.sh, + run-debuginfod-federation-metrics.sh, + run-debuginfod-federation-sqlite.sh, + run-debuginfod-file.sh, + run-debuginfod-malformed.sh, + run-debuginfod-no-urls.sh, + run-debuginfod-query-retry.sh, + run-debuginfod-regex.sh, + run-debuginfod-sizetime.sh, + run-debuginfod-tmp-home.sh, + run-debuginfod-x-forwarded.sh + and run-debuginfod-writable.sh. + All files source debuginfod-subr.sh and use the $base variable to find ports. + * tests/Makefile.am: Added the above new files to the test suite + * tests/debuginfod-subr.sh: Added some general functions for above tests + +2021-08-04 Mark Wielaard <mark@klomp.org> + + PR28190 + * backtrace.c (callback_verify): Check for pthread_kill as first + frame. Change asserts to fprintf plus abort. + +2021-07-26 Noah Sanci <nsanci@redhat.com> + + PR27982 + * run-debuginfod-find.sh: Added a test to ensure that + DEBUGINFOD_MAXSIZE and DEBUGINFOD_MAXTIME work properly + by searching server and client logs for prompts. + +2021-07-16 Noah Sanci <nsanci@redhat.com> + + PR28034 + * run-debuginfod-percent-escape.sh: Added a test ensuring files with % + escapable characters in their paths are accessible. + +2021-07-21 Noah Sanci <nsanci@redhat.com> + + * run-debuginfod-find.sh: Properly kill $PID4 by waiting for it to + finish. Report $PORT3's metrics in err(). + +2021-06-28 Noah Sanci <nsanci@redhat.com> + + PR25978 + * run-debuginfod-find.sh: Test to ensure options + fdcache-prefetch-fds/mbs are set. Check that inc_metric works for lru + and prefetch cache metrics. + +2021-07-06 Alice Zhang <alizhang@redhat.com> + + PR27531 + * run-debuginfod-find.sh: Add test case for retry mechanism. + +2021-07-01 Noah Sanci <nsanci@redhat.com> + + PR2711 + * run-debuginfod-find.sh: Added test case for grooming the database + using regexes. + +2021-07-09 Noah Sanci <nsanci@redhat.com> + + PR27983 + * run-debuginfod-find.sh: Wrote test to ensure duplicate urls are in + fact not checked. + +2021-07-08 Mark Wielaard <mark@klomp.org> + + * Makefile.am (EXTRA_DIST): Fix typo testfile-largealign.bz2 was + was missing .o. + +2021-06-09 Andrei Homescu <ah@immunant.com> + + * testfile-largealign.o.bz2: New test file. + * run-strip-largealign.sh: New test. + * Makefile.am (TESTS): Add run-strip-largealign.sh. + (EXTRA_DIST): Add run-strip-largealign.sh and + testfile-largealign.o.bz2 + +2021-07-02 Mark Wielaard <mark@klomp.org> + + * run-debuginfo-find.sh: unset VALGRIND_CMD before testing debuginfod + client cache. + +2021-06-16 Frank Ch. Eigler <fche@redhat.com> + + * run-debuginfod-find.sh: Fix intermittent groom/stale failure, + due to SIGUSR1/SIGUSR2 races. Trace more. + +2021-06-15 Frank Ch. Eigler <fche@redhat.com> + + * run-debuginfod-find.sh (err): Elaborate. Use as the reliable + error-report triggering function, rather than "exit 1". + +2021-06-03 Frank Ch. Eigler <fche@redhat.com> + + PR27863 + * run-debuginfod-find.sh: Test "after-you" queueing via flooding + with concurent curls. + 2021-05-14 Frank Ch. Eigler <fche@redhat.com> PR27859 diff --git a/tests/Makefile.am b/tests/Makefile.am index 6f19007a..75fbe799 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -61,6 +61,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ dwelf_elf_e_machine_string \ getphdrnum leb128 read_unaligned \ msg_tst system-elf-libelf-test \ + nvidia_extended_linemap_libdw \ $(asm_TESTS) asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ @@ -86,7 +87,13 @@ endif # test_nlist checks its own symbol table, and expects various symbols # to be in the order as specified in the source file. Explicitly set -# minimal CFLAGS +# minimal CFLAGS. But add address sanitizer if in use. +if USE_ADDRESS_SANITIZER +EXTRA_NLIST_CFLAGS=-fsanitize=address +else +EXTRA_NLIST_CFLAGS= +endif + test-nlist$(EXEEXT): test-nlist.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) \ @@ -138,11 +145,11 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-low_high_pc.sh run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \ run-test-archive64.sh run-readelf-vmcoreinfo.sh \ run-readelf-mixed-corenote.sh run-dwfllines.sh \ - run-readelf-variant.sh \ + run-readelf-variant.sh run-readelf-fat-lto.sh \ run-dwfl-report-elf-align.sh run-addr2line-test.sh \ run-addr2line-i-test.sh run-addr2line-i-lex-test.sh \ run-addr2line-i-demangle-test.sh run-addr2line-alt-debugpath.sh \ - run-varlocs.sh run-exprlocs.sh run-funcretval.sh \ + run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh run-funcretval.sh \ run-backtrace-native.sh run-backtrace-data.sh run-backtrace-dwarf.sh \ run-backtrace-native-biarch.sh run-backtrace-native-core.sh \ run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \ @@ -157,6 +164,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-backtrace-demangle.sh run-stack-d-test.sh run-stack-i-test.sh \ run-stack-demangled-test.sh run-readelf-zx.sh run-readelf-zp.sh \ run-readelf-addr.sh run-readelf-str.sh \ + run-readelf-multi-noline.sh \ run-readelf-types.sh \ run-readelf-dwz-multi.sh run-allfcts-multi.sh run-deleted.sh \ run-linkmap-cut.sh run-aggregate-size.sh run-peel-type.sh \ @@ -186,7 +194,8 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ leb128 read_unaligned \ msg_tst system-elf-libelf-test \ $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ - run-readelf-dw-form-indirect.sh + run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ + run-readelf-dw-form-indirect.sh run-strip-largealign.sh if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 @@ -208,7 +217,31 @@ if DEBUGINFOD check_PROGRAMS += debuginfod_build_id_find # With the dummy delegation doesn't work if !DUMMY_LIBDEBUGINFOD -TESTS += run-debuginfod-find.sh +TESTS += run-debuginfod-dlopen.sh \ + run-debuginfod-artifact-running.sh \ + run-debuginfod-fd-prefetch-caches.sh \ + run-debuginfod-regex.sh \ + run-debuginfod-duplicate-urls.sh \ + run-debuginfod-file.sh \ + run-debuginfod-sizetime.sh \ + run-debuginfod-malformed.sh \ + run-debuginfod-negative-cache.sh \ + run-debuginfod-tmp-home.sh \ + run-debuginfod-writable.sh \ + run-debuginfod-no-urls.sh \ + run-debuginfod-query-retry.sh \ + run-debuginfod-extraction.sh \ + run-debuginfod-archive-groom.sh \ + run-debuginfod-archive-rename.sh \ + run-debuginfod-archive-test.sh \ + run-debuginfod-federation-sqlite.sh \ + run-debuginfod-federation-link.sh \ + run-debuginfod-federation-metrics.sh \ + run-debuginfod-percent-escape.sh \ + run-debuginfod-x-forwarded-for.sh \ + run-debuginfod-response-headers.sh \ + run-debuginfod-extraction-passive.sh \ + run-debuginfod-webapi-concurrency.sh endif endif @@ -277,7 +310,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile21.bz2 testfile21.index.bz2 \ testfile22.bz2 testfile23.bz2 testfile24.bz2 testfile25.bz2 \ testfile26.bz2 testfile27.bz2 \ - coverage.sh test-subr.sh test-wrapper.sh \ + coverage.sh test-subr.sh test-wrapper.sh debuginfod-subr.sh \ run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ run-readelf-test4.sh run-readelf-twofiles.sh \ run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \ @@ -309,6 +342,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \ run-readelf-addr.sh run-readelf-str.sh \ + run-readelf-multi-noline.sh testfile_multi_noline.bz2 \ run-readelf-types.sh \ run-readelf-frames.sh \ run-readelf-n.sh \ @@ -353,6 +387,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfilebazminppc64.bz2 testfilebazminppc64_pl.bz2 \ testfilebazminppc64_plr.bz2 testfilebaztabppc64.bz2 \ run-readelf-variant.sh testfile-ada-variant.bz2 \ + run-readelf-fat-lto.sh testfile-dwarf5-fat-lto.o.bz2 \ run-dwflsyms.sh \ run-unstrip-n.sh testcore-rtlib.bz2 testcore-rtlib-ppc.bz2 \ run-low_high_pc.sh testfile_low_high_pc.bz2 \ @@ -375,7 +410,16 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfileppc32.bz2 testfileppc64.bz2 \ testfiles390.bz2 testfiles390x.bz2 \ testfilearm.bz2 testfileaarch64.bz2 \ - run-varlocs.sh run-exprlocs.sh testfile-stridex.bz2 \ + run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh \ + testfile-vars-clang-dwarf4-32.o.bz2 \ + testfile-vars-clang-dwarf4-64.o.bz2 \ + testfile-vars-clang-dwarf5-32.o.bz2 \ + testfile-vars-clang-dwarf5-64.o.bz2 \ + testfile-vars-gcc-dwarf4-32.o.bz2 \ + testfile-vars-gcc-dwarf4-64.o.bz2 \ + testfile-vars-gcc-dwarf5-32.o.bz2 \ + testfile-vars-gcc-dwarf5-64.o.bz2 \ + testfile-stridex.bz2 \ testfile_const_type.c testfile_const_type.bz2 \ testfile_implicit_pointer.c testfile_implicit_pointer.bz2 \ testfile_parameter_ref.c testfile_parameter_ref.bz2 \ @@ -470,7 +514,31 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-elfclassify.sh run-elfclassify-self.sh \ run-disasm-riscv64.sh \ testfile-riscv64-dis1.o.bz2 testfile-riscv64-dis1.expect.bz2 \ - run-debuginfod-find.sh \ + run-debuginfod-extraction.sh \ + run-debuginfod-federation-link.sh \ + run-debuginfod-federation-metrics.sh \ + run-debuginfod-artifact-running.sh \ + run-debuginfod-federation-sqlite.sh \ + run-debuginfod-x-forwarded-for.sh \ + run-debuginfod-fd-prefetch-caches.sh \ + run-debuginfod-regex.sh \ + run-debuginfod-duplicate-urls.sh \ + run-debuginfod-file.sh \ + run-debuginfod-sizetime.sh \ + run-debuginfod-dlopen.sh \ + run-debuginfod-malformed.sh \ + run-debuginfod-negative-cache.sh \ + run-debuginfod-tmp-home.sh \ + run-debuginfod-writable.sh \ + run-debuginfod-no-urls.sh \ + run-debuginfod-query-retry.sh \ + run-debuginfod-archive-groom.sh \ + run-debuginfod-archive-rename.sh \ + run-debuginfod-archive-test.sh \ + run-debuginfod-percent-escape.sh \ + run-debuginfod-response-headers.sh \ + run-debuginfod-extraction-passive.sh \ + run-debuginfod-webapi-concurrency.sh \ debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \ debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \ @@ -507,7 +575,10 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \ run-getphdrnum.sh testfile-phdrs.elf.bz2 \ run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ - run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 + run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ + run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ + testfile_nvidia_linemap.bz2 \ + testfile-largealign.o.bz2 run-strip-largealign.sh if USE_VALGRIND @@ -570,7 +641,7 @@ scnnames_LDADD = $(libelf) sectiondump_LDADD = $(libelf) showptable_LDADD = $(libelf) hash_LDADD = $(libelf) -test_nlist_CFLAGS =-g -O0 +test_nlist_CFLAGS =-g -O0 $(EXTRA_NLIST_CFLAGS) test_nlist_LDADD = $(libelf) msg_tst_LDADD = $(libelf) newscn_LDADD = $(libelf) @@ -653,7 +724,7 @@ strptr_LDADD = $(libelf) newdata_LDADD = $(libelf) elfstrtab_LDADD = $(libelf) dwfl_proc_attach_LDADD = $(libdw) -dwfl_proc_attach_LDFLAGS = -pthread $(AM_LDFLAGS) +dwfl_proc_attach_LDFLAGS = -pthread -rdynamic $(AM_LDFLAGS) elfshphehdr_LDADD =$(libelf) elfstrmerge_LDADD = $(libdw) $(libelf) dwelfgnucompressed_LDADD = $(libelf) $(libdw) @@ -681,6 +752,7 @@ dwelf_elf_e_machine_string_LDADD = $(libelf) $(libdw) getphdrnum_LDADD = $(libelf) $(libdw) leb128_LDADD = $(libelf) $(libdw) read_unaligned_LDADD = $(libelf) $(libdw) +nvidia_extended_linemap_libdw_LDADD = $(libelf) $(libdw) # We want to test the libelf header against the system elf.h header. # Don't include any -I CPPFLAGS. Except when we install our own elf.h. diff --git a/tests/alldts.c b/tests/alldts.c index 3e9f9fe6..d0fe4f24 100644 --- a/tests/alldts.c +++ b/tests/alldts.c @@ -44,7 +44,7 @@ main (void) Dwelf_Strent *shstrtabse; const Elf32_Sword dtflags[] = { - DT_NULL, DT_NEEDED, DT_PLTRELSZ, DT_PLTGOT, + DT_NEEDED, DT_PLTRELSZ, DT_PLTGOT, DT_HASH, DT_STRTAB, DT_SYMTAB, DT_RELA, DT_RELASZ, DT_RELAENT, DT_STRSZ, DT_SYMENT, DT_INIT, DT_FINI, DT_SONAME, DT_RPATH, @@ -61,7 +61,8 @@ main (void) DT_GNU_LIBLIST, DT_CONFIG, DT_DEPAUDIT, DT_AUDIT, DT_PLTPAD, DT_MOVETAB, DT_SYMINFO, DT_RELACOUNT, DT_RELCOUNT, DT_FLAGS_1, DT_VERDEF, DT_VERDEFNUM, - DT_VERNEED, DT_VERNEEDNUM, DT_AUXILIARY, DT_FILTER + DT_VERNEED, DT_VERNEEDNUM, DT_AUXILIARY, DT_FILTER, + DT_NULL }; const int ndtflags = sizeof (dtflags) / sizeof (dtflags[0]); diff --git a/tests/backtrace.c b/tests/backtrace.c index 36c8b8c4..afc12fb9 100644 --- a/tests/backtrace.c +++ b/tests/backtrace.c @@ -97,6 +97,9 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, static bool reduce_frameno = false; if (reduce_frameno) frameno--; + static bool pthread_kill_seen = false; + if (pthread_kill_seen) + frameno--; if (! use_raise_jmp_patching && frameno >= 2) frameno += 2; const char *symname2 = NULL; @@ -107,11 +110,26 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, && (strcmp (symname, "__kernel_vsyscall") == 0 || strcmp (symname, "__libc_do_syscall") == 0)) reduce_frameno = true; + else if (! pthread_kill_seen && symname + && strstr (symname, "pthread_kill") != NULL) + pthread_kill_seen = true; else - assert (symname && strcmp (symname, "raise") == 0); + { + if (!symname || strcmp (symname, "raise") != 0) + { + fprintf (stderr, + "case 0: expected symname 'raise' got '%s'\n", symname); + abort (); + } + } break; case 1: - assert (symname != NULL && strcmp (symname, "sigusr2") == 0); + if (symname == NULL || strcmp (symname, "sigusr2") != 0) + { + fprintf (stderr, + "case 1: expected symname 'sigusr2' got '%s'\n", symname); + abort (); + } break; case 2: // x86_64 only /* __restore_rt - glibc maybe does not have to have this symbol. */ @@ -120,11 +138,21 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, if (use_raise_jmp_patching) { /* Verify we trapped on the very first instruction of jmp. */ - assert (symname != NULL && strcmp (symname, "jmp") == 0); + if (symname == NULL || strcmp (symname, "jmp") != 0) + { + fprintf (stderr, + "case 3: expected symname 'raise' got '%s'\n", symname); + abort (); + } mod = dwfl_addrmodule (dwfl, pc - 1); if (mod) symname2 = dwfl_module_addrname (mod, pc - 1); - assert (symname2 == NULL || strcmp (symname2, "jmp") != 0); + if (symname2 == NULL || strcmp (symname2, "jmp") != 0) + { + fprintf (stderr, + "case 3: expected symname2 'jmp' got '%s'\n", symname2); + abort (); + } break; } FALLTHROUGH; @@ -137,11 +165,22 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, duplicate_sigusr2 = true; break; } - assert (symname != NULL && strcmp (symname, "stdarg") == 0); + if (symname == NULL || strcmp (symname, "stdarg") != 0) + { + fprintf (stderr, + "case 4: expected symname 'stdarg' got '%s'\n", symname); + abort (); + } break; case 5: /* Verify we trapped on the very last instruction of child. */ - assert (symname != NULL && strcmp (symname, "backtracegen") == 0); + if (symname == NULL || strcmp (symname, "backtracegen") != 0) + { + fprintf (stderr, + "case 5: expected symname 'backtracegen' got '%s'\n", + symname); + abort (); + } mod = dwfl_addrmodule (dwfl, pc); if (mod) symname2 = dwfl_module_addrname (mod, pc); @@ -151,7 +190,15 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, // instructions or even inserts some padding instructions at the end // (which apparently happens on ppc64). if (use_raise_jmp_patching) - assert (symname2 == NULL || strcmp (symname2, "backtracegen") != 0); + { + if (symname2 != NULL && strcmp (symname2, "backtracegen") == 0) + { + fprintf (stderr, + "use_raise_jmp_patching didn't expect symname2 " + "'backtracegen'\n"); + abort (); + } + } break; } } diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh new file mode 100755 index 00000000..0b59b5b8 --- /dev/null +++ b/tests/debuginfod-subr.sh @@ -0,0 +1,170 @@ +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# sourced from run-debuginfod-*.sh tests (must be bash scripts) + +# We trap ERR and like commands that fail in function to also trap +set -o functrace +set -o errtrace + +. $srcdir/test-subr.sh # includes set -e + +type curl 2>/dev/null || (echo "need curl"; exit 77) +type rpm2cpio 2>/dev/null || (echo "need rpm2cpio"; exit 77) +type cpio 2>/dev/null || (echo "need cpio"; exit 77) +type bzcat 2>/dev/null || (echo "need bzcat"; exit 77) +bsdtar --version | grep -q zstd && zstd=true || zstd=false +echo "zstd=$zstd bsdtar=`bsdtar --version`" + +cleanup() +{ + # No more cleanups after this cleanup + trap - 0 + + if [ $PID1 -ne 0 ]; then kill $PID1 || : ; wait $PID1 || :; fi + if [ $PID2 -ne 0 ]; then kill $PID2 || : ; wait $PID2 || :; fi + rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* + exit_cleanup +} + +# clean up trash if we exit +trap cleanup 0 + +errfiles_list= +err() { + # Don't trap any new errors from now on + trap - ERR + + echo ERROR REPORTS + for port in $PORT1 $PORT2 + do + echo ERROR REPORT $port metrics + curl -s http://127.0.0.1:$port/metrics || : + echo + done + for x in $errfiles_list + do + echo ERROR REPORT "$x" + cat $x + echo + done + cleanup + false # trigger set -e +} +trap err ERR + +errfiles() { + errfiles_list="$errfiles_list $*" +} + +# We want to run debuginfod in the background. We also want to start +# it with the same check/installcheck-sensitive LD_LIBRARY_PATH stuff +# that the testrun alias sets. But: we if we just use +# testrun .../debuginfod +# it runs in a subshell, with different pid, so not helpful. +# +# So we gather the LD_LIBRARY_PATH with this cunning trick: +ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` + +wait_ready() +{ + port=$1; + what=$2; + value=$3; + timeout=20; + + echo "Wait $timeout seconds on $port for metric $what to change to $value" + while [ $timeout -gt 0 ]; do + mvalue="$(curl -s http://127.0.0.1:$port/metrics \ + | grep "$what" | awk '{print $NF}')" + if [ -z "$mvalue" ]; then mvalue=0; fi + echo "metric $what: $mvalue" + if [ "$mvalue" -eq "$value" ]; then + break; + fi + sleep 0.5; + ((timeout--)); + done; + + if [ $timeout -eq 0 ]; then + echo "metric $what never changed to $value on port $port" + err + fi +} + +archive_test() { + __BUILDID=$1 + __SOURCEPATH=$2 + __SOURCESHA1=$3 + + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` + buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a $filename | grep 'Build ID' | cut -d ' ' -f 7` + test $__BUILDID = $buildid + # check that timestamps are plausible - older than the near-present (tmpdir mtime) + test $filename -ot `pwd` + + # run again to assure that fdcache is being enjoyed + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` + buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a $filename | grep 'Build ID' | cut -d ' ' -f 7` + test $__BUILDID = $buildid + test $filename -ot `pwd` + + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $__BUILDID` + buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a $filename | grep 'Build ID' | cut -d ' ' -f 7` + test $__BUILDID = $buildid + test $filename -ot `pwd` + + if test "x$__SOURCEPATH" != "x"; then + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH` + hash=`cat $filename | sha1sum | awk '{print $1}'` + test $__SOURCESHA1 = $hash + test $filename -ot `pwd` + fi +} + +get_ports() { + while true; do + PORT1=`expr '(' $RANDOM % 50 ')' + $base` + ss -atn | fgrep ":$PORT1" || break + done +# Some tests will use two servers, so assign the second var + while true; do + PORT2=`expr '(' $RANDOM % 50 ')' + $base + 50` + ss -atn | fgrep ":$PORT2" || break + done + +} + +VERBOSE=-vvv +# We gather the LD_LIBRARY_PATH with this cunning trick: +ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` +PORT1=0 +PORT2=0 +PID1=0 +PID2=0 + + +# run $1 as a sh -c command, invert result code +xfail() { + if sh -c "$1"; then + false + else + true + fi +} diff --git a/tests/elfcopy.c b/tests/elfcopy.c index 4542222e..10b2d362 100644 --- a/tests/elfcopy.c +++ b/tests/elfcopy.c @@ -194,7 +194,7 @@ copy_elf (const char *in, const char *out, bool use_mmap, bool reverse_offs) exit (1); } - offs = (GElf_Off *) malloc (shnum * sizeof (GElf_Off)); + offs = malloc (shnum * sizeof (GElf_Off)); if (offs == NULL) { printf ("couldn't allocate memory for offs\n"); diff --git a/tests/nvidia_extended_linemap_libdw.c b/tests/nvidia_extended_linemap_libdw.c new file mode 100644 index 00000000..20d8d404 --- /dev/null +++ b/tests/nvidia_extended_linemap_libdw.c @@ -0,0 +1,166 @@ +/* Inspect nvidia extended linemap with dwarf_next_lines. + Copyright (C) 2002, 2004, 2018 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <fcntl.h> +#include <inttypes.h> +#include <libelf.h> +#include ELFUTILS_HEADER(dw) +#include <stdio.h> +#include <string.h> +#include <unistd.h> + + +int +main (int argc, char *argv[]) +{ + int result = 0; + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1)); + close (fd); + continue; + } + + Dwarf_Off off; + Dwarf_Off next_off = 0; + Dwarf_CU *cu = NULL; + Dwarf_Lines *lb; + size_t nlb; + int res; + while ((res = dwarf_next_lines (dbg, off = next_off, &next_off, &cu, + NULL, NULL, &lb, &nlb)) == 0) + { + printf ("off = %" PRIu64 "\n", off); + printf (" %zu lines\n", nlb); + + for (size_t i = 0; i < nlb; ++i) + { + Dwarf_Line *l = dwarf_onesrcline (lb, i); + if (l == NULL) + { + printf ("%s: cannot get individual line\n", argv[cnt]); + result = 1; + break; + } + + Dwarf_Addr addr; + if (dwarf_lineaddr (l, &addr) != 0) + addr = 0; + const char *file = dwarf_linesrc (l, NULL, NULL); + int line; + if (dwarf_lineno (l, &line) != 0) + line = 0; + + printf ("%" PRIx64 ": %s:%d:", (uint64_t) addr, + file ?: "???", line); + + /* Getting the file path through the Dwarf_Files should + result in the same path. */ + Dwarf_Files *files; + size_t idx; + if (dwarf_line_file (l, &files, &idx) != 0) + { + printf ("%s: cannot get file from line (%zd): %s\n", + argv[cnt], i, dwarf_errmsg (-1)); + result = 1; + break; + } + const char *path = dwarf_filesrc (files, idx, NULL, NULL); + if ((path == NULL && file != NULL) + || (path != NULL && file == NULL) + || (strcmp (file, path) != 0)) + { + printf ("%s: line %zd srcline (%s) != file srcline (%s)\n", + argv[cnt], i, file ?: "???", path ?: "???"); + result = 1; + break; + } + + int column; + if (dwarf_linecol (l, &column) != 0) + column = 0; + if (column >= 0) + printf ("%d:", column); + + bool is_stmt; + if (dwarf_linebeginstatement (l, &is_stmt) != 0) + is_stmt = false; + bool end_sequence; + if (dwarf_lineendsequence (l, &end_sequence) != 0) + end_sequence = false; + bool basic_block; + if (dwarf_lineblock (l, &basic_block) != 0) + basic_block = false; + bool prologue_end; + if (dwarf_lineprologueend (l, &prologue_end) != 0) + prologue_end = false; + bool epilogue_begin; + if (dwarf_lineepiloguebegin (l, &epilogue_begin) != 0) + epilogue_begin = false; + printf (" is_stmt:%s, end_seq:%s, bb:%s, prologue:%s, epilogue:%s\n", + is_stmt ? "yes" : "no", end_sequence ? "yes" : "no", + basic_block ? "yes" : "no", prologue_end ? "yes" : "no", + epilogue_begin ? "yes" : "no"); + + Dwarf_Line* callee_context = l; + Dwarf_Line* caller_context = dwarf_linecontext (lb, l); + unsigned int depth = 0; + while (caller_context != NULL) + { + depth++; + for (unsigned int x = 0; x < depth; x++) + printf (" "); + + const char *inlined_file = dwarf_linesrc (caller_context, + NULL, NULL); + int inlined_line; + if (dwarf_lineno (caller_context, &inlined_line) != 0) + inlined_line = 0; + + printf ("%s inlined at %s:%d\n", + dwarf_linefunctionname(dbg, callee_context), + inlined_file ?: "???", inlined_line); + + callee_context = caller_context; + caller_context = dwarf_linecontext (lb, callee_context); + } + } + } + + if (res < 0) + { + printf ("dwarf_next_lines failed: %s\n", dwarf_errmsg (-1)); + result = 1; + } + + dwarf_end (dbg); + close (fd); + } + + return result; +} diff --git a/tests/run-alldts.sh b/tests/run-alldts.sh index 6a9a9ece..ce3630b0 100755 --- a/tests/run-alldts.sh +++ b/tests/run-alldts.sh @@ -27,7 +27,6 @@ testrun_compare ${abs_top_builddir}/src/readelf -d testfile-alldts <<\EOF Dynamic segment contains 66 entries: Addr: 0x000001a0 Offset: 0x000078 Link to section: [ 0] '' Type Value - NULL NEEDED Shared library: [(null)] PLTRELSZ 3735928559 (bytes) PLTGOT 0xdeadbeef @@ -93,6 +92,7 @@ Dynamic segment contains 66 entries: VERNEEDNUM 3735928559 AUXILIARY 0xdeadbeef FILTER 0xdeadbeef + NULL EOF exit 0 diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh new file mode 100755 index 00000000..e2c394ef --- /dev/null +++ b/tests/run-debuginfod-archive-groom.sh @@ -0,0 +1,166 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8100 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +# Clean old dirictories +mkdir R ${PWD}/F +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# Be patient when run on a busy machine things might take a bit. + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# wait till the initial scan is done before triggering a new one +# and before dropping new file into the scan dirs +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +# Same for the initial groom cycle, we don't want it to be done +# half way initializing the file setup +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 + +# Build a non-stripped binary +echo "int main() { return 0; }" > ${PWD}/F/prog.c +gcc -Wl,--build-id -g -o ${PWD}/F/prog ${PWD}/F/prog.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a ${PWD}/F/prog | grep 'Build ID' | cut -d ' ' -f 7` +tempfiles ${PWD}/F/prog ${PWD}/F/prog.c + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Now there should be 1 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +tempfiles vlog3 +cp -rvp ${abs_srcdir}/debuginfod-tars Z +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +######################################################################## +# All rpms need to be in the index, except the dummy permission-000 one +rpms=$(find R -name \*rpm | grep -v nothing | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms +txz=$(find Z -name \*tar.xz | wc -l) + +kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# Expect all source files found in the rpms (they are all called hello.c :) +# We will need to extract all rpms (in their own directory) and could all +# sources referenced in the .debug files. +mkdir extracted +cd extracted +subdir=0; +newrpms=$(find ../R -name \*\.rpm | grep -v nothing) +for i in $newrpms; do + subdir=$[$subdir+1]; + mkdir $subdir; + cd $subdir; + ls -lah ../$i + rpm2cpio ../$i | cpio -ivd; + cd ..; +done +sourcefiles=$(find -name \*\\.debug \ + | env LD_LIBRARY_PATH=$ldpath xargs \ + ${abs_top_builddir}/src/readelf --debug-dump=decodedline \ + | grep mtime: | wc --lines) +cd .. +rm -rf extracted + +wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles + +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 + +# common source file sha1 +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 +# fedora31 +if [ $zstd = true ]; then + # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it + # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite + archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA + archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA +fi +# fedora30 +archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +# rhel7 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA +# rhel6 +archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA +RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir + +# Drop some of the artifacts, run a groom cycle; confirm that +# debuginfod has forgotten them, but remembers others +rm -r R/debuginfod-rpms/rhel6/* + +kill -USR2 $PID1 # groom cycle +## 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 +wait_ready $PORT1 'thread_work_total{role="groom"}' 2 +# Expect 4 rpms containing 2 buildids to be deleted by the groom +wait_ready $PORT1 'groomed_total{decision="stale"}' 4 +# Expect no more groom actions pending +wait_ready $PORT1 'thread_work_pending{role="groom"}' 0 + +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests + +# this is one of the buildids from the groom-deleted rpms +testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true + +# but this one was not deleted so should be still around +testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID || true + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh new file mode 100755 index 00000000..a1a6cc1e --- /dev/null +++ b/tests/run-debuginfod-archive-rename.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8200 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +tempfiles $DEBUGINFOD_CACHE_PATH $DB +# Clean old dirictories +mkdir R ${PWD}/F +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 & + +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# wait till the initial scan is done before triggering a new one +# and before dropping new file into the scan dirs +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +# Same for the initial groom cycle, we don't want it to be done +# half way initializing the file setup +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Now there should be 1 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# common source file sha1 +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 + +######################################################################## +## PR26810: Now rename some files in the R directory, then rescan, so +# there are two copies of the same buildid in the index, one for the +# no-longer-existing file name, and one under the new name. + +# run a groom cycle to force server to drop its fdcache +kill -USR2 $PID1 # groom cycle +wait_ready $PORT1 'thread_work_total{role="groom"}' 2 +# move it around a couple of times to make it likely to hit a nonexistent entry during iteration +mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed +kill -USR1 $PID1 # scan cycle +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2 +kill -USR1 $PID1 # scan cycle +wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3 +kill -USR1 $PID1 # scan cycle +wait_ready $PORT1 'thread_work_total{role="traverse"}' 5 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 + +# retest rhel7 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA + +egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0; diff --git a/tests/run-debuginfod-archive-test.sh b/tests/run-debuginfod-archive-test.sh new file mode 100755 index 00000000..5f24ea71 --- /dev/null +++ b/tests/run-debuginfod-archive-test.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +# find an unused port number +mkdir R +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8300 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -R -p $PORT1 -d $DB -t0 -g0 -v R > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# And make sure first scan is done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +# Be patient when run on a busy machine things might take a bit. +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# common source file sha1 +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 +# fedora31 +if [ $zstd = true ]; then + # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it + # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite + archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA + archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA +fi +# fedora30 +archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +# rhel7 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA +# rhel6 +archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA +# arch +#archive_test cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c 7a1334e086b97e5f124003a6cfb3ed792d10cdf4 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh new file mode 100755 index 00000000..8b9aed37 --- /dev/null +++ b/tests/run-debuginfod-artifact-running.sh @@ -0,0 +1,119 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8400 +get_ports +mkdir F + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +echo 'int main(int argc, char * argv){ return 0; }' > ${PWD}/prog.c +gcc -Wl,--build-id -g -o prog ${PWD}/prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +tempfiles prog prog.debug prog.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -F -p $PORT1 -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +# Server must become ready +wait_ready $PORT1 'ready' 1 +# And the initial scan should have been done before moving +# files under the scan dirs. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +mv prog F +mv prog.debug F +tempfiles prog/F + +kill -USR1 $PID1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# Add artifacts to the search paths and test whether debuginfod finds them while already running. +# Build another, non-stripped binary +echo "int main() { return 0; }" > ${PWD}/prog2.c +tempfiles prog2.c +gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c +#testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog2 | grep 'Build ID' | cut -d ' ' -f 7` +mv prog2 F +#mv prog2.debug F +tempfiles F/prog2 F/prog2.debug + +kill -USR1 $PID1 +# Now there should be 3 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## + +# Test whether debuginfod-find is able to fetch those files. +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` +cmp $filename F/prog.debug + +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog` +cmp $filename F/prog + +# raw source filename +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../prog.c` +cmp $filename ${PWD}/prog.c + +# and also the canonicalized one +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/prog.c` +cmp $filename ${PWD}/prog.c + +# Rerun same tests for the prog2 binary +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog` +cmp $filename F/prog2 +grep -q Progress vlog +grep -q Downloaded.from vlog +tempfiles vlog +filename=`testrun env DEBUGINFOD_PROGRESS=1 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 2>vlog2` +cmp $filename F/prog2 +grep -q 'Downloading.*http' vlog2 +tempfiles vlog2 +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c` +cmp $filename ${PWD}/prog2.c + + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh new file mode 100755 index 00000000..7279b02e --- /dev/null +++ b/tests/run-debuginfod-dlopen.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir F +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8500 +get_ports + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R $VERBOSE -p $PORT1 -d $DB \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +# Server must become ready +wait_ready $PORT1 'ready' 1 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# Make sure the initial scan has finished. +# Before moving files under the scan dirs. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. + +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F + +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## + +# Test whether elfutils, via the debuginfod client library dlopen hooks, +# is able to fetch debuginfo from the local debuginfod. +testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0 diff --git a/tests/run-debuginfod-duplicate-urls.sh b/tests/run-debuginfod-duplicate-urls.sh new file mode 100755 index 00000000..50e39cb2 --- /dev/null +++ b/tests/run-debuginfod-duplicate-urls.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8600 +get_ports + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ + $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +wait_ready $PORT1 'ready' 1 + +######################################################################## +## PR27983 +# Ensure no duplicate urls are used in when querying servers for files +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +env DEBUGINFOD_URLS="http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:7999" \ + LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -vvv executable 0 > vlog1 2>&1 || true +tempfiles vlog1 +cat vlog1 +if [ $( grep -c 'duplicate url: http://127.0.0.1:'$PORT1'.*' vlog1 ) -ne 2 ]; then + echo "Duplicate servers remain"; + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-extraction-passive.sh b/tests/run-debuginfod-extraction-passive.sh new file mode 100755 index 00000000..c2724b58 --- /dev/null +++ b/tests/run-debuginfod-extraction-passive.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x + +mkdir Z +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=11000 +get_ports + +DB=${PWD}/.debuginfod.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +cp -rvp ${abs_srcdir}/debuginfod-tars Z +tempfiles Z + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v Z > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 + +# Start second passive server with same database +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --passive -d $DB -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT2 -v > vlog$PORT2 2>&1 & +PID2=$! + +tempfiles vlog$PORT2 +errfiles vlog$PORT2 + +wait_ready $PORT2 'ready' 1 + +# Wait for first server to finish indexing +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# No similar metrics for the passive server +! (curl http://localhost:$PORT2/metrics | egrep 'role="scan"|role="groom"|role="traverse"') + +# Confirm no active threads +! (ps -q $PID2 -e -L -o '%p %c %a' | egrep 'scan|groom|traverse') + +# Do a random lookup via passive server +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://localhost:$PORT2 ${abs_builddir}/../debuginfod/debuginfod-find debuginfo cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb + +tempfiles $DB* + +kill $PID1 +wait $PID1 +PID1=0 + +kill $PID2 +wait $PID2 +PID2=0 + +exit 0 diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh new file mode 100755 index 00000000..a3722c90 --- /dev/null +++ b/tests/run-debuginfod-extraction.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir R Z +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8700 +get_ports + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -F -R -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v R Z > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# Make sure the initial scan has finished before copying the new files in +# We might remove some, which we don't want to be accidentially scanned. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +cp -rvp ${abs_srcdir}/debuginfod-tars Z + +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## +# All rpms need to be in the index, except the dummy permission-000 one +rpms=$(find R -name \*rpm | grep -v nothing | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms +txz=$(find Z -name \*tar.xz | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".tar.xz archive"}' $txz +tb2=$(find Z -name \*tar.bz2 | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2 + +kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# Expect all source files found in the rpms (they are all called hello.c :) +# We will need to extract all rpms (in their own directory) and could all +# sources referenced in the .debug files. +mkdir extracted +cd extracted +subdir=0; +newrpms=$(find ../R -name \*\.rpm | grep -v nothing) +for i in $newrpms; do + subdir=$[$subdir+1]; + mkdir $subdir; + cd $subdir; + ls -lah ../$i + rpm2cpio ../$i | cpio -ivd; + cd ..; +done +sourcefiles=$(find -name \*\\.debug \ + | env LD_LIBRARY_PATH=$ldpath xargs \ + ${abs_top_builddir}/src/readelf --debug-dump=decodedline \ + | grep mtime: | wc --lines) +cd .. +rm -rf extracted + +wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-fd-prefetch-caches.sh b/tests/run-debuginfod-fd-prefetch-caches.sh new file mode 100755 index 00000000..7fbf7b20 --- /dev/null +++ b/tests/run-debuginfod-fd-prefetch-caches.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +FDCACHE_FDS=100 +FDCACHE_MBS=100 +PREFETCH_FDS=100 +PREFETCH_MBS=100 +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8800 +get_ports + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +echo $PORT1 +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 -d $DB \ + --fdcache-mbs=$FDCACHE_MDS --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-mbs=$PREFETCH_MBS \ + --fdcache-prefetch-fds=$PREFETCH_FDS --fdcache-mintmp 0 -v -F F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 + +grep 'fdcache fds ' vlog$PORT1 #$FDCACHE_FDS +grep 'fdcache mbs ' vlog$PORT1 #$FDCACHE_MBS +grep 'prefetch fds ' vlog$PORT1 #$PREFETCH_FDS +grep 'prefetch mbs ' vlog$PORT1 #$PREFETCH_MBS +# search the vlog to find what metric counts should be and check the correct metrics +# were incrimented +enqueue_nr=$(grep -c 'interned.*front=1' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $enqueue_nr +evict_nr=$(grep -c 'evicted a=.*' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="evict"}' $evict_nr +prefetch_enqueue_nr=$(grep -c 'interned.*front=0' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $prefetch_enqueue_nr +prefetch_evict_nr=$(grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $prefetch_evict_nr + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh new file mode 100755 index 00000000..d7827436 --- /dev/null +++ b/tests/run-debuginfod-federation-link.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +tempfiles $DB + +# Clean old dirictories +mkdir D L F +mkdir -p $DEBUGINFOD_CACHE_PATH +# not tempfiles F R L D Z - they are directories which we clean up manually +ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8900 +get_ports +# Launch server which will be unable to follow symlinks +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 +# Make sure initial scan was done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +mv prog F +mv prog.debug F + +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +wait_ready $PORT1 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT1 'thread_busy{role="http-metrics"}' 1 + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 +mkdir -p $DEBUGINFOD_CACHE_PATH + +# NB: run in -L symlink-following mode for the L subdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D > vlog$PORT2 2>&1 & +PID2=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +tempfiles ${DB}_2 + +wait_ready $PORT2 'ready' 1 + +# Make sure initial scan was done +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +kill -USR1 $PID2 +# Wait till both files are in the index. +wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT2 'thread_busy{role="scan"}' 0 + +wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 + +# have clients contact the new server +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +# Use fresh cache for debuginfod-find client requests +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH + +if type bsdtar 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 3 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + + # All debs need to be in the index + debs=$(find D -name \*.deb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` + ddebs=$(find D -name \*.ddeb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` + + # ubuntu + archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# send a request to stress XFF and User-Agent federation relay; +# we'll grep for the two patterns in vlog$PORT1 +curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true + +grep UA:TESTCURL vlog$PORT1 +grep XFF:TESTXFF vlog$PORT1 + +# confirm that first server can't resolve symlinked info in L/ but second can +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` +file L/foo +file -L L/foo +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test again with scheme free url +export DEBUGINFOD_URLS=127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file +export DEBUGINFOD_URLS=127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test parallel queries in client +rm -rf $DEBUGINFOD_CACHE_PATH +export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +kill $PID1 +kill $PID2 +wait $PID1 +wait $PID2 +PID1=0 +PID2=0 + +exit 0 diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh new file mode 100755 index 00000000..3d716246 --- /dev/null +++ b/tests/run-debuginfod-federation-metrics.sh @@ -0,0 +1,210 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid, will trigger error_count metric +tempfiles $DB +# Clean old dirictories +mkdir D L F + +# not tempfiles F R L D Z - they are directories which we clean up manually +ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9000 +get_ports + +# Launch server which will be unable to follow symlinks +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 + +# Wait till initial scan is done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +######################################################################## +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +mv prog F +mv prog.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +wait_ready $PORT1 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT1 'thread_busy{role="http-metrics"}' 1 + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 +mkdir -p $DEBUGINFOD_CACHE_PATH +# NB: run in -L symlink-following mode for the L subdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D > vlog$PORT2 2>&1 & +PID2=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +tempfiles ${DB}_2 + +wait_ready $PORT2 'ready' 1 +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT2 'thread_busy{role="scan"}' 0 + +wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 + +# have clients contact the new server +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +# Use fresh cache for debuginfod-find client requests +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH + +if type bsdtar 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + + # All debs need to be in the index + debs=$(find D -name \*.deb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` + ddebs=$(find D -name \*.ddeb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` + + # ubuntu + archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# send a request to stress XFF and User-Agent federation relay; +# we'll grep for the two patterns in vlog$PORT1 +curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true + +grep UA:TESTCURL vlog$PORT1 +grep XFF:TESTXFF vlog$PORT1 + +# confirm that first server can't resolve symlinked info in L/ but second can +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` +file L/foo +file -L L/foo +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test again with scheme free url +export DEBUGINFOD_URLS=127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file +export DEBUGINFOD_URLS=127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +# test parallel queries in client +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH +export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +######################################################################## +# Fetch some metrics +curl -s http://127.0.0.1:$PORT1/badapi +curl -s http://127.0.0.1:$PORT1/metrics +curl -s http://127.0.0.1:$PORT2/metrics +curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error' +curl -s http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_count' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_sum' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_sum' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'fdcache_' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'traversed_total' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'scanned_bytes_total' + +# And generate a few errors into the second debuginfod's logs, for analysis just below +curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true +# NB: this error is used to seed the 404 failure for the survive-404 tests + +# Confirm bad artifact types are rejected without leaving trace +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true +(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false + +# Confirm that reused curl connections survive 404 errors. +# The rm's force an uncached fetch (in both servers and client cache) +rm -f .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# Confirm that some debuginfod client pools are being used +curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse' + +# Trigger a flood of requests against the same archive content file. +# Use a file that hasn't been previously extracted in to make it +# likely that even this test debuginfod will experience concurrency +# and impose some "after-you" delays. +(for i in `seq 100`; do + curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null & + done; + wait) +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' +# If we could guarantee some minimum number of seconds of CPU time, we +# could assert that the after_you metrics show some nonzero amount of +# waiting. A few hundred ms is typical on this developer's workstation. + +kill $PID1 +kill $PID2 +wait $PID1 +wait $PID2 +PID1=0 +PID2=0 +exit 0 + diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh new file mode 100755 index 00000000..d9321526 --- /dev/null +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -0,0 +1,202 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +tempfiles $DB + +# Clean old dirictories +mkdir D L F +# not tempfiles F R L D Z - they are directories which we clean up manually +ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test + +######################################################################## +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +mv prog F +mv prog.debug F +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9100 +get_ports +# Launch server which will be unable to follow symlinks +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 + +# Wait till initial scan is done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 +mkdir -p $DEBUGINFOD_CACHE_PATH +# NB: run in -L symlink-following mode for the L subdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D F > vlog$PORT2 2>&1 & +PID2=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +tempfiles ${DB}_2 +wait_ready $PORT2 'ready' 1 +# Wait till initial scan is done +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +# And initial groom cycle +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 + +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT2 +# Use fresh cache for debuginfod-find client requests +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH + +if type bsdtar 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + + # All debs need to be in the index + debs=$(find D -name \*.deb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` + ddebs=$(find D -name \*.ddeb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` + + # ubuntu + archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# send a request to stress XFF and User-Agent federation relay; +# we'll grep for the two patterns in vlog$PORT1 +curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true + +grep UA:TESTCURL vlog$PORT1 +grep XFF:TESTXFF vlog$PORT1 + +# confirm that first server can't resolve symlinked info in L/ but second can +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` +file L/foo +file -L L/foo +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test again with scheme free url +export DEBUGINFOD_URLS=127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file +export DEBUGINFOD_URLS=127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +# test parallel queries in client +rm -rf $DEBUGINFOD_CACHE_PATH +export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +# And generate a few errors into the second debuginfod's logs, for analysis just below +curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true +# NB: this error is used to seed the 404 failure for the survive-404 tests + +# Confirm bad artifact types are rejected without leaving trace +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true +(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false + +# Confirm that reused curl connections survive 404 errors. +# The rm's force an uncached fetch (in both servers and client cache) +rm -f .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +# Trigger a flood of requests against the same archive content file. +# Use a file that hasn't been previously extracted in to make it +# likely that even this test debuginfod will experience concurrency +# and impose some "after-you" delays. +(for i in `seq 100`; do + curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null & + done; + wait) +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' +# If we could guarantee some minimum number of seconds of CPU time, we +# could assert that the after_you metrics show some nonzero amount of +# waiting. A few hundred ms is typical on this developer's workstation. + +######################################################################## +# Trigger some some random activity, then trigger a clean shutdown. +# We used to try to corrupt the database while the debuginfod server +# was running and check it detected errors, but that was unreliably +# and slightly dangerous since part of the database was already mapped +# into memory. +kill -USR1 $PID1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +kill -USR2 $PID1 +wait_ready $PORT1 'thread_work_total{role="groom"}' 2 +curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true + +kill -INT $PID1 $PID2 +wait $PID1 $PID2 +PID1=0 +PID2=0 + +# Run the tests again without the servers running. The target file should +# be found in the cache. + +tempfiles .debuginfod_* + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +# check out the debuginfod logs for the new style status lines +cat vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog$PORT2 + +exit 0 diff --git a/tests/run-debuginfod-file.sh b/tests/run-debuginfod-file.sh new file mode 100755 index 00000000..341bbc68 --- /dev/null +++ b/tests/run-debuginfod-file.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +# Test fetching a file using file:// . No debuginfod server needs to be run for +# this test. +local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/source/my/path +mkdir -p ${local_dir} +echo "int main() { return 0; }" > ${local_dir}/main.c +# first test that is doesn't work, when no DEBUGINFOD_URLS is set +export DEBUGINFOD_URLS="" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true + +# Now test is with proper DEBUGINFOD_URLS +export DEBUGINFOD_URLS="file://${PWD}/mocktree/" +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c` +cmp $filename ${local_dir}/main.c + +exit 0 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh deleted file mode 100755 index 9183cccb..00000000 --- a/tests/run-debuginfod-find.sh +++ /dev/null @@ -1,677 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (C) 2019-2021 Red Hat, Inc. -# This file is part of elfutils. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# elfutils is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -. $srcdir/test-subr.sh # includes set -e - -type curl 2>/dev/null || (echo "need curl"; exit 77) -type rpm2cpio 2>/dev/null || (echo "need rpm2cpio"; exit 77) -type cpio 2>/dev/null || (echo "need cpio"; exit 77) -type bzcat 2>/dev/null || (echo "need bzcat"; exit 77) -bsdtar --version | grep -q zstd && zstd=true || zstd=false -echo "zstd=$zstd bsdtar=`bsdtar --version`" - -# for test case debugging, uncomment: -#set -x -VERBOSE=-vvv - -DB=${PWD}/.debuginfod_tmp.sqlite -tempfiles $DB -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache - -PID1=0 -PID2=0 -PID3=0 - -cleanup() -{ - if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi - if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi - if [ $PID3 -ne 0 ]; then kill $PID3; wait $PID3; fi - - rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* - exit_cleanup -} - -# clean up trash if we were aborted early -trap cleanup 0 1 2 3 5 9 15 - -errfiles_list= -err() { - for ports in $PORT1 $PORT2 - do - echo $port metrics - curl -s http://127.0.0.1:$port/metrics - echo - done - for x in $errfiles_list - do - echo "$x" - cat $x - echo - done -} -trap err ERR - -errfiles() { - errfiles_list="$errfiles_list $*" -} - - - -# find an unused port number -while true; do - PORT1=`expr '(' $RANDOM % 1000 ')' + 9000` - ss -atn | fgrep ":$PORT1" || break -done - -# We want to run debuginfod in the background. We also want to start -# it with the same check/installcheck-sensitive LD_LIBRARY_PATH stuff -# that the testrun alias sets. But: we if we just use -# testrun .../debuginfod -# it runs in a subshell, with different pid, so not helpful. -# -# So we gather the LD_LIBRARY_PATH with this cunning trick: -ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` - -mkdir F R L D Z -# not tempfiles F R L D Z - they are directories which we clean up manually -ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test - -wait_ready() -{ - port=$1; - what=$2; - value=$3; - timeout=20; - - echo "Wait $timeout seconds on $port for metric $what to change to $value" - while [ $timeout -gt 0 ]; do - mvalue="$(curl -s http://127.0.0.1:$port/metrics \ - | grep "$what" | awk '{print $NF}')" - if [ -z "$mvalue" ]; then mvalue=0; fi - echo "metric $what: $mvalue" - if [ "$mvalue" -eq "$value" ]; then - break; - fi - sleep 0.5; - ((timeout--)); - done; - - if [ $timeout -eq 0 ]; then - echo "metric $what never changed to $value on port $port" - exit 1; - fi -} - -# create a bogus .rpm file to evoke a metric-visible error -# Use a cyclic symlink instead of chmod 000 to make sure even root -# would see an error (running the testsuite under root is NOT encouraged). -ln -s R/nothing.rpm R/nothing.rpm - -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 --fdcache-fds 1 --fdcache-mbs 2 --fdcache-mintmp 0 -Z .tar.xz -Z .tar.bz2=bzcat -v R F Z L > vlog$PORT1 2>&1 & -PID1=$! -tempfiles vlog$PORT1 -errfiles vlog$PORT1 -# Server must become ready -wait_ready $PORT1 'ready' 1 -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / - -# Be patient when run on a busy machine things might take a bit. -export DEBUGINFOD_TIMEOUT=10 - -# Check thread comm names -ps -q $PID1 -e -L -o '%p %c %a' | grep groom -ps -q $PID1 -e -L -o '%p %c %a' | grep scan -ps -q $PID1 -e -L -o '%p %c %a' | grep traverse - -# We use -t0 and -g0 here to turn off time-based scanning & grooming. -# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. - -######################################################################## - -# Compile a simple program, strip its debuginfo and save the build-id. -# Also move the debuginfo into another directory so that elfutils -# cannot find it without debuginfod. -echo "int main() { return 0; }" > ${PWD}/prog.c -tempfiles prog.c -# Create a subdirectory to confound source path names -mkdir foobar -gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c -testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog -BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a prog | grep 'Build ID' | cut -d ' ' -f 7` - -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 -mv prog F -mv prog.debug F -kill -USR1 $PID1 -# Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -######################################################################## - -# Test whether elfutils, via the debuginfod client library dlopen hooks, -# is able to fetch debuginfo from the local debuginfod. -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 - -######################################################################## - -# PR25628 -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests - -# The query is designed to fail, while the 000-permission file should be created. -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then - echo "could not find cache in $DEBUGINFOD_CACHE_PATH" - exit 1 -fi - -if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then - echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" - exit 1 -fi - -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -if [ "$bytecount_before" != "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404"} has changed." - exit 1 -fi - -# set cache_miss_s to 0 and sleep 1 to make the mtime expire. -echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s -sleep 1 -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -if [ "$bytecount_before" == "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404"} should be incremented." - exit 1 -fi -######################################################################## - -# Test whether debuginfod-find is able to fetch those files. -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` -cmp $filename F/prog.debug -if [ -w $filename ]; then - echo "cache file writable, boo" - exit 1 -fi - -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog` -cmp $filename F/prog - -# raw source filename -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../prog.c` -cmp $filename ${PWD}/prog.c - -# and also the canonicalized one -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/prog.c` -cmp $filename ${PWD}/prog.c - - -######################################################################## - -# Test whether the cache default locations are correct - -mkdir tmphome - -# $HOME/.cache should be created. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then - echo "could not find cache in $PWD/tmphome/.cache" - exit 1 -fi - -# $HOME/.cache should be found. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID -if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then - echo "could not find cache in $PWD/tmphome/.cache" - exit 1 -fi - -# $XDG_CACHE_HOME should take priority over $HOME.cache. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then - echo "could not find cache in $PWD/tmpxdg/" - exit 1 -fi - -# A cache at the old default location ($HOME/.debuginfod_client_cache) should take -# priority over $HOME/.cache, $XDG_CACHE_HOME. -cp -r $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache - -# Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME. -mkdir tmphome/.debuginfod_client_cache/deadbeef -echo ELF... > tmphome/.debuginfod_client_cache/deadbeef/debuginfo -filename=`testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo deadbeef` -cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo - -# $DEBUGINFO_CACHE_PATH should take priority over all else. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then - echo "could not find cache in $PWD/tmpcache/" - exit 1 -fi - -######################################################################## - -# Add artifacts to the search paths and test whether debuginfod finds them while already running. - -# Build another, non-stripped binary -echo "int main() { return 0; }" > ${PWD}/prog2.c -tempfiles prog2.c -gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c -BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a prog2 | grep 'Build ID' | cut -d ' ' -f 7` - -mv prog2 F -kill -USR1 $PID1 -# Now there should be 3 files in the index -wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -# Rerun same tests for the prog2 binary -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog` -cmp $filename F/prog2 -cat vlog -grep -q Progress vlog -grep -q Downloaded.from vlog -tempfiles vlog -filename=`testrun env DEBUGINFOD_PROGRESS=1 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 2>vlog2` -cmp $filename F/prog2 -cat vlog2 -grep -q 'Downloading.*http' vlog2 -tempfiles vlog2 -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c` -cmp $filename ${PWD}/prog2.c - -cp -rvp ${abs_srcdir}/debuginfod-rpms R -if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones - rm -vrf R/debuginfod-rpms/fedora31 -fi - -cp -rvp ${abs_srcdir}/debuginfod-tars Z -kill -USR1 $PID1 -# All rpms need to be in the index, except the dummy permission-000 one -rpms=$(find R -name \*rpm | grep -v nothing | wc -l) -wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms -txz=$(find Z -name \*tar.xz | wc -l) -wait_ready $PORT1 'scanned_files_total{source=".tar.xz archive"}' $txz -tb2=$(find Z -name \*tar.bz2 | wc -l) -wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2 - -kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs -# Expect all source files found in the rpms (they are all called hello.c :) -# We will need to extract all rpms (in their own directory) and could all -# sources referenced in the .debug files. -mkdir extracted -cd extracted -subdir=0; -newrpms=$(find ../R -name \*\.rpm | grep -v nothing) -for i in $newrpms; do - subdir=$[$subdir+1]; - mkdir $subdir; - cd $subdir; - ls -lah ../$i - rpm2cpio ../$i | cpio -ivd; - cd ..; -done -sourcefiles=$(find -name \*\\.debug \ - | env LD_LIBRARY_PATH=$ldpath xargs \ - ${abs_top_builddir}/src/readelf --debug-dump=decodedline \ - | grep mtime: | wc --lines) -cd .. -rm -rf extracted - -wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles - -# Run a bank of queries against the debuginfod-rpms / debuginfod-debs test cases - -archive_test() { - __BUILDID=$1 - __SOURCEPATH=$2 - __SOURCESHA1=$3 - - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` - buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a $filename | grep 'Build ID' | cut -d ' ' -f 7` - test $__BUILDID = $buildid - # check that timestamps are plausible - older than the near-present (tmpdir mtime) - test $filename -ot `pwd` - - # run again to assure that fdcache is being enjoyed - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` - buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a $filename | grep 'Build ID' | cut -d ' ' -f 7` - test $__BUILDID = $buildid - test $filename -ot `pwd` - - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $__BUILDID` - buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a $filename | grep 'Build ID' | cut -d ' ' -f 7` - test $__BUILDID = $buildid - test $filename -ot `pwd` - - if test "x$__SOURCEPATH" != "x"; then - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH` - hash=`cat $filename | sha1sum | awk '{print $1}'` - test $__SOURCESHA1 = $hash - test $filename -ot `pwd` - fi -} - - -# common source file sha1 -SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 -# fedora31 -if [ $zstd = true ]; then - # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it - # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite - archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA - archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA -fi -# fedora30 -archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA -archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA -# rhel7 -archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA -archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA -# rhel6 -archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA -archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA -# arch -archive_test cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c 7a1334e086b97e5f124003a6cfb3ed792d10cdf4 - -RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir, for a later test - - -######################################################################## - -# Drop some of the artifacts, run a groom cycle; confirm that -# debuginfod has forgotten them, but remembers others - -rm -r R/debuginfod-rpms/rhel6/* -kill -USR2 $PID1 # groom cycle -# 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 -wait_ready $PORT1 'thread_work_total{role="groom"}' 2 -# Expect 4 rpms containing 2 buildids to be deleted by the groom -wait_ready $PORT1 'groomed_total{decision="stale"}' 4 - -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests - -# this is one of the buildids from the groom-deleted rpms -testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true -# but this one was not deleted so should be still around -testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 - -######################################################################## - -# PR26810: Now rename some files in the R directory, then rescan, so -# there are two copies of the same buildid in the index, one for the -# no-longer-existing file name, and one under the new name. - -# run a groom cycle to force server to drop its fdcache -kill -USR2 $PID1 # groom cycle -wait_ready $PORT1 'thread_work_total{role="groom"}' 3 -# move it around a couple of times to make it likely to hit a nonexistent entry during iteration -mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed -kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 6 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2 -kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 7 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3 -kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 8 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -# retest rhel7 -archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA -archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA - -egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1 - -######################################################################## - -# Federation mode - -# find another unused port -while true; do - PORT2=`expr '(' $RANDOM % 1000 ')' + 9000` - ss -atn | fgrep ":$PORT2" || break -done - -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 -mkdir -p $DEBUGINFOD_CACHE_PATH -# NB: inherits the DEBUGINFOD_URLS to the first server -# NB: run in -L symlink-following mode for the L subdir -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d ${DB}_2 -p $PORT2 -L L D > vlog$PORT2 2>&1 & -PID2=$! -tempfiles vlog$PORT2 -errfiles vlog$PORT2 -tempfiles ${DB}_2 -wait_ready $PORT2 'ready' 1 -wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 -wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT2 'thread_busy{role="scan"}' 0 - -wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0 -wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 - -# have clients contact the new server -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 - -if type bsdtar 2>/dev/null; then - # copy in the deb files - cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D - kill -USR1 $PID2 - # All debs need to be in the index - debs=$(find D -name \*.deb | wc -l) - wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` - ddebs=$(find D -name \*.ddeb | wc -l) - wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` - - # ubuntu - archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" -fi - -rm -rf $DEBUGINFOD_CACHE_PATH -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# send a request to stress XFF and User-Agent federation relay; -# we'll grep for the two patterns in vlog$PORT1 -curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true - -grep UA:TESTCURL vlog$PORT1 -grep XFF:TESTXFF vlog$PORT1 - - -# confirm that first server can't resolve symlinked info in L/ but second can -BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` -file L/foo -file -L L/foo -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 -rm -rf $DEBUGINFOD_CACHE_PATH -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# test again with scheme free url -export DEBUGINFOD_URLS=127.0.0.1:$PORT1 -rm -rf $DEBUGINFOD_CACHE_PATH -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file -export DEBUGINFOD_URLS=127.0.0.1:$PORT2 -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# test parallel queries in client -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 -mkdir -p $DEBUGINFOD_CACHE_PATH -export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" - -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1 - -######################################################################## - -# Fetch some metrics -curl -s http://127.0.0.1:$PORT1/badapi -curl -s http://127.0.0.1:$PORT1/metrics -curl -s http://127.0.0.1:$PORT2/metrics -curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error' -curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*fdcache' -curl -s http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_count' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_sum' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_sum' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'fdcache_' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'traversed_total' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'scanned_bytes_total' - -# And generate a few errors into the second debuginfod's logs, for analysis just below -curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true -curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true -# NB: this error is used to seed the 404 failure for the survive-404 tests - -# Confirm bad artifact types are rejected without leaving trace -curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true -(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false - -# Confirm that reused curl connections survive 404 errors. -# The rm's force an uncached fetch -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# Confirm that some debuginfod client pools are being used -curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse' - -######################################################################## -# Corrupt the sqlite database and get debuginfod to trip across its errors -curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' -ls -al $DB -dd if=/dev/zero of=$DB bs=1 count=1 -ls -al $DB -# trigger some random activity that's Sure to get sqlite3 upset -kill -USR1 $PID1 -wait_ready $PORT1 'thread_work_total{role="traverse"}' 9 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -kill -USR2 $PID1 -wait_ready $PORT1 'thread_work_total{role="groom"}' 4 -curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true -curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count.*sqlite' - -######################################################################## - -# Run the tests again without the servers running. The target file should -# be found in the cache. - -kill -INT $PID1 $PID2 -wait $PID1 $PID2 -PID1=0 -PID2=0 -tempfiles .debuginfod_* - -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1 - -# check out the debuginfod logs for the new style status lines -# cat vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog$PORT2 - -######################################################################## - -# Add some files to the cache that do not fit its naming format. -# They should survive cache cleaning. -mkdir $DEBUGINFOD_CACHE_PATH/malformed -touch $DEBUGINFOD_CACHE_PATH/malformed0 -touch $DEBUGINFOD_CACHE_PATH/malformed/malformed1 - -# A valid format for an empty buildid subdirectory -mkdir $DEBUGINFOD_CACHE_PATH/00000000 -touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee nukage - -# Trigger a cache clean and run the tests again. The clients should be unable to -# find the target. -echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s -echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s - -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 - -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID2 && false || true - -if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \ - || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then - echo "unrelated files did not survive cache cleaning" - exit 1 -fi - -if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then - echo "failed to rmdir old cache dir" - exit 1 -fi - -# Test debuginfod without a path list; reuse $PORT1 -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d :memory: -p $PORT1 -L -F & -PID3=$! -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -kill -int $PID3 -wait $PID3 -PID3=0 - -######################################################################## -# Test fetching a file using file:// . No debuginfod server needs to be run for -# this test. -local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/source/my/path -mkdir -p ${local_dir} -echo "int main() { return 0; }" > ${local_dir}/main.c - -# first test that is doesn't work, when no DEBUGINFOD_URLS is set -DEBUGINFOD_URLS="" -testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true - -# Now test is with proper DEBUGINFOD_URLS -DEBUGINFOD_URLS="file://${PWD}/mocktree/" -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c` -cmp $filename ${local_dir}/main.c - -exit 0 diff --git a/tests/run-debuginfod-malformed.sh b/tests/run-debuginfod-malformed.sh new file mode 100755 index 00000000..83e6a3a9 --- /dev/null +++ b/tests/run-debuginfod-malformed.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9200 +# find an unused port number +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +mkdir F +mkdir -p $DEBUGINFOD_CACHE_PATH + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# And an initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## +# Add some files to the cache that do not fit its naming format. +# They should survive cache cleaning. +mkdir $DEBUGINFOD_CACHE_PATH/malformed +touch $DEBUGINFOD_CACHE_PATH/malformed0 +touch $DEBUGINFOD_CACHE_PATH/malformed/malformed1 + +# A valid format for an empty buildid subdirectory +mkdir $DEBUGINFOD_CACHE_PATH/00000000 +touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee nukage + +# Trigger a cache clean and run the tests again. The clients should be unable to +# find the target. +echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s +echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 + +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true + +if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \ + || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then + echo "unrelated files did not survive cache cleaning" + err +fi + +if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then + echo "failed to rmdir old cache dir" + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-negative-cache.sh b/tests/run-debuginfod-negative-cache.sh new file mode 100755 index 00000000..f40e99c5 --- /dev/null +++ b/tests/run-debuginfod-negative-cache.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8000 +get_ports +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ + -t0 -g0 -v ${PWD} > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +######################################################################## +# PR25628 +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests + +# The query is designed to fail, while the empty file should be created. +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then + echo "could not find cache in $DEBUGINFOD_CACHE_PATH" + err +fi + +if [ `stat -c "%s" $DEBUGINFOD_CACHE_PATH/01234567/debuginfo` != 0 ]; then + echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is not empty" + err +fi + +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +if [ "$bytecount_before" != "$bytecount_after" ]; then + echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} has changed." + err +fi + +# set cache_miss_s to 0 and sleep 1 to make the mtime expire. +echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s +sleep 1 +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +if [ "$bytecount_before" == "$bytecount_after" ]; then + echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} should be incremented." + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-no-urls.sh b/tests/run-debuginfod-no-urls.sh new file mode 100755 index 00000000..7e3ffef6 --- /dev/null +++ b/tests/run-debuginfod-no-urls.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +######################################################################## +# Test debuginfod without a path list +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9300 +get_ports + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d :memory: -p $PORT1 -L -F & +PID1=$! + +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +kill -int $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-percent-escape.sh b/tests/run-debuginfod-percent-escape.sh new file mode 100755 index 00000000..f7d8dc66 --- /dev/null +++ b/tests/run-debuginfod-percent-escape.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh # includes set -e +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=10000 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +mkdir F +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# Be patient when run on a busy machine things might take a bit. + +# Build a non-stripped binary +echo "int main() { return 0; }" > ${PWD}/F/p++r\$\#o^^g.c +gcc -Wl,--build-id -g -o ${PWD}/F/p++r\$\#o^^g ${PWD}/F/p++r\$\#o^^g.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a ${PWD}/F/p++r\\$\#o^^g | grep 'Build ID' | cut -d ' ' -f 7` +tempfiles ${PWD}/F/p++r\$\#o^^g.c ${PWD}/F/p++r\$\#o^^g +kill -USR1 $PID1 +# Now there should be 1 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +ls F +env DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache DEBUGINFOD_URLS="http://127.0.0.1:$PORT1" \ + LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -vvv source F/p++r\$\#o^^g ${abs_builddir}/F/p++r\$\#o^^g.c > vlog1 2>&1 || true +tempfiles vlog1 +grep 'F/p%2B%2Br%24%23o%5E%5Eg.c' vlog1 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-query-retry.sh b/tests/run-debuginfod-query-retry.sh new file mode 100755 index 00000000..0cfdba92 --- /dev/null +++ b/tests/run-debuginfod-query-retry.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +######################################################################## +# set up tests for retrying failed queries. +retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache \ + ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/sh || true) 2>&1 >/dev/null \ + | grep -c 'Retry failed query'` +if [ $retry_attempts -ne 10 ]; then + echo "retry mechanism failed." + exit 1; +fi + +exit 0; diff --git a/tests/run-debuginfod-regex.sh b/tests/run-debuginfod-regex.sh new file mode 100755 index 00000000..6837ea86 --- /dev/null +++ b/tests/run-debuginfod-regex.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir F + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9400 +get_ports +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ + $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +# Wait till the server is ready and an initial scan has been done +wait_ready $PORT1 'ready' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog + +mv prog F +mv prog.debug F +tempfiles F/prog.debug F/prog + +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +cp ${DB} ${DB}.backup +tempfiles ${DB}.backup + +kill $PID1 +wait $PID1 +PID1=0 + +####################################################################### +## PR27711 +# Test to ensure that the --include="^$" --exclude=".*" options remove all files from a database backup +# +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ + $VERBOSE -p $PORT2 -t0 -g0 --regex-groom --include="^$" --exclude=".*" -d ${DB}.backup > vlog$PORT2 2>&1 & + +#reuse PID1 +PID1=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +# Server must become ready +wait_ready $PORT2 'ready' 1 + +# Wait till the initial groom cycle has been done +wait_ready $PORT2 'thread_work_total{role="groom"}' 1 +wait_ready $PORT2 'groom{statistic="archive d/e"}' 0 +wait_ready $PORT2 'groom{statistic="archive sdef"}' 0 +wait_ready $PORT2 'groom{statistic="archive sref"}' 0 +wait_ready $PORT2 'groom{statistic="buildids"}' 0 +wait_ready $PORT2 'groom{statistic="file d/e"}' 0 +wait_ready $PORT2 'groom{statistic="file s"}' 0 +wait_ready $PORT2 'groom{statistic="files scanned (#)"}' 0 +wait_ready $PORT2 'groom{statistic="files scanned (mb)"}' 0 + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0; + diff --git a/tests/run-debuginfod-response-headers.sh b/tests/run-debuginfod-response-headers.sh new file mode 100755 index 00000000..62c43887 --- /dev/null +++ b/tests/run-debuginfod-response-headers.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh # includes set -e + +# for test case debugging, uncomment: +set -x + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9500 +get_ports +mkdir F R +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 -v R F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c + +mv prog F + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +# All rpms need to be in the index, except the dummy permission-000 one +rpms=$(find R -name \*rpm | grep -v nothing | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms +kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 + +######################################################################## +## PR27277 +# Make a simple request to the debuginfod server and check debuginfod-find's vlog to see if +# the custom HTTP headers are received. +rm -rf $DEBUGINFOD_CACHE_PATH +env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\ + -vvv executable F/prog > vlog-find$PORT1.1 2>&1 +tempfiles vlog-find$PORT1.1 +grep 'Content-Length: ' vlog-find$PORT1.1 +grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.1 +grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.1 + +# Check to see if an executable file located in an archive prints the file's description and archive +env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\ + -vvv executable c36708a78618d597dee15d0dc989f093ca5f9120 > vlog-find$PORT1.2 2>&1 +tempfiles vlog-find$PORT1.2 +grep 'Content-Length: ' vlog-find$PORT1.2 +grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.2 +grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.2 +grep 'X-DEBUGINFOD-ARCHIVE: ' vlog-find$PORT1.2 + +# Check that X-DEBUGINFOD-SIZE matches the size of each file +for file in vlog-find$PORT1.1 vlog-find$PORT1.2 +do + st_size=$(stat -c%s $(tail -n 1 $file)) + x_debuginfod_size=$(grep 'X-DEBUGINFOD-SIZE' $file | egrep -o '[0-9]+') + test $st_size -eq $x_debuginfod_size +done + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-sizetime.sh b/tests/run-debuginfod-sizetime.sh new file mode 100755 index 00000000..2cf6f252 --- /dev/null +++ b/tests/run-debuginfod-sizetime.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9600 +get_ports + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +echo "int main() { return 0; }" > ${PWD}/prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +tempfiles prog prog.debug prog.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB -t0 -g0 ${PWD} > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +wait_ready $PORT1 'ready' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +## PR27892 +# Ensure DEBUGINFOD_MAXSIZE is functional and sends back the correct http +# code +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_RETRY_LIMIT=1 DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXSIZE=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find -v executable ${PWD}/prog 2> find-vlog$PORT1 || true +tempfiles find-vlog$PORT1 +errfiles find-vlog$PORT1 +echo "Checking maxsize" +grep "using max size 1B" find-vlog$PORT1 +echo "Checking maxsize" +grep 'serving file '$(realpath ${PWD})'/prog' vlog$PORT1 +echo "Checking maxsize" +grep 'File too large' vlog$PORT1 +if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then + echo "File cached after maxsize check" + err +fi +# Ensure no file is downloaded for longer than DEBUGINFOD_MAXTIME +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXTIME=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo ${PWD}/prog.debug 2> find-vlog$PORT1 || true +tempfiles find-vlog$PORT1 +grep 'using max time' find-vlog$PORT1 +# Ensure p+r%o\$g.debug is NOT cached +if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then + echo "File cached after maxtime check" + err +fi + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0; diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh new file mode 100755 index 00000000..5946777a --- /dev/null +++ b/tests/run-debuginfod-tmp-home.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +mkdir F +mkdir -p $DEBUGINFOD_CACHE_PATH +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9700 +get_ports + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# And initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. + +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## + +# Test whether the cache default locations are correct +mkdir tmphome + +# $HOME/.cache should be created. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then + echo "could not find cache in $PWD/tmphome/.cache" + err +fi + +# $HOME/.cache should be found. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID +if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then + echo "could not find cache in $PWD/tmphome/.cache" + err +fi +# $XDG_CACHE_HOME should take priority over $HOME.cache. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then + echo "could not find cache in $PWD/tmpxdg/" + err +fi + +# A cache at the old default location ($HOME/.debuginfod_client_cache) should take +# priority over $HOME/.cache, $XDG_CACHE_HOME. +cp -vr $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache || true +# ||true is for tolerating errors, such a valgrind or something else +# leaving negative-hit files in there + +# Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME. +mkdir tmphome/.debuginfod_client_cache/deadbeef +echo ELF... > tmphome/.debuginfod_client_cache/deadbeef/debuginfo +filename=`testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo deadbeef` +cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo + +# $DEBUGINFO_CACHE_PATH should take priority over all else. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then + echo "could not find cache in $PWD/tmpcache/" + err +fi +rm -rf ${PWD}/tmphome/ ${PWD}/tmpxdg ${PWD}/tmpcache + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-webapi-concurrency.sh b/tests/run-debuginfod-webapi-concurrency.sh new file mode 100755 index 00000000..47dcadcc --- /dev/null +++ b/tests/run-debuginfod-webapi-concurrency.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x + +mkdir Z +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=12000 +get_ports + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +cp -rvp ${abs_srcdir}/debuginfod-tars Z +tempfiles Z + + +for Cnum in "" "-C" "-C10" "-C100" +do + env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE $Cnum -d :memory: -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v --fdcache-fds=0 --fdcache-prefetch-fds=0 Z >> vlog$PORT1 2>&1 & + PID1=$! + tempfiles vlog$PORT1 + errfiles vlog$PORT1 + + wait_ready $PORT1 'ready' 1 + # Wait for server to finish indexing + wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT1 'thread_busy{role="scan"}' 0 + + # Do a bunch of lookups in parallel + lookup_nr=64 + for jobs in `seq $lookup_nr`; do + curl -s http://localhost:$PORT1/buildid/cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb/debuginfo > /dev/null & + done + + # all curls should succeed + wait_ready $PORT1 'http_responses_transfer_bytes_count{code="200",type="debuginfo"}' $lookup_nr + + (sleep 5; + curl -s http://localhost:$PORT1/metrics | egrep 'error|responses'; + kill $PID1) & + wait # for all curls, the ()& from just above, and for debuginfod + PID1=0 +done + +# Note this xfail comes too late, the above wait_ready for +# http_responses_transfer_bytes_count will have failed. +xfail "grep Server.reached.connection vlog$PORT1" # PR28661 + +exit 0 diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh new file mode 100755 index 00000000..c521a572 --- /dev/null +++ b/tests/run-debuginfod-writable.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir F +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9800 +get_ports + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# And initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +####################################################################### +# Test whether debuginfod-find is able to fetch those files. +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` +cmp $filename F/p+r%o\$g.debug +if [ `stat -c "%A" $filename` != "-r--------" ]; then + echo "cache file writable, boo" + err +fi + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0 diff --git a/tests/run-debuginfod-x-forwarded-for.sh b/tests/run-debuginfod-x-forwarded-for.sh new file mode 100755 index 00000000..5b756b22 --- /dev/null +++ b/tests/run-debuginfod-x-forwarded-for.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9900 +get_ports + +# Test when debuginfod hitting X-Forwarded-For hops limit. +# This test will start two servers (as a loop) with two different hop limits. + +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 0 -p $PORT1 > vlog$PORT1 2>&1 & +PID1=$! + +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 1 -p $PORT2 > vlog$PORT2 2>&1 & +PID2=$! + +wait_ready $PORT1 'ready' 1 +wait_ready $PORT2 'ready' 1 + +export DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true + +# Use a different buildid to avoid using same cache. +export DEBUGINFOD_URLS="http://127.0.0.1:$PORT2/" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 11234567 || true + +grep "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT1 +grep -v "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT2 | grep "not found" vlog$PORT2 + +kill $PID1 $PID2 +wait $PID1 $PID2 + +PID1=0 +PID2=0 + +exit 0 diff --git a/tests/run-large-elf-file.sh b/tests/run-large-elf-file.sh index 667d24d8..7116de53 100755 --- a/tests/run-large-elf-file.sh +++ b/tests/run-large-elf-file.sh @@ -1,5 +1,6 @@ #! /usr/bin/env bash # Copyright (C) 2019 Red Hat, Inc. +# Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org> # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify @@ -26,6 +27,16 @@ if test $long_bit -ne 64; then exit 77 fi +# The test binary also needs to be 64bits itself +elfclass=64 +testrun ${abs_top_builddir}/src/readelf -h ${abs_builddir}/addsections | grep ELF32 \ + && elfclass=32 +echo elfclass: $elfclass +if test $elfclass -ne 64; then + echo "Only 64bit binaries can create > 4GB ELF files" + exit 77 +fi + # These tests need lots of disk space since they test files > 4GB. # Skip if there just isn't enough (2.5 * 4 = 10GB). space_available=$[$(stat -f --format="%a*%S" .)/(1024 * 1024 * 1024)] diff --git a/tests/run-nvidia-extended-linemap-libdw.sh b/tests/run-nvidia-extended-linemap-libdw.sh new file mode 100755 index 00000000..d1df2cf3 --- /dev/null +++ b/tests/run-nvidia-extended-linemap-libdw.sh @@ -0,0 +1,60 @@ +# Copyright (C) 2011 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# NOTE: +# the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2 +# nvcc -o main main.cu -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80 -lcudart -lcuda -lstdc++ -lm +# cuobjdump -xelf all main +# mv main.sm_80.cubin testfile_nvidia_linemap + +testfiles testfile_nvidia_linemap +testrun_compare ${abs_top_builddir}/tests/nvidia_extended_linemap_libdw testfile_nvidia_linemap << EOF +off = 0 + 18 lines +0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:25:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +10: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:26:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +40: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:27:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +90: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:25:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +a0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28 +150: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:9:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28 +1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +220: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:9:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +2b0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +2f0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +2f0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:18:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + _Z1aPiS_S_ inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +330: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:19:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + _Z1aPiS_S_ inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +3c0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:33:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +480: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:33:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +EOF diff --git a/tests/run-nvidia-extended-linemap-readelf.sh b/tests/run-nvidia-extended-linemap-readelf.sh new file mode 100755 index 00000000..1fa9b7b4 --- /dev/null +++ b/tests/run-nvidia-extended-linemap-readelf.sh @@ -0,0 +1,120 @@ +# Copyright (C) 2011 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# NOTE: +# the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2 +# nvcc -o main main.cu -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80 -lcudart -lcuda -lstdc++ -lm +# cuobjdump -xelf all main +# mv main.sm_80.cubin testfile_nvidia_linemap + +testfiles testfile_nvidia_linemap +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_nvidia_linemap << EOF + +DWARF section [ 5] '.debug_line' at offset 0x3e0: + +Table at offset 0: + + Length: 253 + DWARF version: 2 + Prologue length: 111 + Address size: 8 + Segment selector size: 0 + Min instruction length: 1 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 10 + +Opcodes: + [1] 0 arguments + [2] 1 argument + [3] 1 argument + [4] 1 argument + [5] 1 argument + [6] 0 arguments + [7] 0 arguments + [8] 0 arguments + [9] 1 argument + +Directory table: + /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4 + +File name table: + Entry Dir Time Size Name + 1 1 1626104146 1819 main.cu + 2 1 1626104111 211 bar.h + +Line number statements: + [ 79] extended opcode 2: set address to 0 <kernel> + [ 84] set file to 1 + [ 86] advance line by constant 24 to 25 + [ 88] copy + [ 89] special opcode 240: address+16 = 0x10 <kernel+0x10>, line+1 = 26 + [ 8a] advance line by constant 1 to 27 + [ 8c] advance address by 48 to 0x40 <kernel+0x40> + [ 8e] copy + [ 8f] advance line by constant -2 to 25 + [ 91] advance address by 80 to 0x90 <kernel+0x90> + [ 94] copy + [ 95] special opcode 242: address+16 = 0xa0 <kernel+0xa0>, line+3 = 28 + [ 96] advance address by 96 to 0x100 <kernel+0x100> + [ 99] copy + [ 9a] extended opcode 144: set inlined context 6, function name foo (0x0) + [ 9f] advance line by constant -20 to 8 + [ a1] copy + [ a2] advance line by constant 1 to 9 + [ a4] advance address by 80 to 0x150 <kernel+0x150> + [ a7] copy + [ a8] extended opcode 144: set inlined context 0, function name foo (0x0) + [ ad] advance line by constant 22 to 31 + [ af] advance address by 144 to 0x1e0 <kernel+0x1e0> + [ b2] copy + [ b3] set file to 2 + [ b5] extended opcode 144: set inlined context 9, function name bar (0x4) + [ ba] advance line by constant -25 to 6 + [ bc] copy + [ bd] set file to 1 + [ bf] extended opcode 144: set inlined context 10, function name foo (0x0) + [ c4] advance line by constant 2 to 8 + [ c6] copy + [ c7] advance line by constant 1 to 9 + [ c9] advance address by 64 to 0x220 <kernel+0x220> + [ cc] copy + [ cd] set file to 2 + [ cf] extended opcode 144: set inlined context 9, function name bar (0x4) + [ d4] advance line by constant -2 to 7 + [ d6] advance address by 144 to 0x2b0 <kernel+0x2b0> + [ d9] copy + [ da] advance line by constant 1 to 8 + [ dc] advance address by 64 to 0x2f0 <kernel+0x2f0> + [ df] copy + [ e0] set file to 1 + [ e2] extended opcode 144: set inlined context 14, function name _Z1aPiS_S_ (0x8) + [ e7] advance line by constant 10 to 18 + [ e9] copy + [ ea] advance line by constant 1 to 19 + [ ec] advance address by 64 to 0x330 <kernel+0x330> + [ ef] copy + [ f0] extended opcode 144: set inlined context 0, function name foo (0x0) + [ f5] advance line by constant 14 to 33 + [ f7] advance address by 144 to 0x3c0 <kernel+0x3c0> + [ fa] copy + [ fb] advance address by 192 to 0x480 + [ fe] extended opcode 1: end of sequence +EOF diff --git a/tests/run-readelf-d.sh b/tests/run-readelf-d.sh index d0b6ed24..69b01c49 100755 --- a/tests/run-readelf-d.sh +++ b/tests/run-readelf-d.sh @@ -34,7 +34,7 @@ testfiles testlib_dynseg.so testrun_compare ${abs_top_builddir}/src/readelf -d testlib_dynseg.so <<\EOF -Dynamic segment contains 28 entries: +Dynamic segment contains 23 entries: Addr: 0x00000000000017e0 Offset: 0x0007e0 Link to section: [ 3] '.dynstr' Type Value PLTGOT 0x00000000000019c8 @@ -60,11 +60,6 @@ Dynamic segment contains 28 entries: VERNEED 0x0000000000000498 VERNEEDNUM 2 NULL - NULL - NULL - NULL - NULL - NULL EOF exit 0 diff --git a/tests/run-readelf-fat-lto.sh b/tests/run-readelf-fat-lto.sh new file mode 100755 index 00000000..e03cec3a --- /dev/null +++ b/tests/run-readelf-fat-lto.sh @@ -0,0 +1,53 @@ +. $srcdir/test-subr.sh + +# - s.c +# int main_argc_remaining; +# +# int main_argc() { +# int result = 0; +# if (main_argc_remaining) +# result = 0; +# +# return 0; +# } +# +# gcc -gdwarf-5 -c -o testfile-dwarf5-fat-lto.o -flto -O s.c -g -ffat-lto-objects + +testfiles testfile-dwarf5-fat-lto.o +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ranges -N -U testfile-dwarf5-fat-lto.o << EOF + +DWARF section [26] '.debug_loclists' at offset 0x7db: +Table at Offset 0x0: + + Length: 24 + DWARF version: 5 + Address size: 8 + Segment size: 0 + Offset entries: 0 + CU [ c] base: 000000000000000000 + + Offset: c, Index: 0 + view pair 2, 3 + + Offset: e, Index: 2 + start_length 0x0, 0 + [ 0] lit0 + [ 1] stack_value + end_of_list + + +DWARF section [30] '.debug_rnglists' at offset 0x827: +Table at Offset 0x0: + + Length: 19 + DWARF version: 5 + Address size: 8 + Segment size: 0 + Offset entries: 0 + CU [ c] base: 000000000000000000 + + Offset: c, Index: 0 + start_length 0x0, 8 + end_of_list + +EOF diff --git a/tests/run-readelf-multi-noline.sh b/tests/run-readelf-multi-noline.sh new file mode 100755 index 00000000..d72a9fd4 --- /dev/null +++ b/tests/run-readelf-multi-noline.sh @@ -0,0 +1,170 @@ +#! /bin/sh +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# = a.c = +# int a; + +# = b.c = +# int b; + +# = m.c = +# int main () { } + +# gcc -g -o testfile_multi_noline a.c b.c m.c + +testfiles testfile_multi_noline + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_multi_noline <<\EOF + +DWARF section [29] '.debug_line' at offset 0x1221: + +Table at offset 0: + + Length: 32 + DWARF version: 3 + Prologue length: 26 + Address size: 8 + Segment selector size: 0 + Min instruction length: 4 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 a.c + +No line number statements. + +Table at offset 36: + + Length: 32 + DWARF version: 3 + Prologue length: 26 + Address size: 8 + Segment selector size: 0 + Min instruction length: 4 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 b.c + +No line number statements. + +Table at offset 72: + + Length: 54 + DWARF version: 3 + Prologue length: 26 + Address size: 8 + Segment selector size: 0 + Min instruction length: 4 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 m.c + +Line number statements: + [ 6c] set column to 13 + [ 6e] extended opcode 2: set address to +0x724 <main> + [ 79] copy + [ 7a] set column to 15 + [ 7c] special opcode 32: address+4 = +0x728 <main+0x4>, line+0 = 1 + [ 7d] advance address by 4 to +0x72c + [ 7f] extended opcode 1: end of sequence +EOF + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile_multi_noline <<\EOF + +DWARF section [29] '.debug_line' at offset 0x1221: + + CU [b] a.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + CU [44] b.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + CU [7d] m.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + /tmp/m.c (mtime: 0, length: 0) + 1:13 S 0 0 0 +0x0000000000000724 <main> + 1:15 S 0 0 0 +0x0000000000000728 <main+0x4> + 1:15 S * 0 0 0 +0x000000000000072b <main+0x7> + +EOF + +exit 0 diff --git a/tests/run-strip-largealign.sh b/tests/run-strip-largealign.sh new file mode 100755 index 00000000..4f81d3c1 --- /dev/null +++ b/tests/run-strip-largealign.sh @@ -0,0 +1,35 @@ +#! /bin/sh +# Copyright (C) 2021 Runsafe Security, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +. $srcdir/test-subr.sh + +# = testfile-largealign.S = +# section .data +# align 4096 +# dd 0x12345678 +# +# nasm -f elf64 -o testfile-largealign.o testfile-largealign.S + +infile=testfile-largealign.o +outfile=$infile.stripped + +testfiles $infile +tempfiles $outfile + +testrun ${abs_top_builddir}/src/strip -o $outfile $infile +testrun ${abs_top_builddir}/src/elflint --gnu $outfile diff --git a/tests/run-varlocs-vars.sh b/tests/run-varlocs-vars.sh new file mode 100755 index 00000000..e7598bf0 --- /dev/null +++ b/tests/run-varlocs-vars.sh @@ -0,0 +1,93 @@ +#! /bin/sh +# Copyright (C) 2013, 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# Testfiles generated with: +# +# $ cat foo.c +# int x = 1; +# int y = 2; +# +# for cc in gcc clang; do +# for v in 4 5; do +# for w in 32 64; do +# out="testfile-vars-$cc-dwarf$v-$w.o" +# "$cc" -m"$w" -Wall -Wextra -gdwarf-"$v" -c foo.c -o "$out" +# done +# done +# done + +testfiles testfile-vars-clang-dwarf4-32.o +testfiles testfile-vars-clang-dwarf4-64.o +testfiles testfile-vars-clang-dwarf5-32.o +testfiles testfile-vars-clang-dwarf5-64.o +testfiles testfile-vars-gcc-dwarf4-32.o +testfiles testfile-vars-gcc-dwarf4-64.o +testfiles testfile-vars-gcc-dwarf5-32.o +testfiles testfile-vars-gcc-dwarf5-64.o + +tempfiles varlocs.out +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf4-32.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr(0x0)} + location (exprloc) {addr(0x4)} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf4-64.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr(0x0)} + location (exprloc) {addr(0x4)} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf5-32.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr: 0x0} + location (exprloc) {addr: 0x4} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf5-32.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr: 0x0} + location (exprloc) {addr: 0x4} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf4-32.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr(0x0)} + location (exprloc) {addr(0x4)} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf4-64.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr(0x0)} + location (exprloc) {addr(0x4)} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf5-32.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr(0x0)} + location (exprloc) {addr(0x4)} +EOF + +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-gcc-dwarf5-64.o | grep exprloc > varlocs.out +diff -u varlocs.out - <<EOF + location (exprloc) {addr(0x0)} + location (exprloc) {addr(0x4)} +EOF + +exit 0 diff --git a/tests/show-die-info.c b/tests/show-die-info.c index 34e27a3b..1a3191cd 100644 --- a/tests/show-die-info.c +++ b/tests/show-die-info.c @@ -97,7 +97,7 @@ handle (Dwarf *dbg, Dwarf_Die *die, int n) printf ("%*s Attrs :", n * 5, ""); for (cnt = 0; cnt < 0xffff; ++cnt) if (dwarf_hasattr (die, cnt)) - printf (" %s", dwarf_attr_string (cnt)); + printf (" %s", dwarf_attr_string (cnt) ?: "<unknown>"); puts (""); if (dwarf_hasattr (die, DW_AT_low_pc) && dwarf_lowpc (die, &addr) == 0) diff --git a/tests/testfile-dwarf5-fat-lto.o.bz2 b/tests/testfile-dwarf5-fat-lto.o.bz2 Binary files differnew file mode 100644 index 00000000..ce3659f4 --- /dev/null +++ b/tests/testfile-dwarf5-fat-lto.o.bz2 diff --git a/tests/testfile-largealign.o.bz2 b/tests/testfile-largealign.o.bz2 Binary files differnew file mode 100644 index 00000000..324c1eae --- /dev/null +++ b/tests/testfile-largealign.o.bz2 diff --git a/tests/testfile-vars-clang-dwarf4-32.o.bz2 b/tests/testfile-vars-clang-dwarf4-32.o.bz2 Binary files differnew file mode 100644 index 00000000..c1ddf81f --- /dev/null +++ b/tests/testfile-vars-clang-dwarf4-32.o.bz2 diff --git a/tests/testfile-vars-clang-dwarf4-64.o.bz2 b/tests/testfile-vars-clang-dwarf4-64.o.bz2 Binary files differnew file mode 100644 index 00000000..df33299f --- /dev/null +++ b/tests/testfile-vars-clang-dwarf4-64.o.bz2 diff --git a/tests/testfile-vars-clang-dwarf5-32.o.bz2 b/tests/testfile-vars-clang-dwarf5-32.o.bz2 Binary files differnew file mode 100644 index 00000000..b1d6b6c4 --- /dev/null +++ b/tests/testfile-vars-clang-dwarf5-32.o.bz2 diff --git a/tests/testfile-vars-clang-dwarf5-64.o.bz2 b/tests/testfile-vars-clang-dwarf5-64.o.bz2 Binary files differnew file mode 100644 index 00000000..adf6c6a5 --- /dev/null +++ b/tests/testfile-vars-clang-dwarf5-64.o.bz2 diff --git a/tests/testfile-vars-gcc-dwarf4-32.o.bz2 b/tests/testfile-vars-gcc-dwarf4-32.o.bz2 Binary files differnew file mode 100644 index 00000000..da9aac73 --- /dev/null +++ b/tests/testfile-vars-gcc-dwarf4-32.o.bz2 diff --git a/tests/testfile-vars-gcc-dwarf4-64.o.bz2 b/tests/testfile-vars-gcc-dwarf4-64.o.bz2 Binary files differnew file mode 100644 index 00000000..26421644 --- /dev/null +++ b/tests/testfile-vars-gcc-dwarf4-64.o.bz2 diff --git a/tests/testfile-vars-gcc-dwarf5-32.o.bz2 b/tests/testfile-vars-gcc-dwarf5-32.o.bz2 Binary files differnew file mode 100644 index 00000000..cb1c7054 --- /dev/null +++ b/tests/testfile-vars-gcc-dwarf5-32.o.bz2 diff --git a/tests/testfile-vars-gcc-dwarf5-64.o.bz2 b/tests/testfile-vars-gcc-dwarf5-64.o.bz2 Binary files differnew file mode 100644 index 00000000..e286f8f7 --- /dev/null +++ b/tests/testfile-vars-gcc-dwarf5-64.o.bz2 diff --git a/tests/testfile_multi_noline.bz2 b/tests/testfile_multi_noline.bz2 Binary files differnew file mode 100755 index 00000000..39320d1f --- /dev/null +++ b/tests/testfile_multi_noline.bz2 diff --git a/tests/testfile_nvidia_linemap.bz2 b/tests/testfile_nvidia_linemap.bz2 Binary files differnew file mode 100644 index 00000000..8a6d09fb --- /dev/null +++ b/tests/testfile_nvidia_linemap.bz2 diff --git a/tests/varlocs.c b/tests/varlocs.c index 152c6555..d2c13767 100644 --- a/tests/varlocs.c +++ b/tests/varlocs.c @@ -76,7 +76,7 @@ dwarf_encoding_string (unsigned int code) if (likely (code < sizeof (known) / sizeof (known[0]))) return known[code]; - return NULL; + return "<unknown encoding>"; } static const char * @@ -88,7 +88,7 @@ dwarf_tag_string (unsigned int tag) DWARF_ALL_KNOWN_DW_TAG #undef DWARF_ONE_KNOWN_DW_TAG default: - return NULL; + return "<unknown tag>"; } } @@ -101,7 +101,7 @@ dwarf_attr_string (unsigned int attrnum) DWARF_ALL_KNOWN_DW_AT #undef DWARF_ONE_KNOWN_DW_AT default: - return NULL; + return "<unknown attr>"; } } @@ -114,7 +114,7 @@ dwarf_form_string (unsigned int form) DWARF_ALL_KNOWN_DW_FORM #undef DWARF_ONE_KNOWN_DW_FORM default: - return NULL; + return "<unknown form>"; } } @@ -160,7 +160,7 @@ dwarf_opcode_string (unsigned int code) if (likely (code < sizeof (known) / sizeof (known[0]))) return known[code]; - return NULL; + return "<unknown opcode>"; } // Forward reference for print_expr_block. @@ -198,7 +198,6 @@ print_expr (Dwarf_Attribute *attr, Dwarf_Op *expr, Dwarf_Addr addr, int depth) uint8_t atom = expr->atom; const char *opname = dwarf_opcode_string (atom); - assert (opname != NULL); switch (atom) { |