diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-05-10 06:54:48 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-05-10 06:54:48 +0000 |
commit | 2066e81c180fbab585302b058d2d952adebe1094 (patch) | |
tree | 37dc9588c44c399f0f459a03240c68a969c95353 | |
parent | be29a366cf3b9f85963f28a1f72d3079c34e81af (diff) | |
parent | cf803a80b3135abe66f38db75d4e0b00928f4059 (diff) | |
download | elfutils-android13-mainline-adbd-release.tar.gz |
Snap for 8564071 from cf803a80b3135abe66f38db75d4e0b00928f4059 to mainline-adbd-releaseaml_adb_331610000aml_adb_331314020aml_adb_331113120aml_adb_331011050aml_adb_331011040android13-mainline-adbd-release
Change-Id: I4dbe862855bf6d0eae830d86f1250f86d981de2e
186 files changed, 13460 insertions, 5202 deletions
@@ -62,6 +62,7 @@ cc_defaults { "//external/elfutils:__subpackages__", "//external/libabigail:__subpackages__", "//external/libbpf:__subpackages__", + "//external/stg:__subpackages__", ], } @@ -90,10 +91,17 @@ cc_library { enabled: false, }, }, + musl: { + cflags: [ + "-include AndroidFixup.h", + ], + }, }, visibility: [ "//device/google/contexthub/util/nanoapp_postprocess", + "//external/bcc/libbpf-tools", + "//external/bpftool", "//external/igt-gpu-tools", "//external/mesa3d", ], @@ -112,6 +120,9 @@ cc_library_headers { android: { export_include_dirs: ["bionic-fixup"], }, + musl: { + export_include_dirs: ["bionic-fixup"], + }, }, visibility: [":__subpackages__"], } @@ -123,6 +134,12 @@ cc_library_host_static { darwin: { enabled: false, }, + musl: { + static_libs: [ + "libfts", + "libz", + ], + }, }, srcs: [ "backends/*.c", @@ -149,6 +166,8 @@ cc_library_host_static { "libdwfl/debuginfod-client.c", "libdwfl/elf-from-memory.c", "libdwfl/link_map.c", + // These depend on argp which doesn't exist in musl + "libdwfl/argp-std.c", // Those are common source files actually used as headers and not // compiled standalone. "backends/common-reloc.c", @@ -168,5 +187,8 @@ cc_library_host_static { static_libs: [ "libelf" ], + whole_static_libs: [ + "libeu", + ], compile_multilib: "64", } @@ -1,3 +1,46 @@ +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. + * NEWS: Add 0.185 entries. + +2021-05-10 Mark Wielaard <mark@klomp.org> + + * configure.ac (AC_INIT): Set version to 0.184. + * NEWS: Add libdw, translation and debuginfod-client entries. + +2021-03-30 Frank Ch. Eigler <fche@redhat.com> + + * configure.ac: Look for pthread_setname_np. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * configure.ac: Add -Wno-packed-not-aligned check. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * configure.ac: Add -Wtrampolines check. + 2021-02-05 Mark Wielaard <mark@klomp.org> * configure.ac (AC_INIT): Set version to 0.183. @@ -1,3 +1,56 @@ +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 + return an error are retried. + +elfcompress: Always exit with code 0 when the operation succeeds (even + when nothing was done). On error the exit code is now always 1. + +Version 0.184 + +debuginfod: Use libarchive's bsdtar as the .deb-family file unpacker. + +debuginfod-client: Client caches negative results. If a query for a + file failed with 404, an empty 000 permission + file is created in the cache. This will prevent + requesting the same file for the next 10 minutes. + + Client objects now carry long-lived curl handles + for outgoing connections. This makes it more + efficient for multiple sequential queries, because + the TCP connections and/or TLS state info are kept + around awhile, avoiding O(100ms) setup latencies. + +libdw: handle DW_FORM_indirect when reading attributes + +translations: Update Polish translation. + Version 0.183 debuginfod: New thread-busy metric and more detailed error metrics. diff --git a/backends/ChangeLog b/backends/ChangeLog index eb15c81d..b48af4e1 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,21 @@ +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. + * arm_symbol.c (arm_data_marker_symbol): Likewise. + 2021-02-01 Érico Nogueira <ericonr@disroot.org> * ppc_initreg.c: Also include <asm/ptrace.h>. diff --git a/backends/aarch64_symbol.c b/backends/aarch64_symbol.c index 464a5695..15e0805b 100644 --- a/backends/aarch64_symbol.c +++ b/backends/aarch64_symbol.c @@ -30,6 +30,8 @@ # include <config.h> #endif +#include <system.h> + #include <elf.h> #include <stddef.h> #include <string.h> @@ -104,7 +106,7 @@ aarch64_data_marker_symbol (const GElf_Sym *sym, const char *sname) return (sym != NULL && sname != NULL && sym->st_size == 0 && GELF_ST_BIND (sym->st_info) == STB_LOCAL && GELF_ST_TYPE (sym->st_info) == STT_NOTYPE - && (strcmp (sname, "$d") == 0 || strncmp (sname, "$d.", 3) == 0)); + && (strcmp (sname, "$d") == 0 || startswith (sname, "$d."))); } const char * diff --git a/backends/arm_symbol.c b/backends/arm_symbol.c index c8e1d7f9..a733cfff 100644 --- a/backends/arm_symbol.c +++ b/backends/arm_symbol.c @@ -30,6 +30,8 @@ # include <config.h> #endif +#include <system.h> + #include <elf.h> #include <stddef.h> #include <string.h> @@ -154,5 +156,5 @@ arm_data_marker_symbol (const GElf_Sym *sym, const char *sname) return (sym != NULL && sname != NULL && sym->st_size == 0 && GELF_ST_BIND (sym->st_info) == STB_LOCAL && GELF_ST_TYPE (sym->st_info) == STT_NOTYPE - && (strcmp (sname, "$d") == 0 || strncmp (sname, "$d.", 3) == 0)); + && (strcmp (sname, "$d") == 0 || startswith (sname, "$d."))); } 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); +} @@ -51,10 +51,22 @@ don't. */ #define HAVE_DECL_RAWMEMCHR 1 +/* Define to 1 if you have the declaration of `reallocarray', and to 0 if you + don't. */ +#define HAVE_DECL_REALLOCARRAY 1 + /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #define HAVE_DECL_STRERROR_R 1 +/* Define to 1 if you have the <error.h> header file. */ +#if defined(__BIONIC__) || defined(__GLIBC__) +#define HAVE_ERROR_H 1 +#endif + +/* Define to 1 if you have the <err.h> header file. */ +#define HAVE_ERR_H 1 + /* Defined if __attribute__((fallthrough)) is supported */ #define HAVE_FALLTHROUGH 1 @@ -70,22 +82,25 @@ /* Define to 1 if you have the <inttypes.h> header file. */ #define HAVE_INTTYPES_H 1 -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - /* Define to 1 if you have the `process_vm_readv' function. */ #define HAVE_PROCESS_VM_READV 1 +/* Enable pthread_setname_np */ +#define HAVE_PTHREAD_SETNAME_NP 1 + /* Define to 1 if `stdatomic.h` is provided by the system, 0 otherwise. */ #define HAVE_STDATOMIC_H 1 /* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1 +/* Define to 1 if you have the <stdio.h> header file. */ +#define HAVE_STDIO_H 1 + /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 -/* Define to 1 if you have the `strerror_r' function. */ +/* Define if you have `strerror_r'. */ #define HAVE_STRERROR_R 1 /* Define to 1 if you have the <strings.h> header file. */ @@ -119,7 +134,7 @@ #define PACKAGE_NAME "elfutils" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "elfutils 0.183" +#define PACKAGE_STRING "elfutils 0.186" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "elfutils" @@ -128,16 +143,20 @@ #define PACKAGE_URL "http://elfutils.org/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "0.183" +#define PACKAGE_VERSION "0.186" /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 8 -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* Define to 1 if strerror_r returns char *. */ +#if defined(__GLIBC__) || defined(__BIONIC__) #define STRERROR_R_CHAR_P 1 +#endif /* Support bzip2 decompression via -lbz2. */ /* #undef USE_BZLIB */ @@ -158,17 +177,12 @@ /* #undef USE_ZSTD */ /* Version number of package */ -#define VERSION "0.183" +#define VERSION "0.186" /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #define YYTEXT_POINTER 1 -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ diff --git a/config/ChangeLog b/config/ChangeLog index d84d38c3..acbaaa88 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,51 @@ +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. + +2021-05-11 Frank Ch. Eigler <fche@redhat.com> + + * elfutils.spec.in: Add procps to BuildRequires: for %check. + +2021-05-10 Mark Wielaard <mark@klomp.org> + + * elfutils.spec.in: Update for 0.184. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * eu.am (NO_PACKED_NOT_ALIGNED_WARNING): New variable. + (AM_CFLAGS): Use NO_PACKED_NOT_ALIGNED_WARNING. + (AM_CXXFLAGS): Likewise. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * eu.am (TRAMPOLINES_WARNING): New variable. + (AM_CFLAGS): Use TRAMPOLINES_WARNING. + (AM_CXXFLAGS): Likewise. + +2021-02-12 Mark Wielaard <mark@klomp.org> + + * elfutils.spec.in: Escape %%check in comment. + 2021-02-05 Mark Wielaard <mark@klomp.org> * elfutils.spec.in: Update for 0.183. 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 46b404f9..aac0dffc 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -35,8 +35,9 @@ BuildRequires: pkgconfig(libarchive) >= 3.1.2 # For tests need to bunzip2 test files. BuildRequires: bzip2 BuildRequires: zstd -# For the run-debuginfod-find.sh test case in %check for /usr/sbin/ss +# For the run-debuginfod-find.sh test case in %%check for /usr/sbin/ss etc. BuildRequires: iproute +BuildRequires: procps BuildRequires: bsdtar BuildRequires: curl @@ -298,12 +299,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 @@ -314,6 +318,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 @@ -332,6 +337,50 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* 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. +- elfcompress: Always exit with code 0 when the operation succeeds + (even when nothing was done). On error the exit code is + now always 1. + +* Mon May 10 2021 Mark Wielaard <mark@klomp.org> 0.184-1 +- debuginfod: Use libarchive's bsdtar as the .deb-family file unpacker. +- debuginfod-client: Client caches negative results. If a query for a + file failed with 404, an empty 000 permission + file is created in the cache. This will prevent + requesting the same file for the next 10 minutes. +- Client objects now carry long-lived curl handles + for outgoing connections. This makes it more + efficient for multiple sequential queries, because + the TCP connections and/or TLS state info are kept + around awhile, avoiding O(100ms) setup latencies. +- libdw: handle DW_FORM_indirect when reading attributes +- translations: Update Polish translation. + * Fri Feb 5 2021 Mark Wielaard <mark@klomp.org> 0.183-1 - debuginfod: New thread-busy metric and more detailed error metrics. New --fdcache-mintmp and tracking of filesystem freespace. diff --git a/config/eu.am b/config/eu.am index 6c3c444f..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 @@ -64,29 +66,45 @@ endif if HAVE_IMPLICIT_FALLTHROUGH_WARNING # Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the # warning +if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5 else +IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough +endif +else IMPLICIT_FALLTHROUGH_WARNING= endif +if HAVE_TRAMPOLINES_WARNING +TRAMPOLINES_WARNING=-Wtrampolines +else +TRAMPOLINES_WARNING= +endif + +if HAVE_NO_PACKED_NOT_ALIGNED_WARNING +NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned +else +NO_PACKED_NOT_ALIGNED_WARNING= +endif + AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ - -Wold-style-definition -Wstrict-prototypes -Wtrampolines \ + -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ $(if $($(*F)_no_Werror),,-Werror) \ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ - $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ + $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ $($(*F)_CFLAGS) AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ - -Wtrampolines \ + $(TRAMPOLINES_WARNING) \ $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ $(if $($(*F)_no_Werror),,-Werror) \ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ - $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ + $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ $($(*F)_CXXFLAGS) COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) diff --git a/config/profile.csh.in b/config/profile.csh.in index 0a2d6d16..01f7c2f2 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 @sysconfdir@/debuginfod/*.urls 2>/dev/null" | tr '\n' ' '` + if ( "$debuginfod_urls" != "" ) then + setenv DEBUGINFOD_URLS "$debuginfod_urls" + endif + unset debuginfod_urls + unset prefix endif diff --git a/config/profile.sh.in b/config/profile.sh.in index aa228a0d..afce3963 100644 --- a/config/profile.sh.in +++ b/config/profile.sh.in @@ -1,4 +1,17 @@ -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=`sh -c "cat @sysconfdir@/debuginfod/*.urls 2>/dev/null" | tr '\n' ' '` + if [ -n "$debuginfod_urls" ]; then + DEBUGINFOD_URLS="$debuginfod_urls" + export DEBUGINFOD_URLS + fi + unset debuginfod_urls + unset prefix fi diff --git a/configure.ac b/configure.ac index d345495d..ff9581d2 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,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.183],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) +AC_INIT([elfutils],[0.186],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) dnl Workaround for older autoconf < 2.64 m4_ifndef([AC_PACKAGE_URL], @@ -87,7 +87,7 @@ 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_RANLIB AC_PROG_YACC AM_PROG_LEX @@ -96,39 +96,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" @@ -425,9 +392,15 @@ 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]) +AC_CHECK_HEADERS([error.h]) +AC_CHECK_HEADERS([err.h]) + old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -D_GNU_SOURCE" AC_FUNC_STRERROR_R() @@ -519,12 +492,42 @@ CFLAGS="$old_CFLAGS"]) AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING, [test "x$ac_cv_implicit_fallthrough" != "xno"]) +# Check whether the compiler additionally accepts -Wimplicit-fallthrough=5 +# GCC accepts this and 5 means "don't parse any fallthrough comments and +# only accept the fallthrough attribute" +AC_CACHE_CHECK([whether the compiler accepts -Wimplicit-fallthrough=5], ac_cv_implicit_fallthrough_5, [dnl +old_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Wimplicit-fallthrough=5 -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], + ac_cv_implicit_fallthrough_5=yes, ac_cv_implicit_fallthrough_5=no) +CFLAGS="$old_CFLAGS"]) +AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_5_WARNING, + [test "x$ac_cv_implicit_fallthrough_5" != "xno"]) + # Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported if test "$ac_cv_implicit_fallthrough" = "yes"; then AC_DEFINE([HAVE_FALLTHROUGH], [1], [Defined if __attribute__((fallthrough)) is supported]) fi +AC_CACHE_CHECK([whether the compiler accepts -Wtrampolines], ac_cv_trampolines, [dnl +old_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Wtrampolines -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], + ac_cv_trampolines=yes, ac_cv_trampolines=no) +CFLAGS="$old_CFLAGS"]) +AM_CONDITIONAL(HAVE_TRAMPOLINES_WARNING, + [test "x$ac_cv_trampolines" != "xno"]) + +AC_CACHE_CHECK([whether the compiler accepts -Wno-packed-not-aligned], ac_cv_no_packed_not_aligned, [dnl +old_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Wno-packed-not-aligned -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], + ac_cv_no_packed_not_aligned=yes, ac_cv_no_packed_not_aligned=no) +CFLAGS="$old_CFLAGS"]) +AM_CONDITIONAL(HAVE_NO_PACKED_NOT_ALIGNED_WARNING, + [test "x$ac_cv_no_packed_not_aligned" != "xno"]) + saved_LIBS="$LIBS" AC_SEARCH_LIBS([argp_parse], [argp]) LIBS="$saved_LIBS" @@ -717,6 +720,9 @@ AS_IF([test "x$enable_libdebuginfod" != "xno"], [ fi ]) +AC_CHECK_LIB(pthread, pthread_setname_np, [ + AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable pthread_setname_np])]) + AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"], [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])]) AS_IF([test "x$enable_libdebuginfod" = "xdummy"], diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 8de88522..f06d3ee3 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,255 @@ +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 + * debuginfod-client.c (debuginfod_client): Retain only + long-lived multi handle from PR27701 work. + (debuginfo_begin,debuginfod_end): ctor/dtor for surviving field only. + (debuginfod_query_server): Rework to reuse multi handle only. + +2021-04-19 Martin Liska <mliska@suse.cz> + + * debuginfod-client.c (debuginfod_query_server): Use startswith. + (debuginfod_add_http_header): Likewise. + * debuginfod.cxx: Likewise. + +2021-05-04 Alice Zhang <alizhang@redhat.com> + + * debuginfod-client.c (cache_miss_default_s): New static time_t, + defaults to 600 (10 minutes). + (cache_miss_filename): New static char pointer. + (debuginfod_config_cache): New static function. + (debuginfod_clean_cache): Use debuginfod_config_cache for + interval_path and max_unused_path. + (debuginfod_query_server): Check whether target_cache_path exists + as negative cache file and create target_cache_path when the server + returns ENOENT. Check cache_miss_path fir cache miss time. + +2021-04-26 Frank Ch. Eigler <fche@redhat.com> + + PR27571 + * debuginfod-client.c (debuginfod_query_server): Chmod 0400 files + delivered into the cache to prevent accidental modification. + +2021-04-26 Frank Ch. Eigler <fche@redhat.com> + + PR26125 + * debuginfod-client.c (debuginfod_clean_cache): For directory + rmdir, check mtime first. + (debuginfod_query_server): Try mkdir / mkstemp up to twice, + in case of race. + +2021-04-23 Frank Ch. Eigler <fche@redhat.com> + + PR27701 + * debuginfod-client.c (struct debuginfod_client): Add long-lived + CURL easy and multi handles. + (debuginfo_begin,debuginfod_end): ctor/dtor for these. + (debuginfod_query_server): Rework to reuse easy & multi handles. + (*_envvar): Just use the DEBUGINFOD_*_ENV_VAR directly instead. + + * debuginfod.cxx (dc_pool): New pile of reusable debuginfod_client + objects for upstream federation connections. + (debuginfod_pool_{begin,end,groom}): New functions. + (handle_buildid): Use them. + (handler_cb): Fix keep-alive given libmicrohttpd convention of multiple + callbacks. + +2021-04-15 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (groom): Only update database stats once. + +2021-04-15 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (elf_classify): Recognize symtab-only stripped files + like fedora's libicudata as debuginfo files. + +2021-03-30 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (main): Set child thread names. + +2021-03-07 Timm Bäder <tbaeder@redhat.com> + + * debuginfod-client.c (debuginfod_query_server): Tweak + double/long clamping arithmetic to avoid UB and warnings. + +2021-02-25 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (handler_cb): Filter webapi for bad + artifacttype keywords early for metric hygiene. + +2021-02-14 Frank Ch. Eigler <fche@redhat.com> + + * debuginfod.cxx (main -U): Use bsdtar unconditionally. Also map + the debian-compatible .ipk (openembedded distro family) to same. + 2021-02-04 Frank Ch. Eigler <fche@redhat.com> PR27092 low-memory handling diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index de26af5b..c875ee62 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1,5 +1,5 @@ /* Retrieve ELF / DWARF / source files from the debuginfod. - Copyright (C) 2019-2020 Red Hat, Inc. + 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 @@ -119,10 +119,15 @@ struct debuginfod_client /* File descriptor to output any verbose messages if > 0. */ int verbose_fd; + /* Maintain a long-lived curl multi-handle, which keeps a + connection/tls/dns cache to recently seen servers. */ + CURLM *server_mhandle; + /* Can contain all other context, like cache_path, server_urls, 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 @@ -131,6 +136,11 @@ struct debuginfod_client static const char *cache_clean_interval_filename = "cache_clean_interval_s"; static const time_t 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 */ +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"; @@ -140,17 +150,15 @@ static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */ The default parent directory is $HOME, or '/' if $HOME doesn't exist. */ static const char *cache_default_name = ".debuginfod_client_cache"; static const char *cache_xdg_name = "debuginfod_client"; -static const char *cache_path_envvar = DEBUGINFOD_CACHE_PATH_ENV_VAR; /* URLs of debuginfods, separated by url_delim. */ -static const char *server_urls_envvar = DEBUGINFOD_URLS_ENV_VAR; static const char *url_delim = " "; -static const char url_delim_char = ' '; /* Timeout for debuginfods, in seconds (to get at least 100K). */ -static const char *server_timeout_envvar = DEBUGINFOD_TIMEOUT_ENV_VAR; 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. */ @@ -176,6 +184,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 @@ -206,6 +217,38 @@ debuginfod_write_callback (char *ptr, size_t size, size_t nmemb, void *data) return (size_t) write(d->fd, (void*)ptr, count); } +/* handle config file read and write */ +static int +debuginfod_config_cache(char *config_path, + long cache_config_default_s, + struct stat *st) +{ + int fd; + /* if the config file doesn't exist, create one with DEFFILEMODE*/ + if(stat(config_path, st) == -1) + { + fd = open(config_path, O_CREAT | O_RDWR, DEFFILEMODE); + if (fd < 0) + return -errno; + + if (dprintf(fd, "%ld", cache_config_default_s) < 0) + return -errno; + } + + long cache_config; + FILE *config_file = fopen(config_path, "r"); + if (config_file) + { + if (fscanf(config_file, "%ld", &cache_config) != 1) + cache_config = cache_config_default_s; + fclose(config_file); + } + else + cache_config = cache_config_default_s; + + return cache_config; +} + /* Create the cache and interval file if they do not already exist. Return 0 if cache and config file are initialized, otherwise return the appropriate error code. */ @@ -251,52 +294,28 @@ debuginfod_clean_cache(debuginfod_client *c, char *cache_path, char *interval_path, char *max_unused_path) { + time_t clean_interval, max_unused_age; + int rc = -1; struct stat st; - FILE *interval_file; - FILE *max_unused_file; - - if (stat(interval_path, &st) == -1) - { - /* Create new interval file. */ - interval_file = fopen(interval_path, "w"); - - if (interval_file == NULL) - return -errno; - - int rc = fprintf(interval_file, "%ld", cache_clean_default_interval_s); - fclose(interval_file); - if (rc < 0) - return -errno; - } + /* Create new interval file. */ + rc = debuginfod_config_cache(interval_path, + cache_clean_default_interval_s, &st); + if (rc < 0) + return rc; + clean_interval = (time_t)rc; /* Check timestamp of interval file to see whether cleaning is necessary. */ - time_t clean_interval; - interval_file = fopen(interval_path, "r"); - if (interval_file) - { - if (fscanf(interval_file, "%ld", &clean_interval) != 1) - clean_interval = cache_clean_default_interval_s; - fclose(interval_file); - } - else - clean_interval = cache_clean_default_interval_s; - if (time(NULL) - st.st_mtime < clean_interval) /* Interval has not passed, skip cleaning. */ return 0; /* Read max unused age value from config file. */ - time_t max_unused_age; - max_unused_file = fopen(max_unused_path, "r"); - if (max_unused_file) - { - if (fscanf(max_unused_file, "%ld", &max_unused_age) != 1) - max_unused_age = cache_default_max_unused_age_s; - fclose(max_unused_file); - } - else - max_unused_age = cache_default_max_unused_age_s; + rc = debuginfod_config_cache(max_unused_path, + cache_default_max_unused_age_s, &st); + if (rc < 0) + return rc; + max_unused_age = (time_t)rc; char * const dirs[] = { cache_path, NULL, }; @@ -305,12 +324,13 @@ debuginfod_clean_cache(debuginfod_client *c, return -errno; regex_t re; - const char * pattern = ".*/[a-f0-9]+/(debuginfo|executable|source.*)$"; + const char * pattern = ".*/[a-f0-9]+(/debuginfo|/executable|/source.*|)$"; /* include dirs */ if (regcomp (&re, pattern, REG_EXTENDED | REG_NOSUB) != 0) return -ENOMEM; FTSENT *f; long files = 0; + time_t now = time(NULL); while ((f = fts_read(fts)) != NULL) { /* ignore any files that do not match the pattern. */ @@ -325,15 +345,16 @@ debuginfod_clean_cache(debuginfod_client *c, switch (f->fts_info) { case FTS_F: - /* delete file if max_unused_age has been met or exceeded. */ - /* XXX consider extra effort to clean up old tmp files */ - if (time(NULL) - f->fts_statp->st_atime >= max_unused_age) - unlink (f->fts_path); + /* delete file if max_unused_age has been met or exceeded w.r.t. atime. */ + if (now - f->fts_statp->st_atime >= max_unused_age) + (void) unlink (f->fts_path); break; case FTS_DP: - /* Remove if empty. */ - (void) rmdir (f->fts_path); + /* Remove if old & empty. Weaken race against concurrent creation by + checking mtime. */ + if (now - f->fts_statp->st_mtime >= max_unused_age) + (void) rmdir (f->fts_path); break; default: @@ -481,6 +502,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) @@ -500,6 +552,7 @@ debuginfod_query_server (debuginfod_client *c, char *cache_path = NULL; char *maxage_path = NULL; char *interval_path = NULL; + char *cache_miss_path = NULL; char *target_cache_dir = NULL; char *target_cache_path = NULL; char *target_cache_tmppath = NULL; @@ -523,7 +576,7 @@ debuginfod_query_server (debuginfod_client *c, /* Is there any server we can query? If not, don't do any work, just return with ENOSYS. Don't even access the cache. */ - urls_envvar = getenv(server_urls_envvar); + urls_envvar = getenv(DEBUGINFOD_URLS_ENV_VAR); if (vfd >= 0) dprintf (vfd, "server urls \"%s\"\n", urls_envvar != NULL ? urls_envvar : ""); @@ -537,6 +590,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. */ @@ -611,7 +697,7 @@ debuginfod_query_server (debuginfod_client *c, /* Determine location of the cache. The path specified by the debuginfod cache environment variable takes priority. */ - char *cache_var = getenv(cache_path_envvar); + char *cache_var = getenv(DEBUGINFOD_CACHE_PATH_ENV_VAR); if (cache_var != NULL && strlen (cache_var) > 0) xalloc_str (cache_path, "%s", cache_var); else @@ -667,6 +753,7 @@ debuginfod_query_server (debuginfod_client *c, /* XXX combine these */ xalloc_str (interval_path, "%s/%s", cache_path, cache_clean_interval_filename); + xalloc_str (cache_miss_path, "%s/%s", cache_path, cache_miss_filename); xalloc_str (maxage_path, "%s/%s", cache_path, cache_max_unused_age_filename); if (vfd >= 0) @@ -679,7 +766,33 @@ debuginfod_query_server (debuginfod_client *c, if (rc != 0) goto out; - /* If the target is already in the cache then we are done. */ + struct stat st; + /* Check if the file exists and it's of permission 000; must check + explicitly rather than trying to open it first (PR28240). */ + if (stat(target_cache_path, &st) == 0 + && (st.st_mode & 0777) == 0) + { + time_t cache_miss; + + rc = debuginfod_config_cache(cache_miss_path, cache_miss_default_s, &st); + if (rc < 0) + goto out; + + cache_miss = (time_t)rc; + if (time(NULL) - st.st_mtime <= cache_miss) + { + rc = -ENOENT; + goto out; + } + else + /* TOCTOU non-problem: if another task races, puts a working + download or a 000 file in its place, unlinking here just + means WE will try to download again as uncached. */ + unlink(target_cache_path); + } + + /* If the target is already in the cache (known not-000 - PR28240), + then we are done. */ int fd = open (target_cache_path, O_RDONLY); if (fd >= 0) { @@ -691,7 +804,7 @@ debuginfod_query_server (debuginfod_client *c, } long timeout = default_timeout; - const char* timeout_envvar = getenv(server_timeout_envvar); + const char* timeout_envvar = getenv(DEBUGINFOD_TIMEOUT_ENV_VAR); if (timeout_envvar != NULL) timeout = atoi (timeout_envvar); @@ -707,38 +820,85 @@ debuginfod_query_server (debuginfod_client *c, } /* thereafter, goto out0 on error*/ - /* create target directory in cache if not found. */ - struct stat st; - if (stat(target_cache_dir, &st) == -1 && mkdir(target_cache_dir, 0700) < 0) - { - rc = -errno; - goto out0; - } - - /* NB: write to a temporary file first, to avoid race condition of - multiple clients checking the cache, while a partially-written or empty - file is in there, being written from libcurl. */ - fd = mkstemp (target_cache_tmppath); - if (fd < 0) + /* Because of a race with cache cleanup / rmdir, try to mkdir/mkstemp up to twice. */ + for(int i=0; i<2; i++) { + /* (re)create target directory in cache */ + (void) mkdir(target_cache_dir, 0700); /* files will be 0400 later */ + + /* NB: write to a temporary file first, to avoid race condition of + multiple clients checking the cache, while a partially-written or empty + file is in there, being written from libcurl. */ + fd = mkstemp (target_cache_tmppath); + if (fd >= 0) break; + } + if (fd < 0) /* Still failed after two iterations. */ { rc = -errno; 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++; - CURLM *curlm = curl_multi_init(); - if (curlm == NULL) + while (server_url != NULL) { - rc = -ENETUNREACH; - goto out0; + /* 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) + { + 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; @@ -746,11 +906,15 @@ debuginfod_query_server (debuginfod_client *c, if (data == NULL) { rc = -ENOMEM; - goto out0; + goto out1; } /* thereafter, goto out1 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++) { @@ -759,44 +923,65 @@ 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); data[i].fd = fd; data[i].target_handle = &target_handle; data[i].handle = curl_easy_init(); - data[i].client = c; - if (data[i].handle == NULL) { rc = -ENETUNREACH; goto out1; } - - /* 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"; + data[i].client = c; 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); @@ -813,10 +998,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 @@ -828,9 +1017,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); @@ -838,10 +1027,35 @@ debuginfod_query_server (debuginfod_client *c, long loops = 0; int committed_to = -1; bool verbose_reported = false; + struct timespec start_time, cur_time; + 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) @@ -850,7 +1064,17 @@ 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; + } + + } } if (vfd >= 0 && !verbose_reported && committed_to >= 0) @@ -863,7 +1087,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) @@ -872,7 +1095,7 @@ debuginfod_query_server (debuginfod_client *c, case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break; default: rc = -ENETUNREACH; break; } - goto out1; + goto out2; } if (c->progressfn) /* inform/check progress callback */ @@ -896,12 +1119,12 @@ debuginfod_query_server (debuginfod_client *c, CURLINFO_SIZE_DOWNLOAD, &dl); if (curl_res == 0) - pa = (dl > LONG_MAX ? LONG_MAX : (long)dl); + 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_CURLINFO_CONTENT_LENGTH_DOWNLOAD_T +#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T curl_off_t cl; curl_res = curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, @@ -914,13 +1137,36 @@ debuginfod_query_server (debuginfod_client *c, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl); if (curl_res == 0) - pb = (cl > LONG_MAX ? LONG_MAX : (long)cl); + pb = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl); #endif } if ((*c->progressfn) (c, pa, pb)) break; } + /* Check to see if we are downloading something which exceeds maxsize, if set.*/ + if (maxsize > 0 && target_handle) + { + long dl_size = 0; +#ifdef CURLINFO_SIZE_DOWNLOAD_T + curl_off_t download_size_t; + if (curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, + &download_size_t) == CURLE_OK) + dl_size = download_size_t >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)download_size_t; +#else + double download_size; + if (curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, + &download_size) == CURLE_OK) + dl_size = download_size >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)download_size; +#endif + if (dl_size > maxsize) + { + 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 @@ -954,6 +1200,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) { @@ -968,6 +1216,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; } } @@ -1018,7 +1276,7 @@ debuginfod_query_server (debuginfod_client *c, &scheme); if(ok3 == CURLE_OK && scheme) { - if (strncmp (scheme, "HTTP", 4) == 0) + if (startswith (scheme, "HTTP")) if (resp_code == 200) { verified_handle = msg->easy_handle; @@ -1032,8 +1290,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.*/ + if (rc == -ENOENT) + { + int efd = open (target_cache_path, O_CREAT|O_EXCL, 0000); + 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) { @@ -1054,20 +1345,29 @@ debuginfod_query_server (debuginfod_client *c, tvs[0].tv_usec = tvs[1].tv_usec = 0; (void) futimes (fd, tvs); /* best effort */ + /* PR27571: make cache files casually unwriteable; dirs are already 0700 */ + (void) fchmod(fd, 0400); + /* rename tmp->real */ rc = rename (target_cache_tmppath, target_cache_path); if (rc < 0) { rc = -errno; - goto out1; + goto out2; /* Perhaps we need not give up right away; could retry or something ... */ } - /* Success!!!! */ + /* remove all handles from multi */ for (int i = 0; i < num_urls; i++) - curl_easy_cleanup(data[i].handle); + { + curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ + curl_easy_cleanup (data[i].handle); + free (data[i].response_data); + } - curl_multi_cleanup (curlm); + for (int i = 0; i < num_urls; ++i) + free(server_url_list[i]); + free(server_url_list); free (data); free (server_urls); @@ -1080,21 +1380,35 @@ 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_easy_cleanup(data[i].handle); + { + curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ + curl_easy_cleanup (data[i].handle); + free (data[i].response_data); + } - curl_multi_cleanup(curlm); unlink (target_cache_tmppath); close (fd); /* before the rmdir, otherwise it'll fail */ (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); /* general purpose exit */ out: + /* Reset sent headers */ + curl_slist_free_all (c->headers); + c->headers = NULL; + c->user_agent_set_p = 0; + /* Conclude the last \r status line */ /* Another possibility is to use the ANSI CSI n K EL "Erase in Line" code. That way, the previously printed messages would be erased, @@ -1113,6 +1427,7 @@ debuginfod_query_server (debuginfod_client *c, free (cache_path); free (maxage_path); free (interval_path); + free (cache_miss_path); free (target_cache_dir); free (target_cache_path); free (target_cache_tmppath); @@ -1127,7 +1442,8 @@ debuginfod_begin (void) { debuginfod_client *client; size_t size = sizeof (struct debuginfod_client); - client = (debuginfod_client *) calloc (1, size); + client = calloc (1, size); + if (client != NULL) { if (getenv(DEBUGINFOD_PROGRESS_ENV_VAR)) @@ -1136,7 +1452,22 @@ 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; } + + // extra future initialization + + goto out; + + out1: + free (client); + client = NULL; + + out: return client; } @@ -1165,7 +1496,9 @@ debuginfod_end (debuginfod_client *client) if (client == NULL) return; + curl_multi_cleanup (client->server_mhandle); curl_slist_free_all (client->headers); + free (client->winning_headers); free (client->url); free (client); } @@ -1219,7 +1552,7 @@ int debuginfod_add_http_header (debuginfod_client *client, const char* header) /* Track if User-Agent: is being set. If so, signal not to add the default one. */ - if (strncmp (header, "User-Agent:", 11) == 0) + if (startswith (header, "User-Agent:")) client->user_agent_set_p = 1; client->headers = temp; diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index b34eacc2..521cb529 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -37,6 +37,7 @@ extern "C" { #include "debuginfod.h" #include <dwarf.h> +#include <system.h> #include <argp.h> #ifdef __GNUC__ @@ -45,7 +46,6 @@ extern "C" { #include <unistd.h> #include <stdlib.h> -#include <error.h> #include <libintl.h> #include <locale.h> #include <pthread.h> @@ -359,6 +359,7 @@ static const struct argp_option options[] = { "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 @@ -367,7 +368,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. */ @@ -406,12 +417,17 @@ 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); @@ -423,7 +439,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; @@ -470,7 +493,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"); @@ -480,16 +510,9 @@ parse_opt (int key, char *arg, scan_archives[".rpm"]="cat"; // libarchive groks rpm natively break; case 'U': - if (access("/usr/bin/dpkg-deb", X_OK) == 0) - { - scan_archives[".deb"]="dpkg-deb --fsys-tarfile"; - scan_archives[".ddeb"]="dpkg-deb --fsys-tarfile"; - } - else - { - scan_archives[".deb"]="(bsdtar -O -x -f - data.tar.xz)<"; - scan_archives[".ddeb"]="(bsdtar -O -x -f - data.tar.xz)<"; - } + scan_archives[".deb"]="(bsdtar -O -x -f - data.tar\\*)<"; + scan_archives[".ddeb"]="(bsdtar -O -x -f - data.tar\\*)<"; + scan_archives[".ipk"]="(bsdtar -O -x -f - data.tar\\*)<"; // .udeb too? break; case 'Z': @@ -504,35 +527,58 @@ 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 '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; @@ -544,10 +590,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; } @@ -632,10 +702,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) @@ -659,10 +730,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); @@ -674,19 +746,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 ++; } @@ -711,6 +793,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); } +}; + //////////////////////////////////////////////////////////////////////// @@ -996,6 +1126,9 @@ 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()); + MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(s.st_size).c_str() ); + MHD_add_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; @@ -1157,23 +1290,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) { @@ -1183,17 +1325,28 @@ 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 @@ -1206,10 +1359,10 @@ public: { 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) @@ -1225,7 +1378,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; } } @@ -1234,11 +1401,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; } @@ -1254,6 +1421,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; } @@ -1264,7 +1439,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"); @@ -1273,10 +1448,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; @@ -1284,7 +1470,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++) @@ -1292,7 +1479,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! @@ -1310,6 +1497,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(); } @@ -1318,7 +1528,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; @@ -1388,6 +1598,9 @@ 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"); + MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(fs.st_size).c_str()); + MHD_add_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); + MHD_add_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; @@ -1505,7 +1718,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; @@ -1529,6 +1742,11 @@ 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()); + MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(fs.st_size).c_str()); + MHD_add_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); + MHD_add_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; @@ -1580,10 +1798,50 @@ debuginfod_find_progress (debuginfod_client *, long a, long b) } +// a little lru pool of debuginfod_client*s for reuse between query threads + +mutex dc_pool_lock; +deque<debuginfod_client*> dc_pool; + +debuginfod_client* debuginfod_pool_begin() +{ + unique_lock<mutex> lock(dc_pool_lock); + if (dc_pool.size() > 0) + { + inc_metric("dc_pool_op_count","op","begin-reuse"); + debuginfod_client *c = dc_pool.front(); + dc_pool.pop_front(); + return c; + } + inc_metric("dc_pool_op_count","op","begin-new"); + return debuginfod_begin(); +} + + +void debuginfod_pool_groom() +{ + unique_lock<mutex> lock(dc_pool_lock); + while (dc_pool.size() > 0) + { + inc_metric("dc_pool_op_count","op","end"); + debuginfod_end(dc_pool.front()); + dc_pool.pop_front(); + } +} + + +void debuginfod_pool_end(debuginfod_client* c) +{ + unique_lock<mutex> lock(dc_pool_lock); + inc_metric("dc_pool_op_count","op","end-save"); + dc_pool.push_front(c); // accelerate reuse, vs. push_back +} + + 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) { @@ -1592,8 +1850,13 @@ 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); + if (atype_code == "S" && suffix == "") throw reportable_exception("invalid source suffix"); @@ -1677,7 +1940,7 @@ handle_buildid (MHD_Connection* conn, // is to defer to other debuginfo servers. int fd = -1; - debuginfod_client *client = debuginfod_begin (); + debuginfod_client *client = debuginfod_pool_begin (); if (client != NULL) { debuginfod_set_progressfn (client, & debuginfod_find_progress); @@ -1695,6 +1958,17 @@ 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); @@ -1726,7 +2000,7 @@ handle_buildid (MHD_Connection* conn, } else fd = -errno; /* Set by debuginfod_begin. */ - debuginfod_end (client); + debuginfod_pool_end (client); if (fd >= 0) { @@ -1848,6 +2122,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) @@ -1897,11 +2194,32 @@ handler_cb (void * /*cls*/, const char * /*version*/, const char * /*upload_data*/, size_t * /*upload_data_size*/, - void ** /*con_cls*/) + void ** ptr) { struct MHD_Response *r = NULL; string url_copy = url; + /* libmicrohttpd always makes (at least) two callbacks: once just + past the headers, and one after the request body is finished + being received. If we process things early (first callback) and + queue a response, libmicrohttpd would suppress http keep-alive + (via connection->read_closed = true). */ + static int aptr; /* just some random object to use as a flag */ + if (&aptr != *ptr) + { + /* do never respond on first call */ + *ptr = &aptr; + return MHD_YES; + } + *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 @@ -1911,6 +2229,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 { @@ -1923,7 +2243,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"); @@ -1931,7 +2269,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); @@ -1943,7 +2281,6 @@ handler_cb (void * /*cls*/, suffix = url_copy.substr(slash3); // include the slash in the suffix } - inc_metric("http_requests_total", "type", artifacttype); // get the resulting fd so we can report its size int fd; r = handle_buildid(connection, buildid, artifacttype, suffix, &fd); @@ -1958,12 +2295,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 @@ -1972,6 +2311,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); @@ -1987,22 +2332,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, - deltas*1000); // prometheus prefers _seconds and floating point - inc_metric("http_responses_duration_milliseconds_count","code",http_code_str); + 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_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; } @@ -2051,7 +2404,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) { @@ -2261,6 +2615,8 @@ elf_classify (int fd, bool &executable_p, bool &debuginfo_p, string &buildid, se throw elfutils_exception(rc, "getshdrstrndx"); Elf_Scn *scn = NULL; + bool symtab_p = false; + bool bits_alloc_p = false; while (true) { scn = elf_nextscn (elf, scn); @@ -2273,20 +2629,37 @@ elf_classify (int fd, bool &executable_p, bool &debuginfo_p, string &buildid, se const char *section_name = elf_strptr (elf, shstrndx, shdr->sh_name); if (section_name == NULL) break; - if (strncmp(section_name, ".debug_line", 11) == 0 || - strncmp(section_name, ".zdebug_line", 12) == 0) + if (startswith (section_name, ".debug_line") || + startswith (section_name, ".zdebug_line")) { debuginfo_p = true; dwarf_extract_source_paths (elf, debug_sourcefiles); break; // expecting only one .*debug_line, so no need to look for others } - else if (strncmp(section_name, ".debug_", 7) == 0 || - strncmp(section_name, ".zdebug_", 8) == 0) + else if (startswith (section_name, ".debug_") || + startswith (section_name, ".zdebug_")) { debuginfo_p = true; // NB: don't break; need to parse .debug_line for sources } + else if (shdr->sh_type == SHT_SYMTAB) + { + symtab_p = true; + } + else if (shdr->sh_type != SHT_NOBITS + && shdr->sh_type != SHT_NOTE + && (shdr->sh_flags & SHF_ALLOC) != 0) + { + bits_alloc_p = true; + } } + + // For more expansive elf/split-debuginfo classification, we + // want to identify as debuginfo "strip -s"-produced files + // without .debug_info* (like libicudata), but we don't want to + // identify "strip -g" executables (with .symtab left there). + if (symtab_p && !bits_alloc_p) + debuginfo_p = true; } catch (const reportable_exception& e) { @@ -2866,6 +3239,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 @@ -3087,19 +3462,31 @@ void groom() struct timespec ts_start, ts_end; clock_gettime (CLOCK_MONOTONIC, &ts_start); - database_stats_report(); - // 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(); @@ -3110,24 +3497,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", @@ -3152,9 +3589,10 @@ void groom() sqlite3_db_release_memory(db); // shrink the process if possible 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; @@ -3316,7 +3754,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 @@ -3326,22 +3764,25 @@ main (int argc, char *argv[]) (void) signal (SIGUSR2, sigusr2_handler); // end-user /* Get database ready. */ - rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE - |SQLITE_OPEN_URI - |SQLITE_OPEN_PRIVATECACHE - |SQLITE_OPEN_CREATE - |SQLITE_OPEN_FULLMUTEX), /* thread-safe */ - NULL); - if (rc == SQLITE_CORRUPT) - { - (void) unlink (db_path.c_str()); - error (EXIT_FAILURE, 0, - "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db)); - } - else if (rc) + if (! passive_p) { - error (EXIT_FAILURE, 0, - "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE + |SQLITE_OPEN_URI + |SQLITE_OPEN_PRIVATECACHE + |SQLITE_OPEN_CREATE + |SQLITE_OPEN_FULLMUTEX), /* thread-safe */ + NULL); + if (rc == SQLITE_CORRUPT) + { + (void) unlink (db_path.c_str()); + error (EXIT_FAILURE, 0, + "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db)); + } + else if (rc) + { + error (EXIT_FAILURE, 0, + "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + } } // open the readonly query variant @@ -3359,8 +3800,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, @@ -3369,13 +3812,16 @@ 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 @@ -3439,31 +3885,39 @@ 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; + 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; @@ -3474,28 +3928,43 @@ 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 - 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"); - all_threads.push_back(pt); - for (unsigned i=0; i<concurrency; i++) + error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n"); + else { - rc = pthread_create (& pt, NULL, thread_main_scanner, NULL); +#ifdef HAVE_PTHREAD_SETNAME_NP + (void) pthread_setname_np (pt, "groom"); +#endif + all_threads.push_back(pt); + } + + if (scan_files || scan_archives.size() > 0) + { + 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, "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); + } } } - + /* Trivial main loop! */ set_metric("ready", 1); while (! interrupted) @@ -3514,12 +3983,15 @@ main (int argc, char *argv[]) if (d4) MHD_stop_daemon (d4); if (d6) MHD_stop_daemon (d6); - /* 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)); + } } // NB: no problem with unconditional free here - an earlier failed regcomp would exit program @@ -3530,7 +4002,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 5cd4fe15..7a73fa10 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,48 @@ +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 + * debuginfod_find_debuginfo.3: Specify sequential reuse policy of + debuginfod_client objects. + 2021-02-04 Frank Ch. Eigler <fche@redhat.com> * debuginfod.8: Mention new --fdcache-mintmp option. 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..1cc19215 --- /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. +Avoid referential loops that cause a server to contact itself, directly +or indirectly - the results would be hilarious. + +.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 c33a4b6b..1e56f656 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 @@ -64,7 +63,7 @@ or even use debuginfod itself: If any of the \fB\-R\fP, \fB-U\fP, or \fB-Z\fP options is given, each file is scanned as an archive file that may contain ELF/DWARF/source files. Archive files are recognized by extension. If \-R is given, -".rpm" files are scanned; if \-D is given, ".deb" and ".ddeb" files +".rpm" files are scanned; if \-U is given, ".deb" and ".ddeb" files are scanned; if \-Z is given, the listed extensions are scanned. Because of complications such as DWZ-compressed debuginfo, may require \fItwo\fP traversal passes to identify all source code. Source files @@ -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 @@ -213,6 +228,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 +249,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 +269,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 +336,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 +376,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 +424,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 +450,15 @@ rather than HTTPS, the network should be trustworthy. Authentication information through the internal \fIlibcurl\fP library is not currently enabled. +.nr zZ 1 +.so man7/debuginfod-client-config.7 -.SH "ENVIRONMENT VARIABLES" - -.TP -.B TMPDIR -This environment variable points to a file system to be used for -temporary files. The default is /tmp. - -.TP -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -debuginfod instances. Alternate URL prefixes are separated by space. -Avoid referential loops that cause a server to contact itself, directly -or indirectly - the results would be hilarious. - +.SH ADDITIONAL FILES .TP -.B DEBUGINFOD_TIMEOUT -This environment variable governs the timeout for each debuginfod HTTP -connection. A server that fails to provide at least 100K of data -within this many seconds is skipped. The default is 90 seconds. (Zero -or negative means "no timeout".) - - -.TP -.B DEBUGINFOD_CACHE_PATH -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this -program is reexecuted. If XDG_CACHE_HOME is set then -$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise -$HOME/.cache/debuginfod_client is used. For more information regarding -the client cache see \fIdebuginfod_find_debuginfo(3)\fP. - -.SH FILES -.LP -.PD .1v -.TP 20 .B $HOME/.debuginfod.sqlite Default database file. .PD -.TP 20 -.B $XDG_CACHE_HOME/debuginfod_client -Default cache directory for content from upstream debuginfods. -If XDG_CACHE_HOME is not set then \fB$HOME/.cache/debuginfod_client\fP -is used. -.PD - .SH "SEE ALSO" .I "debuginfod-find(1)" diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 index cfddb542..30cef3c1 100644 --- a/doc/debuginfod_find_debuginfo.3 +++ b/doc/debuginfod_find_debuginfo.3 @@ -105,6 +105,8 @@ as a debuginfod server begins transferring the target file all of the connections to the other servers are closed. A \fBclient\fP handle should be used from only one thread at a time. +A handle may be reused for a series of lookups, which can improve +performance due to retention of connections and caches. .SH "RETURN VALUE" @@ -175,8 +177,8 @@ of the client object. .SS "HTTP HEADER" -Before a lookup function is initiated, a client application may -add HTTP request headers to future downloads. +Before each lookup function is initiated, a client application may +add HTTP request headers. These are reset after each lookup function. .BR \%debuginfod_add_http_header () may be called with strings of the form .BR \%"Header:\~value" . @@ -196,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" @@ -239,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. @@ -331,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/lib/Android.bp b/lib/Android.bp index 86ad65eb..9016e299 100644 --- a/lib/Android.bp +++ b/lib/Android.bp @@ -6,5 +6,9 @@ cc_library_host_static { name: "libeu", defaults: ["elfutils_defaults"], srcs: ["*.c"], - exclude_srcs: ["dynamicsizehash*.c"], + exclude_srcs: [ + "color.c", // uses argp + "dynamicsizehash*.c", + "printversion.c", // uses argp + ], } diff --git a/lib/ChangeLog b/lib/ChangeLog index 371e2133..8f4d4d9f 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,68 @@ +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. + (pwrite_retry): Cast to char *. + (write_retry): Likewise. + (pread_retry): Likewise. + 2021-02-05 Mark Wielaard <mark@klomp.org> * printversion.c (print_version): Update copyright year. 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/system.h b/lib/system.h index 1c478e1c..edbc8488 100644 --- a/lib/system.h +++ b/lib/system.h @@ -29,14 +29,27 @@ #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> #include <endian.h> #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 #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) @@ -69,6 +82,27 @@ ((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 +startswith (const char *str, const char *prefix) +{ + return strncmp (str, prefix, strlen (prefix)) == 0; +} + /* A special gettext function we use if the strings are too short. */ #define sgettext(Str) \ ({ const char *__res = strrchr (_(Str), '|'); \ @@ -104,7 +138,7 @@ pwrite_retry (int fd, const void *buf, size_t len, off_t off) do { - ssize_t ret = TEMP_FAILURE_RETRY (pwrite (fd, buf + recvd, len - recvd, + ssize_t ret = TEMP_FAILURE_RETRY (pwrite (fd, ((char *)buf) + recvd, len - recvd, off + recvd)); if (ret <= 0) return ret < 0 ? ret : recvd; @@ -123,7 +157,7 @@ write_retry (int fd, const void *buf, size_t len) do { - ssize_t ret = TEMP_FAILURE_RETRY (write (fd, buf + recvd, len - recvd)); + ssize_t ret = TEMP_FAILURE_RETRY (write (fd, ((char *)buf) + recvd, len - recvd)); if (ret <= 0) return ret < 0 ? ret : recvd; @@ -141,7 +175,7 @@ pread_retry (int fd, void *buf, size_t len, off_t off) do { - ssize_t ret = TEMP_FAILURE_RETRY (pread (fd, buf + recvd, len - recvd, + ssize_t ret = TEMP_FAILURE_RETRY (pread (fd, ((char *)buf) + recvd, len - recvd, off + recvd)); if (ret <= 0) return ret < 0 ? ret : recvd; 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 98ac3315..c65fd21b 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,3 +1,21 @@ +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. + 2020-12-16 Dmitry V. Levin <ldv@altlinux.org> * libasmP.h (_): Remove. 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/libasm/libasmP.h b/libasm/libasmP.h index 8b72f32b..5b5fb776 100644 --- a/libasm/libasmP.h +++ b/libasm/libasmP.h @@ -302,6 +302,6 @@ extern int __disasm_cb_internal (DisasmCtx_t *ctx, const uint8_t **startp, // XXX The second part should probably be controlled by an option which // isn't implemented yet // XXX Also, the format will change with the backend. -#define asm_emit_symbol_p(name) (strncmp (name, ".L", 2) != 0) +#define asm_emit_symbol_p(name) (!startswith (name, ".L")) #endif /* libasmP.h */ diff --git a/libcpu/Android.bp b/libcpu/Android.bp index 4b26cdf4..b36ac5f2 100644 --- a/libcpu/Android.bp +++ b/libcpu/Android.bp @@ -49,6 +49,11 @@ cc_binary_host { static_libs: [ "libeu", ], + target: { + musl: { + static_libs: ["libobstack"], + }, + }, } genrule { @@ -57,7 +62,7 @@ genrule { "defs/i386", ], out: ["i386_dis.h"], - cmd: "$(location m4) -Di386 -DDISASSEMBLER $(in) > i386_defs && $(location i386_gendis) i386_defs > $(out)", + cmd: "$(location m4) -Di386 -DDISASSEMBLER $(in) > $(genDir)/i386_defs && $(location i386_gendis) $(genDir)/i386_defs > $(out)", tools: [ "i386_gendis", "m4", @@ -70,7 +75,7 @@ genrule { "defs/i386", ], out: ["x86_64_dis.h"], - cmd: "$(location m4) -Dx86_64 -DDISASSEMBLER $(in) > x86_64_defs && $(location i386_gendis) x86_64_defs > $(out)", + cmd: "$(location m4) -Dx86_64 -DDISASSEMBLER $(in) > $(genDir)/x86_64_defs && $(location i386_gendis) $(genDir)/x86_64_defs > $(out)", tools: [ "i386_gendis", "m4", diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b8038f00..ca742e6b 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,87 @@ +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. + +2021-05-01 Mark Wielaard <mark@klomp.org> + + * libdw_form.c (__libdw_form_val_compute_len): Check indirect + form is not DW_FORM_indirect or DW_FORM_implicit_const. + +2021-04-23 Omar Sandoval <osandov@fb.com> + + * dwarf_child.c (__libdw_find_attr): Handle DW_FORM_indirect. + * dwarf_getattrs.c (dwarf_getattrs): Handle DW_FORM_indirect. + +2021-02-12 Mark Wielaard <mark@klomp.org> + + * dwarf_getlocation.c (attr_ok): For DWARF version 4 or higher + block forms are not expression locations. + (is_constant_offset): DW_FORM_implicit_const is also a constant. + 2020-12-20 Dmitry V. Levin <ldv@altlinux.org> * .gitignore: New file. diff --git a/libdw/Makefile.am b/libdw/Makefile.am index 6b7834af..4fda33bd 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -63,6 +63,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_linesrc.c dwarf_lineno.c dwarf_lineaddr.c \ dwarf_linecol.c dwarf_linebeginstatement.c \ dwarf_lineendsequence.c dwarf_lineblock.c \ + dwarf_linecontext.c dwarf_linefunctionname.c \ dwarf_lineprologueend.c dwarf_lineepiloguebegin.c \ dwarf_lineisa.c dwarf_linediscriminator.c \ dwarf_lineop_index.c dwarf_line_file.c \ diff --git a/libdw/dwarf.h b/libdw/dwarf.h index 19a4be96..3ce7f236 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 }; 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 757ac4fa..a48dada6 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -30,6 +30,8 @@ # include <config.h> #endif +#include <system.h> + #include <assert.h> #include <stdbool.h> #include <stddef.h> @@ -70,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) { @@ -114,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) @@ -125,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 @@ -134,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. */ - && strncmp (scnname, ".gnu.debuglto_", 14) == 0 + && startswith (scnname, ".gnu.debuglto_") && strcmp (&scnname[14], dwarf_scnnames[cnt]) == 0) - break; + { + if (result->type == TYPE_GNU_LTO) + break; + } } if (cnt >= ndwarf_scnnames) @@ -222,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); @@ -245,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); @@ -272,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; } } @@ -284,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); @@ -304,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; } } @@ -322,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); @@ -366,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]); @@ -379,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; @@ -413,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_child.c b/libdw/dwarf_child.c index 2e39d834..c8c8bb61 100644 --- a/libdw/dwarf_child.c +++ b/libdw/dwarf_child.c @@ -53,6 +53,8 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, return NULL; } + const unsigned char *endp = die->cu->endp; + /* Search the name attribute. Attribute has been checked when Dwarf_Abbrev was created, we can read unchecked. */ const unsigned char *attrp = abbrevp->attrp; @@ -69,6 +71,17 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, if (attr_name == 0 && attr_form == 0) break; + if (attr_form == DW_FORM_indirect) + { + get_uleb128 (attr_form, readp, endp); + if (attr_form == DW_FORM_indirect || + attr_form == DW_FORM_implicit_const) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return NULL; + } + } + /* Is this the name attribute? */ if (attr_name == search_name && search_name != INVALID) { 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_getattrs.c b/libdw/dwarf_getattrs.c index 4ac16b1a..770c32c9 100644 --- a/libdw/dwarf_getattrs.c +++ b/libdw/dwarf_getattrs.c @@ -55,6 +55,8 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), return -1l; } + const unsigned char *endp = die->cu->endp; + /* This is where the attributes start. */ const unsigned char *attrp = abbrevp->attrp; const unsigned char *const offset_attrp = abbrevp->attrp + offset; @@ -78,6 +80,17 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), offset of an attribute. */ return 1l; + if (attr.form == DW_FORM_indirect) + { + get_uleb128 (attr.form, die_addr, endp); + if (attr.form == DW_FORM_indirect || + attr.form == DW_FORM_implicit_const) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1l; + } + } + /* If we are not to OFFSET_ATTRP yet, we just have to skip the values of the intervening attributes. */ if (remembered_attrp >= offset_attrp) diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c index 4e582db2..5db3cf97 100644 --- a/libdw/dwarf_getlocation.c +++ b/libdw/dwarf_getlocation.c @@ -48,6 +48,22 @@ attr_ok (Dwarf_Attribute *attr) if (dwarf_whatform (attr) == DW_FORM_exprloc) return true; + if (attr->cu->version >= 4) + { + /* Must be an exprloc (or constant), just not any block form. */ + switch (dwarf_whatform (attr)) + { + case DW_FORM_block: + case DW_FORM_block1: + case DW_FORM_block2: + case DW_FORM_block4: + __libdw_seterrno (DWARF_E_NO_LOC_VALUE); + return false; + default: + break; + } + } + /* Otherwise must be one of the attributes listed below. Older DWARF versions might have encoded the exprloc as block, and we cannot easily distinguish attributes in the loclist class because @@ -186,6 +202,7 @@ is_constant_offset (Dwarf_Attribute *attr, case DW_FORM_data8: case DW_FORM_sdata: case DW_FORM_udata: + case DW_FORM_implicit_const: break; } 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..360ad01a 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -145,6 +145,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 +226,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 +303,9 @@ struct Dwarf_Line_s unsigned int op_index:8; unsigned int isa:8; unsigned int discriminator:24; + /* These are currently only used for the NVIDIA extensions. */ + unsigned int context; + unsigned int function_name; }; struct Dwarf_Lines_s diff --git a/libdw/libdw_form.c b/libdw/libdw_form.c index 584c8467..c83dfb39 100644 --- a/libdw/libdw_form.c +++ b/libdw/libdw_form.c @@ -116,8 +116,12 @@ __libdw_form_val_compute_len (struct Dwarf_CU *cu, unsigned int form, break; case DW_FORM_indirect: + /* The amount of data to skip in the DIE is the size of the actual + FORM data (which is __libdw_form_val_len) plus the size of the + uleb128 encoding that FORM (which is valp - startp). */ get_uleb128 (u128, valp, endp); - // XXX Is this really correct? + if (*valp == DW_FORM_indirect || *valp == DW_FORM_implicit_const) + return (size_t) -1; result = __libdw_form_val_len (cu, u128, valp); if (result != (size_t) -1) result += valp - startp; diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index a0ff9f4f..5f7fb4ed 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,14 @@ +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_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 d107e78f..57b2c494 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,34 @@ +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. + * dwfl_module_getdwarf.c (find_symtab): Likewise. + * linux-kernel-modules.c: Likewise. + * linux-pid-attach.c (linux_proc_pid_is_stopped): Likewise. + (dwfl_linux_proc_attach): Likewise. + * relocate.c (resolve_symbol): Likewise. + (relocate_section): Likewise. + 2021-02-01 Érico Nogueira <ericonr@disroot.org> * dwfl_error.c (strerror_r): Only use the GNU version when available. diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index a0ccc9b3..4e4c9b3c 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -440,6 +440,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) { @@ -625,8 +626,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/dwfl_frame.c b/libdwfl/dwfl_frame.c index 5bbf850e..77e0c5cb 100644 --- a/libdwfl/dwfl_frame.c +++ b/libdwfl/dwfl_frame.c @@ -30,6 +30,8 @@ # include <config.h> #endif +#include <system.h> + #include "libdwflP.h" #include <unistd.h> @@ -172,7 +174,7 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, is called from dwfl_linux_proc_attach with elf == NULL. __libdwfl_module_getebl will call __libdwfl_getelf which will call the find_elf callback. */ - if (strncmp (mod->name, "[vdso: ", 7) == 0 + if (startswith (mod->name, "[vdso: ") || strcmp (strrchr (mod->name, ' ') ?: "", " (deleted)") == 0) continue; diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index 6ca93761..0c198f23 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -77,6 +77,7 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) return found_build_id (mod, set, build_id_bits, build_id_len, build_id_vaddr); } +NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) int dwfl_module_build_id (Dwfl_Module *mod, const unsigned char **bits, GElf_Addr *vaddr) @@ -102,8 +103,7 @@ dwfl_module_build_id (Dwfl_Module *mod, *vaddr = mod->build_id_vaddr; return mod->build_id_len; } -INTDEF (dwfl_module_build_id) -NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) +NEW_INTDEF (dwfl_module_build_id) #ifdef SYMBOL_VERSIONING COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c index 2f3dd0dd..6f076057 100644 --- a/libdwfl/dwfl_module_getdwarf.c +++ b/libdwfl/dwfl_module_getdwarf.c @@ -1162,7 +1162,7 @@ find_symtab (Dwfl_Module *mod) if (sname == NULL) goto elferr; - if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) /* Try to uncompress, but it might already have been, an error might just indicate, already uncompressed. */ elf_compress_gnu (symstrscn, 0, 0); @@ -1245,7 +1245,7 @@ find_symtab (Dwfl_Module *mod) if (sname == NULL) goto elferr; - if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) /* Try to uncompress, but it might already have been, an error might just indicate, already uncompressed. */ elf_compress_gnu (aux_strscn, 0, 0); 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/link_map.c b/libdwfl/link_map.c index 0d8d1c17..1e7d4502 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -254,7 +254,7 @@ 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) { diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index 6edb27f2..58c0c417 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -924,7 +924,7 @@ dwfl_linux_kernel_module_section_address if (!strcmp (secname, ".modinfo") || !strcmp (secname, ".data.percpu") - || !strncmp (secname, ".exit", 5)) + || startswith (secname, ".exit")) { *addr = (Dwarf_Addr) -1l; return DWARF_CB_OK; @@ -935,7 +935,7 @@ dwfl_linux_kernel_module_section_address behavior, and this cruft leaks out into the /sys information. The file name for ".init*" may actually look like "_init*". */ - const bool is_init = !strncmp (secname, ".init", 5); + const bool is_init = startswith (secname, ".init"); if (is_init) { if (asprintf (&sysfile, SECADDRDIRFMT "_%s", @@ -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 fdf5c9b1..09cba07b 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -30,6 +30,8 @@ # include <config.h> #endif +#include <system.h> + #include "libelfP.h" #include "libdwflP.h" #include <sys/types.h> @@ -59,7 +61,7 @@ linux_proc_pid_is_stopped (pid_t pid) have_state = false; while (fgets (buffer, sizeof (buffer), procfile) != NULL) - if (strncmp (buffer, "State:", 6) == 0) + if (startswith (buffer, "State:")) { have_state = true; break; @@ -133,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; @@ -407,7 +409,7 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) char *line = NULL; size_t linelen = 0; while (getline (&line, &linelen, procfile) >= 0) - if (strncmp (line, "Tgid:", 5) == 0) + if (startswith (line, "Tgid:")) { errno = 0; char *endptr; diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c index 88b5211d..0497bd4f 100644 --- a/libdwfl/relocate.c +++ b/libdwfl/relocate.c @@ -30,6 +30,8 @@ # include <config.h> #endif +#include <system.h> + #include "libelfP.h" #include "libdwflP.h" @@ -237,7 +239,7 @@ resolve_symbol (Dwfl_Module *referer, struct reloc_symtab_cache *symtab, return DWFL_E_LIBELF; /* If the section is already decompressed, that isn't an error. */ - if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) elf_compress_gnu (scn, 0, 0); if ((shdr->sh_flags & SHF_COMPRESSED) != 0) @@ -518,7 +520,7 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, Nothing to do here. */ return DWFL_E_NOERROR; - if (strncmp (tname, ".zdebug", strlen ("zdebug")) == 0) + if (startswith (tname, ".zdebug")) elf_compress_gnu (tscn, 0, 0); if ((tshdr->sh_flags & SHF_COMPRESSED) != 0) @@ -539,7 +541,7 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, if (sname == NULL) return DWFL_E_LIBELF; - if (strncmp (sname, ".zdebug", strlen ("zdebug")) == 0) + if (startswith (sname, ".zdebug")) elf_compress_gnu (scn, 0, 0); if ((shdr->sh_flags & SHF_COMPRESSED) != 0) diff --git a/libebl/ChangeLog b/libebl/ChangeLog index 33208f0d..da690a40 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,12 @@ +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. + * eblopenbackend.c (default_debugscn_p): Likewise. + 2020-12-16 Dmitry V. Levin <ldv@altlinux.org> * libeblP.h (_): Remove. diff --git a/libebl/eblobjnotetypename.c b/libebl/eblobjnotetypename.c index 9daddcda..4662906d 100644 --- a/libebl/eblobjnotetypename.c +++ b/libebl/eblobjnotetypename.c @@ -31,6 +31,8 @@ # include <config.h> #endif +#include <system.h> + #include <inttypes.h> #include <stdio.h> #include <string.h> @@ -79,8 +81,7 @@ ebl_object_note_type_name (Ebl *ebl, const char *name, uint32_t type, } } - if (strncmp (name, ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX, - strlen (ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX)) == 0) + if (startswith (name, ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX)) { /* GNU Build Attribute notes (ab)use the owner name to store most of their data. Don't decode everything here. Just diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index a8af1658..0c07296c 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -274,7 +274,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 @@ -616,9 +616,9 @@ default_debugscn_p (const char *name) / sizeof (dwarf_scn_names[0])); for (size_t cnt = 0; cnt < ndwarf_scn_names; ++cnt) if (strcmp (name, dwarf_scn_names[cnt]) == 0 - || (strncmp (name, ".zdebug", strlen (".zdebug")) == 0 + || (startswith (name, ".zdebug") && strcmp (&name[2], &dwarf_scn_names[cnt][1]) == 0) - || (strncmp (name, ".gnu.debuglto_", strlen (".gnu.debuglto_")) == 0 + || (startswith (name, ".gnu.debuglto_") && strcmp (&name[14], dwarf_scn_names[cnt]) == 0)) return true; diff --git a/libelf/ChangeLog b/libelf/ChangeLog index a1fd414c..041da9b1 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,27 @@ +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/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..93d1e12f 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -774,7 +774,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..475c6ded 100644 --- a/libelf/elf_getdata.c +++ b/libelf/elf_getdata.c @@ -146,7 +146,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 +161,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 +175,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 +328,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 +383,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_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/patches/config.h.patch b/patches/config.h.patch new file mode 100644 index 00000000..175e6000 --- /dev/null +++ b/patches/config.h.patch @@ -0,0 +1,42 @@ +diff --git b/config.h a/config.h +index f929481176ba..ea86194416c7 100644 +--- b/config.h ++++ a/config.h +@@ -29,7 +29,7 @@ + /* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + + /* define if the compiler supports basic C++11 syntax */ +-/* #undef HAVE_CXX11 */ ++#define HAVE_CXX11 1 + + /* Define if the GNU dcgettext() function is already present or preinstalled. + */ +@@ -60,7 +60,9 @@ + #define HAVE_DECL_STRERROR_R 1 + + /* Define to 1 if you have the <error.h> header file. */ ++#if defined(__BIONIC__) || defined(__GLIBC__) + #define HAVE_ERROR_H 1 ++#endif + + /* Define to 1 if you have the <err.h> header file. */ + #define HAVE_ERR_H 1 +@@ -69,7 +71,7 @@ + #define HAVE_FALLTHROUGH 1 + + /* Defined if __attribute__((gcc_struct)) is supported */ +-#define HAVE_GCC_STRUCT 1 ++/* #undef HAVE_GCC_STRUCT */ + + /* Define if the GNU gettext() function is already present or preinstalled. */ + #define HAVE_GETTEXT 1 +@@ -152,7 +154,9 @@ + #define STDC_HEADERS 1 + + /* Define to 1 if strerror_r returns char *. */ ++#if defined(__GLIBC__) || defined(__BIONIC__) + #define STRERROR_R_CHAR_P 1 ++#endif + + /* Support bzip2 decompression via -lbz2. */ + /* #undef USE_BZLIB */ diff --git a/po/ChangeLog b/po/ChangeLog index 740ca87e..afbdc249 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,32 @@ +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. + +2021-05-10 Mark Wielaard <mark@klomp.org> + + * *.po: Update for 0.184. + +2021-03-21 Dmitry V. Levin <ldv@altlinux.org> + + * Makevars (XGETTEXT_OPTIONS): Update. + +2021-02-21 Piotr DrÄ…g <piotrdrag@gmail.com> + + * pl.po: Updated. + +2021-02-21 Piotr DrÄ…g <piotrdrag@gmail.com> + + * POTFILES.in: Add libcpu/i386_lex.l, libcpu/i386_parse.y, + src/elfclassify.c and debuginfod/debuginfod-find.c. + 2021-02-05 Mark Wielaard <mark@klomp.org> * *.po: Update for 0.183. diff --git a/po/Makevars b/po/Makevars index 086de588..692394cc 100644 --- a/po/Makevars +++ b/po/Makevars @@ -8,8 +8,15 @@ subdir = po top_builddir = .. # These options get passed to xgettext. -XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --flag=error:3:c-format \ - --flag=ERROR:1:c-format --flag=argp_error:2:c-format \ +XGETTEXT_OPTIONS = --keyword=_ \ + --keyword=N_ \ + --keyword=sgettext:1g \ + --flag=_:1:pass-c-format \ + --flag=N_:1:pass-c-format \ + --flag=sgettext:1:pass-c-format \ + --flag=error:3:c-format \ + --flag=ERROR:1:c-format \ + --flag=argp_error:2:c-format \ --add-comments # This is the copyright holder that gets inserted into the header of the diff --git a/po/POTFILES.in b/po/POTFILES.in index 4eac6d09..65a6cfeb 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -8,6 +8,8 @@ lib/xmalloc.c # Library sources libasm/asm_error.c +libcpu/i386_lex.l +libcpu/i386_parse.y libdw/dwarf_error.c libdwfl/argp-std.c libdwfl/libdwflP.h @@ -29,6 +31,7 @@ src/addr2line.c src/ar.c src/arlib-argp.c src/arlib.c +src/elfclassify.c src/elfcmp.c src/elfcompress.c src/elflint.c @@ -43,6 +46,9 @@ src/strings.c src/strip.c src/unstrip.c +# debuginfod sources +debuginfod/debuginfod-find.c + # Tests tests/backtrace.c tests/dwflmodtest.c @@ -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-02-05 21:10+0100\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\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:3453 -#: src/readelf.c:11501 src/unstrip.c:312 src/unstrip.c:2398 src/unstrip.c:2603 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "Kein Speicher mehr verfügbar" @@ -107,6 +102,21 @@ msgstr "keine Backend-Unterstützung verfügbar" msgid "unknown error" msgstr "unbekannter Fehler" +#: libcpu/i386_lex.l:122 +#, c-format +msgid "invalid character '%c' at line %d; ignored" +msgstr "" + +#: libcpu/i386_lex.l:123 +#, c-format +msgid "invalid character '\\%o' at line %d; ignored" +msgstr "" + +#: libcpu/i386_parse.y:554 +#, c-format +msgid "while reading i386 CPU description: %s at line %d" +msgstr "" + #: libdw/dwarf_error.c:59 msgid "invalid access" msgstr "Ungültiger Zugriff" @@ -298,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:2544 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 msgid "Input selection options:" msgstr "Eingabeauswahloptionen:" @@ -534,8 +544,8 @@ msgstr "Ungültige ELF Datei" msgid "No backend" msgstr "Kein Backend" -#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77 -#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130 +#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 +#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -631,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:6209 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" @@ -719,8 +729,8 @@ msgstr "data/scn Unterschied" msgid "invalid section header" msgstr "ungültiger Abschnitts-Header" -#: libelf/elf_error.c:191 src/readelf.c:10012 src/readelf.c:10612 -#: src/readelf.c:10713 src/readelf.c:10895 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "Ungültige Daten" @@ -851,7 +861,7 @@ msgstr "" 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:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Verschiedenes:" @@ -1186,6 +1196,232 @@ 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:91 +msgid "opening" +msgstr "" + +#: src/elfclassify.c:98 +msgid "reading" +msgstr "" + +#: src/elfclassify.c:244 +#, fuzzy +#| msgid "cannot get ELF header" +msgid "ELF header" +msgstr "ELF Kopf konnte nicht ausgelesen werden" + +#: src/elfclassify.c:255 +#, fuzzy +#| msgid "Program Headers:" +msgid "program headers" +msgstr "Programm-Köpfe:" + +#: src/elfclassify.c:264 +#, fuzzy +#| msgid "Program Headers:" +msgid "program header" +msgstr "Programm-Köpfe:" + +#: src/elfclassify.c:284 +#, fuzzy +#| msgid "invalid section header" +msgid "section headers" +msgstr "ungültiger Abschnitts-Header" + +#: src/elfclassify.c:295 +#, fuzzy +msgid "section header string table index" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/elfclassify.c:309 +#, fuzzy +msgid "could not obtain section header" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/elfclassify.c:315 +#, fuzzy +msgid "could not obtain section name" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/elfclassify.c:828 +msgid "writing to standard output" +msgstr "" + +#: src/elfclassify.c:855 +msgid "reading from standard input" +msgstr "" + +#: src/elfclassify.c:876 +#, fuzzy +#| msgid "Input selection options:" +msgid "Classification options" +msgstr "Eingabeauswahloptionen:" + +#: src/elfclassify.c:878 +msgid "File looks like an ELF object or archive/static library (default)" +msgstr "" + +#: src/elfclassify.c:881 +msgid "File is an regular ELF object (not an archive/static library)" +msgstr "" + +#: src/elfclassify.c:884 +msgid "File is an ELF archive or static library" +msgstr "" + +#: src/elfclassify.c:887 +msgid "File is an ELF core dump file" +msgstr "" + +#: 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:893 +msgid "File is (primarily) an ELF program executable (not primarily a DSO)" +msgstr "" + +#: src/elfclassify.c:896 +msgid "File is an ELF program executable (might also be a DSO)" +msgstr "" + +#: src/elfclassify.c:899 +msgid "" +"File is (primarily) an ELF shared object (DSO) (not primarily an executable)" +msgstr "" + +#: src/elfclassify.c:902 +msgid "File is an ELF shared object (DSO) (might also be an executable)" +msgstr "" + +#: 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:908 +msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" +msgstr "" + +#: src/elfclassify.c:911 +msgid "File is a loadable ELF object (program or shared object)" +msgstr "" + +#: src/elfclassify.c:940 +msgid "Input flags" +msgstr "" + +#: src/elfclassify.c:942 +msgid "Only classify regular (not symlink nor special device) files" +msgstr "" + +#: src/elfclassify.c:944 +msgid "" +"Also read file names to process from standard input, separated by newlines" +msgstr "" + +#: src/elfclassify.c:947 +msgid "" +"Also read file names to process from standard input, separated by ASCII NUL " +"bytes" +msgstr "" + +#: src/elfclassify.c:950 +msgid "Do not read files from standard input (default)" +msgstr "" + +#: src/elfclassify.c:952 +msgid "Try to open compressed files or embedded (kernel) ELF images" +msgstr "" + +#: src/elfclassify.c:955 +#, fuzzy +#| msgid "Output format:" +msgid "Output flags" +msgstr "Ausgabeformat:" + +#: src/elfclassify.c:957 +msgid "Output names of files, separated by newline" +msgstr "" + +#: src/elfclassify.c:959 +msgid "Output names of files, separated by ASCII NUL" +msgstr "" + +#: 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:963 +msgid "If printing file names, print matching files (default)" +msgstr "" + +#: src/elfclassify.c:965 +msgid "If printing file names, print files that do not match" +msgstr "" + +#: src/elfclassify.c:967 +msgid "Additional flags" +msgstr "" + +#: src/elfclassify.c:969 +msgid "Output additional information (can be specified multiple times)" +msgstr "" + +#: src/elfclassify.c:971 +msgid "Suppress some error output (counterpart to --verbose)" +msgstr "" + +#. Strings for arguments in help texts. +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 +#: src/readelf.c:158 +msgid "FILE..." +msgstr "DATEI..." + +#: src/elfclassify.c:980 +msgid "" +"Determine the type of an ELF file.\n" +"\n" +"All of the classification options must apply at the same time to a " +"particular file. Classification options can be negated using a \"--not-\" " +"prefix.\n" +"\n" +"Since modern ELF does not clearly distinguish between programs and dynamic " +"shared objects, you should normally use either --executable or --shared to " +"identify the primary purpose of a file. Only one of the --shared and --" +"executable checks can pass for a file.\n" +"\n" +"If you want to know whether an ELF object might a program or a shared " +"library (but could be both), then use --program or --library. Some ELF files " +"will classify as both a program and a library.\n" +"\n" +"If you just want to know whether an ELF file is loadable (as program or " +"library) use --loadable. Note that files that only contain (separate) debug " +"information (--debug-only) are never --loadable (even though they might " +"contain program headers). Linux kernel modules are also not --loadable (in " +"the normal sense).\n" +"\n" +"Without any of the --print options, the program exits with status 0 if the " +"requested checks pass for all input files, with 1 if a check fails for any " +"file, and 2 if there is an environmental issue (such as a file read error or " +"a memory allocation error).\n" +"\n" +"When printing file names, the program exits with status 0 even if no file " +"names are printed, and exits with status 2 if there is an environmental " +"issue.\n" +"\n" +"On usage error (e.g. a bad option was given), the program exits with a " +"status code larger than 2.\n" +"\n" +"The --quiet or -q option suppresses some error warning output, but doesn't " +"change the exit status." +msgstr "" + #: src/elfcmp.c:60 msgid "Control options:" msgstr "" @@ -1377,14 +1613,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/unstrip.c:2194 src/unstrip.c:2223 +#: 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:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, 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 "" @@ -1394,7 +1630,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 "" @@ -1409,74 +1645,69 @@ msgstr "" msgid "cannot get relocation: %s" msgstr "" -#: src/elfcompress.c:115 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "" -#: src/elfcompress.c:122 +#: src/elfcompress.c:124 #, fuzzy, c-format msgid "-t option specified twice" msgstr "Option -d zweimal angegeben" -#: src/elfcompress.c:131 +#: src/elfcompress.c:133 #, fuzzy, c-format msgid "unknown compression type '%s'" msgstr "unbekannter Typ" #. We need at least one input file. -#: src/elfcompress.c:143 src/elfcompress.c:1347 +#: src/elfcompress.c:145 src/elfcompress.c:1345 #, fuzzy, c-format msgid "No input file given" msgstr "Eingabedatei '%s' ignoriert" -#: src/elfcompress.c:149 src/elfcompress.c:1352 +#: src/elfcompress.c:151 src/elfcompress.c:1350 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "" -#: src/elfcompress.c:1309 +#: src/elfcompress.c:1307 msgid "Place (de)compressed output into FILE" msgstr "" -#: src/elfcompress.c:1312 +#: src/elfcompress.c:1310 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" "gnu' (.zdebug GNU style compression, 'gnu' is an alias)" msgstr "" -#: src/elfcompress.c:1315 +#: src/elfcompress.c:1313 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" -#: src/elfcompress.c:1318 +#: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" msgstr "" -#: src/elfcompress.c:1321 +#: src/elfcompress.c:1319 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" msgstr "" -#: src/elfcompress.c:1324 src/strip.c:93 +#: src/elfcompress.c:1322 src/strip.c:93 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "" -#: src/elfcompress.c:1327 +#: src/elfcompress.c:1325 #, fuzzy msgid "Be silent when a section cannot be compressed" msgstr "konnte Abschnittsdaten nicht holen: %s" -#. Strings for arguments in help texts. -#: src/elfcompress.c:1336 src/elflint.c:77 src/readelf.c:158 -msgid "FILE..." -msgstr "DATEI..." - -#: src/elfcompress.c:1337 +#: src/elfcompress.c:1335 msgid "Compress or decompress sections in an ELF file." msgstr "" @@ -1677,7 +1908,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:3444 src/elflint.c:4456 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "" @@ -2654,692 +2885,692 @@ msgstr "" msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3436 +#: src/elflint.c:3448 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3457 +#: src/elflint.c:3464 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3473 +#: src/elflint.c:3475 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3482 +#: src/elflint.c:3484 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3494 +#: src/elflint.c:3496 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3511 +#: src/elflint.c:3513 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3520 +#: src/elflint.c:3522 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3529 +#: src/elflint.c:3531 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3544 +#: src/elflint.c:3546 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" #. Tag_File -#: src/elflint.c:3555 +#: src/elflint.c:3557 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3573 +#: src/elflint.c:3575 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3584 +#: src/elflint.c:3586 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3597 +#: src/elflint.c:3599 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3601 +#: src/elflint.c:3603 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" msgstr "" -#: src/elflint.c:3611 +#: src/elflint.c:3613 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3617 +#: src/elflint.c:3619 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3714 +#: src/elflint.c:3716 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3718 +#: src/elflint.c:3720 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3720 +#: src/elflint.c:3722 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3722 +#: src/elflint.c:3724 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3724 +#: src/elflint.c:3726 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3726 +#: src/elflint.c:3728 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3728 +#: src/elflint.c:3730 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3730 +#: src/elflint.c:3732 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3733 +#: src/elflint.c:3735 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" msgstr "" -#: src/elflint.c:3737 +#: src/elflint.c:3739 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" msgstr "" -#: src/elflint.c:3741 +#: src/elflint.c:3743 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" msgstr "" -#: src/elflint.c:3759 +#: src/elflint.c:3761 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3768 +#: src/elflint.c:3770 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3795 +#: src/elflint.c:3797 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3812 +#: src/elflint.c:3814 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3830 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" -#: src/elflint.c:3847 +#: src/elflint.c:3849 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3853 src/elflint.c:3885 +#: src/elflint.c:3855 src/elflint.c:3887 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" -#: src/elflint.c:3858 src/elflint.c:3890 +#: src/elflint.c:3860 src/elflint.c:3892 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " "segments\n" msgstr "" -#: src/elflint.c:3866 +#: src/elflint.c:3868 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3909 +#: src/elflint.c:3911 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3914 +#: src/elflint.c:3916 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3924 +#: src/elflint.c:3926 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3944 +#: src/elflint.c:3946 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3954 +#: src/elflint.c:3956 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3962 +#: src/elflint.c:3964 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3972 +#: src/elflint.c:3974 #, fuzzy, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:3977 +#: src/elflint.c:3979 #, fuzzy, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elflint.c:3983 +#: src/elflint.c:3985 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "" -#: src/elflint.c:3989 +#: src/elflint.c:3991 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3994 +#: src/elflint.c:3996 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:4001 +#: src/elflint.c:4003 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:4006 +#: src/elflint.c:4008 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:4025 +#: src/elflint.c:4027 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:4034 +#: src/elflint.c:4036 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "" -#: src/elflint.c:4041 +#: src/elflint.c:4043 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:4072 +#: src/elflint.c:4074 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " "%d\n" msgstr "" -#: src/elflint.c:4082 +#: src/elflint.c:4084 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d\n" msgstr "" -#: src/elflint.c:4108 +#: src/elflint.c:4110 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d and file contents is non-zero\n" msgstr "" -#: src/elflint.c:4119 +#: src/elflint.c:4121 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " "segment of program header entry %d\n" msgstr "" -#: src/elflint.c:4130 +#: src/elflint.c:4132 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:4140 +#: src/elflint.c:4142 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:4150 +#: src/elflint.c:4152 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" -#: src/elflint.c:4156 +#: src/elflint.c:4158 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " "but type is not SHT_TYPE\n" msgstr "" -#: src/elflint.c:4164 +#: src/elflint.c:4166 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:4215 +#: src/elflint.c:4217 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:4238 +#: src/elflint.c:4240 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:4249 +#: src/elflint.c:4251 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:4255 +#: src/elflint.c:4257 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:4266 +#: src/elflint.c:4268 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" msgstr "" -#: src/elflint.c:4279 +#: src/elflint.c:4281 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:4293 +#: src/elflint.c:4295 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:4342 +#: src/elflint.c:4344 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" -#: src/elflint.c:4346 +#: src/elflint.c:4348 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" msgstr "" -#: src/elflint.c:4395 +#: src/elflint.c:4397 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4400 +#: src/elflint.c:4402 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4419 +#: src/elflint.c:4421 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4439 +#: src/elflint.c:4441 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4442 +#: src/elflint.c:4444 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4463 +#: src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4470 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4473 +#: src/elflint.c:4475 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4491 +#: src/elflint.c:4493 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4506 +#: src/elflint.c:4508 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4516 +#: src/elflint.c:4518 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" -#: src/elflint.c:4527 +#: src/elflint.c:4529 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4535 +#: src/elflint.c:4537 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4542 +#: src/elflint.c:4544 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4556 +#: src/elflint.c:4558 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4559 +#: src/elflint.c:4561 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4569 +#: src/elflint.c:4571 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4590 +#: src/elflint.c:4592 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4601 +#: src/elflint.c:4603 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4608 +#: src/elflint.c:4610 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4617 src/elflint.c:4640 +#: src/elflint.c:4619 src/elflint.c:4642 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4646 +#: src/elflint.c:4648 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4673 +#: src/elflint.c:4675 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4676 +#: src/elflint.c:4678 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4689 +#: src/elflint.c:4691 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4697 +#: src/elflint.c:4699 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4700 +#: src/elflint.c:4702 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4704 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4707 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4712 +#: src/elflint.c:4714 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4715 +#: src/elflint.c:4717 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4726 +#: src/elflint.c:4728 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4733 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4736 +#: src/elflint.c:4738 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4749 +#: src/elflint.c:4751 #, 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:4783 +#: src/elflint.c:4785 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4795 +#: src/elflint.c:4797 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "neue Datei konnte nicht angelegt werden" -#: src/elflint.c:4816 +#: src/elflint.c:4818 #, 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" @@ -3448,12 +3679,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:2767 #, 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:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: Dateiformat nicht erkannt" @@ -3488,24 +3719,24 @@ msgstr "" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: Dateiformat nicht erkannt" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format 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/nm.c:745 src/nm.c:1238 src/objdump.c:781 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:2711 -#: src/readelf.c:2787 src/readelf.c:2874 src/readelf.c:3472 src/readelf.c:3522 -#: src/readelf.c:3592 src/readelf.c:11328 src/readelf.c:12523 -#: src/readelf.c:12734 src/readelf.c:12803 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: 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:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -3519,35 +3750,58 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:775 +msgctxt "sysv" +msgid "Name" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:777 +msgctxt "sysv" +msgid "Value" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:779 +msgctxt "sysv" +msgid "Size" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:781 +msgctxt "sysv" +msgid "Line" +msgstr "" + +#: src/nm.c:1249 #, 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:1254 #, 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:1334 +#: src/nm.c:1335 #, 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:1570 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Ungültige Operation" -#: src/nm.c:1620 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: keine Symbole" @@ -3621,7 +3875,7 @@ msgstr "Inhalt des Abschnitts %s:\n" msgid "cannot disassemble" msgstr "Disassemblieren nicht möglich" -#: src/objdump.c:760 +#: src/objdump.c:759 #, fuzzy, c-format msgid "cannot create backend for elf file" msgstr "neue Datei konnte nicht angelegt werden" @@ -3805,7 +4059,7 @@ 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:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "" @@ -3815,11 +4069,11 @@ msgstr "" msgid "cannot get section: %s" msgstr "" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12754 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:487 src/unstrip.c:608 -#: src/unstrip.c:629 src/unstrip.c:669 src/unstrip.c:885 src/unstrip.c:1216 -#: src/unstrip.c:1343 src/unstrip.c:1367 src/unstrip.c:1423 src/unstrip.c:1487 -#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "" @@ -3829,8 +4083,8 @@ msgstr "" msgid "cannot get section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:672 src/readelf.c:6628 src/readelf.c:10600 src/readelf.c:10702 -#: src/readelf.c:10880 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "" @@ -4152,7 +4406,7 @@ msgid "" " Segment Sections..." msgstr "" -#: src/readelf.c:1464 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "" @@ -4187,18 +4441,18 @@ msgstr "" msgid "<INVALID SECTION>" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3488 src/readelf.c:12625 -#: src/readelf.c:12632 src/readelf.c:12676 src/readelf.c:12683 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3493 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, 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:2717 src/readelf.c:2793 -#: src/readelf.c:3097 src/readelf.c:3171 src/readelf.c:5401 +#: 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:5407 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ungültige .debug_line Sektion" @@ -4335,20 +4589,20 @@ msgstr "" msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2590 +#: src/readelf.c:2595 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2672 +#: src/readelf.c:2680 msgid "none" msgstr "keine" -#: src/readelf.c:2689 +#: src/readelf.c:2697 msgid "| <unknown>" msgstr "| <unbekannt>" -#: src/readelf.c:2720 +#: src/readelf.c:2728 #, c-format msgid "" "\n" @@ -4361,17 +4615,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2741 +#: src/readelf.c:2749 #, fuzzy, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n" -#: src/readelf.c:2754 +#: src/readelf.c:2762 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2797 +#: src/readelf.c:2805 #, c-format msgid "" "\n" @@ -4384,18 +4638,18 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2825 +#: src/readelf.c:2833 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2840 +#: src/readelf.c:2848 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" #. Print the header. -#: src/readelf.c:3101 +#: src/readelf.c:3109 #, c-format msgid "" "\n" @@ -4408,15 +4662,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3129 +#: src/readelf.c:3137 msgid " 0 *local* " msgstr " 0 *lokal* " -#: src/readelf.c:3134 +#: src/readelf.c:3142 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3176 +#: src/readelf.c:3184 #, c-format msgid "" "\n" @@ -4431,66 +4685,66 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3198 +#: src/readelf.c:3206 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:3200 +#: src/readelf.c:3208 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3207 +#: src/readelf.c:3215 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3220 +#: src/readelf.c:3228 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" msgstr "" -#: src/readelf.c:3238 src/readelf.c:3302 src/readelf.c:3368 +#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:3246 +#: src/readelf.c:3254 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3275 +#: src/readelf.c:3283 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3310 +#: src/readelf.c:3318 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3341 +#: src/readelf.c:3349 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3377 +#: src/readelf.c:3385 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3444 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:3533 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4501,13 +4755,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3547 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:3606 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4515,102 +4769,102 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:3623 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3647 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3686 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3691 +#: src/readelf.c:3697 #, c-format msgid " File: %11<PRIu32>\n" msgstr " File: %11<PRIu32>\n" -#: src/readelf.c:3740 +#: src/readelf.c:3746 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3743 +#: src/readelf.c:3749 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3746 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3756 +#: src/readelf.c:3762 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3759 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3829 +#: src/readelf.c:3835 #, fuzzy, c-format msgid "sprintf failure" msgstr "mprotect fehlgeschlagen" -#: src/readelf.c:4311 +#: src/readelf.c:4317 msgid "empty block" msgstr "" -#: src/readelf.c:4314 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:4792 +#: src/readelf.c:4798 #, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "" -#: src/readelf.c:4859 +#: src/readelf.c:4865 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "" -#: src/readelf.c:4866 +#: src/readelf.c:4872 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "" -#: src/readelf.c:4873 +#: src/readelf.c:4879 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "" -#: src/readelf.c:4880 +#: src/readelf.c:4886 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4980 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr "" -#: src/readelf.c:5091 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -4618,79 +4872,79 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5105 #, c-format msgid "" "\n" "Abbreviation section at offset %<PRIu64>:\n" msgstr "" -#: src/readelf.c:5112 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:5128 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:5161 src/readelf.c:5470 src/readelf.c:5637 src/readelf.c:6022 -#: src/readelf.c:6638 src/readelf.c:8375 src/readelf.c:9064 src/readelf.c:9537 -#: src/readelf.c:9788 src/readelf.c:9954 src/readelf.c:10341 -#: src/readelf.c:10401 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" "DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n" msgstr "" -#: src/readelf.c:5174 +#: src/readelf.c:5180 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:5274 src/readelf.c:5298 src/readelf.c:5682 src/readelf.c:9109 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5276 src/readelf.c:5313 src/readelf.c:5695 src/readelf.c:9122 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5277 src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9131 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, fuzzy, c-format msgid " Address size: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5279 src/readelf.c:5332 src/readelf.c:5714 src/readelf.c:9141 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, fuzzy, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5317 src/readelf.c:5699 src/readelf.c:9126 src/readelf.c:10533 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, fuzzy, c-format msgid "Unknown version" msgstr "unbekannte Version" -#: src/readelf.c:5327 src/readelf.c:5540 src/readelf.c:5709 src/readelf.c:9136 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, fuzzy, c-format msgid "unsupported address size" msgstr "Kein Adress-Wert" -#: src/readelf.c:5338 src/readelf.c:5551 src/readelf.c:5719 src/readelf.c:9146 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5391 src/readelf.c:5465 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:5406 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -4701,239 +4955,239 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5437 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5439 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" msgstr "" -#: src/readelf.c:5483 src/readelf.c:8402 +#: src/readelf.c:5489 src/readelf.c:8426 #, c-format msgid "" "\n" "Table at offset %zu:\n" msgstr "" -#: src/readelf.c:5487 src/readelf.c:5663 src/readelf.c:6662 src/readelf.c:8413 -#: src/readelf.c:9090 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5503 +#: src/readelf.c:5509 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5515 +#: src/readelf.c:5521 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5519 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5530 +#: src/readelf.c:5536 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5536 +#: src/readelf.c:5542 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr "" -#: src/readelf.c:5547 +#: src/readelf.c:5553 #, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr "" -#: src/readelf.c:5602 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5646 +#: src/readelf.c:5652 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:5669 src/readelf.c:9096 +#: src/readelf.c:5675 src/readelf.c:9177 #, fuzzy, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5724 src/readelf.c:9151 +#: src/readelf.c:5730 src/readelf.c:9232 #, fuzzy, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5740 src/readelf.c:9167 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5742 src/readelf.c:9169 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:5748 src/readelf.c:9175 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5759 src/readelf.c:9186 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5763 src/readelf.c:9190 +#: src/readelf.c:5769 src/readelf.c:9271 #, fuzzy, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5815 +#: src/readelf.c:5821 #, fuzzy, c-format msgid "invalid range list data" msgstr "Ungültige Daten" -#: src/readelf.c:6000 src/readelf.c:9515 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6017 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "" -#: src/readelf.c:6053 src/readelf.c:9570 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6055 src/readelf.c:9572 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:6064 src/readelf.c:9598 src/readelf.c:9624 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr "" -#: src/readelf.c:6089 src/readelf.c:9708 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:6099 src/readelf.c:9718 +#: src/readelf.c:6105 src/readelf.c:9799 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:6359 +#: src/readelf.c:6365 msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:6616 +#: src/readelf.c:6622 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:6634 +#: src/readelf.c:6640 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#<PRIx64>:\n" msgstr "" -#: src/readelf.c:6684 +#: src/readelf.c:6690 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:6785 src/readelf.c:6939 +#: src/readelf.c:6791 src/readelf.c:6945 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:6800 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:6806 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:6916 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#<PRIx64>)" msgstr "" -#: src/readelf.c:6923 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr "" -#: src/readelf.c:6960 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr "" -#: src/readelf.c:7045 +#: src/readelf.c:7051 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "" -#: src/readelf.c:7055 +#: src/readelf.c:7061 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "" -#: src/readelf.c:7077 +#: src/readelf.c:7083 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "" -#: src/readelf.c:7407 +#: src/readelf.c:7413 #, fuzzy, c-format msgid "invalid file (%<PRId64>): %s" msgstr "Ungültige Datei" -#: src/readelf.c:7411 +#: src/readelf.c:7417 #, fuzzy, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr "unbekannte Form %<PRIx64>" -#: src/readelf.c:7415 +#: src/readelf.c:7421 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:7728 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -4941,12 +5195,12 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:7778 +#: src/readelf.c:7786 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:7797 +#: src/readelf.c:7806 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -4955,7 +5209,7 @@ msgid "" " Type signature: %#<PRIx64>, Type offset: %#<PRIx64> [%<PRIx64>]\n" msgstr "" -#: src/readelf.c:7809 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -4963,37 +5217,37 @@ msgid "" "%<PRIu8>, Offset size: %<PRIu8>\n" msgstr "" -#: src/readelf.c:7819 src/readelf.c:7982 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr "" -#: src/readelf.c:7846 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7875 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:7884 +#: src/readelf.c:7893 #, 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:7922 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:7930 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:7974 +#: src/readelf.c:7981 #, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5001,7 +5255,7 @@ msgid "" "%<PRIu8>, Offset size: %<PRIu8>\n" msgstr "" -#: src/readelf.c:8026 +#: src/readelf.c:8033 #, c-format msgid "" "\n" @@ -5009,18 +5263,18 @@ msgid "" "\n" msgstr "" -#: src/readelf.c:8358 +#: src/readelf.c:8365 #, fuzzy, c-format msgid "unknown form: %s" msgstr "unbekannte Form %<PRIx64>" -#: src/readelf.c:8389 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "" #. Print what we got so far. -#: src/readelf.c:8491 +#: src/readelf.c:8517 #, c-format msgid "" "\n" @@ -5039,177 +5293,187 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:8513 +#: src/readelf.c:8539 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:8521 +#: src/readelf.c:8547 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "Kein Adress-Wert" -#: src/readelf.c:8529 +#: src/readelf.c:8555 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "" -#: src/readelf.c:8539 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:8554 +#: src/readelf.c:8580 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:8565 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:8571 src/readelf.c:8648 +#: src/readelf.c:8597 src/readelf.c:8674 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8642 +#: src/readelf.c:8668 msgid "" "\n" "File name table:" msgstr "" -#: src/readelf.c:8703 +#: src/readelf.c:8729 msgid " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:8742 +#: src/readelf.c:8775 msgid "" "\n" "No line number statements." msgstr "" -#: src/readelf.c:8746 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:8766 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8800 +#: src/readelf.c:8828 #, c-format msgid " special opcode %u: address+%u = " msgstr "" -#: src/readelf.c:8804 +#: src/readelf.c:8832 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:8807 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8825 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:8830 +#: src/readelf.c:8858 msgid " end of sequence" msgstr "" -#: src/readelf.c:8848 +#: src/readelf.c:8876 #, fuzzy, c-format msgid " set address to " msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:8876 +#: src/readelf.c:8904 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" -#: src/readelf.c:8890 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr "" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, c-format +msgid " set function name %s (0x%x)\n" +msgstr "" + #. Unknown, ignore it. -#: src/readelf.c:8895 +#: src/readelf.c:8976 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" #. Takes no argument. -#: src/readelf.c:8907 +#: src/readelf.c:8988 msgid " copy" msgstr "" -#: src/readelf.c:8918 +#: src/readelf.c:8999 #, c-format msgid " advance address by %u to " msgstr "" -#: src/readelf.c:8922 src/readelf.c:8983 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8934 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr "" -#: src/readelf.c:8944 +#: src/readelf.c:9025 #, c-format msgid " set file to %<PRIu64>\n" msgstr "" -#: src/readelf.c:8955 +#: src/readelf.c:9036 #, c-format msgid " set column to %<PRIu64>\n" msgstr "" -#: src/readelf.c:8962 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr "" #. Takes no argument. -#: src/readelf.c:8968 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr "" -#: src/readelf.c:8979 +#: src/readelf.c:9060 #, c-format msgid " advance address by constant %u to " msgstr "" -#: src/readelf.c:8999 +#: src/readelf.c:9080 #, c-format msgid " advance address by fixed value %u to \n" msgstr "" #. Takes no argument. -#: src/readelf.c:9009 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr "" #. Takes no argument. -#: src/readelf.c:9014 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:9024 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr "" @@ -5217,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:9033 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:9073 +#: src/readelf.c:9154 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/readelf.c:9239 +#: src/readelf.c:9320 #, c-format msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:9279 +#: src/readelf.c:9360 #, fuzzy, c-format msgid "invalid loclists data" msgstr "Ungültige Daten" -#: src/readelf.c:9532 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:9745 src/readelf.c:10789 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:9800 src/readelf.c:9963 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:9880 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:9903 +#: src/readelf.c:9984 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "" -#: src/readelf.c:10004 +#: src/readelf.c:10085 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10016 +#: src/readelf.c:10097 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10022 src/readelf.c:10909 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10029 +#: src/readelf.c:10110 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10058 +#: src/readelf.c:10139 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr "" -#: src/readelf.c:10066 +#: src/readelf.c:10147 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr "" -#: src/readelf.c:10091 +#: src/readelf.c:10172 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr "" -#: src/readelf.c:10098 +#: src/readelf.c:10179 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:10110 +#: src/readelf.c:10191 #, c-format msgid " %<PRIu8> arguments:" msgstr "" -#: src/readelf.c:10125 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10326 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" -#: src/readelf.c:10370 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -5326,72 +5590,78 @@ msgid "" " %*s String\n" msgstr "" -#: src/readelf.c:10385 +#. TRANS: the debugstr| prefix makes the string unique. +#: src/readelf.c:10456 +msgctxt "debugstr" +msgid "Offset" +msgstr "" + +#: src/readelf.c:10466 #, c-format msgid " *** error, missing string terminator\n" msgstr "" -#: src/readelf.c:10414 +#: src/readelf.c:10495 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:10513 +#: src/readelf.c:10594 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10515 +#: src/readelf.c:10596 #, fuzzy, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10529 +#: src/readelf.c:10610 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10538 +#: src/readelf.c:10619 #, fuzzy, c-format msgid " Padding: %8<PRIx16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10592 +#: src/readelf.c:10673 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:10694 +#: src/readelf.c:10775 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:10717 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:10729 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:10744 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:10757 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:10771 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5400,142 +5670,142 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:10844 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:10871 +#: src/readelf.c:10952 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %#<PRIx64> contains %<PRId64> bytes :\n" msgstr "" -#: src/readelf.c:10900 +#: src/readelf.c:10981 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10918 +#: src/readelf.c:10999 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10925 +#: src/readelf.c:11006 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10932 +#: src/readelf.c:11013 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10939 +#: src/readelf.c:11020 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10946 +#: src/readelf.c:11027 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:10960 +#: src/readelf.c:11041 #, c-format msgid "" "\n" " CU list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:10985 +#: src/readelf.c:11066 #, c-format msgid "" "\n" " TU list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:11014 +#: src/readelf.c:11095 #, c-format msgid "" "\n" " Address list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:11046 +#: src/readelf.c:11127 #, c-format msgid "" "\n" " Symbol table at offset %#<PRIx32> contains %zu slots:\n" msgstr "" -#: src/readelf.c:11184 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:11552 src/readelf.c:12179 src/readelf.c:12290 -#: src/readelf.c:12348 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:11915 +#: src/readelf.c:11996 #, c-format msgid "" "\n" "%*s... <repeats %u more times> ..." msgstr "" -#: src/readelf.c:12427 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:12456 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr "" -#: src/readelf.c:12508 +#: src/readelf.c:12588 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/readelf.c:12542 +#: src/readelf.c:12622 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12565 +#: src/readelf.c:12645 #, c-format msgid "" "\n" "Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12612 +#: src/readelf.c:12692 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no data to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12639 src/readelf.c:12690 +#: src/readelf.c:12719 src/readelf.c:12770 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12644 +#: src/readelf.c:12724 #, c-format msgid "" "\n" "Hex dump of section [%zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12649 +#: src/readelf.c:12729 #, c-format msgid "" "\n" @@ -5543,21 +5813,21 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12663 +#: src/readelf.c:12743 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no strings to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12695 +#: src/readelf.c:12775 #, c-format msgid "" "\n" "String section [%zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12700 +#: src/readelf.c:12780 #, c-format msgid "" "\n" @@ -5565,45 +5835,45 @@ msgid "" "offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:12749 +#: src/readelf.c:12829 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:12779 +#: src/readelf.c:12859 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:12836 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:12839 +#: src/readelf.c:12919 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:12843 +#: src/readelf.c:12923 #, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" -#: src/readelf.c:12861 +#: src/readelf.c:12941 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:12866 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -5666,11 +5936,63 @@ msgstr "" msgid "%s: file format not recognized" msgstr "" +#: src/size.c:328 +msgctxt "bsd" +msgid "text" +msgstr "" + +#: src/size.c:329 +msgctxt "bsd" +msgid "data" +msgstr "" + +#: src/size.c:330 +msgctxt "bsd" +msgid "bss" +msgstr "" + +#: src/size.c:331 +msgctxt "bsd" +msgid "dec" +msgstr "" + +#: src/size.c:332 +msgctxt "bsd" +msgid "hex" +msgstr "" + +#: src/size.c:333 +msgctxt "bsd" +msgid "filename" +msgstr "" + #: src/size.c:418 src/size.c:560 #, c-format msgid " (ex %s)" msgstr "" +#: src/size.c:420 +#, fuzzy +#| msgid "invalid section" +msgctxt "sysv" +msgid "section" +msgstr "ungültiger Abschnitt" + +#: src/size.c:421 +msgctxt "sysv" +msgid "size" +msgstr "" + +#: src/size.c:422 +msgctxt "sysv" +msgid "addr" +msgstr "" + +#: src/size.c:451 src/size.c:454 src/size.c:457 +msgctxt "sysv" +msgid "Total" +msgstr "" + #: src/size.c:482 #, fuzzy, c-format msgid "cannot get section header" @@ -5959,17 +6281,17 @@ msgstr "" msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -5980,132 +6302,132 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, 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:1052 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:1092 +#: src/strip.c:1097 #, fuzzy, c-format msgid "cannot get number of phdrs" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, 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:1121 src/strip.c:1164 #, 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:1244 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:1250 +#: src/strip.c:1254 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/strip.c:1259 +#: src/strip.c:1263 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Konnte Archiv '%s' nicht öffnen" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:1688 +#: src/strip.c:1692 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1697 +#: src/strip.c:1701 #, fuzzy, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1866 +#: src/strip.c:1870 #, c-format msgid "no memory to create section header string table" msgstr "" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -6191,7 +6513,7 @@ msgstr "" msgid "cannot get shdrstrndx:%s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:244 src/unstrip.c:2085 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "" @@ -6211,12 +6533,12 @@ msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" msgid "cannot copy ELF header: %s" msgstr "" -#: src/unstrip.c:265 src/unstrip.c:2103 src/unstrip.c:2146 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:270 src/unstrip.c:2107 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" @@ -6231,12 +6553,12 @@ msgstr "konnte Programm-Kopf nicht kopieren: %s" msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:289 src/unstrip.c:1707 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:291 src/unstrip.c:1709 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "konnte Abschnittsdaten nicht kopieren: %s" @@ -6246,14 +6568,14 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s" msgid "cannot create directory '%s'" msgstr "konnte Verzeichnis nicht erstellen: %s" -#: src/unstrip.c:393 src/unstrip.c:655 src/unstrip.c:689 src/unstrip.c:857 -#: src/unstrip.c:1749 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, 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:658 src/unstrip.c:679 src/unstrip.c:692 -#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "konnte Symboltabelle nicht aktualisieren: %s" @@ -6263,243 +6585,253 @@ msgstr "konnte Symboltabelle nicht aktualisieren: %s" msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:465 src/unstrip.c:479 +#: 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:578 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:591 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:846 +#: src/unstrip.c:850 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:848 +#: src/unstrip.c:852 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:865 +#: src/unstrip.c:869 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "ungültiger Offset %zu für Symbol %s" -#: src/unstrip.c:1023 src/unstrip.c:1427 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1038 +#: src/unstrip.c:1042 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1044 +#: src/unstrip.c:1048 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" -#: src/unstrip.c:1049 +#: src/unstrip.c:1053 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1055 +#: src/unstrip.c:1059 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1060 +#: src/unstrip.c:1064 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1102 src/unstrip.c:1121 src/unstrip.c:1159 +#: src/unstrip.c:1075 src/unstrip.c:1556 +#, fuzzy, c-format +msgid "cannot find matching section for [%zu] '%s'" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1139 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1150 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1206 src/unstrip.c:1553 -#, fuzzy, c-format -msgid "cannot find matching section for [%zu] '%s'" -msgstr "konnte Abschnittsdaten nicht holen: %s" - -#: src/unstrip.c:1331 src/unstrip.c:1347 src/unstrip.c:1633 src/unstrip.c:1924 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1356 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1385 src/unstrip.c:1389 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1393 src/unstrip.c:1397 src/unstrip.c:1648 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1400 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1404 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1475 src/unstrip.c:1568 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1627 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1757 +#: src/unstrip.c:1760 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:1789 +#: src/unstrip.c:1792 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:2064 +#: src/unstrip.c:2067 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:2093 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "" -#: src/unstrip.c:2117 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "konnte Programm-Kopf nicht aktualisieren: %s" -#: src/unstrip.c:2122 src/unstrip.c:2205 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2173 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2176 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2196 src/unstrip.c:2247 src/unstrip.c:2259 src/unstrip.c:2345 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2238 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2240 +#: src/unstrip.c:2239 msgid ", use --force" msgstr "" -#: src/unstrip.c:2263 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2266 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2272 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2302 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2306 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2321 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2325 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2338 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2369 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2501 +#: src/unstrip.c:2505 #, c-format msgid "no matching modules found" msgstr "kein passendes Modul gefunden" -#: src/unstrip.c:2510 +#: src/unstrip.c:2515 #, c-format msgid "matched more than one module" msgstr "mehr als ein passendes Modul" -#: src/unstrip.c:2554 +#: src/unstrip.c:2560 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2555 +#: src/unstrip.c:2561 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -6527,7 +6859,23 @@ msgid "" "was found, or . if FILE contains the debug information." msgstr "" -#: tests/backtrace.c:436 +#. Short description of program. +#: debuginfod/debuginfod-find.c:42 +msgid "Request debuginfo-related content from debuginfods listed in $" +msgstr "" + +#. Strings for arguments in help texts. +#: debuginfod/debuginfod-find.c:46 +msgid "" +"debuginfo BUILDID\n" +"debuginfo PATH\n" +"executable BUILDID\n" +"executable PATH\n" +"source BUILDID /FILENAME\n" +"source PATH /FILENAME\n" +msgstr "" + +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -6539,6 +6887,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>>" @@ -6622,9 +6974,6 @@ msgstr "" #~ msgid "only one option of -G and -r is allowed" #~ msgstr "nur eine Option aus -G und -r erlaubt" -#~ msgid "More than one output file name given." -#~ msgstr "Mehr als ein Name der Ausgabedatei angegeben." - #~ msgid "-) without matching -(" #~ msgstr "-) ohne Ãœbereinstimmung -(" @@ -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-02-05 21:10+0100\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\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:3453 -#: src/readelf.c:11501 src/unstrip.c:312 src/unstrip.c:2398 src/unstrip.c:2603 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "memoria agotada" @@ -110,6 +105,24 @@ msgstr "No hay soporte de segundo plano" msgid "unknown error" msgstr "error desconocido" +#: libcpu/i386_lex.l:122 +#, fuzzy, c-format +#| msgid "invalid page size value '%s': ignored" +msgid "invalid character '%c' at line %d; ignored" +msgstr "Valor de tamaño de página'%s': ignorado" + +#: libcpu/i386_lex.l:123 +#, fuzzy, c-format +#| msgid "invalid page size value '%s': ignored" +msgid "invalid character '\\%o' at line %d; ignored" +msgstr "Valor de tamaño de página'%s': ignorado" + +#: libcpu/i386_parse.y:554 +#, fuzzy, c-format +#| msgid "while reading linker script '%s': %s at line %d" +msgid "while reading i386 CPU description: %s at line %d" +msgstr "al leer script de enlace '%s': %s en lÃnea %d" + #: libdw/dwarf_error.c:59 msgid "invalid access" msgstr "Acceso inválido" @@ -300,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:2544 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 msgid "Input selection options:" msgstr "Opciones de selección de entrada:" @@ -533,8 +546,8 @@ msgstr "no es un archivo ELF válido" msgid "No backend" msgstr "No hay segundo plano (Backend)" -#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77 -#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130 +#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 +#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -630,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:6209 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "codificación inválida" @@ -716,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:10012 src/readelf.c:10612 -#: src/readelf.c:10713 src/readelf.c:10895 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "datos inválidos" @@ -854,7 +867,7 @@ msgstr "" 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:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Misceláneos:" @@ -1190,6 +1203,233 @@ 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:91 +msgid "opening" +msgstr "" + +#: src/elfclassify.c:98 +msgid "reading" +msgstr "" + +#: src/elfclassify.c:244 +#, fuzzy +#| msgid "cannot get ELF header" +msgid "ELF header" +msgstr "no se puede obtener el encabezamiento ELF" + +#: src/elfclassify.c:255 +#, fuzzy +#| msgid "Program Headers:" +msgid "program headers" +msgstr "encabezamientos de programa:" + +#: src/elfclassify.c:264 +#, fuzzy +#| msgid "Program Headers:" +msgid "program header" +msgstr "encabezamientos de programa:" + +#: src/elfclassify.c:284 +#, fuzzy +#| msgid "Section Headers:" +msgid "section headers" +msgstr "encabezamientos de sección:" + +#: 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:309 +#, fuzzy +msgid "could not obtain section header" +msgstr "no se puede obtener encabezamiento de sección\n" + +#: src/elfclassify.c:315 +#, fuzzy +msgid "could not obtain section name" +msgstr "no se puede obtener encabezamiento de sección\n" + +#: src/elfclassify.c:828 +msgid "writing to standard output" +msgstr "" + +#: src/elfclassify.c:855 +msgid "reading from standard input" +msgstr "" + +#: src/elfclassify.c:876 +#, fuzzy +#| msgid "Input selection options:" +msgid "Classification options" +msgstr "Opciones de selección de entrada:" + +#: src/elfclassify.c:878 +msgid "File looks like an ELF object or archive/static library (default)" +msgstr "" + +#: src/elfclassify.c:881 +msgid "File is an regular ELF object (not an archive/static library)" +msgstr "" + +#: src/elfclassify.c:884 +msgid "File is an ELF archive or static library" +msgstr "" + +#: src/elfclassify.c:887 +msgid "File is an ELF core dump file" +msgstr "" + +#: 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:893 +msgid "File is (primarily) an ELF program executable (not primarily a DSO)" +msgstr "" + +#: src/elfclassify.c:896 +msgid "File is an ELF program executable (might also be a DSO)" +msgstr "" + +#: src/elfclassify.c:899 +msgid "" +"File is (primarily) an ELF shared object (DSO) (not primarily an executable)" +msgstr "" + +#: src/elfclassify.c:902 +msgid "File is an ELF shared object (DSO) (might also be an executable)" +msgstr "" + +#: 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:908 +msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" +msgstr "" + +#: src/elfclassify.c:911 +msgid "File is a loadable ELF object (program or shared object)" +msgstr "" + +#: src/elfclassify.c:940 +msgid "Input flags" +msgstr "" + +#: src/elfclassify.c:942 +msgid "Only classify regular (not symlink nor special device) files" +msgstr "" + +#: src/elfclassify.c:944 +msgid "" +"Also read file names to process from standard input, separated by newlines" +msgstr "" + +#: src/elfclassify.c:947 +msgid "" +"Also read file names to process from standard input, separated by ASCII NUL " +"bytes" +msgstr "" + +#: src/elfclassify.c:950 +msgid "Do not read files from standard input (default)" +msgstr "" + +#: src/elfclassify.c:952 +msgid "Try to open compressed files or embedded (kernel) ELF images" +msgstr "" + +#: src/elfclassify.c:955 +#, fuzzy +#| msgid "Output format:" +msgid "Output flags" +msgstr "Formato de salida:" + +#: src/elfclassify.c:957 +msgid "Output names of files, separated by newline" +msgstr "" + +#: src/elfclassify.c:959 +msgid "Output names of files, separated by ASCII NUL" +msgstr "" + +#: 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:963 +msgid "If printing file names, print matching files (default)" +msgstr "" + +#: src/elfclassify.c:965 +msgid "If printing file names, print files that do not match" +msgstr "" + +#: src/elfclassify.c:967 +msgid "Additional flags" +msgstr "" + +#: src/elfclassify.c:969 +msgid "Output additional information (can be specified multiple times)" +msgstr "" + +#: src/elfclassify.c:971 +msgid "Suppress some error output (counterpart to --verbose)" +msgstr "" + +#. Strings for arguments in help texts. +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 +#: src/readelf.c:158 +msgid "FILE..." +msgstr "FICHERO..." + +#: src/elfclassify.c:980 +msgid "" +"Determine the type of an ELF file.\n" +"\n" +"All of the classification options must apply at the same time to a " +"particular file. Classification options can be negated using a \"--not-\" " +"prefix.\n" +"\n" +"Since modern ELF does not clearly distinguish between programs and dynamic " +"shared objects, you should normally use either --executable or --shared to " +"identify the primary purpose of a file. Only one of the --shared and --" +"executable checks can pass for a file.\n" +"\n" +"If you want to know whether an ELF object might a program or a shared " +"library (but could be both), then use --program or --library. Some ELF files " +"will classify as both a program and a library.\n" +"\n" +"If you just want to know whether an ELF file is loadable (as program or " +"library) use --loadable. Note that files that only contain (separate) debug " +"information (--debug-only) are never --loadable (even though they might " +"contain program headers). Linux kernel modules are also not --loadable (in " +"the normal sense).\n" +"\n" +"Without any of the --print options, the program exits with status 0 if the " +"requested checks pass for all input files, with 1 if a check fails for any " +"file, and 2 if there is an environmental issue (such as a file read error or " +"a memory allocation error).\n" +"\n" +"When printing file names, the program exits with status 0 even if no file " +"names are printed, and exits with status 2 if there is an environmental " +"issue.\n" +"\n" +"On usage error (e.g. a bad option was given), the program exits with a " +"status code larger than 2.\n" +"\n" +"The --quiet or -q option suppresses some error warning output, but doesn't " +"change the exit status." +msgstr "" + #: src/elfcmp.c:60 msgid "Control options:" msgstr "Opciones de control:" @@ -1385,14 +1625,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/unstrip.c:2194 src/unstrip.c:2223 +#: 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:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, 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" @@ -1402,7 +1642,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" @@ -1417,76 +1657,71 @@ 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:115 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "opción -o especificada dos veces" -#: src/elfcompress.c:122 +#: src/elfcompress.c:124 #, fuzzy, c-format msgid "-t option specified twice" msgstr "opción -f especificada dos veces" -#: src/elfcompress.c:131 +#: src/elfcompress.c:133 #, fuzzy, c-format msgid "unknown compression type '%s'" msgstr "tipo desconocido" #. We need at least one input file. -#: src/elfcompress.c:143 src/elfcompress.c:1347 +#: src/elfcompress.c:145 src/elfcompress.c:1345 #, fuzzy, c-format msgid "No input file given" msgstr "archivo de entrada vacÃo" -#: src/elfcompress.c:149 src/elfcompress.c:1352 +#: src/elfcompress.c:151 src/elfcompress.c:1350 #, fuzzy, c-format msgid "Only one input file allowed together with '-o'" msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'" -#: src/elfcompress.c:1309 +#: src/elfcompress.c:1307 #, fuzzy msgid "Place (de)compressed output into FILE" msgstr "Colocar la salida obtenida en FICHERO" -#: src/elfcompress.c:1312 +#: src/elfcompress.c:1310 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" "gnu' (.zdebug GNU style compression, 'gnu' is an alias)" msgstr "" -#: src/elfcompress.c:1315 +#: src/elfcompress.c:1313 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" -#: src/elfcompress.c:1318 +#: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" msgstr "" -#: src/elfcompress.c:1321 +#: src/elfcompress.c:1319 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" msgstr "" -#: src/elfcompress.c:1324 src/strip.c:93 +#: src/elfcompress.c:1322 src/strip.c:93 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "Relaja algunas reglas para manejar ficheros ELF rotos" -#: src/elfcompress.c:1327 +#: src/elfcompress.c:1325 #, fuzzy msgid "Be silent when a section cannot be compressed" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#. Strings for arguments in help texts. -#: src/elfcompress.c:1336 src/elflint.c:77 src/readelf.c:158 -msgid "FILE..." -msgstr "FICHERO..." - -#: src/elfcompress.c:1337 +#: src/elfcompress.c:1335 msgid "Compress or decompress sections in an ELF file." msgstr "" @@ -1697,7 +1932,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:3444 src/elflint.c:4456 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 #, 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" @@ -2845,17 +3080,17 @@ msgstr "Sección [%2d] '%s': no hay definición de BASE\n" msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "Sección [%2d] '%s': desconocida versión principal '%s'\n" -#: src/elflint.c:3436 +#: src/elflint.c:3448 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "Sección [%2d] '%s': sección de atributos de objeto vacÃo\n" -#: src/elflint.c:3457 +#: src/elflint.c:3464 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "Sección[%2d] '%s': formato de atributo no reconocido\n" -#: src/elflint.c:3473 +#: src/elflint.c:3475 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" @@ -2863,21 +3098,21 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: campo de longitud cero en sección de " "atributo\n" -#: src/elflint.c:3482 +#: src/elflint.c:3484 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "Sección[%2d] '%s': compensación %zu: longitud inválida en sección de " "atributo\n" -#: src/elflint.c:3494 +#: src/elflint.c:3496 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" "Sección[%2d] '%s': compensación %zu: cadena de nombre de proveedor sin " "terminar\n" -#: src/elflint.c:3511 +#: src/elflint.c:3513 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2885,12 +3120,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de sub-" "sección de atributo\n" -#: src/elflint.c:3520 +#: src/elflint.c:3522 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "Sección [%2d] '%s': compensación %zu: sección de atributo truncado\n" -#: src/elflint.c:3529 +#: src/elflint.c:3531 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2898,7 +3133,7 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: campo de longitud cero length en sub-" "sección de atributo\n" -#: src/elflint.c:3544 +#: src/elflint.c:3546 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2907,7 +3142,7 @@ msgstr "" "atributo\n" #. Tag_File -#: src/elflint.c:3555 +#: src/elflint.c:3557 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2915,26 +3150,26 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: sub-sección de atributo tiene etiqueta " "inesperada %u\n" -#: src/elflint.c:3573 +#: src/elflint.c:3575 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "Sección[%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de " "atributo\n" -#: src/elflint.c:3584 +#: src/elflint.c:3586 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" "Sección [%2d] '%s': compensación %zu: cadena sin terminar en atributo\n" -#: src/elflint.c:3597 +#: src/elflint.c:3599 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" "Sección [%2d] '%s': compensación %zu: etiqueta de atributo no reconocida %u\n" -#: src/elflint.c:3601 +#: src/elflint.c:3603 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" @@ -2942,12 +3177,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: no reconocido %s valor de atributo " "%<PRIu64>\n" -#: src/elflint.c:3611 +#: src/elflint.c:3613 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "Sección [%2d] '%s': compensación %zu: proveedor '%s' desconocido\n" -#: src/elflint.c:3617 +#: src/elflint.c:3619 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2955,47 +3190,47 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: extra bytes después de la última " "sección de atributo\n" -#: src/elflint.c:3714 +#: src/elflint.c:3716 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "no puede obtener encabezamiento de sección de sección zeroth\n" -#: src/elflint.c:3718 +#: src/elflint.c:3720 #, c-format msgid "zeroth section has nonzero name\n" msgstr "Sección zeroth tiene nombre nonzero\n" -#: src/elflint.c:3720 +#: src/elflint.c:3722 #, c-format msgid "zeroth section has nonzero type\n" msgstr "Sección zeroth tiene tipo nonzero\n" -#: src/elflint.c:3722 +#: src/elflint.c:3724 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "Sección zeroth tiene banderas nonzero\n" -#: src/elflint.c:3724 +#: src/elflint.c:3726 #, c-format msgid "zeroth section has nonzero address\n" msgstr "Sección zeroth tiene dirección nonzero\n" -#: src/elflint.c:3726 +#: src/elflint.c:3728 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "Sección zeroth tiene compensación nonzero\n" -#: src/elflint.c:3728 +#: src/elflint.c:3730 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "Sección zeroth tiene valor de alineación nonzero\n" -#: src/elflint.c:3730 +#: src/elflint.c:3732 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "Sección zeroth tiene valor de tamaño de entrada nonzero\n" -#: src/elflint.c:3733 +#: src/elflint.c:3735 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -3004,7 +3239,7 @@ msgstr "" "Sección zeroth tiene valor de tamaño nonzero mientras que el encabezamiento " "ELF tiene valor shnum nonzero\n" -#: src/elflint.c:3737 +#: src/elflint.c:3739 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3013,7 +3248,7 @@ msgstr "" "Sección zeroth tiene valor de enlace nonzero mientras que el encabezamiento " "ELF no señala sobreflujo en shstrndx\n" -#: src/elflint.c:3741 +#: src/elflint.c:3743 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -3022,27 +3257,27 @@ msgstr "" "la sección zeroth tiene un valor de enlace distinto a cero mientras que el " "encabezamiento ELF no señala desbordamiento en phnum\n" -#: src/elflint.c:3759 +#: src/elflint.c:3761 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "No se puede obtener encabezamiento para sección [%2zu] '%s': %s\n" -#: src/elflint.c:3768 +#: src/elflint.c:3770 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "Sección [%2zu]: nombre inválido\n" -#: src/elflint.c:3795 +#: src/elflint.c:3797 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "Sección [%2d] '%s' tiene tipo errado: %s esperado, es %s\n" -#: src/elflint.c:3812 +#: src/elflint.c:3814 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "Sección [%2zu] '%s' tiene banderas erradas: %s esperado, es %s\n" -#: src/elflint.c:3830 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -3050,12 +3285,12 @@ msgstr "" "Sección [%2zu] '%s' tiene banderas erradas: %s esperado y posiblemente %s, " "es %s\n" -#: src/elflint.c:3847 +#: src/elflint.c:3849 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "Sección [%2zu] '%s' presente en archivo objeto\n" -#: src/elflint.c:3853 src/elflint.c:3885 +#: src/elflint.c:3855 src/elflint.c:3887 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -3063,7 +3298,7 @@ msgstr "" "Sección [%2zu] '%s' tiene bandera SHF_ALLOC establecida pero no es un " "segmento cargable\n" -#: src/elflint.c:3858 src/elflint.c:3890 +#: src/elflint.c:3860 src/elflint.c:3892 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -3072,7 +3307,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene bandera SHF_ALLOC establecida pero hay " "segmentos cargables\n" -#: src/elflint.c:3866 +#: src/elflint.c:3868 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -3080,22 +3315,22 @@ msgstr "" "Sección [%2zu] '%s' es tabla de Ãndice de sección de extensión en archivo no-" "objeto\n" -#: src/elflint.c:3909 +#: src/elflint.c:3911 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "Sección [%2zu] '%s': tamaño no es múltiplo de tamaño de entrada\n" -#: src/elflint.c:3914 +#: src/elflint.c:3916 #, c-format msgid "cannot get section header\n" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elflint.c:3924 +#: src/elflint.c:3926 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "sección [%2zu] '%s' tiene tipo %d incompatible \n" -#: src/elflint.c:3944 +#: src/elflint.c:3946 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" @@ -3103,76 +3338,76 @@ msgstr "" "Sección [%2zu] '%s' contiene bandera(s) de procesador-especÃfico inválidas " "%#<PRIx64>\n" -#: src/elflint.c:3954 +#: src/elflint.c:3956 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "Sección [%2zu] '%s' contiene bandera(s) desconocidas %#<PRIx64>\n" -#: src/elflint.c:3962 +#: src/elflint.c:3964 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#: src/elflint.c:3972 +#: src/elflint.c:3974 #, fuzzy, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#: src/elflint.c:3977 +#: src/elflint.c:3979 #, fuzzy, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "Sección [%2d] '%s': no hay sección de dispersión presente\n" -#: src/elflint.c:3983 +#: src/elflint.c:3985 #, fuzzy, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "Sección [%2d] '%s': grupo de sección con sólo un miembro\n" -#: src/elflint.c:3989 +#: src/elflint.c:3991 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "Sección [%2zu] '%s': referencia de sección inválida en valor de enlace\n" -#: src/elflint.c:3994 +#: src/elflint.c:3996 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "Sección [%2zu] '%s': referencia de sección inválida en valor de información\n" -#: src/elflint.c:4001 +#: src/elflint.c:4003 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" "Sección [%2zu] '%s': bandera de cadenas establecida sin bandera de fusión\n" -#: src/elflint.c:4006 +#: src/elflint.c:4008 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "Sección [%2zu] '%s': bandera de fusión establecida pero tamaño de entrada es " "cero\n" -#: src/elflint.c:4025 +#: src/elflint.c:4027 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" "Sección [%2zu] '%s' tiene un tipo %d inesperado para una sección ejecutable\n" -#: src/elflint.c:4034 +#: src/elflint.c:4036 #, fuzzy, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n" -#: src/elflint.c:4041 +#: src/elflint.c:4043 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "Sección [%2zu] '%s' es tanto de ejecución como de escritura\n" -#: src/elflint.c:4072 +#: src/elflint.c:4074 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -3181,7 +3416,7 @@ msgstr "" "Sección [%2zu] '%s' no contenida totalmente en segmento de entrada de " "encabezamiento de programa %d\n" -#: src/elflint.c:4082 +#: src/elflint.c:4084 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3190,7 +3425,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero es leÃda desde el archivo en " "segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:4108 +#: src/elflint.c:4110 #, fuzzy, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3199,7 +3434,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero es leÃda desde el archivo en " "segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:4119 +#: src/elflint.c:4121 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -3208,18 +3443,18 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero no es leÃda desde el fichero " "en segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:4130 +#: src/elflint.c:4132 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "Sección [%2zu] '%s' es ejecutable en segmento no ejecutable %d\n" -#: src/elflint.c:4140 +#: src/elflint.c:4142 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" "Sección [%2zu] '%s' es de escritura en segmento que no es de escritura %d\n" -#: src/elflint.c:4150 +#: src/elflint.c:4152 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -3227,7 +3462,7 @@ msgstr "" "Sección [%2zu] '%s': asignación de bandera establecida pero sección no en " "ningún segmento cargado\n" -#: src/elflint.c:4156 +#: src/elflint.c:4158 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -3236,7 +3471,7 @@ msgstr "" "Sección [%2zu] '%s': encabezamiento ELF dice esta es la tabla de cadena de " "encabezamiento de sección, pero el tipo no es SHT_TYPE\n" -#: src/elflint.c:4164 +#: src/elflint.c:4166 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -3244,32 +3479,32 @@ msgstr "" "sección [%2zu] '%s': ficheros reubicables no pueden tener tablas de sÃmbolos " "dinámicos\n" -#: src/elflint.c:4215 +#: src/elflint.c:4217 #, c-format msgid "more than one version symbol table present\n" msgstr "Más de una tabla de sÃmbolos presente\n" -#: src/elflint.c:4238 +#: src/elflint.c:4240 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" "Entrada de encabezamiento de programa INTERP pero no la sección .interp\n" -#: src/elflint.c:4249 +#: src/elflint.c:4251 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" "segmento cargable [%u] es ejecutable pero no contiene secciones ejecutables\n" -#: src/elflint.c:4255 +#: src/elflint.c:4257 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "segmento cargable [%u] es de escritura pero contiene secciones protegidas " "contra escritura\n" -#: src/elflint.c:4266 +#: src/elflint.c:4268 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -3278,26 +3513,26 @@ msgstr "" "Sección no .gnu.versym presente, pero la sección .gnu.versym_d o la sección ." "gnu.versym_r existen\n" -#: src/elflint.c:4279 +#: src/elflint.c:4281 #, c-format msgid "duplicate version index %d\n" msgstr "Duplicar Ãndice de versión %d\n" -#: src/elflint.c:4293 +#: src/elflint.c:4295 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" "Sección .gnu.versym presente sin las secciones .gnu.versym_d o .gnu." "versym_r\n" -#: src/elflint.c:4342 +#: src/elflint.c:4344 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" "phdr[%d]: tipo de nota de fichero core desconocido %<PRIu32> en compensación " "%<PRIu64>\n" -#: src/elflint.c:4346 +#: src/elflint.c:4348 #, fuzzy, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" @@ -3305,7 +3540,7 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero core desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4395 +#: src/elflint.c:4397 #, fuzzy, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " @@ -3314,7 +3549,7 @@ msgstr "" "phdr[%d]: tipo de nota de fichero objeto desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4400 +#: src/elflint.c:4402 #, fuzzy, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " @@ -3323,40 +3558,40 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4419 +#: src/elflint.c:4421 #, 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:4439 +#: src/elflint.c:4441 #, 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:4442 +#: src/elflint.c:4444 #, 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:4463 +#: src/elflint.c:4465 #, 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:4470 +#: src/elflint.c:4472 #, 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:4473 +#: src/elflint.c:4475 #, 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:4491 +#: src/elflint.c:4493 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3364,145 +3599,145 @@ msgstr "" "Sólo ejecutables, objetos compartidos y ficheros core pueden tener " "encabezamientos de programas\n" -#: src/elflint.c:4506 +#: src/elflint.c:4508 #, 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:4516 +#: src/elflint.c:4518 #, 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:4527 +#: src/elflint.c:4529 #, 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:4535 +#: src/elflint.c:4537 #, 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:4542 +#: src/elflint.c:4544 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "ejecutable estático no puede tener secciones dinámicas\n" -#: src/elflint.c:4556 +#: src/elflint.c:4558 #, 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:4559 +#: src/elflint.c:4561 #, 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:4569 +#: src/elflint.c:4571 #, 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:4590 +#: src/elflint.c:4592 #, 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:4601 +#: src/elflint.c:4603 #, 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:4608 +#: src/elflint.c:4610 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4617 src/elflint.c:4640 +#: src/elflint.c:4619 src/elflint.c:4642 #, 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:4646 +#: src/elflint.c:4648 #, 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:4673 +#: src/elflint.c:4675 #, 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:4676 +#: src/elflint.c:4678 #, 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:4689 +#: src/elflint.c:4691 #, 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:4697 +#: src/elflint.c:4699 #, 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:4700 +#: src/elflint.c:4702 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sección [%2zu] '%s' debe ser asignada\n" -#: src/elflint.c:4704 +#: src/elflint.c:4706 #, 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:4707 +#: src/elflint.c:4709 #, 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:4712 +#: src/elflint.c:4714 #, 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:4715 +#: src/elflint.c:4717 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" -#: src/elflint.c:4726 +#: src/elflint.c:4728 #, 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:4733 +#: src/elflint.c:4735 #, 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:4736 +#: src/elflint.c:4738 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3511,7 +3746,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:4749 +#: src/elflint.c:4751 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3520,111 +3755,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:4783 +#: src/elflint.c:4785 #, c-format msgid "cannot read ELF header: %s\n" msgstr "No se puede leer encabezamiento ELF: %s\n" -#: src/elflint.c:4795 +#: src/elflint.c:4797 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "no sepuede crear fichero nuevo" -#: src/elflint.c:4816 +#: src/elflint.c:4818 #, 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/-" @@ -3633,7 +3868,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 " @@ -3642,7 +3877,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" @@ -3751,12 +3986,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:2767 #, 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:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: No se reconoce el formato del fichero" @@ -3791,24 +4026,24 @@ 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 +#: src/nm.c:704 #, c-format 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/nm.c:745 src/nm.c:1238 src/objdump.c:781 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:2711 -#: src/readelf.c:2787 src/readelf.c:2874 src/readelf.c:3472 src/readelf.c:3522 -#: src/readelf.c:3592 src/readelf.c:11328 src/readelf.c:12523 -#: src/readelf.c:12734 src/readelf.c:12803 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: 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:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, 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:770 #, c-format msgid "" "\n" @@ -3822,7 +4057,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3831,30 +4066,53 @@ msgstr "" "%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" "\n" -#: src/nm.c:1250 +#: src/nm.c:775 +msgctxt "sysv" +msgid "Name" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:777 +msgctxt "sysv" +msgid "Value" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:779 +msgctxt "sysv" +msgid "Size" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:781 +msgctxt "sysv" +msgid "Line" +msgstr "" + +#: src/nm.c:1249 #, 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:1254 #, 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:1334 +#: src/nm.c:1335 #, 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:1570 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Operación inválida" -#: src/nm.c:1620 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: No hay sÃmbolos" @@ -3931,7 +4189,7 @@ msgstr "Contenido de la sección %s:\n" msgid "cannot disassemble" msgstr "No se puede desensamblar" -#: src/objdump.c:760 +#: src/objdump.c:759 #, fuzzy, c-format msgid "cannot create backend for elf file" msgstr "no sepuede crear fichero nuevo" @@ -4119,7 +4377,7 @@ 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:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" @@ -4129,11 +4387,11 @@ msgstr "no se pudieron determinar el número de secciones: %s" 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:12754 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:487 src/unstrip.c:608 -#: src/unstrip.c:629 src/unstrip.c:669 src/unstrip.c:885 src/unstrip.c:1216 -#: src/unstrip.c:1343 src/unstrip.c:1367 src/unstrip.c:1423 src/unstrip.c:1487 -#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" @@ -4143,8 +4401,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:6628 src/readelf.c:10600 src/readelf.c:10702 -#: src/readelf.c:10880 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "No se puede obtener el contenido %s: %s" @@ -4487,7 +4745,7 @@ msgstr "" " Sección para asignación de segmento:\n" " Secciones de segmento..." -#: src/readelf.c:1464 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" @@ -4530,18 +4788,18 @@ msgstr "<SÃMBOLO INVÃLIDO>" msgid "<INVALID SECTION>" msgstr "<SECCIÓN INVÃLIDA>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3488 src/readelf.c:12625 -#: src/readelf.c:12632 src/readelf.c:12676 src/readelf.c:12683 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3493 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, 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:2717 src/readelf.c:2793 -#: src/readelf.c:3097 src/readelf.c:3171 src/readelf.c:5401 +#: 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:5407 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr ".debug_line section inválida" @@ -4704,20 +4962,20 @@ msgstr " Num: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" 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:2590 +#: src/readelf.c:2595 #, c-format msgid "bad dynamic symbol" msgstr "sÃmbolo dinámico erróneo" -#: src/readelf.c:2672 +#: src/readelf.c:2680 msgid "none" msgstr "nada" -#: src/readelf.c:2689 +#: src/readelf.c:2697 msgid "| <unknown>" msgstr "| <desconocido>" -#: src/readelf.c:2720 +#: src/readelf.c:2728 #, c-format msgid "" "\n" @@ -4738,17 +4996,17 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2741 +#: src/readelf.c:2749 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n" -#: src/readelf.c:2754 +#: src/readelf.c:2762 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n" -#: src/readelf.c:2797 +#: src/readelf.c:2805 #, c-format msgid "" "\n" @@ -4769,19 +5027,19 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2825 +#: src/readelf.c:2833 #, 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:2840 +#: src/readelf.c:2848 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Principal %d: %s\n" #. Print the header. -#: src/readelf.c:3101 +#: src/readelf.c:3109 #, c-format msgid "" "\n" @@ -4802,15 +5060,15 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'" -#: src/readelf.c:3129 +#: src/readelf.c:3137 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:3134 +#: src/readelf.c:3142 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3176 +#: src/readelf.c:3184 #, c-format msgid "" "\n" @@ -4835,22 +5093,22 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:3198 +#: src/readelf.c:3206 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Longitud Número % of total Cobertura\n" -#: src/readelf.c:3200 +#: src/readelf.c:3208 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3207 +#: src/readelf.c:3215 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3220 +#: src/readelf.c:3228 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4859,37 +5117,37 @@ msgstr "" " Número promedio de pruebas: búsqueda exitosa: %f\n" " búsqueda sin éxito: %f\n" -#: src/readelf.c:3238 src/readelf.c:3302 src/readelf.c:3368 +#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 #, 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:3246 +#: src/readelf.c:3254 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3275 +#: src/readelf.c:3283 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3310 +#: src/readelf.c:3318 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3341 +#: src/readelf.c:3349 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3377 +#: src/readelf.c:3385 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3444 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4899,7 +5157,7 @@ msgstr "" " Tamaño de Bitmask: %zu bytes %<PRIuFAST32>%% bits establecen segundo " "cambio de dispersión: %u\n" -#: src/readelf.c:3533 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4916,7 +5174,7 @@ msgstr[1] "" "Sección de lista de biblioteca [%2zu] '%s' en compensación %#0<PRIx64> " "contiene entradas %d:\n" -#: src/readelf.c:3547 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4924,7 +5182,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:3606 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4935,102 +5193,102 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de %<PRIu64> bytes con " "desplazamiento %#0<PRIx64>:\n" -#: src/readelf.c:3623 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3647 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3686 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3691 +#: src/readelf.c:3697 #, c-format msgid " File: %11<PRIu32>\n" msgstr " File: %11<PRIu32>\n" -#: src/readelf.c:3740 +#: src/readelf.c:3746 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3743 +#: src/readelf.c:3749 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3746 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3756 +#: src/readelf.c:3762 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3759 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3829 +#: src/readelf.c:3835 #, fuzzy, c-format msgid "sprintf failure" msgstr "mprotect falló" -#: src/readelf.c:4311 +#: src/readelf.c:4317 msgid "empty block" msgstr "bloque vacÃo" -#: src/readelf.c:4314 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:4792 +#: src/readelf.c:4798 #, fuzzy, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" -#: src/readelf.c:4859 +#: src/readelf.c:4865 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4866 +#: src/readelf.c:4872 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4873 +#: src/readelf.c:4879 #, fuzzy, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4880 +#: src/readelf.c:4886 #, 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:4980 +#: src/readelf.c:4986 #, 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:4988 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <MATERIAL INUTIL NO UTILIZADO> ... %<PRIu64> bytes ...\n" -#: src/readelf.c:5091 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -5041,7 +5299,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " [ Código]\n" -#: src/readelf.c:5099 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -5050,20 +5308,20 @@ msgstr "" "\n" "Sección de abreviatura en compensación %<PRIu64>:\n" -#: src/readelf.c:5112 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:5128 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] compensación: %<PRId64>, hijos: %s, etiqueta: %s\n" -#: src/readelf.c:5161 src/readelf.c:5470 src/readelf.c:5637 src/readelf.c:6022 -#: src/readelf.c:6638 src/readelf.c:8375 src/readelf.c:9064 src/readelf.c:9537 -#: src/readelf.c:9788 src/readelf.c:9954 src/readelf.c:10341 -#: src/readelf.c:10401 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -5072,52 +5330,52 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" -#: src/readelf.c:5174 +#: src/readelf.c:5180 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:5274 src/readelf.c:5298 src/readelf.c:5682 src/readelf.c:9109 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5276 src/readelf.c:5313 src/readelf.c:5695 src/readelf.c:9122 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5277 src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9131 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, fuzzy, c-format msgid " Address size: %8<PRIu64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5279 src/readelf.c:5332 src/readelf.c:5714 src/readelf.c:9141 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, fuzzy, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:5317 src/readelf.c:5699 src/readelf.c:9126 src/readelf.c:10533 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, fuzzy, c-format msgid "Unknown version" msgstr "versión desconocida" -#: src/readelf.c:5327 src/readelf.c:5540 src/readelf.c:5709 src/readelf.c:9136 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, fuzzy, c-format msgid "unsupported address size" msgstr "no hay valor de dirección" -#: src/readelf.c:5338 src/readelf.c:5551 src/readelf.c:5719 src/readelf.c:9146 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5391 src/readelf.c:5465 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "no se ha podido obtener contenido de .debug_aranges: %s" -#: src/readelf.c:5406 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5132,12 +5390,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entradas %zu:\n" -#: src/readelf.c:5437 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5439 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5145,7 +5403,7 @@ msgstr "" " Inicio [%*zu]: %0#*<PRIx64>, longitud: %5<PRIu64>, compensación CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:5483 src/readelf.c:8402 +#: src/readelf.c:5489 src/readelf.c:8426 #, fuzzy, c-format msgid "" "\n" @@ -5154,150 +5412,150 @@ msgstr "" "\n" "Tabla en compensación %Zu:\n" -#: src/readelf.c:5487 src/readelf.c:5663 src/readelf.c:6662 src/readelf.c:8413 -#: src/readelf.c:9090 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:5503 +#: src/readelf.c:5509 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5515 +#: src/readelf.c:5521 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5519 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5530 +#: src/readelf.c:5536 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5536 +#: src/readelf.c:5542 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5547 +#: src/readelf.c:5553 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:5602 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5646 +#: src/readelf.c:5652 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:5669 src/readelf.c:9096 +#: src/readelf.c:5675 src/readelf.c:9177 #, fuzzy, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5724 src/readelf.c:9151 +#: src/readelf.c:5730 src/readelf.c:9232 #, fuzzy, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5740 src/readelf.c:9167 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5742 src/readelf.c:9169 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:5748 src/readelf.c:9175 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5759 src/readelf.c:9186 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5763 src/readelf.c:9190 +#: src/readelf.c:5769 src/readelf.c:9271 #, fuzzy, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:5815 +#: src/readelf.c:5821 #, fuzzy, c-format msgid "invalid range list data" msgstr "datos inválidos" -#: src/readelf.c:6000 src/readelf.c:9515 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6017 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:6053 src/readelf.c:9570 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6055 src/readelf.c:9572 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:6064 src/readelf.c:9598 src/readelf.c:9624 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <DATOS INVÃLIDOS>\n" -#: src/readelf.c:6089 src/readelf.c:9708 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:6099 src/readelf.c:9718 +#: src/readelf.c:6105 src/readelf.c:9799 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacÃa\n" -#: src/readelf.c:6359 +#: src/readelf.c:6365 #, fuzzy msgid " <INVALID DATA>\n" msgstr " <DATOS INVÃLIDOS>\n" -#: src/readelf.c:6616 +#: src/readelf.c:6622 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:6634 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5307,7 +5565,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#<PRIx64>:\n" -#: src/readelf.c:6684 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5316,65 +5574,65 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:6785 src/readelf.c:6939 +#: src/readelf.c:6791 src/readelf.c:6945 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:6800 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:6806 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:6916 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:6923 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:6960 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr "Puntero %-26sLSDA: %#<PRIx64>\n" -#: src/readelf.c:7045 +#: src/readelf.c:7051 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:7055 +#: src/readelf.c:7061 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:7077 +#: src/readelf.c:7083 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:7407 +#: src/readelf.c:7413 #, fuzzy, c-format msgid "invalid file (%<PRId64>): %s" msgstr "Archivo inválido" -#: src/readelf.c:7411 +#: src/readelf.c:7417 #, fuzzy, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:7415 +#: src/readelf.c:7421 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:7728 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5385,12 +5643,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " [Offset]\n" -#: src/readelf.c:7778 +#: src/readelf.c:7786 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7797 +#: src/readelf.c:7806 #, fuzzy, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5403,7 +5661,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:7809 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5414,39 +5672,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:7819 src/readelf.c:7982 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr "" -#: src/readelf.c:7846 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7875 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "no se puede obtener DIE en compensación: %s" -#: src/readelf.c:7884 +#: src/readelf.c:7893 #, 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:7922 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "No se puede obtener próximo DIE: %s\n" -#: src/readelf.c:7930 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7974 +#: src/readelf.c:7981 #, fuzzy, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5457,7 +5715,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:8026 +#: src/readelf.c:8033 #, fuzzy, c-format msgid "" "\n" @@ -5467,18 +5725,18 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" -#: src/readelf.c:8358 +#: src/readelf.c:8365 #, fuzzy, c-format msgid "unknown form: %s" msgstr "Forma %<PRIx64> desconocida" -#: src/readelf.c:8389 +#: src/readelf.c:8413 #, 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:8491 +#: src/readelf.c:8517 #, fuzzy, c-format msgid "" "\n" @@ -5509,34 +5767,34 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:8513 +#: src/readelf.c:8539 #, 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:8521 +#: src/readelf.c:8547 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "no hay valor de dirección" -#: src/readelf.c:8529 +#: src/readelf.c:8555 #, fuzzy, c-format msgid "cannot handle segment selector size: %u\n" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:8539 +#: src/readelf.c:8565 #, 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:8554 +#: src/readelf.c:8580 #, 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:8565 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5544,12 +5802,12 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:8571 src/readelf.c:8648 +#: src/readelf.c:8597 src/readelf.c:8674 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8642 +#: src/readelf.c:8668 #, fuzzy msgid "" "\n" @@ -5558,7 +5816,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:8703 +#: src/readelf.c:8729 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5566,7 +5824,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:8742 +#: src/readelf.c:8775 #, fuzzy msgid "" "\n" @@ -5575,7 +5833,7 @@ msgstr "" "\n" " Declaraciones de número de LÃnea:" -#: src/readelf.c:8746 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5583,121 +5841,132 @@ msgstr "" "\n" " Declaraciones de número de LÃnea:" -#: src/readelf.c:8766 +#: src/readelf.c:8794 #, 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:8800 +#: src/readelf.c:8828 #, 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:8804 +#: src/readelf.c:8832 #, 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:8807 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8825 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:8830 +#: src/readelf.c:8858 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:8848 +#: src/readelf.c:8876 #, fuzzy, c-format msgid " set address to " msgstr "Establecer dirección a %s\n" -#: src/readelf.c:8876 +#: src/readelf.c:8904 #, 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:8890 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, 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:8895 +#: src/readelf.c:8976 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " #. Takes no argument. -#: src/readelf.c:8907 +#: src/readelf.c:8988 msgid " copy" msgstr "Copiar" -#: src/readelf.c:8918 +#: src/readelf.c:8999 #, fuzzy, c-format msgid " advance address by %u to " msgstr "Dirección de avance por %u a %s\n" -#: src/readelf.c:8922 src/readelf.c:8983 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8934 +#: src/readelf.c:9015 #, 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:8944 +#: src/readelf.c:9025 #, c-format msgid " set file to %<PRIu64>\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:8955 +#: src/readelf.c:9036 #, c-format msgid " set column to %<PRIu64>\n" msgstr " Establecer columna a %<PRIu64>\n" -#: src/readelf.c:8962 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr "Establecer '%s' a %<PRIuFAST8>\n" #. Takes no argument. -#: src/readelf.c:8968 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:8979 +#: src/readelf.c:9060 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "Dirección de avance por constante %u a %s\n" -#: src/readelf.c:8999 +#: src/readelf.c:9080 #, 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:9009 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" #. Takes no argument. -#: src/readelf.c:9014 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:9024 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" @@ -5705,110 +5974,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:9033 +#: src/readelf.c:9114 #, 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:9073 +#: src/readelf.c:9154 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9239 +#: src/readelf.c:9320 #, fuzzy, c-format msgid " <INVALID DATA>\n" msgstr " <DATOS INVÃLIDOS>\n" -#: src/readelf.c:9279 +#: src/readelf.c:9360 #, fuzzy, c-format msgid "invalid loclists data" msgstr "datos inválidos" -#: src/readelf.c:9532 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9745 src/readelf.c:10789 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " <INVALID DATA>\n" msgstr " <DATOS INVÃLIDOS>\n" -#: src/readelf.c:9800 src/readelf.c:9963 +#: src/readelf.c:9881 src/readelf.c:10044 #, 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:9880 +#: src/readelf.c:9961 #, 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:9903 +#: src/readelf.c:9984 #, 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:10004 +#: src/readelf.c:10085 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:10016 +#: src/readelf.c:10097 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10022 src/readelf.c:10909 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10029 +#: src/readelf.c:10110 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>" msgstr " Dirección de punto de entrada: %#<PRIx64>\n" -#: src/readelf.c:10058 +#: src/readelf.c:10139 #, fuzzy, c-format msgid " Offset length: %<PRIu8>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10066 +#: src/readelf.c:10147 #, fuzzy, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:10091 +#: src/readelf.c:10172 #, fuzzy, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " opcódigo con parámetro %<PRIu8> desconocido:" -#: src/readelf.c:10098 +#: src/readelf.c:10179 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:10110 +#: src/readelf.c:10191 #, fuzzy, c-format msgid " %<PRIu8> arguments:" msgstr " [%*<PRIuFAST8>] argumento %hhu \n" -#: src/readelf.c:10125 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10326 +#: src/readelf.c:10407 #, 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:10370 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -5819,37 +6088,43 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " %*s String\n" -#: src/readelf.c:10385 +#. TRANS: the debugstr| prefix makes the string unique. +#: src/readelf.c:10456 +msgctxt "debugstr" +msgid "Offset" +msgstr "" + +#: src/readelf.c:10466 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:10414 +#: src/readelf.c:10495 #, 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:10513 +#: src/readelf.c:10594 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10515 +#: src/readelf.c:10596 #, fuzzy, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10529 +#: src/readelf.c:10610 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10538 +#: src/readelf.c:10619 #, fuzzy, c-format msgid " Padding: %8<PRIx16>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10592 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -5858,7 +6133,7 @@ msgstr "" "\n" "Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10694 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -5867,22 +6142,22 @@ msgstr "" "\n" "Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10717 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:10729 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:10744 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:10757 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -5890,7 +6165,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:10771 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5903,12 +6178,12 @@ msgstr "" " Landing pad: %#<PRIx64>\n" " Action: %u\n" -#: src/readelf.c:10844 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:10871 +#: src/readelf.c:10952 #, fuzzy, c-format msgid "" "\n" @@ -5917,37 +6192,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:10900 +#: src/readelf.c:10981 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10918 +#: src/readelf.c:10999 #, fuzzy, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10925 +#: src/readelf.c:11006 #, fuzzy, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10932 +#: src/readelf.c:11013 #, fuzzy, c-format msgid " address offset: %#<PRIx32>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:10939 +#: src/readelf.c:11020 #, fuzzy, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:10946 +#: src/readelf.c:11027 #, fuzzy, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:10960 +#: src/readelf.c:11041 #, fuzzy, c-format msgid "" "\n" @@ -5956,7 +6231,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:10985 +#: src/readelf.c:11066 #, fuzzy, c-format msgid "" "\n" @@ -5965,7 +6240,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:11014 +#: src/readelf.c:11095 #, fuzzy, c-format msgid "" "\n" @@ -5974,7 +6249,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:11046 +#: src/readelf.c:11127 #, fuzzy, c-format msgid "" "\n" @@ -5983,18 +6258,18 @@ msgstr "" "\n" "Tabla de sÃmbolos inválida en compensación %#0<PRIx64>\n" -#: src/readelf.c:11184 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "no se puede depurar descriptor de contexto: %s" -#: src/readelf.c:11552 src/readelf.c:12179 src/readelf.c:12290 -#: src/readelf.c:12348 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "no es posible convertir datos de la nota principal: %s" -#: src/readelf.c:11915 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -6003,21 +6278,21 @@ msgstr "" "\n" "%*s... <repeats %u more times> ..." -#: src/readelf.c:12427 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:12456 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12508 +#: src/readelf.c:12588 #, 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:12542 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -6026,7 +6301,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de %<PRIu64> bytes en compensación %#0<PRIx64>:\n" -#: src/readelf.c:12565 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -6035,7 +6310,7 @@ msgstr "" "\n" "Segmento de nota de %<PRIu64> bytes en compensación %#0<PRIx64>:\n" -#: src/readelf.c:12612 +#: src/readelf.c:12692 #, fuzzy, c-format msgid "" "\n" @@ -6044,12 +6319,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12639 src/readelf.c:12690 +#: src/readelf.c:12719 src/readelf.c:12770 #, 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:12644 +#: src/readelf.c:12724 #, fuzzy, c-format msgid "" "\n" @@ -6059,7 +6334,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12649 +#: src/readelf.c:12729 #, fuzzy, c-format msgid "" "\n" @@ -6070,7 +6345,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12663 +#: src/readelf.c:12743 #, fuzzy, c-format msgid "" "\n" @@ -6079,7 +6354,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12695 +#: src/readelf.c:12775 #, fuzzy, c-format msgid "" "\n" @@ -6089,7 +6364,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12700 +#: src/readelf.c:12780 #, fuzzy, c-format msgid "" "\n" @@ -6100,7 +6375,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:12749 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6109,7 +6384,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:12779 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6118,12 +6393,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:12836 +#: src/readelf.c:12916 #, 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:12839 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6132,7 +6407,7 @@ msgstr "" "\n" "Archivo '%s' no tiene Ãndice de sÃmbolo\n" -#: src/readelf.c:12843 +#: src/readelf.c:12923 #, fuzzy, c-format msgid "" "\n" @@ -6141,12 +6416,12 @@ msgstr "" "\n" "Ãndice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:12861 +#: src/readelf.c:12941 #, 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:12866 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" @@ -6213,11 +6488,63 @@ msgstr "Radical inválido: %s" msgid "%s: file format not recognized" msgstr "%s: No se reconoce el formato del fichero" +#: src/size.c:328 +msgctxt "bsd" +msgid "text" +msgstr "" + +#: src/size.c:329 +msgctxt "bsd" +msgid "data" +msgstr "" + +#: src/size.c:330 +msgctxt "bsd" +msgid "bss" +msgstr "" + +#: src/size.c:331 +msgctxt "bsd" +msgid "dec" +msgstr "" + +#: src/size.c:332 +msgctxt "bsd" +msgid "hex" +msgstr "" + +#: src/size.c:333 +msgctxt "bsd" +msgid "filename" +msgstr "" + #: src/size.c:418 src/size.c:560 #, c-format msgid " (ex %s)" msgstr " (ex %s)" +#: src/size.c:420 +#, fuzzy +#| msgid "invalid section" +msgctxt "sysv" +msgid "section" +msgstr "sección inválida" + +#: src/size.c:421 +msgctxt "sysv" +msgid "size" +msgstr "" + +#: src/size.c:422 +msgctxt "sysv" +msgid "addr" +msgstr "" + +#: src/size.c:451 src/size.c:454 src/size.c:457 +msgctxt "sysv" +msgid "Total" +msgstr "" + #: src/size.c:482 #, fuzzy, c-format msgid "cannot get section header" @@ -6509,17 +6836,17 @@ msgstr "Quitar sección de comentario" msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "no sepuede stat fichero de entrada '%s'" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "mientras se abrÃa '%s'" -#: src/strip.c:799 +#: src/strip.c:803 #, 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" @@ -6530,132 +6857,132 @@ 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:815 #, 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:1052 #, c-format msgid "cannot open EBL backend" msgstr "No se puede abrir el segundo plano EBL" -#: src/strip.c:1092 +#: src/strip.c:1097 #, fuzzy, c-format 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:1111 src/strip.c:1154 #, 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:1121 src/strip.c:1164 #, 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:1244 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:1250 +#: src/strip.c:1254 #, 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:1263 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "No se puede añadir nueva sección: %s" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "al generar fichero de salida: %s" -#: src/strip.c:1688 +#: src/strip.c:1692 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1701 #, fuzzy, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, 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:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "no se puede asignar espacio para los datos: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 #, fuzzy, c-format 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:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:2500 +#: src/strip.c:2504 #, 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:2545 #, 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:2563 #, 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:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, 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:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" @@ -6743,7 +7070,7 @@ msgstr "no se puede crear el encabezamiento ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "No se puede encontrar la sección: %s" -#: src/unstrip.c:244 src/unstrip.c:2085 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "no se puede leer encabezamiento ELF: %s" @@ -6763,12 +7090,12 @@ msgstr "no se puede actualizar reubicación: %s" msgid "cannot copy ELF header: %s" msgstr "no se puede copiar encabezamiento ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2103 src/unstrip.c:2146 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/unstrip.c:270 src/unstrip.c:2107 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "No pueden crear encabezamientos de programa: %s" @@ -6783,12 +7110,12 @@ msgstr "no puede copiar encabezamiento de programa: %s" msgid "cannot copy section header: %s" msgstr "no se puede copiar encabezamiento de sección: %s" -#: src/unstrip.c:289 src/unstrip.c:1707 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:291 src/unstrip.c:1709 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "no pueden copiar datos de sección: %s" @@ -6798,14 +7125,14 @@ 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:655 src/unstrip.c:689 src/unstrip.c:857 -#: src/unstrip.c:1749 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, 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:658 src/unstrip.c:679 src/unstrip.c:692 -#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "no se puede actualizar tabla de sÃmbolos: %s" @@ -6815,170 +7142,180 @@ 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:465 src/unstrip.c:479 +#: 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:578 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "no se puede obtener versión de sÃmbolo: %s" -#: src/unstrip.c:591 +#: src/unstrip.c:595 #, 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:846 +#: src/unstrip.c:850 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:848 +#: src/unstrip.c:852 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:865 +#: src/unstrip.c:869 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "compensación de cadena inválida en sÃmbolo [%Zu]" -#: src/unstrip.c:1023 src/unstrip.c:1427 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "no se puede leer nombre [%Zu]: %s" -#: src/unstrip.c:1038 +#: src/unstrip.c:1042 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr ".debug_line section inválida" -#: src/unstrip.c:1044 +#: src/unstrip.c:1048 #, 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:1049 +#: src/unstrip.c:1053 #, 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:1055 +#: src/unstrip.c:1059 #, 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:1060 +#: src/unstrip.c:1064 #, 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:1102 src/unstrip.c:1121 src/unstrip.c:1159 +#: src/unstrip.c:1075 src/unstrip.c:1556 +#, 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:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "no se puede leer sección '.gnu.prelink_undo': %s" -#: src/unstrip.c:1139 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1150 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "contenido inválido en sección '%s'" -#: src/unstrip.c:1206 src/unstrip.c:1553 -#, fuzzy, c-format -msgid "cannot find matching section for [%zu] '%s'" -msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" - -#: src/unstrip.c:1331 src/unstrip.c:1347 src/unstrip.c:1633 src/unstrip.c:1924 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, 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:1356 +#: src/unstrip.c:1364 #, 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:1385 src/unstrip.c:1389 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, 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:1393 src/unstrip.c:1397 src/unstrip.c:1648 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "No se puede obtener cuenta de sección: %s" -#: src/unstrip.c:1400 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "más secciones en el archivo despojado que en el archivo de depuración -- " "¿argumentos invertidos?" -#: src/unstrip.c:1404 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1475 src/unstrip.c:1568 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" -#: src/unstrip.c:1627 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "No se puede añadir nueva sección: %s" -#: src/unstrip.c:1757 +#: src/unstrip.c:1760 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "sÃmbolo [%Zu] tiene Ãndice de sección inválido" -#: src/unstrip.c:1789 +#: src/unstrip.c:1792 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "sÃmbolo [%Zu] tiene Ãndice de sección inválido" -#: src/unstrip.c:2064 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "no se puede leer la sección de datos: %s" -#: src/unstrip.c:2093 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "No se puede actualizar encabezamiento ELF: %s" -#: src/unstrip.c:2117 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "no se puede actualizar encabezamiento de programa: %s" -#: src/unstrip.c:2122 src/unstrip.c:2205 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "no se puede escribir al archivo de salida: %s" -#: src/unstrip.c:2173 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "datos DWARF no se ajustan para polarización de pre-enlace; considere prelink " "-u" -#: src/unstrip.c:2176 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6986,77 +7323,77 @@ msgstr "" "Datos DWARF en '%s' no se ajustan a polarización de pre-enlace; considere " "prelink -u" -#: src/unstrip.c:2196 src/unstrip.c:2247 src/unstrip.c:2259 src/unstrip.c:2345 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "no se puede crear un descriptor ELF: %s" -#: src/unstrip.c:2238 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2240 +#: src/unstrip.c:2239 msgid ", use --force" msgstr "" -#: src/unstrip.c:2263 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2266 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2272 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2302 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "no se puede hallar archivo obtenido para módulo '%s': %s " -#: src/unstrip.c:2306 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "No se puede abrir el archivo '%s' obtenido para módulo '%s': %s" -#: src/unstrip.c:2321 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "no puede hallar archivo de depuración para módulo '%s': %su" -#: src/unstrip.c:2325 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "No puede abrir archivo de depuración '%s' para módulo '%s': %s" -#: src/unstrip.c:2338 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "No se obtuvo el archivo '%s' de módulo '%s' " -#: src/unstrip.c:2369 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" "No puede almacenar en cache direcciones de sección para módulo '%s': %s" -#: src/unstrip.c:2501 +#: src/unstrip.c:2505 #, c-format msgid "no matching modules found" msgstr "No se encontraron módulos coincidentes" -#: src/unstrip.c:2510 +#: src/unstrip.c:2515 #, c-format msgid "matched more than one module" msgstr "coincidió con más de un módulo" -#: src/unstrip.c:2554 +#: src/unstrip.c:2560 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7064,7 +7401,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2555 +#: src/unstrip.c:2561 #, fuzzy msgid "" "Combine stripped files with separate symbols and debug information.\n" @@ -7117,7 +7454,23 @@ msgstr "" "file. DEBUGFILE is the separate debuginfo file name, or - if no debuginfo " "was found, or . if FILE contains the debug information." -#: tests/backtrace.c:436 +#. Short description of program. +#: debuginfod/debuginfod-find.c:42 +msgid "Request debuginfo-related content from debuginfods listed in $" +msgstr "" + +#. Strings for arguments in help texts. +#: debuginfod/debuginfod-find.c:46 +msgid "" +"debuginfo BUILDID\n" +"debuginfo PATH\n" +"executable BUILDID\n" +"executable PATH\n" +"source BUILDID /FILENAME\n" +"source PATH /FILENAME\n" +msgstr "" + +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -7130,6 +7483,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" @@ -7440,18 +7797,12 @@ msgstr "" #~ msgid "unknown option `-%c %s'" #~ msgstr "opción desconocida `-%c %s'" -#~ msgid "invalid page size value '%s': ignored" -#~ msgstr "Valor de tamaño de página'%s': ignorado" - #~ msgid "invalid hash style '%s'" #~ msgstr "estilo de dispersión inválido '%s'" #~ msgid "invalid build-ID style '%s'" #~ msgstr "estilo de cuerpo-ID inválido '%s'" -#~ msgid "More than one output file name given." -#~ msgstr "Se ha dado más de un nombre de archivo de salida." - #~ msgid "Invalid optimization level `%s'" #~ msgstr "Nivel de optimización inválido `%s'" @@ -7693,9 +8044,6 @@ msgstr "" #~ msgid "while reading version script '%s': %s at line %d" #~ msgstr "al leer script de versión '%s': %s en lÃnea %d" -#~ msgid "while reading linker script '%s': %s at line %d" -#~ msgstr "al leer script de enlace '%s': %s en lÃnea %d" - #, fuzzy #~ msgid "" #~ "symbol '%s' is declared both local and global for unnamed version '%s'" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-02-05 21:10+0100\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\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:3453 -#: src/readelf.c:11501 src/unstrip.c:312 src/unstrip.c:2398 src/unstrip.c:2603 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: 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,28 +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 +#, c-format +msgid "invalid character '%c' at line %d; ignored" +msgstr "ä¸å½“ãªæ–‡å— '%c' ㌠%d 行目ã«ã‚ã‚Šã¾ã™; 無視ã—ã¾ã—ãŸ" + +#: libcpu/i386_lex.l:123 +#, c-format +msgid "invalid character '\\%o' at line %d; ignored" +msgstr "ä¸å½“ãªæ–‡å— '\\%o' ㌠%d 行目ã«ã‚ã‚Šã¾ã™; 無視ã—ã¾ã—ãŸ" + +#: libcpu/i386_parse.y:554 +#, c-format +msgid "while reading i386 CPU description: %s at line %d" +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" @@ -113,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" @@ -125,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" @@ -157,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" @@ -184,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" @@ -208,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 "ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ãƒªã‚¹ãƒˆå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“" @@ -239,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:2544 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 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" @@ -340,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" @@ -362,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:77 -#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130 +#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 +#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -544,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 @@ -586,7 +571,7 @@ msgstr "" #: libebl/eblobjnote.c:300 #, c-format msgid " Build ID: " -msgstr " ビルト ID: " +msgstr " ビルド ID: " #. A non-null terminated version string. #: libebl/eblobjnote.c:311 @@ -597,7 +582,7 @@ msgstr "" #: libebl/eblobjnote.c:638 #, c-format msgid " OS: %s, ABI: " -msgstr " OS: %sã€ABI: " +msgstr "" #: libebl/eblosabiname.c:70 msgid "Stand alone" @@ -610,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:6209 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, 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" @@ -709,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:10012 src/readelf.c:10612 -#: src/readelf.c:10713 src/readelf.c:10895 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, 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" @@ -731,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" @@ -747,119 +730,114 @@ 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 msgid "Input format options:" -msgstr "é¸æŠžã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„:" +msgstr "入力フォーマットオプション:" #: src/addr2line.c:59 msgid "Treat addresses as offsets relative to NAME section." -msgstr "" +msgstr "アドレスを NAME セクション㫠対ã™ã‚‹ 相対 オフセット ã¨ã—㦠扱ã†" #: src/addr2line.c:61 -#, fuzzy msgid "Output format options:" -msgstr "出力形å¼:" +msgstr "出力フォーマットオプション:" #: src/addr2line.c:62 msgid "Print address before each entry" -msgstr "" +msgstr "å„é …ç›®ã®å‰ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’表示" #: src/addr2line.c:63 msgid "Show only base names of source files" -msgstr "" +msgstr "ソースファイル㮠ベースãƒãƒ¼ãƒ ã®ã¿ 表示" #: src/addr2line.c:65 msgid "Show absolute file names using compilation directory" -msgstr "" +msgstr "コンパイルディレクトリを 使用ã—㦠絶対ファイルåã‚’ 表示" #: src/addr2line.c:66 msgid "Also show function names" -msgstr "" +msgstr "関数åも表示" #: src/addr2line.c:67 msgid "Also show symbol or section names" -msgstr "" +msgstr "シンボルå ã¾ãŸã¯ セクションåã‚‚ 表示" #: src/addr2line.c:68 msgid "Also show symbol and the section names" -msgstr "" +msgstr "シンボルå㨠セクションåã‚‚ 表示" #: src/addr2line.c:69 msgid "Also show line table flags" -msgstr "" +msgstr "行テーブルフラグも表示" #: src/addr2line.c:71 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" +"アドレス㮠サブルーãƒãƒ³ã® インライン展開を 引ãèµ·ã“ã—㟠全ã¦ã® ソースä½ç½®ã‚’ " +"表示" #: src/addr2line.c:74 msgid "Show demangled symbols (ARG is always ignored)" -msgstr "" +msgstr "デマングルã•ã‚ŒãŸ シンボルを 表示 (ARGã¯å¸¸ã«ç„¡è¦–ã•ã‚Œã‚‹ï¼‰" #: src/addr2line.c:76 msgid "Print all information on one line, and indent inlines" -msgstr "" +msgstr "å…¨ã¦ã® æƒ…å ±ã‚’ 一行㧠表示ã—〠å—下ã’ã™ã‚‹" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:78 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 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 @@ -879,7 +857,7 @@ msgstr "" #: src/addr2line.c:652 #, c-format msgid "cannot find symbol '%s'" -msgstr "" +msgstr "シンボル '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: src/addr2line.c:657 #, c-format @@ -888,7 +866,7 @@ msgstr "" #: src/ar.c:67 msgid "Commands:" -msgstr "コマンド:" +msgstr "コマンド:" #: src/ar.c:68 msgid "Delete files from archive." @@ -904,23 +882,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." @@ -932,11 +910,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." @@ -960,7 +938,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." @@ -968,17 +946,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 @@ -1003,7 +981,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 @@ -1018,7 +996,7 @@ msgstr "アーカイブåãŒå¿…è¦ã§ã™" #: src/ar.c:244 #, c-format msgid "command option required" -msgstr "" +msgstr "コマンドオプションãŒå¿…è¦ã§ã™" #: src/ar.c:295 #, c-format @@ -1028,7 +1006,7 @@ msgstr "1ã¤ã‚’越ãˆã‚‹æ“作ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸ" #: src/ar.c:389 #, c-format msgid "cannot open archive '%s'" -msgstr "アーカイブ '%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“" +msgstr "アーカイブ '%s' ã‚’é–‹ã‘ã¾ã›ã‚“" #: src/ar.c:399 #, c-format @@ -1043,7 +1021,7 @@ 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 @@ -1053,22 +1031,22 @@ msgstr "アーカイブã«é …ç›® %s ãŒã‚ã‚Šã¾ã›ã‚“\n" #: src/ar.c:472 src/ar.c:927 src/ar.c:1134 #, c-format msgid "cannot create hash table" -msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを生æˆã§ãã¾ã›ã‚“" +msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを作æˆã§ãã¾ã›ã‚“" #: src/ar.c:479 src/ar.c:934 src/ar.c:1143 #, c-format msgid "cannot insert into hash table" -msgstr "ãƒãƒƒã‚·ãƒ¥ã«æŒ¿å…¥ã§ãã¾ã›ã‚“" +msgstr "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã«æŒ¿å…¥ã§ãã¾ã›ã‚“" #: src/ar.c:487 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" -msgstr "'%s' ã« stat ã§ãã¾ã›ã‚“" +msgstr "'%s' ã‚’ stat ã§ãã¾ã›ã‚“" #: src/ar.c:589 #, c-format msgid "cannot read content of %s: %s" -msgstr "%s ã®å†…容をèªã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“: %s" +msgstr "%s ã®å†…容をèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" #: src/ar.c:632 #, c-format @@ -1078,7 +1056,7 @@ msgstr "%.*s ã‚’é–‹ã‘ã¾ã›ã‚“" #: src/ar.c:654 #, c-format msgid "failed to write %s" -msgstr "%s ã¸ã®æ›¸è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" +msgstr "%s ã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/ar.c:666 #, c-format @@ -1098,7 +1076,7 @@ msgstr "一時ファイルを %.*s ã«åå‰å¤‰æ›´ã§ãã¾ã›ã‚“" #: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 #, c-format msgid "cannot create new file" -msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“" +msgstr "æ–°ã—ã„ファイルを作æˆã§ãã¾ã›ã‚“" #: src/ar.c:1225 #, c-format @@ -1128,50 +1106,50 @@ msgstr "%s ã¯ä¸€èˆ¬ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“" #: src/ar.c:1288 #, 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 #, c-format msgid "cannot read %s: %s" -msgstr "%s ã‚’èªã¿ã¾ã›ã‚“: %s" +msgstr "%s ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“: %s" #: src/ar.c:1483 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_date" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "ar_date を表ç¾ã§ãã¾ã›ã‚“" #: src/ar.c:1489 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_uid" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "ar_uid を表ç¾ã§ãã¾ã›ã‚“" #: src/ar.c:1495 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_gid" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "ar_gid を表ç¾ã§ãã¾ã›ã‚“" #: src/ar.c:1501 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_mode" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "ar_mode を表ç¾ã§ãã¾ã›ã‚“" #: src/ar.c:1507 -#, fuzzy, c-format +#, 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 @@ -1182,38 +1160,262 @@ 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:91 +msgid "opening" +msgstr "" + +#: src/elfclassify.c:98 +msgid "reading" +msgstr "" + +#: src/elfclassify.c:244 +msgid "ELF header" +msgstr "" + +#: src/elfclassify.c:255 +msgid "program headers" +msgstr "" + +#: src/elfclassify.c:264 +msgid "program header" +msgstr "" + +#: src/elfclassify.c:284 +msgid "section headers" +msgstr "" + +#: src/elfclassify.c:295 +msgid "section header string table index" +msgstr "" + +#: src/elfclassify.c:309 +msgid "could not obtain section header" +msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: src/elfclassify.c:315 +msgid "could not obtain section name" +msgstr "セクションåã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: src/elfclassify.c:828 +msgid "writing to standard output" +msgstr "" + +#: src/elfclassify.c:855 +msgid "reading from standard input" +msgstr "" + +#: src/elfclassify.c:876 +msgid "Classification options" +msgstr "分類オプション" + +#: src/elfclassify.c:878 +msgid "File looks like an ELF object or archive/static library (default)" +msgstr "" +"ELF オブジェクト ã¾ãŸã¯ アーカイブ/é™çš„ライブラリ㫠見ãˆã‚‹ãƒ•ã‚¡ã‚¤ãƒ« (デフォル" +"ト)" + +#: src/elfclassify.c:881 +msgid "File is an regular ELF object (not an archive/static library)" +msgstr "" +"ファイル㯠通常㮠ELF オブジェクト (アーカイブ/é™çš„ライブラリ ã§ãªã„)" + +#: src/elfclassify.c:884 +msgid "File is an ELF archive or static library" +msgstr "ファイル㯠ELF アーカイブ ã¾ãŸã¯ é™çš„ライブラリ" + +#: src/elfclassify.c:887 +msgid "File is an ELF core dump file" +msgstr "ファイル㯠ELF コアダンプファイル" + +#: 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:893 +msgid "File is (primarily) an ELF program executable (not primarily a DSO)" +msgstr "ファイル㯠(主ã«ï¼‰ ELF 実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ (主ã¨ã—㦠DSO ã§ã¯ãªã„)" + +#: src/elfclassify.c:896 +msgid "File is an ELF program executable (might also be a DSO)" +msgstr "ファイル㯠ELF 実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ (DSO ã‹ã‚‚ã—ã‚Œãªã„)" + +#: src/elfclassify.c:899 +msgid "" +"File is (primarily) an ELF shared object (DSO) (not primarily an executable)" +msgstr "" +"ファイル㯠(主ã«ï¼‰ ELF 共有オブジェクト(DSO) (主ã¨ã—㦠実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ " +"ã§ãªã„)" + +#: src/elfclassify.c:902 +msgid "File is an ELF shared object (DSO) (might also be an executable)" +msgstr "" +"ファイル㯠ELF 共有オブジェクト(DSO) (実行å¯èƒ½ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‚ã—ã‚Œãªã„)" + +#: src/elfclassify.c:906 +msgid "File is a linux kernel module" +msgstr "ファイル㯠linux カーãƒãƒ« モジュール" + +#: 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:911 +msgid "File is a loadable ELF object (program or shared object)" +msgstr "" +"ファイル㯠ãƒãƒ¼ãƒ‰å¯èƒ½ãª ELF オブジェクト (プãƒã‚°ãƒ©ãƒ ã¾ãŸã¯ 共有オブジェク" +"ト)" + +#: src/elfclassify.c:940 +msgid "Input flags" +msgstr "入力フラグ" + +#: src/elfclassify.c:942 +msgid "Only classify regular (not symlink nor special device) files" +msgstr "" +"通常 (シンボリックリンク ã‚„ 特別デãƒã‚¤ã‚¹ ã§ãªã„) ファイルã®ã¿ã‚’ 分類ã™ã‚‹" + +#: src/elfclassify.c:944 +msgid "" +"Also read file names to process from standard input, separated by newlines" +msgstr "処ç†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ 標準入力ã‹ã‚‰ 改行区切り㧠èªã¿è¾¼ã‚€" + +#: src/elfclassify.c:947 +msgid "" +"Also read file names to process from standard input, separated by ASCII NUL " +"bytes" +msgstr "処ç†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ 標準入力ã‹ã‚‰ ASCII ヌル文å—区切り㧠èªã¿è¾¼ã‚€" + +#: src/elfclassify.c:950 +msgid "Do not read files from standard input (default)" +msgstr "標準入力ã‹ã‚‰ ファイルを èªã¿è¾¼ã¾ãªã„ (デフォルト)" + +#: src/elfclassify.c:952 +msgid "Try to open compressed files or embedded (kernel) ELF images" +msgstr "" +"圧縮ファイル ã¾ãŸã¯ 組ã¿è¾¼ã¿ï¼ˆã‚«ãƒ¼ãƒãƒ«ï¼‰ ELF イメージ ã®ã‚ªãƒ¼ãƒ—ンを 試ã¿ã‚‹" + +#: src/elfclassify.c:955 +msgid "Output flags" +msgstr "出力フラグ" + +#: src/elfclassify.c:957 +msgid "Output names of files, separated by newline" +msgstr "改行区切り㧠ファイルåã‚’ 出力ã™ã‚‹" + +#: src/elfclassify.c:959 +msgid "Output names of files, separated by ASCII NUL" +msgstr "ASCII ヌル文å—区切り㧠ファイルåã‚’ 出力ã™ã‚‹" + +#: src/elfclassify.c:961 +msgid "Do not output file names" +msgstr "ファイルåを出力ã—ãªã„" + +#: src/elfclassify.c:963 +msgid "If printing file names, print matching files (default)" +msgstr "" +"ファイルåã‚’ 表示ã™ã‚‹ãªã‚‰ã°ã€ 一致ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ 表示ã™ã‚‹ (デフォルト)" + +#: src/elfclassify.c:965 +msgid "If printing file names, print files that do not match" +msgstr "ファイルåã‚’ 表示ã™ã‚‹ãªã‚‰ã°ã€ 一致ã—ãªã„ファイルを 表示ã™ã‚‹" + +#: src/elfclassify.c:967 +msgid "Additional flags" +msgstr "è¿½åŠ ã®ãƒ•ãƒ©ã‚°" + +#: src/elfclassify.c:969 +msgid "Output additional information (can be specified multiple times)" +msgstr "è¿½åŠ ã®æƒ…å ±ã‚’ 出力ã™ã‚‹ (複数回指定ã•ã‚Œã†ã‚‹ï¼‰" + +#: src/elfclassify.c:971 +msgid "Suppress some error output (counterpart to --verbose)" +msgstr "ã„ãã¤ã‹ã®ã‚¨ãƒ©ãƒ¼å‡ºåŠ›ã‚’ 抑制ã™ã‚‹ ( --verbose ã®å対)" + +#. Strings for arguments in help texts. +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 +#: src/readelf.c:158 +msgid "FILE..." +msgstr "" + +#: src/elfclassify.c:980 +msgid "" +"Determine the type of an ELF file.\n" +"\n" +"All of the classification options must apply at the same time to a " +"particular file. Classification options can be negated using a \"--not-\" " +"prefix.\n" +"\n" +"Since modern ELF does not clearly distinguish between programs and dynamic " +"shared objects, you should normally use either --executable or --shared to " +"identify the primary purpose of a file. Only one of the --shared and --" +"executable checks can pass for a file.\n" +"\n" +"If you want to know whether an ELF object might a program or a shared " +"library (but could be both), then use --program or --library. Some ELF files " +"will classify as both a program and a library.\n" +"\n" +"If you just want to know whether an ELF file is loadable (as program or " +"library) use --loadable. Note that files that only contain (separate) debug " +"information (--debug-only) are never --loadable (even though they might " +"contain program headers). Linux kernel modules are also not --loadable (in " +"the normal sense).\n" +"\n" +"Without any of the --print options, the program exits with status 0 if the " +"requested checks pass for all input files, with 1 if a check fails for any " +"file, and 2 if there is an environmental issue (such as a file read error or " +"a memory allocation error).\n" +"\n" +"When printing file names, the program exits with status 0 even if no file " +"names are printed, and exits with status 2 if there is an environmental " +"issue.\n" +"\n" +"On usage error (e.g. a bad option was given), the program exits with a " +"status code larger than 2.\n" +"\n" +"The --quiet or -q option suppresses some error warning output, but doesn't " +"change the exit status." +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 @@ -1222,12 +1424,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 @@ -1235,9 +1437,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 @@ -1245,19 +1447,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 @@ -1270,9 +1472,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 @@ -1280,16 +1482,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 @@ -1307,9 +1507,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 @@ -1354,7 +1554,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 @@ -1374,119 +1574,114 @@ 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/unstrip.c:2194 src/unstrip.c:2223 +#: 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:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, 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:115 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "-o オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" -#: src/elfcompress.c:122 -#, fuzzy, c-format +#: src/elfcompress.c:124 +#, c-format msgid "-t option specified twice" -msgstr "-f オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" +msgstr "-t オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" -#: src/elfcompress.c:131 -#, fuzzy, c-format +#: src/elfcompress.c:133 +#, c-format msgid "unknown compression type '%s'" -msgstr "ä¸æ˜Žãªã‚¿ã‚¤ãƒ—" +msgstr "ä¸æ˜Žãªåœ§ç¸®ã‚¿ã‚¤ãƒ— '%s'" #. We need at least one input file. -#: src/elfcompress.c:143 src/elfcompress.c:1347 -#, fuzzy, c-format +#: src/elfcompress.c:145 src/elfcompress.c:1345 +#, c-format msgid "No input file given" -msgstr "入力ファイルãŒç©ºã§ã™" +msgstr "入力ファイルãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" -#: src/elfcompress.c:149 src/elfcompress.c:1352 -#, fuzzy, c-format +#: src/elfcompress.c:151 src/elfcompress.c:1350 +#, c-format msgid "Only one input file allowed together with '-o'" -msgstr "'-o' 㨠'-f' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“" +msgstr "'-o' ã¨ä¸€ç·’ã®å ´åˆã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ 1 ã¤ã—ã‹èªã‚られã¾ã›ã‚“" -#: src/elfcompress.c:1309 -#, fuzzy +#: src/elfcompress.c:1307 msgid "Place (de)compressed output into FILE" -msgstr "ã¯ãŽå–ã£ãŸå‡ºåŠ›ã‚’ ãµãã„ã‚‹ ã«ç½®ã" +msgstr "圧縮(展開)ã—ãŸå‡ºåŠ›ã‚’ FILE ã«ç½®ã" -#: src/elfcompress.c:1312 +#: src/elfcompress.c:1310 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" "gnu' (.zdebug GNU style compression, 'gnu' is an alias)" msgstr "" -#: src/elfcompress.c:1315 +#: src/elfcompress.c:1313 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" msgstr "" +"圧縮(展開)ã™ã‚‹ セクションå。 SECTION 㯠拡張 ワイルドカード パターン(デ" +"フォルト㧠'.?(z)debug*')" -#: src/elfcompress.c:1318 +#: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" -msgstr "" +msgstr "圧縮(展開) ã•ã‚Œã¦ã„ã‚‹ å„セクション ã«å¯¾ã™ã‚‹ メッセージを 表示" -#: src/elfcompress.c:1321 +#: src/elfcompress.c:1319 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" msgstr "" -#: src/elfcompress.c:1324 src/strip.c:93 +#: src/elfcompress.c:1322 src/strip.c:93 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "å°‘ã—壊れ㟠ELF ファイルをå–り扱ã†ãŸã‚ã«ãƒ«ãƒ¼ãƒ«ã‚’å°‘ã—ç·©å’Œã™ã‚‹" -#: src/elfcompress.c:1327 -#, fuzzy +#: src/elfcompress.c:1325 msgid "Be silent when a section cannot be compressed" -msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" - -#. Strings for arguments in help texts. -#: src/elfcompress.c:1336 src/elflint.c:77 src/readelf.c:158 -msgid "FILE..." -msgstr "ãµãã„ã‚‹..." +msgstr "セクションを圧縮ã§ããªã„ã¨ãã«é™ã‹ã«ã™ã‚‹" -#: src/elfcompress.c:1337 +#: 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" @@ -1497,7 +1692,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 @@ -1505,14 +1701,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 @@ -1530,7 +1726,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 @@ -1559,7 +1755,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" @@ -1625,7 +1821,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" @@ -1674,16 +1870,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:3444 src/elflint.c:4456 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" @@ -2735,712 +2931,720 @@ msgstr "" msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3436 +#: src/elflint.c:3448 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3457 +#: src/elflint.c:3464 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3473 +#: src/elflint.c:3475 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3482 +#: src/elflint.c:3484 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3494 +#: src/elflint.c:3496 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3511 +#: src/elflint.c:3513 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3520 +#: src/elflint.c:3522 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3529 +#: src/elflint.c:3531 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3544 +#: src/elflint.c:3546 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" #. Tag_File -#: src/elflint.c:3555 +#: src/elflint.c:3557 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3573 +#: src/elflint.c:3575 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3584 +#: src/elflint.c:3586 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3597 +#: src/elflint.c:3599 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3601 +#: src/elflint.c:3603 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" msgstr "" -#: src/elflint.c:3611 +#: src/elflint.c:3613 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3617 +#: src/elflint.c:3619 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3714 +#: src/elflint.c:3716 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3718 +#: src/elflint.c:3720 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3720 +#: src/elflint.c:3722 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3722 +#: src/elflint.c:3724 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3724 +#: src/elflint.c:3726 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3726 +#: src/elflint.c:3728 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3728 +#: src/elflint.c:3730 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3730 +#: src/elflint.c:3732 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3733 +#: src/elflint.c:3735 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" msgstr "" -#: src/elflint.c:3737 +#: src/elflint.c:3739 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" msgstr "" -#: src/elflint.c:3741 +#: src/elflint.c:3743 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" msgstr "" -#: src/elflint.c:3759 +#: src/elflint.c:3761 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3768 +#: src/elflint.c:3770 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3795 +#: src/elflint.c:3797 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3812 +#: src/elflint.c:3814 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3830 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" -#: src/elflint.c:3847 +#: src/elflint.c:3849 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3853 src/elflint.c:3885 +#: src/elflint.c:3855 src/elflint.c:3887 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" -#: src/elflint.c:3858 src/elflint.c:3890 +#: src/elflint.c:3860 src/elflint.c:3892 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " "segments\n" msgstr "" -#: src/elflint.c:3866 +#: src/elflint.c:3868 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3909 +#: src/elflint.c:3911 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3914 +#: src/elflint.c:3916 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3924 +#: src/elflint.c:3926 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3944 +#: src/elflint.c:3946 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3954 +#: src/elflint.c:3956 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3962 +#: src/elflint.c:3964 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3972 +#: src/elflint.c:3974 #, fuzzy, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" -#: src/elflint.c:3977 +#: src/elflint.c:3979 #, fuzzy, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n" -#: src/elflint.c:3983 +#: src/elflint.c:3985 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "" -#: src/elflint.c:3989 +#: src/elflint.c:3991 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3994 +#: src/elflint.c:3996 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:4001 +#: src/elflint.c:4003 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:4006 +#: src/elflint.c:4008 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:4025 +#: src/elflint.c:4027 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:4034 +#: src/elflint.c:4036 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "" -#: src/elflint.c:4041 +#: src/elflint.c:4043 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:4072 +#: src/elflint.c:4074 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " "%d\n" msgstr "" -#: src/elflint.c:4082 +#: src/elflint.c:4084 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d\n" msgstr "" -#: src/elflint.c:4108 +#: src/elflint.c:4110 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " "program header entry %d and file contents is non-zero\n" msgstr "" -#: src/elflint.c:4119 +#: src/elflint.c:4121 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " "segment of program header entry %d\n" msgstr "" -#: src/elflint.c:4130 +#: src/elflint.c:4132 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:4140 +#: src/elflint.c:4142 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:4150 +#: src/elflint.c:4152 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" -#: src/elflint.c:4156 +#: src/elflint.c:4158 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " "but type is not SHT_TYPE\n" msgstr "" -#: src/elflint.c:4164 +#: src/elflint.c:4166 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:4215 +#: src/elflint.c:4217 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:4238 +#: src/elflint.c:4240 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:4249 +#: src/elflint.c:4251 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:4255 +#: src/elflint.c:4257 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:4266 +#: src/elflint.c:4268 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" msgstr "" -#: src/elflint.c:4279 +#: src/elflint.c:4281 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:4293 +#: src/elflint.c:4295 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:4342 +#: src/elflint.c:4344 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" -#: src/elflint.c:4346 +#: src/elflint.c:4348 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" msgstr "" -#: src/elflint.c:4395 +#: src/elflint.c:4397 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4400 +#: src/elflint.c:4402 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4419 +#: src/elflint.c:4421 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4439 +#: src/elflint.c:4441 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4442 +#: src/elflint.c:4444 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4463 +#: src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4470 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4473 +#: src/elflint.c:4475 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4491 +#: src/elflint.c:4493 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4506 +#: src/elflint.c:4508 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4516 +#: src/elflint.c:4518 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" -#: src/elflint.c:4527 +#: src/elflint.c:4529 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4535 +#: src/elflint.c:4537 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4542 +#: src/elflint.c:4544 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4556 +#: src/elflint.c:4558 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4559 +#: src/elflint.c:4561 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4569 +#: src/elflint.c:4571 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4590 +#: src/elflint.c:4592 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4601 +#: src/elflint.c:4603 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4608 +#: src/elflint.c:4610 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4617 src/elflint.c:4640 +#: src/elflint.c:4619 src/elflint.c:4642 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4646 +#: src/elflint.c:4648 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4673 +#: src/elflint.c:4675 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4676 +#: src/elflint.c:4678 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4689 +#: src/elflint.c:4691 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4697 +#: src/elflint.c:4699 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4700 +#: src/elflint.c:4702 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4704 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4707 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4712 +#: src/elflint.c:4714 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4715 +#: src/elflint.c:4717 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4726 +#: src/elflint.c:4728 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4733 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4736 +#: src/elflint.c:4738 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4749 +#: src/elflint.c:4751 #, 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:4783 +#: src/elflint.c:4785 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4795 +#: src/elflint.c:4797 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“" -#: src/elflint.c:4816 +#: src/elflint.c:4818 #, 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" @@ -3452,23 +3656,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" @@ -3480,24 +3684,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" @@ -3509,17 +3712,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 @@ -3527,12 +3729,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:2767 #, 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:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: ファイル形å¼ã‚’èªè˜ã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -3567,24 +3769,24 @@ msgstr "アーカイブã®ã‚ªãƒ•ã‚»ãƒƒãƒˆã‚’最åˆã«ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“ msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: ファイル形å¼ã‚’èªè˜ã§ãã¾ã›ã‚“" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "検索ツリーを生æˆã§ãã¾ã›ã‚“" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 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:2711 -#: src/readelf.c:2787 src/readelf.c:2874 src/readelf.c:3472 src/readelf.c:3522 -#: src/readelf.c:3592 src/readelf.c:11328 src/readelf.c:12523 -#: src/readelf.c:12734 src/readelf.c:12803 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: 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:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文å—列テーブル索引ãŒå¾—られã¾ã›ã‚“" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -3598,7 +3800,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3607,61 +3809,83 @@ msgstr "" "%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" "\n" -#: src/nm.c:1250 +#: src/nm.c:775 +msgctxt "sysv" +msgid "Name" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:777 +msgctxt "sysv" +msgid "Value" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:779 +msgctxt "sysv" +msgid "Size" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:781 +msgctxt "sysv" +msgid "Line" +msgstr "" + +#: src/nm.c:1249 #, 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:1254 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: セクション `%s' ã®å¤§ãã•ã¯é …ç›®ã®å¤§ãã•ã®æ•´æ•°å€ã§ã¯ã‚ã‚Šã¾ã›ã‚“" -#: src/nm.c:1334 +#: src/nm.c:1335 #, 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:1570 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: ä¸å½“ãªæ“作" -#: src/nm.c:1620 +#: src/nm.c:1621 #, 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" @@ -3700,17 +3924,17 @@ msgstr "" #: src/objdump.c:687 #, c-format msgid "cannot disassemble" -msgstr "" +msgstr "逆アセンブルã§ãã¾ã›ã‚“" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:759 +#, c-format 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 @@ -3720,12 +3944,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 @@ -3733,14 +3957,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 "" @@ -3749,9 +3973,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" @@ -3767,7 +3990,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" @@ -3778,47 +4001,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 @@ -3832,11 +4048,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" @@ -3844,7 +4060,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" @@ -3869,7 +4085,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 @@ -3890,7 +4106,7 @@ 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:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" @@ -3898,37 +4114,37 @@ msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" #: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 #, 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:12754 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:487 src/unstrip.c:608 -#: src/unstrip.c:629 src/unstrip.c:669 src/unstrip.c:885 src/unstrip.c:1216 -#: src/unstrip.c:1343 src/unstrip.c:1367 src/unstrip.c:1423 src/unstrip.c:1487 -#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, 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:6628 src/readelf.c:10600 src/readelf.c:10702 -#: src/readelf.c:10880 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, 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 @@ -3936,14 +4152,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 @@ -3968,22 +4184,22 @@ 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 +#, c-format msgid "cannot determine number of program headers: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダã®æ•°ã‚’決定ã§ãã¾ã›ã‚“: %s" #: src/readelf.c:993 -#, fuzzy, c-format +#, c-format msgid "cannot read ELF: %s" -msgstr "%s ã‚’èªã¿ã¾ã›ã‚“: %s" +msgstr "ELFã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“: %s" #: src/readelf.c:1054 msgid "NONE (None)" @@ -4257,7 +4473,7 @@ msgstr "" " セクションã‹ã‚‰ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã¸ã®ãƒžãƒƒãƒ“ング:\n" " セグメント セクション..." -#: src/readelf.c:1464 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "プãƒã‚°ãƒ©ãƒ ヘッダーを得られã¾ã›ã‚“: %s" @@ -4296,18 +4512,18 @@ msgstr "<ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«>" msgid "<INVALID SECTION>" msgstr "<ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3488 src/readelf.c:12625 -#: src/readelf.c:12632 src/readelf.c:12676 src/readelf.c:12683 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3493 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2717 src/readelf.c:2793 -#: src/readelf.c:3097 src/readelf.c:3171 src/readelf.c:5401 +#: 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:5407 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ä¸å½“㪠.debug_line セクション" @@ -4453,20 +4669,20 @@ msgstr " æ•° : 値 大ã タイプ Bind Vis Ndx å 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:2590 +#: src/readelf.c:2595 #, c-format msgid "bad dynamic symbol" msgstr "ä¸æ£ãªå‹•çš„シンボル" -#: src/readelf.c:2672 +#: src/readelf.c:2680 msgid "none" msgstr "ãªã—" -#: src/readelf.c:2689 +#: src/readelf.c:2697 msgid "| <unknown>" msgstr "| <ä¸æ˜Ž>" -#: src/readelf.c:2720 +#: src/readelf.c:2728 #, c-format msgid "" "\n" @@ -4482,17 +4698,17 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:2741 +#: src/readelf.c:2749 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hu ファイル: %s æ•°: %hu\n" -#: src/readelf.c:2754 +#: src/readelf.c:2762 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: åå‰: %s フラグ: %s ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %hu\n" -#: src/readelf.c:2797 +#: src/readelf.c:2805 #, c-format msgid "" "\n" @@ -4508,18 +4724,18 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:2825 +#: src/readelf.c:2833 #, 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:2840 +#: src/readelf.c:2848 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: 親 %d: %s\n" #. Print the header. -#: src/readelf.c:3101 +#: src/readelf.c:3109 #, c-format msgid "" "\n" @@ -4535,15 +4751,15 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'" -#: src/readelf.c:3129 +#: src/readelf.c:3137 msgid " 0 *local* " msgstr " 0 *ãƒãƒ¼ã‚«ãƒ«* " -#: src/readelf.c:3134 +#: src/readelf.c:3142 msgid " 1 *global* " msgstr " 1 *ã‚°ãƒãƒ¼ãƒãƒ«* " -#: src/readelf.c:3176 +#: src/readelf.c:3184 #, c-format msgid "" "\n" @@ -4561,22 +4777,22 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションã¸ã®ãƒªãƒ³ã‚¯: " "[%2u] '%s'\n" -#: src/readelf.c:3198 +#: src/readelf.c:3206 #, fuzzy, no-c-format msgid " Length Number % of total Coverage\n" msgstr " é•·ã• æ•° 全体ã®% 範囲 \n" -#: src/readelf.c:3200 +#: src/readelf.c:3208 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3207 +#: src/readelf.c:3215 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3220 +#: src/readelf.c:3228 #, fuzzy, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4585,37 +4801,37 @@ msgstr "" " テストã®å¹³å‡æ•°: 検索æˆåŠŸ: %f\n" " 検索失敗: %f\n" -#: src/readelf.c:3238 src/readelf.c:3302 src/readelf.c:3368 +#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 #, c-format msgid "cannot get data for section %d: %s" msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" -#: src/readelf.c:3246 +#: src/readelf.c:3254 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3275 +#: src/readelf.c:3283 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3310 +#: src/readelf.c:3318 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3341 +#: src/readelf.c:3349 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3377 +#: src/readelf.c:3385 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:3444 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4625,7 +4841,7 @@ msgstr "" " ビットマスクã®å¤§ãã•: %zu ãƒã‚¤ãƒˆ %<PRIuFAST32>%% ビットè¨å®š 第2ãƒãƒƒã‚·ãƒ¥ã‚·ãƒ•" "ト: %u\n" -#: src/readelf.c:3533 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4638,7 +4854,7 @@ msgstr[0] "" "オフセット %3$#0<PRIx64> ã®ãƒ©ã‚¤ãƒ–ラリー一覧セクション [%1$2zu] '%2$s' ã«ã¯ " "%4$d 個ã®é …ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:3547 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4646,7 +4862,7 @@ msgstr "" " ライブラリー タイムスタンプ ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãƒãƒ¼" "ジョン フラグ" -#: src/readelf.c:3606 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4657,102 +4873,102 @@ msgstr "" "オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ã‚ªãƒ–ジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:3623 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " 所有者 大ãã•\n" -#: src/readelf.c:3647 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3686 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3691 +#: src/readelf.c:3697 #, c-format msgid " File: %11<PRIu32>\n" msgstr " ファイル: %11<PRIu32>\n" -#: src/readelf.c:3740 +#: src/readelf.c:3746 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>ã€%s\n" -#: src/readelf.c:3743 +#: src/readelf.c:3749 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3746 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3756 +#: src/readelf.c:3762 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3759 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3829 +#: src/readelf.c:3835 #, c-format msgid "sprintf failure" msgstr "" -#: src/readelf.c:4311 +#: src/readelf.c:4317 msgid "empty block" msgstr "空ブãƒãƒƒã‚¯" -#: src/readelf.c:4314 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "%zu ãƒã‚¤ãƒˆã®ãƒ–ãƒãƒƒã‚¯:" -#: src/readelf.c:4792 +#: src/readelf.c:4798 #, fuzzy, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" -#: src/readelf.c:4859 +#: src/readelf.c:4865 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "" -#: src/readelf.c:4866 +#: src/readelf.c:4872 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "" -#: src/readelf.c:4873 +#: src/readelf.c:4879 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "" -#: src/readelf.c:4880 +#: src/readelf.c:4886 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4980 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr "" -#: src/readelf.c:5091 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -4763,7 +4979,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:5099 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -4772,20 +4988,20 @@ msgstr "" "\n" "オフセット %<PRIu64> ã®ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³:\n" -#: src/readelf.c:5112 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語をèªã‚“ã§ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s\n" -#: src/readelf.c:5128 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %<PRId64>ã€å: %sã€ã‚¿ã‚°: %s\n" -#: src/readelf.c:5161 src/readelf.c:5470 src/readelf.c:5637 src/readelf.c:6022 -#: src/readelf.c:6638 src/readelf.c:8375 src/readelf.c:9064 src/readelf.c:9537 -#: src/readelf.c:9788 src/readelf.c:9954 src/readelf.c:10341 -#: src/readelf.c:10401 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -4794,52 +5010,52 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5174 +#: src/readelf.c:5180 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" -#: src/readelf.c:5274 src/readelf.c:5298 src/readelf.c:5682 src/readelf.c:9109 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5276 src/readelf.c:5313 src/readelf.c:5695 src/readelf.c:9122 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5277 src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9131 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, fuzzy, c-format msgid " Address size: %8<PRIu64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5279 src/readelf.c:5332 src/readelf.c:5714 src/readelf.c:9141 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, fuzzy, c-format msgid " Segment size: %8<PRIu64>\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:5317 src/readelf.c:5699 src/readelf.c:9126 src/readelf.c:10533 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, fuzzy, c-format msgid "Unknown version" msgstr "ä¸æ˜Žãªãƒãƒ¼ã‚¸ãƒ§ãƒ³" -#: src/readelf.c:5327 src/readelf.c:5540 src/readelf.c:5709 src/readelf.c:9136 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, fuzzy, c-format msgid "unsupported address size" msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" -#: src/readelf.c:5338 src/readelf.c:5551 src/readelf.c:5719 src/readelf.c:9146 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5391 src/readelf.c:5465 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:5406 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -4852,19 +5068,19 @@ msgstr[0] "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:5437 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5439 +#: src/readelf.c:5445 #, 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:5483 src/readelf.c:8402 +#: src/readelf.c:5489 src/readelf.c:8426 #, fuzzy, c-format msgid "" "\n" @@ -4873,152 +5089,152 @@ msgstr "" "\n" "オフセット %Zu ã®ãƒ†ãƒ¼ãƒ–ル:\n" -#: src/readelf.c:5487 src/readelf.c:5663 src/readelf.c:6662 src/readelf.c:8413 -#: src/readelf.c:9090 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:5503 +#: src/readelf.c:5509 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5515 +#: src/readelf.c:5521 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:5519 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5530 +#: src/readelf.c:5536 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5536 +#: src/readelf.c:5542 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5547 +#: src/readelf.c:5553 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:5602 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5646 +#: src/readelf.c:5652 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:5669 src/readelf.c:9096 +#: src/readelf.c:5675 src/readelf.c:9177 #, fuzzy, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5724 src/readelf.c:9151 +#: src/readelf.c:5730 src/readelf.c:9232 #, fuzzy, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5740 src/readelf.c:9167 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5742 src/readelf.c:9169 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:5748 src/readelf.c:9175 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5759 src/readelf.c:9186 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5763 src/readelf.c:9190 +#: src/readelf.c:5769 src/readelf.c:9271 #, fuzzy, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " 所有者 大ãã•\n" -#: src/readelf.c:5815 +#: src/readelf.c:5821 #, fuzzy, c-format msgid "invalid range list data" msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:6000 src/readelf.c:9515 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6017 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:6053 src/readelf.c:9570 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6055 src/readelf.c:9572 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" -#: src/readelf.c:6064 src/readelf.c:9598 src/readelf.c:9624 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:6089 src/readelf.c:9708 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr "アドレスを %s ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:6099 src/readelf.c:9718 +#: src/readelf.c:6105 src/readelf.c:9799 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼãƒçµ‚端\n" -#: src/readelf.c:6359 +#: src/readelf.c:6365 #, fuzzy msgid " <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:6616 +#: src/readelf.c:6622 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:6634 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5027,7 +5243,7 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> ã® ãƒ•ãƒ¬ãƒ¼ãƒ æƒ…å ±å‘¼å‡ºã—セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:6684 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5036,65 +5252,65 @@ msgstr "" "\n" " [%6tx] ゼãƒçµ‚端\n" -#: src/readelf.c:6785 src/readelf.c:6939 +#: src/readelf.c:6791 src/readelf.c:6945 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ä¸å½“ãªæ‹¡å¤§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰" -#: src/readelf.c:6800 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:6806 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "LSDA ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰:" -#: src/readelf.c:6916 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:6923 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:6960 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sLSDA ãƒã‚¤ãƒ³ã‚¿ãƒ¼: %#<PRIx64>\n" -#: src/readelf.c:7045 +#: src/readelf.c:7051 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "属性コードを得られã¾ã›ã‚“: %s" -#: src/readelf.c:7055 +#: src/readelf.c:7061 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "属性様å¼ã‚’得られã¾ã›ã‚“: %s" -#: src/readelf.c:7077 +#: src/readelf.c:7083 #, fuzzy, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "属性値を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7407 +#: src/readelf.c:7413 #, fuzzy, c-format msgid "invalid file (%<PRId64>): %s" msgstr "ä¸å½“ãªãƒ•ã‚¡ã‚¤ãƒ«" -#: src/readelf.c:7411 +#: src/readelf.c:7417 #, fuzzy, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:7415 +#: src/readelf.c:7421 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7728 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5105,12 +5321,12 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:7778 +#: src/readelf.c:7786 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7797 +#: src/readelf.c:7806 #, fuzzy, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5122,7 +5338,7 @@ msgstr "" " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§" "ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n" -#: src/readelf.c:7809 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5133,39 +5349,39 @@ msgstr "" " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§" "ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n" -#: src/readelf.c:7819 src/readelf.c:7982 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr "" -#: src/readelf.c:7846 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7875 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られã¾ã›ã‚“: %s" -#: src/readelf.c:7884 +#: src/readelf.c:7893 #, 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:7922 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s\n" -#: src/readelf.c:7930 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "次㮠DIE を得られã¾ã›ã‚“: %s" -#: src/readelf.c:7974 +#: src/readelf.c:7981 #, fuzzy, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5176,7 +5392,7 @@ msgstr "" " ãƒãƒ¼ã‚¸ãƒ§ãƒ³: %2$<PRIu16>ã€ç•¥èªžã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ•ã‚»ãƒƒãƒˆ: %3$<PRIu64>ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤§" "ãã•: %4$<PRIu8>ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å¤§ãã•: %5$<PRIu8>\n" -#: src/readelf.c:8026 +#: src/readelf.c:8033 #, fuzzy, c-format msgid "" "\n" @@ -5186,18 +5402,18 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:8358 +#: src/readelf.c:8365 #, fuzzy, c-format msgid "unknown form: %s" msgstr "ä¸æ˜Žãªæ§˜å¼ %<PRIx64>" -#: src/readelf.c:8389 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" #. Print what we got so far. -#: src/readelf.c:8491 +#: src/readelf.c:8517 #, fuzzy, c-format msgid "" "\n" @@ -5227,33 +5443,33 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:8513 -#, fuzzy, c-format +#: src/readelf.c:8539 +#, c-format msgid "cannot handle .debug_line version: %u\n" -msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" +msgstr ".debug_line ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’扱ãˆã¾ã›ã‚“: %u\n" -#: src/readelf.c:8521 -#, fuzzy, c-format +#: src/readelf.c:8547 +#, c-format msgid "cannot handle address size: %u\n" -msgstr "アドレス値ã§ã¯ã‚ã‚Šã¾ã›ã‚“" +msgstr "アドレスサイズを扱ãˆã¾ã›ã‚“: %u\n" -#: src/readelf.c:8529 -#, fuzzy, c-format +#: src/readelf.c:8555 +#, c-format msgid "cannot handle segment selector size: %u\n" -msgstr "セクションを得られã¾ã›ã‚“: %s" +msgstr "セグメントセレクタサイズを扱ãˆã¾ã›ã‚“: %u\n" -#: src/readelf.c:8539 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "セクション [%2$zu] '%3$s' ä¸ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$tu ã«ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:8554 +#: src/readelf.c:8580 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] " [%*<PRIuFAST8>] %hhu パラメーター\n" -#: src/readelf.c:8565 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5261,12 +5477,12 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:8571 src/readelf.c:8648 +#: src/readelf.c:8597 src/readelf.c:8674 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8642 +#: src/readelf.c:8668 #, fuzzy msgid "" "\n" @@ -5275,7 +5491,7 @@ msgstr "" "\n" " 呼出ã—サイトテーブル:" -#: src/readelf.c:8703 +#: src/readelf.c:8729 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5283,7 +5499,7 @@ msgstr "" "ファイルåテーブル:\n" " Entry Dir 時刻 大ãã• åå‰" -#: src/readelf.c:8742 +#: src/readelf.c:8775 #, fuzzy msgid "" "\n" @@ -5292,7 +5508,7 @@ msgstr "" "\n" "è¡Œ ç•ªå· æ–‡:" -#: src/readelf.c:8746 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5300,119 +5516,129 @@ msgstr "" "\n" "è¡Œ ç•ªå· æ–‡:" -#: src/readelf.c:8766 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8800 +#: src/readelf.c:8828 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " 特殊命令コード %u: アドレス+%u = %s, è¡Œ%+d = %zu\n" -#: src/readelf.c:8804 +#: src/readelf.c:8832 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, è¡Œ%+d = %zu\n" -#: src/readelf.c:8807 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8825 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:8830 +#: src/readelf.c:8858 #, fuzzy msgid " end of sequence" msgstr "列ã®çµ‚ã‚ã‚Š" -#: src/readelf.c:8848 +#: src/readelf.c:8876 #, fuzzy, c-format msgid " set address to " msgstr "アドレスを %s ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:8876 +#: src/readelf.c:8904 #, 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:8890 +#: src/readelf.c:8918 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを %<PRIu64> ã«è¨å®šã™ã‚‹\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "関数åも表示" + #. Unknown, ignore it. -#: src/readelf.c:8895 -#, fuzzy +#: src/readelf.c:8976 msgid " unknown opcode" -msgstr "ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰" +msgstr "ä¸æ˜Žãªã‚ªãƒšã‚³ãƒ¼ãƒ‰" #. Takes no argument. -#: src/readelf.c:8907 +#: src/readelf.c:8988 msgid " copy" msgstr "複写" -#: src/readelf.c:8918 +#: src/readelf.c:8999 #, fuzzy, c-format msgid " advance address by %u to " msgstr "アドレスを %u ã ã‘進ã‚㦠%s ã«ã™ã‚‹\n" -#: src/readelf.c:8922 src/readelf.c:8983 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8934 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr "行を定数 %d ã ã‘進ã‚㦠%<PRId64> ã«ã™ã‚‹\n" -#: src/readelf.c:8944 +#: src/readelf.c:9025 #, c-format msgid " set file to %<PRIu64>\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:8955 +#: src/readelf.c:9036 #, c-format msgid " set column to %<PRIu64>\n" msgstr "カラムを %<PRIu64> ã«è¨å®šã™ã‚‹\n" -#: src/readelf.c:8962 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " '%s' ã‚’ %<PRIuFAST8> ã«è¨å®šã™ã‚‹\n" #. Takes no argument. -#: src/readelf.c:8968 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr "基本ブãƒãƒƒã‚¯ãƒ•ãƒ©ã‚°ã‚’è¨å®šã™ã‚‹" -#: src/readelf.c:8979 +#: src/readelf.c:9060 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "アドレスを定数 %u ã ã‘済ã‚㦠%s ã«ã™ã‚‹\n" -#: src/readelf.c:8999 +#: src/readelf.c:9080 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "アドレスを固定値 %u ã ã‘進ã‚㦠%s ã«ã™ã‚‹\n" #. Takes no argument. -#: src/readelf.c:9009 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr "プãƒãƒãƒ¼ã‚°çµ‚了フラグをè¨å®šã™ã‚‹" #. Takes no argument. -#: src/readelf.c:9014 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr "エピãƒãƒ¼ã‚°é–‹å§‹ãƒ•ãƒ©ã‚°ã‚’è¨å®šã™ã‚‹" -#: src/readelf.c:9024 +#: src/readelf.c:9105 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを %<PRIu64> ã«è¨å®šã™ã‚‹\n" @@ -5420,103 +5646,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:9033 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] " %<PRIu8> 個ã®ãƒ‘ラメーターã®ã‚ã‚‹ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰:" -#: src/readelf.c:9073 -#, fuzzy, c-format +#: src/readelf.c:9154 +#, c-format msgid "cannot get .debug_loclists content: %s" -msgstr ".debug_loc ã®å†…容を得られã¾ã›ã‚“: %s" +msgstr ".debug_loclists ã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:9239 +#: src/readelf.c:9320 #, fuzzy, c-format msgid " <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:9279 +#: src/readelf.c:9360 #, fuzzy, c-format msgid "invalid loclists data" msgstr "ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/readelf.c:9532 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:9745 src/readelf.c:10789 +#: src/readelf.c:9826 src/readelf.c:10870 #, fuzzy msgid " <INVALID DATA>\n" msgstr " [%6tx] <ä¸å½“ãªãƒ‡ãƒ¼ã‚¿>\n" -#: src/readelf.c:9800 src/readelf.c:9963 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクãƒæƒ…å ±ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“: %s" -#: src/readelf.c:9880 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®çµ‚端ã—ã¦ã„ãªã„æ–‡å—列" -#: src/readelf.c:9903 +#: src/readelf.c:9984 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** 最後ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®çµ‚端ã—ã¦ã„ãªã„æ–‡å—列" -#: src/readelf.c:10004 +#: src/readelf.c:10085 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " 所有者 大ãã•\n" -#: src/readelf.c:10016 +#: src/readelf.c:10097 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10022 src/readelf.c:10909 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10029 +#: src/readelf.c:10110 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>" msgstr " å…¥å£ç‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹ : %#<PRIx64>\n" -#: src/readelf.c:10058 +#: src/readelf.c:10139 #, fuzzy, c-format msgid " Offset length: %<PRIu8>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10066 +#: src/readelf.c:10147 #, fuzzy, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:10091 +#: src/readelf.c:10172 #, fuzzy, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " %<PRIu8> 個ã®ãƒ‘ラメーターã®ã‚ã‚‹ä¸æ˜Žãªå‘½ä»¤ã‚³ãƒ¼ãƒ‰:" -#: src/readelf.c:10098 +#: src/readelf.c:10179 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:10110 +#: src/readelf.c:10191 #, fuzzy, c-format msgid " %<PRIu8> arguments:" msgstr " [%*<PRIuFAST8>] %hhu パラメーター\n" -#: src/readelf.c:10125 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10326 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" @@ -5524,7 +5750,7 @@ msgstr "" # # "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s æ–‡å—列\n" ãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã®ã¯ä½•æ•…? å–ã‚Šæ•¢ãˆãš fuzzy扱ㄠ-#: src/readelf.c:10370 +#: src/readelf.c:10451 #, fuzzy, c-format msgid "" "\n" @@ -5535,37 +5761,43 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s':\n" " %4$*s æ–‡å—列\n" -#: src/readelf.c:10385 +#. TRANS: the debugstr| prefix makes the string unique. +#: src/readelf.c:10456 +msgctxt "debugstr" +msgid "Offset" +msgstr "" + +#: src/readelf.c:10466 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** æ–‡å—列ã®èªè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼: %s\n" -#: src/readelf.c:10414 +#: src/readelf.c:10495 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr ".degub_ranges ã®å†…容を得られã¾ã›ã‚“: %s" -#: src/readelf.c:10513 +#: src/readelf.c:10594 #, fuzzy, c-format msgid " Length: %8<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10515 +#: src/readelf.c:10596 #, fuzzy, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10529 +#: src/readelf.c:10610 #, fuzzy, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10538 +#: src/readelf.c:10619 #, fuzzy, c-format msgid " Padding: %8<PRIx16>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10592 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -5574,7 +5806,7 @@ msgstr "" "\n" "呼出ã—フレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10694 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -5583,22 +5815,22 @@ msgstr "" "\n" "例外å–扱ã„テーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10717 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:10729 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:10744 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr "呼出ã—サイトコード化: %#x " -#: src/readelf.c:10757 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -5606,7 +5838,7 @@ msgstr "" "\n" " 呼出ã—サイトテーブル:" -#: src/readelf.c:10771 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5619,12 +5851,12 @@ msgstr "" " 離ç€é™¸å ´: %#<PRIx64>\n" " 行動: %u\n" -#: src/readelf.c:10844 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "ä¸å½“㪠TType コード化" -#: src/readelf.c:10871 +#: src/readelf.c:10952 #, fuzzy, c-format msgid "" "\n" @@ -5634,37 +5866,37 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:10900 +#: src/readelf.c:10981 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:10918 +#: src/readelf.c:10999 #, fuzzy, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10925 +#: src/readelf.c:11006 #, fuzzy, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10932 +#: src/readelf.c:11013 #, fuzzy, c-format msgid " address offset: %#<PRIx32>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:10939 +#: src/readelf.c:11020 #, fuzzy, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:10946 +#: src/readelf.c:11027 #, fuzzy, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:10960 +#: src/readelf.c:11041 #, fuzzy, c-format msgid "" "\n" @@ -5674,7 +5906,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:10985 +#: src/readelf.c:11066 #, fuzzy, c-format msgid "" "\n" @@ -5684,7 +5916,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:11014 +#: src/readelf.c:11095 #, fuzzy, c-format msgid "" "\n" @@ -5694,7 +5926,7 @@ msgstr "" "オフセット %3$#<PRIx64> ã® DWARF セクション [%1$2zu] '%2$s' ã«ã¯ %4$zu 個ã®é …" "ç›®ãŒã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:11046 +#: src/readelf.c:11127 #, fuzzy, c-format msgid "" "\n" @@ -5703,18 +5935,18 @@ msgstr "" "\n" "オフセット %#0<PRIx64> ã«ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ル\n" -#: src/readelf.c:11184 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "デãƒãƒƒã‚°å†…容記述åを得られã¾ã›ã‚“: %s" -#: src/readelf.c:11552 src/readelf.c:12179 src/readelf.c:12290 -#: src/readelf.c:12348 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータã®å¤‰æ›ãŒã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:11915 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -5723,21 +5955,21 @@ msgstr "" "\n" "%*s... < %u 回ã®ç¹°è¿”ã—> ..." -#: src/readelf.c:12427 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " 所有者 データ大ãã•ã‚¿ã‚¤ãƒ—\n" -#: src/readelf.c:12456 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12508 -#, fuzzy, c-format +#: src/readelf.c:12588 +#, c-format msgid "cannot get content of note: %s" -msgstr "ノートセクションã®å†…容を得られã¾ã›ã‚“: %s" +msgstr "ノートセクションã®å†…容をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/readelf.c:12542 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -5747,7 +5979,7 @@ msgstr "" "オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:12565 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -5756,7 +5988,7 @@ msgstr "" "\n" "オフセット %2$#0<PRIx64> ã® %1$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚°ãƒ¡ãƒ³ãƒˆ:\n" -#: src/readelf.c:12612 +#: src/readelf.c:12692 #, fuzzy, c-format msgid "" "\n" @@ -5765,12 +5997,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n" -#: src/readelf.c:12639 src/readelf.c:12690 +#: src/readelf.c:12719 src/readelf.c:12770 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s" -#: src/readelf.c:12644 +#: src/readelf.c:12724 #, fuzzy, c-format msgid "" "\n" @@ -5780,7 +6012,7 @@ msgstr "" "オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン" "プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n" -#: src/readelf.c:12649 +#: src/readelf.c:12729 #, fuzzy, c-format msgid "" "\n" @@ -5791,7 +6023,7 @@ msgstr "" "オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン" "プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n" -#: src/readelf.c:12663 +#: src/readelf.c:12743 #, fuzzy, c-format msgid "" "\n" @@ -5800,7 +6032,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n" -#: src/readelf.c:12695 +#: src/readelf.c:12775 #, fuzzy, c-format msgid "" "\n" @@ -5810,7 +6042,7 @@ msgstr "" "オフセット %4$#0<PRIx64> æ–‡å—列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ" "イトã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:12700 +#: src/readelf.c:12780 #, fuzzy, c-format msgid "" "\n" @@ -5821,7 +6053,7 @@ msgstr "" "オフセット %4$#0<PRIx64> æ–‡å—列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ" "イトã‚ã‚Šã¾ã™:\n" -#: src/readelf.c:12749 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -5830,7 +6062,7 @@ msgstr "" "\n" "セクション [%lu] ãŒã‚ã‚Šã¾ã›ã‚“" -#: src/readelf.c:12779 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -5839,12 +6071,12 @@ msgstr "" "\n" "セクション '%s' ãŒã‚ã‚Šã¾ã›ã‚“" -#: src/readelf.c:12836 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブã®ã‚·ãƒ³ãƒœãƒ«ç´¢å¼• '%s' を得られã¾ã›ã‚“: %s" -#: src/readelf.c:12839 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -5853,21 +6085,21 @@ msgstr "" "\n" "アーカイブ '%s' ã«ã¯ã‚·ãƒ³ãƒœãƒ«ç´¢å¼•ãŒã‚ã‚Šã¾ã›ã‚“\n" -#: src/readelf.c:12843 -#, fuzzy, c-format +#: src/readelf.c:12923 +#, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" "\n" -"アーカイブ '%s' ã®ç´¢å¼•ã«ã¯ %Zu é …ç›®ã‚ã‚Šã¾ã™:\n" +"アーカイブ '%s' ã®ç´¢å¼•ã¯ %zu 個ã®é …目をæŒã¡ã¾ã™:\n" -#: src/readelf.c:12861 -#, fuzzy, c-format +#: src/readelf.c:12941 +#, 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:12866 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンãƒãƒ¼ '%s' ã«ã¯ä»¥ä¸‹ãŒã‚ã‚Šã¾ã™:\n" @@ -5877,8 +6109,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'" @@ -5902,11 +6134,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)" @@ -5915,7 +6147,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 @@ -5932,15 +6164,65 @@ msgstr "ä¸å½“ãªåŸºæ•°: %s" msgid "%s: file format not recognized" msgstr "%s: ファイル形å¼ã‚’èªè˜ã§ãã¾ã›ã‚“" +#: src/size.c:328 +msgctxt "bsd" +msgid "text" +msgstr "" + +#: src/size.c:329 +msgctxt "bsd" +msgid "data" +msgstr "" + +#: src/size.c:330 +msgctxt "bsd" +msgid "bss" +msgstr "" + +#: src/size.c:331 +msgctxt "bsd" +msgid "dec" +msgstr "" + +#: src/size.c:332 +msgctxt "bsd" +msgid "hex" +msgstr "" + +#: src/size.c:333 +msgctxt "bsd" +msgid "filename" +msgstr "" + #: src/size.c:418 src/size.c:560 #, c-format msgid " (ex %s)" msgstr " (ex %s)" +#: src/size.c:420 +msgctxt "sysv" +msgid "section" +msgstr "" + +#: src/size.c:421 +msgctxt "sysv" +msgid "size" +msgstr "" + +#: src/size.c:422 +msgctxt "sysv" +msgid "addr" +msgstr "" + +#: src/size.c:451 src/size.c:454 src/size.c:457 +msgctxt "sysv" +msgid "Total" +msgstr "" + #: src/size.c:482 -#, fuzzy, c-format +#, c-format msgid "cannot get section header" -msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s" +msgstr "セクションヘッダーをå–å¾—ã§ãã¾ã›ã‚“" #: src/size.c:585 msgid "(TOTALS)\n" @@ -5952,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 @@ -5977,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)" @@ -6047,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 "" @@ -6063,42 +6346,44 @@ 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 @@ -6132,27 +6417,27 @@ 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 "" @@ -6178,17 +6463,22 @@ 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 @@ -6218,26 +6508,26 @@ msgid "-F option specified twice" msgstr "-F オプション㌠2 回指定ã•ã‚Œã¦ã„ã¾ã™" #: src/strip.c:362 -#, fuzzy, c-format +#, c-format msgid "cannot both keep and remove .comment section" -msgstr ".comment セクションをå–り除ã" +msgstr ".comment セクションをä¿æŒã—ã¤ã¤å–り除ãã“ã¨ã¯ã§ãã¾ã›ã‚“" #: src/strip.c:481 -#, fuzzy, c-format +#, c-format msgid "bad relocation" -msgstr "リãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’表示" +msgstr "" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "入力ファイル '%s' ã‚’ stat ã§ãã¾ã›ã‚“" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "'%s' ã‚’é–‹ã„ã¦ã„ã‚‹é–“" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆã¾ã›ã‚“" @@ -6248,171 +6538,173 @@ 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:815 +#, c-format msgid "%s: no support for stripping archive" -msgstr "%s: アーカイブã‹ã‚‰æŠœã出ã—ã¦ã„る時㯠-o ã‚„ -f ã¯ä½¿ãˆã¾ã›ã‚“" +msgstr "%s: アーカイブã®ã‚¹ãƒˆãƒªãƒƒãƒ—ã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "EBL ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é–‹ã‘ã¾ã›ã‚“" -#: src/strip.c:1092 -#, fuzzy, c-format +#: src/strip.c:1097 +#, c-format msgid "cannot get number of phdrs" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "phdrs ã®æ•°ã‚’å–å¾—ã§ãã¾ã›ã‚“" -#: src/strip.c:1106 src/strip.c:1149 -#, fuzzy, c-format +#: src/strip.c:1111 src/strip.c:1154 +#, 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:1121 src/strip.c:1164 +#, 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:1244 #, c-format msgid "illformed file '%s'" msgstr "ä¸é©æ ¼ãªãƒ•ã‚¡ã‚¤ãƒ« '%s'" -#: src/strip.c:1250 -#, fuzzy, c-format +#: src/strip.c:1254 +#, c-format msgid "Cannot remove allocated section '%s'" -msgstr "PLT セクションを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "割り当ã¦ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ '%s' ã¯å–り除ã‘ã¾ã›ã‚“" -#: src/strip.c:1259 -#, fuzzy, c-format +#: src/strip.c:1263 +#, c-format msgid "Cannot both keep and remove section '%s'" -msgstr "0番目ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’得られã¾ã›ã‚“: %s" +msgstr "セクション '%s' ã‚’ä¿æŒã—ã¤ã¤å–り除ãã“ã¨ã¯ã§ãã¾ã›ã‚“" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "出力ファイルを生æˆã—ã¦ã„ã‚‹é–“: %s" -#: src/strip.c:1688 -#, fuzzy, c-format +#: src/strip.c:1692 +#, c-format msgid "%s: error while updating ELF header: %s" -msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" +msgstr "%s: ELF ヘッダーã®æ›´æ–°ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:1697 -#, fuzzy, c-format +#: src/strip.c:1701 +#, 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:1709 src/strip.c:2554 +#, c-format msgid "%s: error updating shdrstrndx: %s" -msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" +msgstr "%s: shdrstrndx ã®æ›´æ–°ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' ã®ãŸã‚ã®å‡ºåŠ›ã‚’準備ã—ã¦ã„ã‚‹é–“" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生æˆã—ã¦ã„ã‚‹é–“: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文å—列テーブルを生æˆä¸: %s" -#: src/strip.c:1866 -#, fuzzy, c-format +#: src/strip.c:1870 +#, c-format msgid "no memory to create section header string table" -msgstr "セクションヘッダー文å—列テーブルを生æˆä¸: %s" +msgstr "セクションヘッダー文å—列テーブルを作æˆã™ã‚‹ãƒ¡ãƒ¢ãƒªãŒã‚ã‚Šã¾ã›ã‚“" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込ã¿ä¸: %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "'%s' を生æˆä¸" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "デãƒãƒƒã‚°æƒ…å ±ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ を計算ä¸" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生æˆã—ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:2559 +#: src/strip.c:2563 #, 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:2603 src/strip.c:2623 +#, c-format msgid "while writing '%s'" -msgstr "'%s' を書込ã¿ä¸: %s" +msgstr "書ãè¾¼ã¿ä¸ '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' ã®çµ‚了ä¸ã«ã‚¨ãƒ©ãƒ¼: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, 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 @@ -6432,342 +6724,353 @@ 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:2085 +#: src/unstrip.c:244 src/unstrip.c:2088 #, 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:2103 src/unstrip.c:2146 -#, fuzzy, c-format +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 +#, c-format msgid "cannot get number of program headers: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "プãƒã‚°ãƒ©ãƒ ヘッダ数をå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:270 src/unstrip.c:2107 +#: src/unstrip.c:270 src/unstrip.c:2110 #, 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:1707 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" -msgstr "" +msgstr "セクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:291 src/unstrip.c:1709 +#: src/unstrip.c:291 src/unstrip.c:1712 #, 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:655 src/unstrip.c:689 src/unstrip.c:857 -#: src/unstrip.c:1749 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" -msgstr "" +msgstr "ã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ãƒ«é …ç›®ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:409 src/unstrip.c:658 src/unstrip.c:679 src/unstrip.c:692 -#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, 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:465 src/unstrip.c:479 +#: 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:578 +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" -msgstr "" +msgstr "シンボルãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:591 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:846 -#, fuzzy, c-format +#: src/unstrip.c:850 +#, c-format msgid "cannot get symbol section data: %s" -msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" +msgstr "シンボルセクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:848 -#, fuzzy, c-format +#: src/unstrip.c:852 +#, c-format msgid "cannot get string section data: %s" -msgstr "ラインデータセクションデータを得られã¾ã›ã‚“: %s" +msgstr "æ–‡å—列セクションデータをå–å¾—ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:865 -#, fuzzy, c-format +#: src/unstrip.c:869 +#, c-format msgid "invalid string offset in symbol [%zu]" -msgstr "シンボル %2$sã®ä¸æ£ãªã‚ªãƒ•ã‚»ãƒƒãƒˆ %1$zu " +msgstr "シンボル [%zu] ã®ä¸ã«ä¸å½“ãªæ–‡å—列オフセットãŒã‚ã‚Šã¾ã™" -#: src/unstrip.c:1023 src/unstrip.c:1427 -#, fuzzy, c-format +#: src/unstrip.c:1027 src/unstrip.c:1435 +#, c-format msgid "cannot read section [%zu] name: %s" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "セクション [%zu] ã®åå‰ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/unstrip.c:1038 -#, fuzzy, c-format +#: src/unstrip.c:1042 +#, c-format msgid "bad sh_link for group section: %s" -msgstr "ä¸å½“㪠.debug_line セクション" +msgstr "グループセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸ sh_link ã§ã™: %s" -#: src/unstrip.c:1044 -#, fuzzy, c-format +#: src/unstrip.c:1048 +#, c-format msgid "couldn't get shdr for group section: %s" -msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" +msgstr "グループセクションã«å¯¾ã™ã‚‹ shdr ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s" -#: src/unstrip.c:1049 -#, fuzzy, c-format +#: src/unstrip.c:1053 +#, c-format msgid "bad data for group symbol section: %s" -msgstr "セクションã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’得られã¾ã›ã‚“ %d: %s" +msgstr "グループシンボルセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸãƒ‡ãƒ¼ã‚¿ã§ã™: %s" -#: src/unstrip.c:1055 -#, fuzzy, c-format +#: src/unstrip.c:1059 +#, c-format msgid "couldn't get symbol for group section: %s" -msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s" +msgstr "グループセクションã«å¯¾ã™ã‚‹ã‚·ãƒ³ãƒœãƒ«ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s" -#: src/unstrip.c:1060 -#, fuzzy, c-format +#: src/unstrip.c:1064 +#, c-format msgid "bad symbol name for group section: %s" -msgstr "セクションヘッダー文å—列セクションを生æˆã§ãã¾ã›ã‚“: %s" +msgstr "グループセクションã«å¯¾ã™ã‚‹èª¤ã£ãŸã‚·ãƒ³ãƒœãƒ«åã§ã™: %s" + +#: src/unstrip.c:1075 src/unstrip.c:1556 +#, fuzzy, c-format +msgid "cannot find matching section for [%zu] '%s'" +msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" -#: src/unstrip.c:1102 src/unstrip.c:1121 src/unstrip.c:1159 +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1139 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1150 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1206 src/unstrip.c:1553 -#, fuzzy, c-format -msgid "cannot find matching section for [%zu] '%s'" -msgstr "セクション [%zu] '%s' ã®ä¸å½“ãªãƒ‡ãƒ¼ã‚¿" - -#: src/unstrip.c:1331 src/unstrip.c:1347 src/unstrip.c:1633 src/unstrip.c:1924 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1356 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1385 src/unstrip.c:1389 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1393 src/unstrip.c:1397 src/unstrip.c:1648 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1400 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1404 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1475 src/unstrip.c:1568 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1627 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1757 -#, fuzzy, c-format +#: src/unstrip.c:1760 +#, c-format msgid "symbol [%zu] has invalid section index" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•" +msgstr "シンボル [%zu] ãŒä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•ã‚’æŒã£ã¦ã„ã¾ã™" -#: src/unstrip.c:1789 -#, fuzzy, c-format +#: src/unstrip.c:1792 +#, c-format msgid "group has invalid section index [%zd]" -msgstr "ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼•" +msgstr "グループãŒä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ç´¢å¼• [%zd] ã‚’æŒã£ã¦ã„ã¾ã™" -#: src/unstrip.c:2064 -#, fuzzy, c-format +#: src/unstrip.c:2067 +#, c-format msgid "cannot read section data: %s" -msgstr "セクションデータを割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“: %s" +msgstr "セクションデータをèªã¿è¾¼ã‚ã¾ã›ã‚“: %s" -#: src/unstrip.c:2093 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "ELF ヘッダーを更新ã§ãã¾ã›ã‚“: %s" -#: src/unstrip.c:2117 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:2122 src/unstrip.c:2205 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2173 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2176 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2196 src/unstrip.c:2247 src/unstrip.c:2259 src/unstrip.c:2345 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2238 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2240 +#: src/unstrip.c:2239 msgid ", use --force" msgstr "" -#: src/unstrip.c:2263 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2266 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2272 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2302 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2306 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2321 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2325 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2338 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2369 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2501 +#: src/unstrip.c:2505 #, c-format msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2510 +#: src/unstrip.c:2515 #, c-format msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2554 +#: src/unstrip.c:2560 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2555 +#: src/unstrip.c:2561 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -6795,18 +7098,36 @@ msgid "" "was found, or . if FILE contains the debug information." msgstr "" -#: tests/backtrace.c:436 +#. Short description of program. +#: debuginfod/debuginfod-find.c:42 +msgid "Request debuginfo-related content from debuginfods listed in $" +msgstr "" + +#. Strings for arguments in help texts. +#: debuginfod/debuginfod-find.c:46 +msgid "" +"debuginfo BUILDID\n" +"debuginfo PATH\n" +"executable BUILDID\n" +"executable PATH\n" +"source BUILDID /FILENAME\n" +"source PATH /FILENAME\n" +msgstr "" + +#: 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 "" @@ -7109,18 +7430,12 @@ msgstr "" #~ msgid "unknown option `-%c %s'" #~ msgstr "ä¸æ˜Žãªã‚ªãƒ—ション `%c %s'" -#~ msgid "invalid page size value '%s': ignored" -#~ msgstr "ä¸å½“ãªãƒšãƒ¼ã‚¸ã‚µã‚¤ã‚ºå€¤ '%s': 無視ã—ã¾ã—ãŸ" - #~ msgid "invalid hash style '%s'" #~ msgstr "ä¸å½“ãªãƒãƒƒã‚·ãƒ¥ã‚¹ã‚¿ã‚¤ãƒ« '%s'" #~ msgid "invalid build-ID style '%s'" #~ msgstr "ä¸å½“ãªãƒ“ルド-ID スタイル '%s'" -#~ msgid "More than one output file name given." -#~ msgstr "ã²ã¨ã¤ã‚’越ãˆã‚‹å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸã€‚" - #~ msgid "Invalid optimization level `%s'" #~ msgstr "ä¸å½“ãªæœ€é©åŒ–レベル `%s'" @@ -7341,9 +7656,6 @@ msgstr "" #~ msgid "while reading version script '%s': %s at line %d" #~ msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¹ã‚¯ãƒªãƒ—ト '%1$s' èªè¾¼ã¿ä¸: %3$d 行目㮠%2$s" -#~ msgid "while reading linker script '%s': %s at line %d" -#~ msgstr "リンカースクリプト '%1$s' èªè¾¼ã¿ä¸: %3$d 行目㮠%2$s" - #, fuzzy #~ msgid "" #~ "symbol '%s' is declared both local and global for unnamed version '%s'" @@ -1,15 +1,15 @@ # Polish translation for elfutils. -# Copyright © 2003-2016 the elfutils authors. +# Copyright © 2003-2021 the elfutils authors. # This file is distributed under the same license as the elfutils package. # Jakub Bogusz <qboosh@pld-linux.org>, 2003-2007. -# Piotr DrÄ…g <piotrdrag@gmail.com>, 2010-2016. +# Piotr DrÄ…g <piotrdrag@gmail.com>, 2010-2021. # msgid "" msgstr "" "Project-Id-Version: elfutils\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-02-05 21:10+0100\n" -"PO-Revision-Date: 2016-12-29 17:48+0100\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\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" "Language: pl\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:3453 -#: src/readelf.c:11501 src/unstrip.c:312 src/unstrip.c:2398 src/unstrip.c:2603 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "pamięć wyczerpana" @@ -112,6 +107,21 @@ msgstr "brak dostÄ™pnej obsÅ‚ugi zaplecza" msgid "unknown error" msgstr "nieznany bÅ‚Ä…d" +#: libcpu/i386_lex.l:122 +#, c-format +msgid "invalid character '%c' at line %d; ignored" +msgstr "nieprawidÅ‚owy znak „%c†w %d. wierszu; zignorowano" + +#: libcpu/i386_lex.l:123 +#, c-format +msgid "invalid character '\\%o' at line %d; ignored" +msgstr "nieprawidÅ‚owy znak „\\%o†w %d. wierszu; zignorowano" + +#: libcpu/i386_parse.y:554 +#, c-format +msgid "while reading i386 CPU description: %s at line %d" +msgstr "podczas odczytywania opisu procesora i386: %s w %d. wierszu" + #: libdw/dwarf_error.c:59 msgid "invalid access" msgstr "nieprawidÅ‚owy dostÄ™p" @@ -173,19 +183,16 @@ msgid "no string data" msgstr "brak danych w postaci ciÄ…gu" #: libdw/dwarf_error.c:75 -#, fuzzy msgid ".debug_str section missing" -msgstr "brak sekcji .debug_ranges" +msgstr "brak sekcji .debug_str" #: libdw/dwarf_error.c:76 -#, fuzzy msgid ".debug_line_str section missing" -msgstr "brak sekcji .debug_line" +msgstr "brak sekcji .debug_line_str" #: libdw/dwarf_error.c:77 -#, fuzzy msgid ".debug_str_offsets section missing" -msgstr "brak sekcji .debug_ranges" +msgstr "brak sekcji .debug_str_offsets" #: libdw/dwarf_error.c:78 msgid "no address value" @@ -228,19 +235,16 @@ msgid "address out of range" msgstr "adres jest spoza zakresu" #: libdw/dwarf_error.c:88 -#, fuzzy msgid ".debug_loc section missing" -msgstr "brak sekcji .debug_line" +msgstr "brak sekcji .debug_loc" #: libdw/dwarf_error.c:89 -#, fuzzy msgid ".debug_loclists section missing" -msgstr "brak sekcji .debug_line" +msgstr "brak sekcji .debug_loclists" #: libdw/dwarf_error.c:90 -#, fuzzy msgid "not a location list value" -msgstr "brak wartoÅ›ci listy poÅ‚ożeÅ„" +msgstr "nie jest wartoÅ›ciÄ… listy poÅ‚ożeÅ„" #: libdw/dwarf_error.c:91 msgid "no block data" @@ -271,9 +275,8 @@ msgid ".debug_ranges section missing" msgstr "brak sekcji .debug_ranges" #: libdw/dwarf_error.c:98 -#, fuzzy msgid ".debug_rnglists section missing" -msgstr "brak sekcji .debug_ranges" +msgstr "brak sekcji .debug_rnglists" #: libdw/dwarf_error.c:99 msgid "invalid CFI section" @@ -292,16 +295,14 @@ msgid "not a CU (unit) DIE" msgstr "nie jest CU (jednostkÄ…) DIE" #: libdw/dwarf_error.c:103 -#, fuzzy msgid "unknown language code" -msgstr " nieznana instrukcja" +msgstr "nieznany kod jÄ™zyka" #: libdw/dwarf_error.c:104 -#, fuzzy msgid ".debug_addr section missing" -msgstr "brak sekcji .debug_ranges" +msgstr "brak sekcji .debug_addr" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2544 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 msgid "Input selection options:" msgstr "Opcje wyboru wejÅ›cia:" @@ -311,7 +312,7 @@ msgstr "Wyszukuje adresy w PLIKU" #: libdwfl/argp-std.c:50 msgid "Find addresses from signatures found in COREFILE" -msgstr "Wyszukuje adresy z podpisów odnalezionych w PLIKU_CORE" +msgstr "Wyszukuje adresy z podpisów odnalezionych w PLIKU-CORE" #: libdwfl/argp-std.c:52 msgid "Find addresses in files mapped into process PID" @@ -396,9 +397,8 @@ msgid "LZMA decompression failed" msgstr "dekompresja LZMA siÄ™ nie powiodÅ‚a" #: libdwfl/libdwflP.h:61 -#, fuzzy msgid "zstd decompression failed" -msgstr "dekompresja gzip siÄ™ nie powiodÅ‚a" +msgstr "dekompresja zstd siÄ™ nie powiodÅ‚a" #: libdwfl/libdwflP.h:62 msgid "no support library found for machine" @@ -528,8 +528,8 @@ msgstr "Nie jest plikiem ELF ET_CORE" msgid "No backend" msgstr "Brak zaplecza" -#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77 -#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130 +#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 +#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -619,13 +619,13 @@ msgstr "nieprawidÅ‚owa obsÅ‚uga „Elfâ€" #: libelf/elf_error.c:79 msgid "invalid size of source operand" -msgstr "nieprawidÅ‚owy rozmiar operanda źródÅ‚owego" +msgstr "nieprawidÅ‚owy rozmiar operandu źródÅ‚owego" #: libelf/elf_error.c:83 msgid "invalid size of destination operand" -msgstr "nieprawidÅ‚owy rozmiar operanda docelowego" +msgstr "nieprawidÅ‚owy rozmiar operandu docelowego" -#: libelf/elf_error.c:87 src/readelf.c:6209 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "nieprawidÅ‚owe kodowanie" @@ -635,9 +635,8 @@ msgid "invalid file descriptor" msgstr "nieprawidÅ‚owy deskryptor pliku" #: libelf/elf_error.c:99 -#, fuzzy msgid "invalid ELF file data" -msgstr "nieprawidÅ‚owy plik ELF" +msgstr "nieprawidÅ‚owe dane pliku ELF" #: libelf/elf_error.c:103 msgid "invalid operation" @@ -711,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:10012 src/readelf.c:10612 -#: src/readelf.c:10713 src/readelf.c:10895 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "nieprawidÅ‚owe dane" @@ -841,7 +840,7 @@ msgstr "" 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:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Różne:" @@ -1129,29 +1128,29 @@ msgid "cannot read %s: %s" msgstr "nie można odczytać %s: %s" #: src/ar.c:1483 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_date" -msgstr "nie można dekompresować danych" +msgstr "nie można przedstawić ar_date" #: src/ar.c:1489 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_uid" -msgstr "nie można dekompresować danych" +msgstr "nie można przedstawić ar_uid" #: src/ar.c:1495 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_gid" -msgstr "nie można dekompresować danych" +msgstr "nie można przedstawić ar_gid" #: src/ar.c:1501 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_mode" -msgstr "nie można uzyskać nazwy sekcji" +msgstr "nie można przedstawić ar_mode" #: src/ar.c:1507 -#, fuzzy, c-format +#, c-format msgid "cannot represent ar_size" -msgstr "nie można otworzyć %s" +msgstr "nie można przedstawić ar_size" #: src/arlib-argp.c:32 msgid "Use zero for uid, gid, and date in archive members." @@ -1177,6 +1176,266 @@ 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:91 +msgid "opening" +msgstr "otwieranie" + +#: src/elfclassify.c:98 +msgid "reading" +msgstr "odczytywanie" + +#: src/elfclassify.c:244 +msgid "ELF header" +msgstr "nagłówek ELF" + +#: src/elfclassify.c:255 +msgid "program headers" +msgstr "nagłówki programu" + +#: src/elfclassify.c:264 +msgid "program header" +msgstr "nagłówek programu" + +#: src/elfclassify.c:284 +msgid "section headers" +msgstr "nagłówki sekcji" + +#: src/elfclassify.c:295 +msgid "section header string table index" +msgstr "sekcja nagłówek ciÄ…g tabela indeks" + +#: src/elfclassify.c:309 +msgid "could not obtain section header" +msgstr "nie można uzyskać nagłówka sekcji" + +#: src/elfclassify.c:315 +msgid "could not obtain section name" +msgstr "nie można uzyskać nazwy sekcji" + +#: src/elfclassify.c:828 +msgid "writing to standard output" +msgstr "zapisywanie do standardowego wyjÅ›cia" + +#: src/elfclassify.c:855 +msgid "reading from standard input" +msgstr "odczytywanie ze standardowego wejÅ›cia" + +#: src/elfclassify.c:876 +msgid "Classification options" +msgstr "Opcje klasyfikacji" + +#: 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: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:884 +msgid "File is an ELF archive or static library" +msgstr "Plik jest archiwum lub bibliotekÄ… statycznÄ… ELF" + +#: src/elfclassify.c:887 +msgid "File is an ELF core dump file" +msgstr "Plik jest plikiem zrzutu core ELF" + +#: src/elfclassify.c:890 +msgid "" +"File is an ELF file with symbol table or .debug_* sections and can be " +"stripped further" +msgstr "" +"Plik jest plikiem ELF z tabelÄ… symboli lub sekcjami .debug_* i może być " +"dalej okrojony" + +#: 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: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: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: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:906 +msgid "File is a linux kernel module" +msgstr "Plik jest moduÅ‚em jÄ…dra Linux" + +#: 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: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:940 +msgid "Input flags" +msgstr "Flagi wejÅ›cia" + +#: 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: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:947 +msgid "" +"Also read file names to process from standard input, separated by ASCII NUL " +"bytes" +msgstr "" +"Odczytuje także nazwy plików do przetworzenia ze standardowego wejÅ›cia, " +"rozdzielone bajtami NUL ASCII" + +#: 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: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:955 +msgid "Output flags" +msgstr "Flagi wyjÅ›cia" + +#: 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:959 +msgid "Output names of files, separated by ASCII NUL" +msgstr "WyÅ›wietla nazwy plików, rozdzielone znakami NUL ASCII" + +#: src/elfclassify.c:961 +msgid "Do not output file names" +msgstr "Bez wyÅ›wietlania nazw plików" + +#: 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: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:967 +msgid "Additional flags" +msgstr "Dodatkowe flagi" + +#: 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: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:979 src/elfcompress.c:1334 src/elflint.c:77 +#: src/readelf.c:158 +msgid "FILE..." +msgstr "PLIK…" + +#: src/elfclassify.c:980 +msgid "" +"Determine the type of an ELF file.\n" +"\n" +"All of the classification options must apply at the same time to a " +"particular file. Classification options can be negated using a \"--not-\" " +"prefix.\n" +"\n" +"Since modern ELF does not clearly distinguish between programs and dynamic " +"shared objects, you should normally use either --executable or --shared to " +"identify the primary purpose of a file. Only one of the --shared and --" +"executable checks can pass for a file.\n" +"\n" +"If you want to know whether an ELF object might a program or a shared " +"library (but could be both), then use --program or --library. Some ELF files " +"will classify as both a program and a library.\n" +"\n" +"If you just want to know whether an ELF file is loadable (as program or " +"library) use --loadable. Note that files that only contain (separate) debug " +"information (--debug-only) are never --loadable (even though they might " +"contain program headers). Linux kernel modules are also not --loadable (in " +"the normal sense).\n" +"\n" +"Without any of the --print options, the program exits with status 0 if the " +"requested checks pass for all input files, with 1 if a check fails for any " +"file, and 2 if there is an environmental issue (such as a file read error or " +"a memory allocation error).\n" +"\n" +"When printing file names, the program exits with status 0 even if no file " +"names are printed, and exits with status 2 if there is an environmental " +"issue.\n" +"\n" +"On usage error (e.g. a bad option was given), the program exits with a " +"status code larger than 2.\n" +"\n" +"The --quiet or -q option suppresses some error warning output, but doesn't " +"change the exit status." +msgstr "" +"Ustala typ pliku ELF.\n" +"\n" +"Wszystkie opcje klasyfikacji muszÄ… być zastosowane w tym samym czasie do " +"konkretnego pliku. Opcje klasyfikacji mogÄ… zostać zaprzeczone za pomocÄ… " +"przedrostka „--not-â€.\n" +"\n" +"Ponieważ nowoczesny format ELF nie rozróżnia jasno miÄ™dzy programami " +"a dynamicznymi obiektami współdzielonymi, należy zwykle użyć --executable " +"lub --shared do identyfikacji głównego zastosowania pliku. Jeden plik może " +"pasować tylko do jednego z testów --shared lub --executable.\n" +"\n" +"Aby poznać, czy obiekt ELF może być programem lub bibliotekÄ… współdzielonÄ… " +"(ale może być obydwoma), należy użyć opcji --program lub --library. Niektóre " +"pliki ELF bÄ™dÄ… klasyfikowane jako program oraz biblioteka jednoczeÅ›nie.\n" +"\n" +"Aby poznać tylko, czy plik ELF jest wczytywalny (jako program lub " +"biblioteka), należy użyć opcji --loadable. ProszÄ™ zauważyć, że pliki " +"zawierajÄ…ce tylko (oddzielne) informacje debugowania (--debug-only) nigdy " +"nie sÄ… --loadable (nawet jeÅ›li mogÄ… zawierać nagłówki programu). ModuÅ‚y " +"jÄ…dra Linux także nie sÄ… --loadable (w zwyczajowym sensie).\n" +"\n" +"Bez podania żadnej z opcji --print program koÅ„czy dziaÅ‚anie ze stanem 0, " +"jeÅ›li żądane testy zgadzajÄ… siÄ™ dla wszystkich plików wejÅ›ciowych, ze stanem " +"1, jeÅ›li test siÄ™ nie powiedzie dla któregoÅ› z plików, a ze stanem 2, jeÅ›li " +"jest problem Å›rodowiskowy (taki jak bÅ‚Ä…d odczytu pliku lub bÅ‚Ä…d przydziaÅ‚u " +"pamiÄ™ci).\n" +"\n" +"Podczas wyÅ›wietlania nazw plików program koÅ„czy dziaÅ‚anie ze stanem 0, nawet " +"jeÅ›li żadne nazwy plików nie zostaÅ‚y wyÅ›wietlone, a ze stanem 2, jeÅ›li jest " +"problem Å›rodowiskowy.\n" +"\n" +"Przy bÅ‚Ä™dnym użyciu (np. podaniu bÅ‚Ä™dnej opcji) program koÅ„czy dziaÅ‚anie " +"z kodem stanu wyższym niż 2.\n" +"\n" +"Opcje --quiet i -q zmniejszajÄ… wyjÅ›cie bÅ‚Ä™dów i ostrzeżeÅ„, ale nie zmieniajÄ… " +"stanów zakoÅ„czenia." + #: src/elfcmp.c:60 msgid "Control options:" msgstr "Opcje sterujÄ…ce:" @@ -1250,14 +1509,14 @@ msgid "%s %s diff: program header count" msgstr "%s %s różniÄ… siÄ™: licznik nagłówka programu" #: src/elfcmp.c:241 src/elfcmp.c:244 -#, fuzzy, c-format +#, c-format msgid "cannot get hdrstrndx of '%s': %s" -msgstr "nie można uzyskać nagłówka ELF „%sâ€: %s" +msgstr "nie można uzyskać hdrstrndx „%sâ€: %s" #: src/elfcmp.c:249 -#, fuzzy, c-format +#, c-format msgid "%s %s diff: shdr string index" -msgstr "%s %s różniÄ… siÄ™: licznik sekcji" +msgstr "%s %s różniÄ… siÄ™: indeks ciÄ…gu shdr" #: src/elfcmp.c:307 #, c-format @@ -1369,14 +1628,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/unstrip.c:2194 src/unstrip.c:2223 +#: 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:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, 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" @@ -1386,7 +1645,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" @@ -1401,37 +1660,37 @@ 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:115 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "OpcjÄ™ -o podano dwukrotnie" -#: src/elfcompress.c:122 +#: src/elfcompress.c:124 #, c-format msgid "-t option specified twice" msgstr "OpcjÄ™ -t podano dwukrotnie" -#: src/elfcompress.c:131 +#: src/elfcompress.c:133 #, c-format msgid "unknown compression type '%s'" msgstr "nieznany typ kompresji „%sâ€" #. We need at least one input file. -#: src/elfcompress.c:143 src/elfcompress.c:1347 +#: src/elfcompress.c:145 src/elfcompress.c:1345 #, c-format msgid "No input file given" msgstr "Nie podano pliku wejÅ›ciowego" -#: src/elfcompress.c:149 src/elfcompress.c:1352 +#: src/elfcompress.c:151 src/elfcompress.c:1350 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "Tylko jeden plik wejÅ›ciowy jest dozwolony z „-oâ€" -#: src/elfcompress.c:1309 +#: src/elfcompress.c:1307 msgid "Place (de)compressed output into FILE" msgstr "Umieszcza zdekompresowane wyjÅ›cie w PLIKU" -#: src/elfcompress.c:1312 +#: src/elfcompress.c:1310 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" @@ -1441,7 +1700,7 @@ msgstr "" "„zlib†(kompresja zlib ELF, domyÅ›lna, „zlib-gabi†to alias) lub „zlib-" "gnu†(kompresja .zdebug w stylu GNU, „gnu†to alias)" -#: src/elfcompress.c:1315 +#: src/elfcompress.c:1313 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" @@ -1449,31 +1708,28 @@ msgstr "" "Nazwa SEKCJI do (de)kompresowania, SEKCJA jest rozszerzonym wzorem " "(domyÅ›lnie „.?(z)debug*â€)" -#: src/elfcompress.c:1318 +#: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" msgstr "WyÅ›wietla komunikat dla każdej (de)kompresowanej sekcji" -#: src/elfcompress.c:1321 -#, fuzzy +#: src/elfcompress.c:1319 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" -msgstr "Wymusza kompresjÄ™ sekcji nawet, jeÅ›li spowodowaÅ‚oby to jej zwiÄ™kszenie" +msgstr "" +"Wymusza kompresjÄ™ sekcji, nawet jeÅ›li spowodowaÅ‚oby to jej zwiÄ™kszenie lub " +"zaktualizowanie/przepisanie pliku, nawet jeÅ›li żadna sekcja nie zostaÅ‚aby " +"(zde)kompresowana" -#: src/elfcompress.c:1324 src/strip.c:93 +#: src/elfcompress.c:1322 src/strip.c:93 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "Åagodzi kilka reguÅ‚, aby obsÅ‚użyć lekko uszkodzone pliki ELF" -#: src/elfcompress.c:1327 +#: src/elfcompress.c:1325 msgid "Be silent when a section cannot be compressed" msgstr "Bez zgÅ‚aszania, kiedy nie można zdekompresować sekcji" -#. Strings for arguments in help texts. -#: src/elfcompress.c:1336 src/elflint.c:77 src/readelf.c:158 -msgid "FILE..." -msgstr "PLIK…" - -#: src/elfcompress.c:1337 +#: src/elfcompress.c:1335 msgid "Compress or decompress sections in an ELF file." msgstr "Kompresuje lub dekompresuje sekcje w pliku ELF." @@ -1504,14 +1760,14 @@ msgstr "" "Szczegółowe sprawdzanie zgodnoÅ›ci plików ELF ze specyfikacjÄ… gABI/psABI." #: src/elflint.c:154 src/readelf.c:368 -#, fuzzy, c-format +#, c-format msgid "cannot open input file '%s'" -msgstr "nie można otworzyć pliku wejÅ›ciowego" +msgstr "nie można otworzyć pliku wejÅ›ciowego „%sâ€" #: src/elflint.c:161 -#, fuzzy, c-format +#, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" -msgstr "nie można utworzyć deskryptora ELF: %s\n" +msgstr "nie można utworzyć deskryptora ELF dla „%sâ€: %s\n" #: src/elflint.c:180 #, c-format @@ -1558,7 +1814,7 @@ msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "nieobsÅ‚ugiwane ABI systemu operacyjnego e_ident[%d] == „%sâ€\n" #: src/elflint.c:380 -#, fuzzy, c-format +#, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "nieobsÅ‚ugiwana wersja ABI e_ident[%d] == %d\n" @@ -1621,7 +1877,7 @@ msgstr "nieprawidÅ‚owy indeks nagłówka sekcji\n" #: src/elflint.c:473 #, c-format msgid "Can only check %u headers, shnum was %u\n" -msgstr "" +msgstr "Można sprawdzić tylko nagłówki %u, shnum wynosiÅ‚o %u\n" #: src/elflint.c:487 #, c-format @@ -1631,7 +1887,7 @@ msgstr "nieprawidÅ‚owa liczba wpisów tabeli nagłówka programu\n" #: src/elflint.c:504 #, c-format msgid "Can only check %u headers, phnum was %u\n" -msgstr "" +msgstr "Można sprawdzić tylko nagłówki %u, phnum wynosiÅ‚o %u\n" #: src/elflint.c:509 #, c-format @@ -1680,7 +1936,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:3444 src/elflint.c:4456 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "sekcja [%2d] „%sâ€: nie można uzyskać danych sekcji\n" @@ -1709,11 +1965,13 @@ msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "sekcja [%2u] „%sâ€: rozmiar wpisu nie zgadza siÄ™ z ElfXX_Sym\n" #: src/elflint.c:662 -#, fuzzy, c-format +#, c-format msgid "" "section [%2u] '%s': number of local entries in 'st_info' larger than table " "size\n" -msgstr "sekcja [%2d] „%sâ€: brak okreÅ›lonych wpisów notatek dla typu pliku\n" +msgstr "" +"sekcja [%2u] „%sâ€: liczba lokalnych wpisów w „st_info†jest wiÄ™ksza niż " +"rozmiar tabeli\n" #: src/elflint.c:671 #, c-format @@ -1742,146 +2000,149 @@ msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieprawidÅ‚owa wartość nazwy\n" #: src/elflint.c:728 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): too large section index but no extended " "section index section\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: za duży indeks sekcji, ale nie ma sekcji " +"sekcja [%2d] „%sâ€: symbol %zu (%s): za duży indeks sekcji, ale nie ma sekcji " "rozszerzonych indeksów sekcji\n" #: src/elflint.c:734 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): XINDEX used for index which would fit " "in st_shndx (%<PRIu32>)\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: XINDEX użyty dla indeksu, który zmieÅ›ciÅ‚by " -"siÄ™ w st_shndx (%<PRIu32>)\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s): XINDEX użyty dla indeksu, który " +"zmieÅ›ciÅ‚by siÄ™ w st_shndx (%<PRIu32>)\n" #. || sym->st_shndx > SHN_HIRESERVE always false #: src/elflint.c:746 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): invalid section index\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieprawidÅ‚owy indeks sekcji\n" +msgstr "sekcja [%2d] „%sâ€: symbol %zu (%s): nieprawidÅ‚owy indeks sekcji\n" #: src/elflint.c:754 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown type\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieznany typ\n" +msgstr "sekcja [%2d] „%sâ€: symbol %zu (%s): nieznany typ\n" #: src/elflint.c:760 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown symbol binding\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieznane dowiÄ…zanie symbolu\n" +msgstr "sekcja [%2d] „%sâ€: symbol %zu (%s): nieznane dowiÄ…zanie symbolu\n" #: src/elflint.c:765 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): unique symbol not of object type\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: unikalny symbol nie jest typem obiektu\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s): unikalny symbol nie jest typem obiektu\n" #: src/elflint.c:773 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): COMMON only allowed in relocatable " "files\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: COMMON jest dozwolone tylko w plikach " +"sekcja [%2d] „%sâ€: symbol %zu (%s): COMMON jest dozwolone tylko w plikach " "relokowalnych\n" #: src/elflint.c:777 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local COMMON symbols are nonsense\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: lokalne symbole COMMON to nonsens\n" +msgstr "" +"sekcja [%2d] „%sâ€: symbol %zu (%s): lokalne symbole COMMON to nonsens\n" #: src/elflint.c:781 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): function in COMMON section is nonsense\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: funkcja w sekcji COMMON to nonsens\n" +msgstr "" +"sekcja [%2d] „%sâ€: symbol %zu (%s): funkcja w sekcji COMMON to nonsens\n" #: src/elflint.c:832 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): st_value out of bounds\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: st_value spoza zakresu\n" +msgstr "sekcja [%2d] „%sâ€: symbol %zu (%s): st_value spoza zakresu\n" #: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s) does not fit completely in referenced " "section [%2d] '%s'\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu nie mieÅ›ci siÄ™ w caÅ‚oÅ›ci we wskazywanej sekcji " -"[%2d] „%sâ€\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s) nie mieÅ›ci siÄ™ w caÅ‚oÅ›ci we wskazywanej " +"sekcji [%2d] „%sâ€\n" #: src/elflint.c:847 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): referenced section [%2d] '%s' does not " "have SHF_TLS flag set\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: wskazywana sekcja [%2d] „%s†nie ma " +"sekcja [%2d] „%sâ€: symbol %zu (%s): wskazywana sekcja [%2d] „%s†nie ma " "ustawionej flagi SHF_TLS\n" #: src/elflint.c:857 src/elflint.c:905 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value out of bounds of referenced " "section [%2d] '%s'\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: st_value spoza zakresu wskazywanej sekcji " -"[%2d] „%sâ€\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s): st_value spoza zakresu wskazywanej " +"sekcji [%2d] „%sâ€\n" #: src/elflint.c:884 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but no TLS program header " "entry\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: symbol TLS, ale brak wpisu TLS nagłówka " +"sekcja [%2d] „%sâ€: symbol %zu (%s): symbol TLS, ale brak wpisu TLS nagłówka " "programu\n" #: src/elflint.c:890 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): TLS symbol but couldn't get TLS program " "header entry\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: symbol TLS, ale nie można uzyskać wpisu TLS " -"nagłówka programu\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s): symbol TLS, ale nie można uzyskać wpisu " +"TLS nagłówka programu\n" #: src/elflint.c:898 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): st_value short of referenced section " "[%2d] '%s'\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: st_value pomija wskazywanÄ… sekcjÄ™ [%2d] „%sâ€\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s): st_value pomija wskazywanÄ… sekcjÄ™ [%2d] " +"„%sâ€\n" #: src/elflint.c:925 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): local symbol outside range described in " "sh_info\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: lokalny symbol spoza zakresu okreÅ›lonego " +"sekcja [%2d] „%sâ€: symbol %zu (%s): lokalny symbol spoza zakresu okreÅ›lonego " "w sh_info\n" #: src/elflint.c:932 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): non-local symbol outside range " "described in sh_info\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: nielokalny symbol spoza zakresu okreÅ›lonego " -"w sh_info\n" +"sekcja [%2d] „%sâ€: symbol %zu (%s): nielokalny symbol spoza zakresu " +"okreÅ›lonego w sh_info\n" #: src/elflint.c:939 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): non-local section symbol\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: nielokalny symbol sekcji\n" +msgstr "sekcja [%2d] „%sâ€: symbol %zu (%s): nielokalny symbol sekcji\n" #: src/elflint.c:989 #, c-format @@ -1950,18 +2211,19 @@ msgstr "" "rozmiaru segmentu dynamicznego %<PRIu64>\n" #: src/elflint.c:1063 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': symbol %zu (%s): symbol in dynamic symbol table with non-" "default visibility\n" msgstr "" -"sekcja [%2d] „%sâ€: symbol %zu: symbol w dynamicznej tabeli symboli " +"sekcja [%2d] „%sâ€: symbol %zu (%s): symbol w dynamicznej tabeli symboli " "z niedomyÅ›lnÄ… widocznoÅ›ciÄ…\n" #: src/elflint.c:1067 -#, fuzzy, c-format +#, c-format msgid "section [%2d] '%s': symbol %zu (%s): unknown bit set in st_other\n" -msgstr "sekcja [%2d] „%sâ€: symbol %zu: ustawiono nieznany bit w st_other\n" +msgstr "" +"sekcja [%2d] „%sâ€: symbol %zu (%s): ustawiono nieznany bit w st_other\n" #: src/elflint.c:1105 #, c-format @@ -2014,7 +2276,7 @@ msgstr "sekcja [%2d] „%sâ€: nieprawidÅ‚owy typ sekcji docelowej\n" #: src/elflint.c:1278 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" -msgstr "sekcja [%2d] „%sâ€: sh_info powinno wynosić zero\n" +msgstr "sekcja [%2d] „%sâ€: sh_info musi wynosić zero\n" #: src/elflint.c:1286 #, c-format @@ -2271,7 +2533,7 @@ msgstr "" #: src/elflint.c:1998 #, c-format msgid "symbol 0 should have zero extended section index\n" -msgstr "symbol 0 powinien mieć zerowy rozszerzony indeks sekcji\n" +msgstr "symbol 0 musi mieć zerowy rozszerzony indeks sekcji\n" #: src/elflint.c:2010 #, c-format @@ -2802,35 +3064,35 @@ msgstr "sekcja [%2d] „%sâ€: brak definicji BASE\n" msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "sekcja [%2d] „%sâ€: nieznana wersja rodzica „%sâ€\n" -#: src/elflint.c:3436 +#: src/elflint.c:3448 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "sekcja [%2d] „%sâ€: pusta sekcja atrybutów obiektu\n" -#: src/elflint.c:3457 +#: src/elflint.c:3464 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "sekcja [%2d] „%sâ€: nierozpoznany format atrybutu\n" -#: src/elflint.c:3473 +#: src/elflint.c:3475 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "sekcja [%2d] „%sâ€: offset %zu: pole o zerowej dÅ‚ugoÅ›ci w sekcji atrybutów\n" -#: src/elflint.c:3482 +#: src/elflint.c:3484 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "sekcja [%2d] „%sâ€: offset %zu: nieprawidÅ‚owa dÅ‚ugość w sekcji atrybutów\n" -#: src/elflint.c:3494 +#: src/elflint.c:3496 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "sekcja [%2d] „%sâ€: offset %zu: niezakoÅ„czony ciÄ…g nazwy producenta\n" -#: src/elflint.c:3511 +#: src/elflint.c:3513 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2838,19 +3100,19 @@ msgstr "" "sekcja [%2d] „%sâ€: offset %zu: niekoÅ„czÄ…ce siÄ™ ULEB128 w znaczniku podsekcji " "atrybutów\n" -#: src/elflint.c:3520 +#: src/elflint.c:3522 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "sekcja [%2d] „%sâ€: offset %zu: skrócona sekcja atrybutów\n" -#: src/elflint.c:3529 +#: src/elflint.c:3531 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" "sekcja [%2d] „%sâ€: offset %zu: zerowej dÅ‚ugoÅ›ci pole w podsekcji atrybutów\n" -#: src/elflint.c:3544 +#: src/elflint.c:3546 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2858,7 +3120,7 @@ msgstr "" "sekcja [%2d] „%sâ€: offset %zu: nieprawidÅ‚owa dÅ‚ugość w podsekcji atrybutów\n" #. Tag_File -#: src/elflint.c:3555 +#: src/elflint.c:3557 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2866,23 +3128,23 @@ msgstr "" "sekcja [%2d] „%sâ€: offset %zu: podsekcja atrybutów ma nieoczekiwany znacznik " "%u\n" -#: src/elflint.c:3573 +#: src/elflint.c:3575 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "sekcja [%2d] „%sâ€: offset %zu: niekoÅ„czÄ…ce siÄ™ ULEB128 w znaczniku atrybutu\n" -#: src/elflint.c:3584 +#: src/elflint.c:3586 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "sekcja [%2d] „%sâ€: offset %zu: niezakoÅ„czony ciÄ…g w atrybucie\n" -#: src/elflint.c:3597 +#: src/elflint.c:3599 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "sekcja [%2d] „%sâ€: offset %zu: nierozpoznany znacznik atrybutu %u\n" -#: src/elflint.c:3601 +#: src/elflint.c:3603 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" @@ -2890,12 +3152,12 @@ msgstr "" "sekcja [%2d] „%sâ€: offset %zu: atrybut %s ma nierozpoznanÄ… wartość " "%<PRIu64>\n" -#: src/elflint.c:3611 +#: src/elflint.c:3613 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "sekcja [%2d] „%sâ€: offset %zu: producent „%s†jest nieznany\n" -#: src/elflint.c:3617 +#: src/elflint.c:3619 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2903,47 +3165,47 @@ msgstr "" "sekcja [%2d] „%sâ€: offset %zu: dodatkowe bajty po ostatniej sekcji " "atrybutów\n" -#: src/elflint.c:3714 +#: src/elflint.c:3716 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "nie można uzyskać nagłówka sekcji zerowej\n" -#: src/elflint.c:3718 +#: src/elflint.c:3720 #, c-format msgid "zeroth section has nonzero name\n" msgstr "sekcja zerowa ma niezerowÄ… nazwÄ™\n" -#: src/elflint.c:3720 +#: src/elflint.c:3722 #, c-format msgid "zeroth section has nonzero type\n" msgstr "sekcja zerowa ma niezerowy typ\n" -#: src/elflint.c:3722 +#: src/elflint.c:3724 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "sekcja zerowa ma niezerowe flagi\n" -#: src/elflint.c:3724 +#: src/elflint.c:3726 #, c-format msgid "zeroth section has nonzero address\n" msgstr "sekcja zerowa ma niezerowy adres\n" -#: src/elflint.c:3726 +#: src/elflint.c:3728 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "sekcja zerowa ma niezerowy offset\n" -#: src/elflint.c:3728 +#: src/elflint.c:3730 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "sekcja zerowa ma niezerowÄ… wartość wyrównania\n" -#: src/elflint.c:3730 +#: src/elflint.c:3732 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "sekcja zerowa ma niezerowÄ… wartość rozmiaru wpisu\n" -#: src/elflint.c:3733 +#: src/elflint.c:3735 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2952,7 +3214,7 @@ msgstr "" "sekcja zerowa ma niezerowÄ… wartość rozmiaru, a nagłówek ELF ma niezerowÄ… " "wartość shnum\n" -#: src/elflint.c:3737 +#: src/elflint.c:3739 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2961,7 +3223,7 @@ msgstr "" "sekcja zerowa ma niezerowÄ… wartość dowiÄ…zaÅ„, a nagłówek ELF nie wskazuje " "przepeÅ‚nienia w shstrndx\n" -#: src/elflint.c:3741 +#: src/elflint.c:3743 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2970,46 +3232,46 @@ msgstr "" "sekcja zerowa ma niezerowÄ… wartość dowiÄ…zaÅ„, a nagłówek ELF nie wskazuje " "przepeÅ‚nienia w phnum\n" -#: src/elflint.c:3759 +#: src/elflint.c:3761 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "nie można uzyskać nagłówka sekcji dla sekcji [%2zu] „%sâ€: %s\n" -#: src/elflint.c:3768 +#: src/elflint.c:3770 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "sekcja [%2zu]: nieprawidÅ‚owa nazwa\n" -#: src/elflint.c:3795 +#: src/elflint.c:3797 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "sekcja [%2d] „%s†ma bÅ‚Ä™dny typ: oczekiwano %s, jest %s\n" -#: src/elflint.c:3812 +#: src/elflint.c:3814 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "sekcja [%2zu] „%s†ma bÅ‚Ä™dne flagi: oczekiwano %s, jest %s\n" -#: src/elflint.c:3830 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" "sekcja [%2zu] „%s†ma bÅ‚Ä™dne flagi: oczekiwano %s i być może %s, jest %s\n" -#: src/elflint.c:3847 +#: src/elflint.c:3849 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "sekcja [%2zu] „%s†jest obecna w pliku obiektu\n" -#: src/elflint.c:3853 src/elflint.c:3885 +#: src/elflint.c:3855 src/elflint.c:3887 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" "sekcja [%2zu] „%s†ma flagÄ™ SHF_ALLOC, ale nie ma segmentu wczytywalnego\n" -#: src/elflint.c:3858 src/elflint.c:3890 +#: src/elflint.c:3860 src/elflint.c:3892 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -3017,7 +3279,7 @@ msgid "" msgstr "" "sekcja [%2zu] „%s†nie ma flagi SHF_ALLOC, ale sÄ… segmenty wczytywalne\n" -#: src/elflint.c:3866 +#: src/elflint.c:3868 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -3025,22 +3287,22 @@ msgstr "" "sekcja [%2zu] „%s†jest tabelÄ… indeksów sekcji rozszerzeÅ„ w pliku " "nieobiektowym\n" -#: src/elflint.c:3909 +#: src/elflint.c:3911 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "sekcja [%2zu] „%sâ€: rozmiar nie jest wielokrotnoÅ›ciÄ… rozmiaru wpisu\n" -#: src/elflint.c:3914 +#: src/elflint.c:3916 #, c-format msgid "cannot get section header\n" msgstr "nie można uzyskać nagłówka sekcji\n" -#: src/elflint.c:3924 +#: src/elflint.c:3926 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "sekcja [%2zu] „%s†ma nieobsÅ‚ugiwany typ %d\n" -#: src/elflint.c:3944 +#: src/elflint.c:3946 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" @@ -3048,74 +3310,74 @@ msgstr "" "sekcja [%2zu] „%s†zawiera nieprawidÅ‚owe flagi dla konkretnego procesora " "%#<PRIx64>\n" -#: src/elflint.c:3954 +#: src/elflint.c:3956 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "sekcja [%2zu] „%s†zawiera nieznane flagi %#<PRIx64>\n" -#: src/elflint.c:3962 +#: src/elflint.c:3964 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "sekcja [%2zu] „%sâ€: adres sekcji danych lokalnych dla wÄ…tków nie jest zerem\n" -#: src/elflint.c:3972 +#: src/elflint.c:3974 #, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "sekcja [%2zu] „%sâ€: nie można skompresować przydzielonej sekcji\n" -#: src/elflint.c:3977 +#: src/elflint.c:3979 #, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "sekcja [%2zu] „%sâ€: nie można skompresować sekcji „nobitsâ€\n" -#: src/elflint.c:3983 +#: src/elflint.c:3985 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "sekcja [%2zu] „%sâ€: skompresowana sekcja bez nagłówka kompresji: %s\n" -#: src/elflint.c:3989 +#: src/elflint.c:3991 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "sekcja [%2zu] „%sâ€: nieprawidÅ‚owe odwoÅ‚anie do sekcji w wartoÅ›ci dowiÄ…zania\n" -#: src/elflint.c:3994 +#: src/elflint.c:3996 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "sekcja [%2zu] „%sâ€: nieprawidÅ‚owe odwoÅ‚anie do sekcji w wartoÅ›ci " "informacyjnej\n" -#: src/elflint.c:4001 +#: src/elflint.c:4003 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "sekcja [%2zu] „%sâ€: flaga ciÄ…gów jest ustawiona bez flagi merge\n" -#: src/elflint.c:4006 +#: src/elflint.c:4008 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "sekcja [%2zu] „%sâ€: flaga merge jest ustawiona, ale rozmiar wpisu jest " "zerowy\n" -#: src/elflint.c:4025 +#: src/elflint.c:4027 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "sekcja [%2zu] „%s†ma nieoczekiwany typ %d dla sekcji wykonywalnej\n" -#: src/elflint.c:4034 +#: src/elflint.c:4036 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "sekcja [%2zu] „%s†musi być typu NOBITS w plikach debuginfo\n" -#: src/elflint.c:4041 +#: src/elflint.c:4043 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "sekcja [%2zu] „%s†jest wykonywalne i zapisywalne\n" -#: src/elflint.c:4072 +#: src/elflint.c:4074 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -3124,7 +3386,7 @@ msgstr "" "sekcja [%2zu] „%s†nie jest w caÅ‚oÅ›ci zawarta w segmencie wpisu %d nagłówka " "programu\n" -#: src/elflint.c:4082 +#: src/elflint.c:4084 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3133,7 +3395,7 @@ msgstr "" "sekcja [%2zu] „%s†ma typ NOBITS, a jest odczytywana z pliku w segmencie " "wpisu %d nagłówka programu\n" -#: src/elflint.c:4108 +#: src/elflint.c:4110 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3142,7 +3404,7 @@ msgstr "" "sekcja [%2zu] „%s†ma typ NOBITS, ale jest odczytywana z pliku w segmencie " "wpisu %d nagłówka programu, a zawartość pliku jest niezerowa\n" -#: src/elflint.c:4119 +#: src/elflint.c:4121 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -3151,17 +3413,17 @@ msgstr "" "sekcja [%2zu] „%s†nie ma typu NOBITS, a nie jest odczytywana z pliku " "w segmencie wpisu %d nagłówka programu\n" -#: src/elflint.c:4130 +#: src/elflint.c:4132 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "sekcja [%2zu] „%s†jest wykonywalne w segmencie niewykonywalnym %d\n" -#: src/elflint.c:4140 +#: src/elflint.c:4142 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "sekcja [%2zu] „%s†jest zapisywalne w niezapisywalnym segmencie %d\n" -#: src/elflint.c:4150 +#: src/elflint.c:4152 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -3169,7 +3431,7 @@ msgstr "" "sekcja [%2zu] „%sâ€: ma flagÄ™ alloc, ale sekcja nie jest w żadnym segmencie " "wczytywalnym\n" -#: src/elflint.c:4156 +#: src/elflint.c:4158 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -3178,7 +3440,7 @@ msgstr "" "sekcja [%2zu] „%sâ€: wedÅ‚ug nagłówka ELF to jest tabela ciÄ…gów nagłówków " "sekcji, ale typ nie jest SHT_TYPE\n" -#: src/elflint.c:4164 +#: src/elflint.c:4166 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -3186,17 +3448,17 @@ msgstr "" "sekcja [%2zu] „%sâ€: pliki relokowalne nie mogÄ… mieć tabeli symboli " "dynamicznych\n" -#: src/elflint.c:4215 +#: src/elflint.c:4217 #, c-format msgid "more than one version symbol table present\n" msgstr "obecna jest wiÄ™cej niż jedna tabela symboli wersji\n" -#: src/elflint.c:4238 +#: src/elflint.c:4240 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "jest wpis nagłówka programu INTERP, ale nie ma sekcji .interp\n" -#: src/elflint.c:4249 +#: src/elflint.c:4251 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -3204,14 +3466,14 @@ msgstr "" "wczytywalny segment [%u] jest wykonywalny, ale nie zawiera wykonywalnych " "sekcji\n" -#: src/elflint.c:4255 +#: src/elflint.c:4257 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "wczytywalny segment [%u] jest zapisywalny, ale nie zawiera zapisywalnych " "sekcji\n" -#: src/elflint.c:4266 +#: src/elflint.c:4268 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -3220,23 +3482,23 @@ msgstr "" "brak sekcji .gnu.versym, ale istnieje sekcja .gnu.versym_d lub .gnu." "versym_r\n" -#: src/elflint.c:4279 +#: src/elflint.c:4281 #, c-format msgid "duplicate version index %d\n" msgstr "powtórzony indeks wersji %d\n" -#: src/elflint.c:4293 +#: src/elflint.c:4295 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "sekcja .gnu.versym istnieje bez .gnu.versym_d lub .gnu.versym_r\n" -#: src/elflint.c:4342 +#: src/elflint.c:4344 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" "phdr[%d]: nieznany typ notatki pliku core %<PRIu32> pod offsetem %<PRIu64>\n" -#: src/elflint.c:4346 +#: src/elflint.c:4348 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" @@ -3244,54 +3506,55 @@ msgstr "" "sekcja [%2d]: „%sâ€: nieznany typ notatki pliku core %<PRIu32> pod offsetem " "%zu\n" -#: src/elflint.c:4395 -#, fuzzy, c-format +#: src/elflint.c:4397 +#, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " "offset %zu\n" msgstr "" -"phdr[%d]: nieznany typ notatki pliku obiektu %<PRIu32> pod offsetem %zu\n" +"phdr[%d]: nieznany typ notatki pliku obiektu %<PRIu32> o nazwie wÅ‚aÅ›ciciela " +"„%s†pod offsetem %zu\n" -#: src/elflint.c:4400 -#, fuzzy, c-format +#: src/elflint.c:4402 +#, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " "'%s' at offset %zu\n" msgstr "" -"sekcja [%2d] „%sâ€: nieznany typ notatki pliku obiektu %<PRIu32> pod offsetem " -"%zu\n" +"sekcja [%2d] „%sâ€: nieznany typ notatki pliku obiektu %<PRIu32> o nazwie " +"wÅ‚aÅ›ciciela „%s†pod offsetem %zu\n" -#: src/elflint.c:4419 +#: src/elflint.c:4421 #, 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:4439 +#: src/elflint.c:4441 #, 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:4442 +#: src/elflint.c:4444 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" -msgstr "phdr[%d]: dodatkowe %<PRIu64> bajtów po ostatniej notatce\n" +msgstr "phdr[%d]: dodatkowe %<PRIu64> B po ostatniej notatce\n" -#: src/elflint.c:4463 +#: src/elflint.c:4465 #, 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:4470 +#: src/elflint.c:4472 #, 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:4473 +#: src/elflint.c:4475 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" -msgstr "sekcja [%2d] „%sâ€: dodatkowe %<PRIu64> bajtów po ostatniej notatce\n" +msgstr "sekcja [%2d] „%sâ€: dodatkowe %<PRIu64> B po ostatniej notatce\n" -#: src/elflint.c:4491 +#: src/elflint.c:4493 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3299,135 +3562,135 @@ msgstr "" "tylko pliki wykonywalne, obiekty współdzielone i pliki core mogÄ… mieć " "nagłówki programu\n" -#: src/elflint.c:4506 +#: src/elflint.c:4508 #, 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:4516 +#: src/elflint.c:4518 #, 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:4527 +#: src/elflint.c:4529 #, 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:4535 +#: src/elflint.c:4537 #, 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:4542 +#: src/elflint.c:4544 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "statyczny plik wykonywalny nie może mieć sekcji dynamicznych\n" -#: src/elflint.c:4556 +#: src/elflint.c:4558 #, 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:4559 +#: src/elflint.c:4561 #, 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:4569 +#: src/elflint.c:4571 #, 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:4590 +#: src/elflint.c:4592 #, 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:4601 +#: src/elflint.c:4603 #, 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:4608 +#: src/elflint.c:4610 #, 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:4617 src/elflint.c:4640 +#: src/elflint.c:4619 src/elflint.c:4642 #, 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:4646 +#: src/elflint.c:4648 #, 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:4673 +#: src/elflint.c:4675 #, 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:4676 +#: src/elflint.c:4678 #, 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:4689 +#: src/elflint.c:4691 #, 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:4697 +#: src/elflint.c:4699 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabela wyszukiwania ramki wywoÅ‚ania musi być przydzielona\n" -#: src/elflint.c:4700 +#: src/elflint.c:4702 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sekcja [%2zu] „%sâ€: musi być przydzielona\n" -#: src/elflint.c:4704 +#: src/elflint.c:4706 #, 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:4707 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sekcja [%2zu] „%s†nie może być zapisywalna\n" -#: src/elflint.c:4712 +#: src/elflint.c:4714 #, 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:4715 +#: src/elflint.c:4717 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sekcja [%2zu] „%s†nie może być wykonywalna\n" -#: src/elflint.c:4726 +#: src/elflint.c:4728 #, 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:4733 +#: src/elflint.c:4735 #, 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:4736 +#: src/elflint.c:4738 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3436,7 +3699,7 @@ msgstr "" "wpis nagłówka programu %d: offset w pliku i adres wirtualny nie sÄ… " "wielokrotnoÅ›ciÄ… wyrównania\n" -#: src/elflint.c:4749 +#: src/elflint.c:4751 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3445,106 +3708,106 @@ msgstr "" "plik wykonywalny/DSO z sekcjÄ… .eh_frame_hdr nie ma wpisu nagłówka programu " "PT_GNU_EH_FRAME" -#: src/elflint.c:4783 +#: src/elflint.c:4785 #, c-format msgid "cannot read ELF header: %s\n" msgstr "nie można odczytać nagłówka ELF: %s\n" -#: src/elflint.c:4795 -#, fuzzy, c-format +#: src/elflint.c:4797 +#, c-format msgid "cannot create backend for ELF file\n" -msgstr "nie można utworzyć nowego pliku" +msgstr "nie można utworzyć zaplecza dla pliku ELF\n" -#: src/elflint.c:4816 +#: src/elflint.c:4818 #, 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/-" @@ -3552,7 +3815,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 " @@ -3561,7 +3824,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" @@ -3668,12 +3931,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:2767 #, 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:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: nie rozpoznano formatu pliku" @@ -3707,24 +3970,24 @@ 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 +#: src/nm.c:704 #, c-format 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/nm.c:745 src/nm.c:1238 src/objdump.c:781 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:2711 -#: src/readelf.c:2787 src/readelf.c:2874 src/readelf.c:3472 src/readelf.c:3522 -#: src/readelf.c:3592 src/readelf.c:11328 src/readelf.c:12523 -#: src/readelf.c:12734 src/readelf.c:12803 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: 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:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, 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:770 #, c-format msgid "" "\n" @@ -3738,7 +4001,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3747,28 +4010,53 @@ msgstr "" "%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n" "\n" -#: src/nm.c:1250 +#: src/nm.c:775 +#, fuzzy +#| msgid " Name: " +msgctxt "sysv" +msgid "Name" +msgstr " Nazwa: " + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:777 +msgctxt "sysv" +msgid "Value" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:779 +msgctxt "sysv" +msgid "Size" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:781 +msgctxt "sysv" +msgid "Line" +msgstr "" + +#: src/nm.c:1249 #, 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:1254 #, 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:1334 +#: src/nm.c:1335 #, 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:1570 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: nieprawidÅ‚owe dziaÅ‚anie" -#: src/nm.c:1620 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: brak symboli" @@ -3844,10 +4132,10 @@ msgstr "Zawartość sekcji %s:\n" msgid "cannot disassemble" msgstr "nie można deasemblować" -#: src/objdump.c:760 -#, fuzzy, c-format +#: src/objdump.c:759 +#, c-format msgid "cannot create backend for elf file" -msgstr "nie można utworzyć nowego pliku" +msgstr "nie można utworzyć zaplecza dla pliku ELF" #. Short description of program. #: src/ranlib.c:63 @@ -3890,6 +4178,8 @@ msgid "" "Used with -w to find the skeleton Compile Units in FILE associated with the " "Split Compile units in a .dwo input file" msgstr "" +"Używane z opcjÄ… -w do wyszukiwania szkieletów jednostek kompilacji w PLIKU " +"powiÄ…zanych z jednostkami podzielonej kompilacji w pliku wejÅ›ciowym .dwo" #: src/readelf.c:104 msgid "ELF output selection:" @@ -3920,9 +4210,8 @@ msgid "Display relocations" msgstr "WyÅ›wietla relokacje" #: src/readelf.c:114 -#, fuzzy msgid "Display the section groups" -msgstr "WyÅ›wietla nagłówki sekcji" +msgstr "WyÅ›wietla grupy sekcji" #: src/readelf.c:115 msgid "Display the sections' headers" @@ -3933,9 +4222,8 @@ msgid "Display the symbol table sections" msgstr "WyÅ›wietla sekcje tabeli symboli" #: src/readelf.c:120 -#, fuzzy msgid "Display (only) the dynamic symbol table" -msgstr "WyÅ›wietla tylko symbole zewnÄ™trzne" +msgstr "WyÅ›wietla (tylko) tabelÄ™ symboli dynamicznych" #: src/readelf.c:121 msgid "Display versioning information" @@ -3958,15 +4246,14 @@ msgid "Additional output selection:" msgstr "Dodatkowy wybór wyjÅ›cia:" #: src/readelf.c:130 -#, fuzzy msgid "" "Display DWARF section content. SECTION can be one of abbrev, addr, aranges, " "decodedaranges, frame, gdb_index, info, info+, loc, line, decodedline, " "ranges, pubnames, str, macinfo, macro or exception" msgstr "" -"WyÅ›wietla zawartość sekcji DWARF. SEKCJA może być jednym z abbrev, aranges, " -"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " -"pubnames, str, macinfo, macro lub exception" +"WyÅ›wietla zawartość sekcji DWARF. SEKCJA może być jednym z abbrev, addr, " +"aranges, decodedaranges, frame, gdb_index, info, info+, loc, line, " +"decodedline, ranges, pubnames, str, macinfo, macro lub exception" #: src/readelf.c:134 msgid "Dump the uninterpreted contents of SECTION, by number or name" @@ -4032,7 +4319,7 @@ 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:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "nie można okreÅ›lić liczby sekcji: %s" @@ -4042,11 +4329,11 @@ msgstr "nie można okreÅ›lić liczby sekcji: %s" 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:12754 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:487 src/unstrip.c:608 -#: src/unstrip.c:629 src/unstrip.c:669 src/unstrip.c:885 src/unstrip.c:1216 -#: src/unstrip.c:1343 src/unstrip.c:1367 src/unstrip.c:1423 src/unstrip.c:1487 -#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "nie można uzyskać nagłówka sekcji: %s" @@ -4056,8 +4343,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:6628 src/readelf.c:10600 src/readelf.c:10702 -#: src/readelf.c:10880 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "nie można uzyskać zwartoÅ›ci %s: %s" @@ -4123,9 +4410,9 @@ msgid "cannot determine number of program headers: %s" msgstr "nie można okreÅ›lić liczby nagłówków programu: %s" #: src/readelf.c:993 -#, fuzzy, c-format +#, c-format msgid "cannot read ELF: %s" -msgstr "nie można odczytać %s: %s" +msgstr "nie można odczytać danych ELF: %s" #: src/readelf.c:1054 msgid "NONE (None)" @@ -4209,9 +4496,9 @@ msgid " Machine: %s\n" msgstr " Komputer: %s\n" #: src/readelf.c:1109 -#, fuzzy, c-format +#, c-format msgid " Machine: <unknown>: 0x%x\n" -msgstr " Komputer: %s\n" +msgstr " Komputer: <nieznany>: 0x%x\n" #: src/readelf.c:1112 #, c-format @@ -4310,23 +4597,23 @@ msgstr "" "\n" #: src/readelf.c:1230 src/readelf.c:1440 -#, fuzzy, c-format +#, c-format msgid "cannot get number of sections: %s" -msgstr "nie można okreÅ›lić liczby sekcji: %s" +msgstr "nie można uzyskać liczby sekcji: %s" #: src/readelf.c:1233 -#, fuzzy, c-format +#, c-format msgid "" "There are %zd section headers, starting at offset %#<PRIx64>:\n" "\n" msgstr "" -"Jest %d nagłówków sekcji, rozpoczynajÄ…cych siÄ™ od offsetu %#<PRIx64>:\n" +"Liczba nagłówków sekcji: %zd, rozpoczynajÄ…cych siÄ™ od offsetu %#<PRIx64>:\n" "\n" #: src/readelf.c:1242 -#, fuzzy, c-format +#, 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" +msgstr "nie można uzyskać indeksu tabeli ciÄ…gów nagłówków sekcji: %s" #: src/readelf.c:1245 msgid "Section Headers:" @@ -4400,7 +4687,7 @@ msgstr "" " Mapowanie sekcji do segmentów:\n" " Segment sekcji…" -#: src/readelf.c:1464 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" @@ -4449,18 +4736,18 @@ msgstr "<NIEPRAWIDÅOWY SYMBOL>" msgid "<INVALID SECTION>" msgstr "<NIEPRAWIDÅOWY SEKCJA>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3488 src/readelf.c:12625 -#: src/readelf.c:12632 src/readelf.c:12676 src/readelf.c:12683 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "Nie można dekompresować sekcji" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3493 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, 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:2717 src/readelf.c:2793 -#: src/readelf.c:3097 src/readelf.c:3171 src/readelf.c:5401 +#: 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:5407 #, c-format msgid "invalid sh_link value in section %zu" msgstr "nieprawidÅ‚owa wartość sh_link w sekcji %zu" @@ -4638,20 +4925,20 @@ msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa 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:2590 +#: src/readelf.c:2595 #, c-format msgid "bad dynamic symbol" msgstr "bÅ‚Ä™dny symbol dynamiczny" -#: src/readelf.c:2672 +#: src/readelf.c:2680 msgid "none" msgstr "brak" -#: src/readelf.c:2689 +#: src/readelf.c:2697 msgid "| <unknown>" msgstr "| <nieznany>" -#: src/readelf.c:2720 +#: src/readelf.c:2728 #, c-format msgid "" "\n" @@ -4677,17 +4964,17 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "„%sâ€\n" -#: src/readelf.c:2741 +#: src/readelf.c:2749 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Wersja: %hu Plik: %s Licznik: %hu\n" -#: src/readelf.c:2754 +#: src/readelf.c:2762 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nazwa: %s Flagi: %s Wersja: %hu\n" -#: src/readelf.c:2797 +#: src/readelf.c:2805 #, c-format msgid "" "\n" @@ -4713,19 +5000,19 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "„%sâ€\n" -#: src/readelf.c:2825 +#: src/readelf.c:2833 #, 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:2840 +#: src/readelf.c:2848 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Rodzic %d: %s\n" #. Print the header. -#: src/readelf.c:3101 +#: src/readelf.c:3109 #, c-format msgid "" "\n" @@ -4748,15 +5035,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:3129 +#: src/readelf.c:3137 msgid " 0 *local* " msgstr " 0 *lokalny* " -#: src/readelf.c:3134 +#: src/readelf.c:3142 msgid " 1 *global* " msgstr " 1 *globalny* " -#: src/readelf.c:3176 +#: src/readelf.c:3184 #, c-format msgid "" "\n" @@ -4787,22 +5074,22 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> DowiÄ…zanie do sekcji: [%2u] " "„%sâ€\n" -#: src/readelf.c:3198 +#: src/readelf.c:3206 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " DÅ‚ugość Liczba % caÅ‚oÅ›ci Pokrycie\n" -#: src/readelf.c:3200 +#: src/readelf.c:3208 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3207 +#: src/readelf.c:3215 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3220 +#: src/readelf.c:3228 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4811,47 +5098,47 @@ msgstr "" " Åšrednia liczba testów: udane wyszukania: %f\n" "\t\t\t nieudane wyszukania: %f\n" -#: src/readelf.c:3238 src/readelf.c:3302 src/readelf.c:3368 +#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 #, c-format msgid "cannot get data for section %d: %s" msgstr "nie można uzyskać danych dla sekcji %d: %s" -#: src/readelf.c:3246 +#: src/readelf.c:3254 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "nieprawidÅ‚owe dane w sekcji sysv.hash %d" -#: src/readelf.c:3275 -#, fuzzy, c-format +#: src/readelf.c:3283 +#, c-format msgid "invalid chain in sysv.hash section %d" -msgstr "nieprawidÅ‚owe dane w sekcji sysv.hash %d" +msgstr "nieprawidÅ‚owy Å‚aÅ„cuch w sekcji sysv.hash %d" -#: src/readelf.c:3310 +#: src/readelf.c:3318 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "nieprawidÅ‚owe dane w sekcji sysv.hash64 %d" -#: src/readelf.c:3341 -#, fuzzy, c-format +#: src/readelf.c:3349 +#, c-format msgid "invalid chain in sysv.hash64 section %d" -msgstr "nieprawidÅ‚owe dane w sekcji sysv.hash64 %d" +msgstr "nieprawidÅ‚owy Å‚aÅ„cuch w sekcji sysv.hash64 %d" -#: src/readelf.c:3377 +#: src/readelf.c:3385 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "nieprawidÅ‚owe dane w sekcji gnu.hash %d" -#: src/readelf.c:3444 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n" msgstr "" " PrzesuniÄ™cie symboli: %u\n" -" Rozmiar maski bitowej: %zu bajtów %<PRIuFAST32>%% bitów ustawionych " -"drugie przesuniÄ™cie skrótu: %u\n" +" Rozmiar maski bitowej: %zu B %<PRIuFAST32>%% b ustawionych drugie " +"przesuniÄ™cie skrótu: %u\n" -#: src/readelf.c:3533 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4872,15 +5159,15 @@ msgstr[2] "" "Sekcja listy bibliotek [%2zu] „%s†pod offsetem %#0<PRIx64> zawiera %d " "wpisów:\n" -#: src/readelf.c:3547 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -" Biblioteka Oznaczenie czasu Suma k. Wersja " +" Biblioteka Czas Suma k. Wersja " "Flagi" -#: src/readelf.c:3606 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4888,105 +5175,104 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" "\n" -"Sekcja atrybutów obiektu [%2zu] „%s†%<PRIu64> bajtów pod offsetem " -"%#0<PRIx64>:\n" +"Sekcja atrybutów obiektu [%2zu] „%s†%<PRIu64> B pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:3623 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " WÅ‚aÅ›ciciel Rozmiar\n" -#: src/readelf.c:3647 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3686 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3691 +#: src/readelf.c:3697 #, c-format msgid " File: %11<PRIu32>\n" msgstr " Plik: %11<PRIu32>\n" -#: src/readelf.c:3740 +#: src/readelf.c:3746 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3743 +#: src/readelf.c:3749 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3746 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3756 +#: src/readelf.c:3762 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3759 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3829 -#, fuzzy, c-format +#: src/readelf.c:3835 +#, c-format msgid "sprintf failure" -msgstr "mprotect siÄ™ nie powiodÅ‚o" +msgstr "sprintf siÄ™ nie powiodÅ‚o" -#: src/readelf.c:4311 +#: src/readelf.c:4317 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:4314 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" -msgstr "%zu bajtowy blok:" +msgstr "blok o %zu B:" -#: src/readelf.c:4792 -#, fuzzy, c-format +#: src/readelf.c:4798 +#, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" -msgstr "%*s[%4<PRIuMAX>] %s <SKRÓCONE>\n" +msgstr "%*s[%2<PRIuMAX>] %s <SKRÓCONE>\n" -#: src/readelf.c:4859 +#: src/readelf.c:4865 #, 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:4866 +#: src/readelf.c:4872 #, 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:4873 +#: src/readelf.c:4879 #, 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:4880 -#, fuzzy, c-format +#: src/readelf.c:4886 +#, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" -msgstr "%s %#<PRIx64> zostaÅ‚o użyte z różnymi rozmiarami adresu" +msgstr "%s %#<PRIx64> zostaÅ‚o użyte z różnymi atrybutami %s i %s" -#: src/readelf.c:4980 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <NIEUÅ»YWANE ÅšMIECIE W RESZCIE SEKCJI>\n" -#: src/readelf.c:4988 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" -msgstr " [%6tx] <NIEUÅ»YWANE ÅšMIECIE>… %<PRIu64> bajtów…\n" +msgstr " [%6tx] <NIEUÅ»YWANE ÅšMIECIE>… %<PRIu64> B…\n" -#: src/readelf.c:5091 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -4997,7 +5283,7 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" " [ Kod]\n" -#: src/readelf.c:5099 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -5006,20 +5292,20 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %<PRIu64>:\n" -#: src/readelf.c:5112 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** bÅ‚Ä…d podczas odczytywania skrótu: %s\n" -#: src/readelf.c:5128 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] offset: %<PRId64>, potomek: %s, znacznik: %s\n" -#: src/readelf.c:5161 src/readelf.c:5470 src/readelf.c:5637 src/readelf.c:6022 -#: src/readelf.c:6638 src/readelf.c:8375 src/readelf.c:9064 src/readelf.c:9537 -#: src/readelf.c:9788 src/readelf.c:9954 src/readelf.c:10341 -#: src/readelf.c:10401 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -5028,56 +5314,52 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" -#: src/readelf.c:5174 -#, fuzzy, c-format +#: src/readelf.c:5180 +#, c-format msgid "cannot get .debug_addr section data: %s" -msgstr "nie można uzyskać danych sekcji: %s" +msgstr "nie można uzyskać danych sekcji .debug_addr: %s" -#: src/readelf.c:5274 src/readelf.c:5298 src/readelf.c:5682 src/readelf.c:9109 -#, fuzzy, c-format +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 +#, c-format msgid " Length: %8<PRIu64>\n" -msgstr "" -"\n" -" DÅ‚ugość: %6<PRIu64>\n" +msgstr " DÅ‚ugość: %8<PRIu64>\n" -#: src/readelf.c:5276 src/readelf.c:5313 src/readelf.c:5695 src/readelf.c:9122 -#, fuzzy, c-format +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 +#, c-format msgid " DWARF version: %8<PRIu16>\n" -msgstr " Wersja DWARF: %6<PRIuFAST16>\n" +msgstr " Wersja DWARF: %8<PRIu16>\n" -#: src/readelf.c:5277 src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9131 -#, fuzzy, c-format +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 +#, c-format msgid " Address size: %8<PRIu64>\n" -msgstr " Offset adresu: %6<PRIu64>\n" +msgstr " Rozmiar adresu: %8<PRIu64>\n" -#: src/readelf.c:5279 src/readelf.c:5332 src/readelf.c:5714 src/readelf.c:9141 -#, fuzzy, c-format +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 +#, c-format msgid " Segment size: %8<PRIu64>\n" -msgstr "" -" Rozmiar segmentu: %6<PRIu64>\n" -"\n" +msgstr " Rozmiar segmentu: %8<PRIu64>\n" -#: src/readelf.c:5317 src/readelf.c:5699 src/readelf.c:9126 src/readelf.c:10533 -#, fuzzy, c-format +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 +#, c-format msgid "Unknown version" -msgstr "nieznana wersja" +msgstr "Nieznana wersja" -#: src/readelf.c:5327 src/readelf.c:5540 src/readelf.c:5709 src/readelf.c:9136 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, c-format msgid "unsupported address size" msgstr "nieobsÅ‚ugiwany rozmiar adresu" -#: src/readelf.c:5338 src/readelf.c:5551 src/readelf.c:5719 src/readelf.c:9146 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "nieobsÅ‚ugiwany rozmiar segmentu" -#: src/readelf.c:5391 src/readelf.c:5465 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_aranges: %s" -#: src/readelf.c:5406 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5095,12 +5377,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %zu wpisów:\n" -#: src/readelf.c:5437 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5439 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5108,7 +5390,7 @@ msgstr "" " [%*zu] poczÄ…tek: %0#*<PRIx64>, dÅ‚ugość: %5<PRIu64>, offset CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:5483 src/readelf.c:8402 +#: src/readelf.c:5489 src/readelf.c:8426 #, c-format msgid "" "\n" @@ -5117,13 +5399,13 @@ msgstr "" "\n" "Tabela pod offsetem %zu:\n" -#: src/readelf.c:5487 src/readelf.c:5663 src/readelf.c:6662 src/readelf.c:8413 -#: src/readelf.c:9090 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "nieprawidÅ‚owe dane w sekcji [%zu] „%sâ€" -#: src/readelf.c:5503 +#: src/readelf.c:5509 #, c-format msgid "" "\n" @@ -5132,27 +5414,27 @@ msgstr "" "\n" " DÅ‚ugość: %6<PRIu64>\n" -#: src/readelf.c:5515 +#: src/readelf.c:5521 #, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " Wersja DWARF: %6<PRIuFAST16>\n" -#: src/readelf.c:5519 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "nieobsÅ‚ugiwana wersja aranges" -#: src/readelf.c:5530 +#: src/readelf.c:5536 #, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " Offset CU: %6<PRIx64>\n" -#: src/readelf.c:5536 +#: src/readelf.c:5542 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr " Offset adresu: %6<PRIu64>\n" -#: src/readelf.c:5547 +#: src/readelf.c:5553 #, c-format msgid "" " Segment size: %6<PRIu64>\n" @@ -5161,109 +5443,116 @@ msgstr "" " Rozmiar segmentu: %6<PRIu64>\n" "\n" -#: src/readelf.c:5602 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" -msgstr " bajty wypeÅ‚nienia: %zu\n" +msgstr " %zu B wypeÅ‚nienia\n" -#: src/readelf.c:5646 -#, fuzzy, c-format +#: src/readelf.c:5652 +#, c-format msgid "cannot get .debug_rnglists content: %s" -msgstr "nie można uzyskać zawartoÅ›ci .debug_ranges: %s" +msgstr "nie można uzyskać zawartoÅ›ci .debug_rnglists: %s" -#: src/readelf.c:5669 src/readelf.c:9096 -#, fuzzy, c-format +#: src/readelf.c:5675 src/readelf.c:9177 +#, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" "\n" -msgstr " Offset .debug_line: 0x%<PRIx64>\n" +msgstr "" +"Tabela pod offsetem 0x%<PRIx64>:\n" +"\n" -#: src/readelf.c:5724 src/readelf.c:9151 -#, fuzzy, c-format +#: src/readelf.c:5730 src/readelf.c:9232 +#, c-format msgid " Offset entries: %8<PRIu64>\n" -msgstr " DÅ‚ugość offsetu: %<PRIu8>\n" +msgstr " Wpisy offsetu: %8<PRIu64>\n" -#: src/readelf.c:5740 src/readelf.c:9167 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " -msgstr "" +msgstr " Nieznana podstawa CU: " -#: src/readelf.c:5742 src/readelf.c:9169 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6<PRIx64>] base: " -msgstr "" +msgstr " Podstawa CU [%6<PRIx64>]: " -#: src/readelf.c:5748 src/readelf.c:9175 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" -msgstr "" +msgstr " Brak powiÄ…zania z CU.\n" -#: src/readelf.c:5759 src/readelf.c:9186 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" -msgstr "" +msgstr "za dużo wpisów offsetu dla dÅ‚ugoÅ›ci jednostki" -#: src/readelf.c:5763 src/readelf.c:9190 -#, fuzzy, c-format +#: src/readelf.c:5769 src/readelf.c:9271 +#, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" -msgstr " Offset: 0x%<PRIx64>\n" +msgstr " Offsety zaczynajÄ…ce siÄ™ w 0x%<PRIx64>:\n" -#: src/readelf.c:5815 -#, fuzzy, c-format +#: src/readelf.c:5821 +#, c-format msgid "invalid range list data" -msgstr "nieprawidÅ‚owe dane" +msgstr "nieprawidÅ‚owe dane listy zakresów" -#: src/readelf.c:6000 src/readelf.c:9515 -#, fuzzy, c-format +#: src/readelf.c:6006 src/readelf.c:9596 +#, c-format msgid "" " %zu padding bytes\n" "\n" -msgstr " bajty wypeÅ‚nienia: %zu\n" +msgstr "" +" %zu B wypeÅ‚nienia\n" +"\n" -#: src/readelf.c:6017 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_ranges: %s" -#: src/readelf.c:6053 src/readelf.c:9570 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" +"\n" +" Nieznana podstawa CU: " -#: src/readelf.c:6055 src/readelf.c:9572 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6<PRIx64>] base: " msgstr "" +"\n" +" Podstawa CU [%6<PRIx64>]: " -#: src/readelf.c:6064 src/readelf.c:9598 src/readelf.c:9624 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:6089 src/readelf.c:9708 -#, fuzzy +#: src/readelf.c:6095 src/readelf.c:9789 msgid "base address" -msgstr " ustawienie adresu na %s\n" +msgstr "adres podstawowy" -#: src/readelf.c:6099 src/readelf.c:9718 -#, fuzzy, c-format +#: src/readelf.c:6105 src/readelf.c:9799 +#, c-format msgid " [%6tx] empty list\n" -msgstr " [%6tx] pusta lista\n" +msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:6359 +#: src/readelf.c:6365 msgid " <INVALID DATA>\n" msgstr " <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:6616 +#: src/readelf.c:6622 #, c-format msgid "cannot get ELF: %s" msgstr "nie można uzyskać ELF: %s" -#: src/readelf.c:6634 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5272,7 +5561,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywoÅ‚ania [%2zu] „%s†pod offsetem %#<PRIx64>:\n" -#: src/readelf.c:6684 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5281,65 +5570,65 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:6785 src/readelf.c:6939 +#: src/readelf.c:6791 src/readelf.c:6945 #, c-format msgid "invalid augmentation length" msgstr "nieprawidÅ‚owa dÅ‚ugość powiÄ™kszenia" -#: src/readelf.c:6800 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:6806 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:6916 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (offset: %#<PRIx64>)" -#: src/readelf.c:6923 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (koÅ„czÄ…cy offset: %#<PRIx64>)" -#: src/readelf.c:6960 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sWskaźnik LSDA: %#<PRIx64>\n" -#: src/readelf.c:7045 -#, fuzzy, c-format +#: src/readelf.c:7051 +#, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" -msgstr "nie można uzyskać kodu atrybutu: %s" +msgstr "DIE [%<PRIx64>] nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:7055 -#, fuzzy, c-format +#: src/readelf.c:7061 +#, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" -msgstr "nie można uzyskać formy atrybutu: %s" +msgstr "DIE [%<PRIx64>] nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:7077 -#, fuzzy, c-format +#: src/readelf.c:7083 +#, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" -msgstr "nie można uzyskać wartoÅ›ci atrybutu: %s" +msgstr "DIE [%<PRIx64>] nie można uzyskać wartoÅ›ci atrybutu „%s†(%s): %s" -#: src/readelf.c:7407 -#, fuzzy, c-format +#: src/readelf.c:7413 +#, c-format msgid "invalid file (%<PRId64>): %s" -msgstr "nieprawidÅ‚owy plik" +msgstr "nieprawidÅ‚owy plik (%<PRId64>): %s" -#: src/readelf.c:7411 -#, fuzzy, c-format +#: src/readelf.c:7417 +#, c-format msgid "no srcfiles for CU [%<PRIx64>]" -msgstr " ustawienie pliku na %<PRIu64>\n" +msgstr "brak plików źródÅ‚owych dla CU [%<PRIx64>]" -#: src/readelf.c:7415 -#, fuzzy, c-format +#: src/readelf.c:7421 +#, c-format msgid "couldn't get DWARF CU: %s" -msgstr "nie można uzyskać ELF: %s" +msgstr "nie można uzyskać CU DWARF: %s" -#: src/readelf.c:7728 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5350,13 +5639,13 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" " [Offset]\n" -#: src/readelf.c:7778 -#, fuzzy, c-format +#: src/readelf.c:7786 +#, c-format msgid "cannot get next unit: %s" -msgstr "nie można uzyskać nastÄ™pnego DIE: %s" +msgstr "nie można uzyskać nastÄ™pnej jednostki: %s" -#: src/readelf.c:7797 -#, fuzzy, c-format +#: src/readelf.c:7806 +#, c-format msgid "" " Type unit at offset %<PRIu64>:\n" " Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: " @@ -5366,9 +5655,9 @@ msgstr "" " Jednostka typu pod offsetem %<PRIu64>:\n" " Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: " "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" -" Podpis typu: %#<PRIx64>, offset typu: %#<PRIx64>\n" +" Podpis typu: %#<PRIx64>, offset typu: %#<PRIx64> [%<PRIx64>]\n" -#: src/readelf.c:7809 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5379,49 +5668,49 @@ msgstr "" " Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: " "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" -#: src/readelf.c:7819 src/readelf.c:7982 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%<PRIu8>)" -msgstr "" +msgstr " Typ jednostki: %s (%<PRIu8>)" -#: src/readelf.c:7846 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" -msgstr "" +msgstr "nieznana wersja (%d) lub typ jednostki (%d)" -#: src/readelf.c:7875 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:7884 -#, fuzzy, c-format +#: src/readelf.c:7893 +#, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "" -"nie można uzyskać znacznika DIE pod offsetem %<PRIu64> w sekcji „%sâ€: %s" +"nie można uzyskać znacznika DIE pod offsetem [%<PRIx64>] w sekcji „%sâ€: %s" -#: src/readelf.c:7922 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "nie można uzyskać nastÄ™pnego DIE: %s\n" -#: src/readelf.c:7930 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać nastÄ™pnego DIE: %s" -#: src/readelf.c:7974 -#, fuzzy, c-format +#: src/readelf.c:7981 +#, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" " Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: " "%<PRIu8>, Offset size: %<PRIu8>\n" msgstr "" -" Jednostka kompilacji pod offsetem %<PRIu64>:\n" +" Jednostka podzielonej kompilacji pod offsetem %<PRIu64>:\n" " Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: " "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" -#: src/readelf.c:8026 +#: src/readelf.c:8033 #, c-format msgid "" "\n" @@ -5432,19 +5721,19 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" "\n" -#: src/readelf.c:8358 -#, fuzzy, c-format +#: src/readelf.c:8365 +#, c-format msgid "unknown form: %s" -msgstr "nieznany bÅ‚Ä…d" +msgstr "nieznana forma: %s" -#: src/readelf.c:8389 +#: src/readelf.c:8413 #, 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:8491 -#, fuzzy, c-format +#: src/readelf.c:8517 +#, c-format msgid "" "\n" " Length: %<PRIu64>\n" @@ -5462,39 +5751,41 @@ msgid "" "Opcodes:\n" msgstr "" "\n" -" DÅ‚ugość: %<PRIu64>\n" -" Wersja DWARF: %<PRIuFAST16>\n" -" DÅ‚ugość prologu: %<PRIu64>\n" -" Minimalna dÅ‚ugość instrukcji: %<PRIuFAST8>\n" -" Maksymalna liczba dziaÅ‚aÅ„ na instrukcjÄ™: %<PRIuFAST8>\n" -" PoczÄ…tkowa wartość „%sâ€: %<PRIuFAST8>\n" -" PoczÄ…tek wiersza: %<PRIdFAST8>\n" -" PrzedziaÅ‚ wiersza: %<PRIuFAST8>\n" -" PoczÄ…tek instrukcji: %<PRIuFAST8>\n" +" DÅ‚ugość: %<PRIu64>\n" +" Wersja DWARF: %<PRIuFAST16>\n" +" DÅ‚ugość prologu: %<PRIu64>\n" +" Rozmiar adresu: %zd\n" +" Rozmiar selektora segmentu: %zd\n" +" Minimalna dÅ‚ugość instrukcji: %<PRIuFAST8>\n" +" Maks. liczba dziaÅ‚aÅ„ na instrukcjÄ™: %<PRIuFAST8>\n" +" Wartość poczÄ…tkowa, jeÅ›li „is_stmtâ€: %<PRIuFAST8>\n" +" Podstawa wiersza: %<PRIdFAST8>\n" +" Zakres wiersza: %<PRIuFAST8>\n" +" Podstawa instrukcji: %<PRIuFAST8>\n" "\n" "Instrukcje:\n" -#: src/readelf.c:8513 -#, fuzzy, c-format +#: src/readelf.c:8539 +#, c-format msgid "cannot handle .debug_line version: %u\n" -msgstr "nie można uzyskać wersji symbolu: %s" +msgstr "nie można obsÅ‚użyć wersji .debug_line: %u\n" -#: src/readelf.c:8521 -#, fuzzy, c-format +#: src/readelf.c:8547 +#, c-format msgid "cannot handle address size: %u\n" -msgstr "nieobsÅ‚ugiwany rozmiar adresu" +msgstr "nie można obsÅ‚użyć rozmiaru adresu: %u\n" -#: src/readelf.c:8529 -#, fuzzy, c-format +#: src/readelf.c:8555 +#, c-format msgid "cannot handle segment selector size: %u\n" -msgstr "nie można uzyskać sekcji: %s" +msgstr "nie można obsÅ‚użyć rozmiaru selektora segmentu: %u\n" -#: src/readelf.c:8539 +#: src/readelf.c:8565 #, 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:8554 +#: src/readelf.c:8580 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" @@ -5502,7 +5793,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu parametr\n" msgstr[1] " [%*<PRIuFAST8>] %hhu parametry\n" msgstr[2] " [%*<PRIuFAST8>] %hhu parametrów\n" -#: src/readelf.c:8565 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5510,38 +5801,32 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:8571 src/readelf.c:8648 -#, fuzzy, c-format +#: src/readelf.c:8597 src/readelf.c:8674 +#, c-format msgid " [" -msgstr " PC: " +msgstr " [" -#: src/readelf.c:8642 -#, fuzzy +#: src/readelf.c:8668 msgid "" "\n" "File name table:" msgstr "" "\n" -" Tabela strony wywoÅ‚ania:" +"Tabela nazw plików:" -#: src/readelf.c:8703 -#, fuzzy +#: src/readelf.c:8729 msgid " Entry Dir Time Size Name" -msgstr "" -"\n" -"Tabela nazw plików:\n" -" Wpis Kat Czas Rozmiar Nazwa" +msgstr " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:8742 -#, fuzzy +#: src/readelf.c:8775 msgid "" "\n" "No line number statements." msgstr "" "\n" -"Instrukcje numerów wierszy:" +"Brak instrukcji numerów wierszy." -#: src/readelf.c:8746 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5549,119 +5834,129 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:8766 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "nieprawidÅ‚owe maksimum operacji na instrukcjÄ™ wynosi zero" -#: src/readelf.c:8800 -#, fuzzy, c-format +#: src/readelf.c:8828 +#, c-format msgid " special opcode %u: address+%u = " -msgstr " instrukcja specjalna %u: adres+%u = %s, wiersz%+d = %zu\n" +msgstr " instrukcja specjalna %u: adres+%u = " -#: src/readelf.c:8804 -#, fuzzy, c-format +#: src/readelf.c:8832 +#, c-format msgid ", op_index = %u, line%+d = %zu\n" -msgstr "" -" instrukcja specjalna %u: adres+%u = %s, op_index = %u, wiersz%+d = %zu\n" +msgstr ", op_index = %u, wiersz%+d = %zu\n" -#: src/readelf.c:8807 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" -msgstr "" +msgstr ", wiersz%+d = %zu\n" -#: src/readelf.c:8825 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:8830 +#: src/readelf.c:8858 msgid " end of sequence" msgstr " koniec sekwencji" -#: src/readelf.c:8848 -#, fuzzy, c-format +#: src/readelf.c:8876 +#, c-format msgid " set address to " -msgstr " ustawienie adresu na %s\n" +msgstr " ustawienie adresu na " -#: src/readelf.c:8876 +#: src/readelf.c:8904 #, 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:8890 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, 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:8895 +#: src/readelf.c:8976 msgid " unknown opcode" msgstr " nieznana instrukcja" #. Takes no argument. -#: src/readelf.c:8907 +#: src/readelf.c:8988 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:8918 -#, fuzzy, c-format +#: src/readelf.c:8999 +#, c-format msgid " advance address by %u to " -msgstr " zwiÄ™kszenie adresu o %u do %s\n" +msgstr " zwiÄ™kszenie adresu o %u do " -#: src/readelf.c:8922 src/readelf.c:8983 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" -msgstr "" +msgstr ", op_index do %u" -#: src/readelf.c:8934 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " zwiÄ™kszenie wiersza o staÅ‚Ä… %d do %<PRId64>\n" -#: src/readelf.c:8944 +#: src/readelf.c:9025 #, c-format msgid " set file to %<PRIu64>\n" msgstr " ustawienie pliku na %<PRIu64>\n" -#: src/readelf.c:8955 +#: src/readelf.c:9036 #, c-format msgid " set column to %<PRIu64>\n" msgstr " ustawienie kolumny na %<PRIu64>\n" -#: src/readelf.c:8962 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " ustawienie „%s†na %<PRIuFAST8>\n" #. Takes no argument. -#: src/readelf.c:8968 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:8979 -#, fuzzy, c-format +#: src/readelf.c:9060 +#, c-format msgid " advance address by constant %u to " -msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… %u do %s\n" +msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… %u do " -#: src/readelf.c:8999 -#, fuzzy, c-format +#: src/readelf.c:9080 +#, c-format msgid " advance address by fixed value %u to \n" -msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… wartość %u do %s\n" +msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… wartość %u do \n" #. Takes no argument. -#: src/readelf.c:9009 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr " ustawienie flagi koÅ„ca prologu" #. Takes no argument. -#: src/readelf.c:9014 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr " ustawienie flagi poczÄ…tku epilogu" -#: src/readelf.c:9024 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" @@ -5669,7 +5964,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:9033 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" @@ -5677,101 +5972,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:9073 -#, fuzzy, c-format +#: src/readelf.c:9154 +#, c-format msgid "cannot get .debug_loclists content: %s" -msgstr "nie można uzyskać zawartoÅ›ci .debug_log: %s" +msgstr "nie można uzyskać zawartoÅ›ci .debug_loclists: %s" -#: src/readelf.c:9239 -#, fuzzy, c-format +#: src/readelf.c:9320 +#, c-format msgid " <INVALID DATA>\n" -msgstr " <NIEPRAWIDÅOWE DANE>\n" +msgstr " <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:9279 -#, fuzzy, c-format +#: src/readelf.c:9360 +#, c-format msgid "invalid loclists data" -msgstr "nieprawidÅ‚owe dane" +msgstr "nieprawidÅ‚owe dane loclists" -#: src/readelf.c:9532 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "nie można uzyskać zawartoÅ›ci .debug_log: %s" -#: src/readelf.c:9745 src/readelf.c:10789 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " <INVALID DATA>\n" msgstr " <NIEPRAWIDÅOWE DANE>\n" -#: src/readelf.c:9800 src/readelf.c:9963 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "nie można uzyskać danych sekcji informacji o makrach: %s" -#: src/readelf.c:9880 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** niezakoÅ„czony ciÄ…g na koÅ„cu sekcji" -#: src/readelf.c:9903 +#: src/readelf.c:9984 #, 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:10004 +#: src/readelf.c:10085 #, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Offset: 0x%<PRIx64>\n" -#: src/readelf.c:10016 +#: src/readelf.c:10097 #, c-format msgid " Version: %<PRIu16>\n" msgstr " Wersja: %<PRIu16>\n" -#: src/readelf.c:10022 src/readelf.c:10909 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr " nieznana wersja, nie można przetworzyć sekcji\n" -#: src/readelf.c:10029 -#, fuzzy, c-format +#: src/readelf.c:10110 +#, c-format msgid " Flag: 0x%<PRIx8>" -msgstr " Flaga: 0x%<PRIx8>\n" +msgstr " Flaga: 0x%<PRIx8>" -#: src/readelf.c:10058 +#: src/readelf.c:10139 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr " DÅ‚ugość offsetu: %<PRIu8>\n" -#: src/readelf.c:10066 +#: src/readelf.c:10147 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " Offset .debug_line: 0x%<PRIx64>\n" -#: src/readelf.c:10091 +#: src/readelf.c:10172 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " tabela instrukcji rozszerzenia, %<PRIu8> elementów:\n" -#: src/readelf.c:10098 +#: src/readelf.c:10179 #, c-format msgid " [%<PRIx8>]" msgstr " [%<PRIx8>]" -#: src/readelf.c:10110 +#: src/readelf.c:10191 #, c-format msgid " %<PRIu8> arguments:" msgstr " Parametry %<PRIu8>:" -#: src/readelf.c:10125 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr " brak parametrów." -#: src/readelf.c:10326 +#: src/readelf.c:10407 #, 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:10370 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -5782,41 +6077,43 @@ msgstr "" "Sekcja DWARF [%2zu] „%s†pod offsetem %#<PRIx64>:\n" " %*s CiÄ…g\n" -#: src/readelf.c:10385 -#, fuzzy, c-format +#. TRANS: the debugstr| prefix makes the string unique. +#: src/readelf.c:10456 +msgctxt "debugstr" +msgid "Offset" +msgstr "" + +#: src/readelf.c:10466 +#, c-format msgid " *** error, missing string terminator\n" -msgstr " *** bÅ‚Ä…d podczas odczytywania ciÄ…gów: %s\n" +msgstr " *** bÅ‚Ä…d, brak znaku koÅ„czÄ…cego ciÄ…g\n" -#: src/readelf.c:10414 -#, fuzzy, c-format +#: src/readelf.c:10495 +#, c-format msgid "cannot get .debug_str_offsets section data: %s" -msgstr "nie można uzyskać danych sekcji: %s" +msgstr "nie można uzyskać danych sekcji .debug_str_offsets: %s" -#: src/readelf.c:10513 -#, fuzzy, c-format +#: src/readelf.c:10594 +#, c-format msgid " Length: %8<PRIu64>\n" -msgstr "" -"\n" -" DÅ‚ugość: %6<PRIu64>\n" +msgstr " DÅ‚ugość: %8<PRIu64>\n" -#: src/readelf.c:10515 -#, fuzzy, c-format +#: src/readelf.c:10596 +#, c-format msgid " Offset size: %8<PRIu8>\n" -msgstr " DÅ‚ugość offsetu: %<PRIu8>\n" +msgstr " Rozmiar offsetu: %8<PRIu8>\n" -#: src/readelf.c:10529 -#, fuzzy, c-format +#: src/readelf.c:10610 +#, c-format msgid " DWARF version: %8<PRIu16>\n" -msgstr " Wersja DWARF: %6<PRIuFAST16>\n" +msgstr " Wersja DWARF: %8<PRIu16>\n" -#: src/readelf.c:10538 -#, fuzzy, c-format +#: src/readelf.c:10619 +#, c-format msgid " Padding: %8<PRIx16>\n" -msgstr "" -"\n" -" DÅ‚ugość: %6<PRIu64>\n" +msgstr " WypeÅ‚nienie: %8<PRIx16>\n" -#: src/readelf.c:10592 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -5825,7 +6122,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywoÅ‚ania [%2zu] „.eh_frame_hdrâ€:\n" -#: src/readelf.c:10694 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -5834,22 +6131,22 @@ msgstr "" "\n" "Sekcja tabeli obsÅ‚ugiwania wyjÄ…tków [%2zu] „.gcc_except_tableâ€:\n" -#: src/readelf.c:10717 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:10729 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:10744 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywoÅ‚ania: %#x " -#: src/readelf.c:10757 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -5857,7 +6154,7 @@ msgstr "" "\n" " Tabela strony wywoÅ‚ania:" -#: src/readelf.c:10771 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5870,51 +6167,51 @@ msgstr "" " LÄ…dowisko: %#<PRIx64>\n" " DziaÅ‚anie: %u\n" -#: src/readelf.c:10844 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "nieprawidÅ‚owe kodowanie TType" -#: src/readelf.c:10871 +#: src/readelf.c:10952 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %#<PRIx64> contains %<PRId64> bytes :\n" msgstr "" "\n" -"Sekcja GDB [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %<PRId64> bajtów:\n" +"Sekcja GDB [%2zu] „%s†pod offsetem %#<PRIx64> zawiera %<PRId64> B:\n" -#: src/readelf.c:10900 +#: src/readelf.c:10981 #, c-format msgid " Version: %<PRId32>\n" msgstr " Wersja: %<PRId32>\n" -#: src/readelf.c:10918 +#: src/readelf.c:10999 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " offset CU: %#<PRIx32>\n" -#: src/readelf.c:10925 +#: src/readelf.c:11006 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " offset TU: %#<PRIx32>\n" -#: src/readelf.c:10932 +#: src/readelf.c:11013 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr " offset adresu: %#<PRIx32>\n" -#: src/readelf.c:10939 +#: src/readelf.c:11020 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " offset symbolu: %#<PRIx32>\n" -#: src/readelf.c:10946 +#: src/readelf.c:11027 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " offset staÅ‚ej: %#<PRIx32>\n" -#: src/readelf.c:10960 +#: src/readelf.c:11041 #, c-format msgid "" "\n" @@ -5923,7 +6220,7 @@ msgstr "" "\n" " Lista CU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:10985 +#: src/readelf.c:11066 #, c-format msgid "" "\n" @@ -5932,7 +6229,7 @@ msgstr "" "\n" " Lista TU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:11014 +#: src/readelf.c:11095 #, c-format msgid "" "\n" @@ -5941,7 +6238,7 @@ msgstr "" "\n" " Lista adresów pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:11046 +#: src/readelf.c:11127 #, c-format msgid "" "\n" @@ -5950,18 +6247,18 @@ msgstr "" "\n" " Tabela symboli pod offsetem %#<PRIx32> zawiera %zu gniazd:\n" -#: src/readelf.c:11184 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s" -#: src/readelf.c:11552 src/readelf.c:12179 src/readelf.c:12290 -#: src/readelf.c:12348 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "nie można konwertować danych notatki core: %s" -#: src/readelf.c:11915 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -5970,40 +6267,40 @@ msgstr "" "\n" "%*s… <powtarza siÄ™ jeszcze %u razy>…" -#: src/readelf.c:12427 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " WÅ‚aÅ›ciciel Rozmiar danych Typ\n" -#: src/readelf.c:12456 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12508 -#, fuzzy, c-format +#: src/readelf.c:12588 +#, c-format msgid "cannot get content of note: %s" -msgstr "nie można uzyskać zawartoÅ›ci sekcji notatki: %s" +msgstr "nie można uzyskać zawartoÅ›ci notatki: %s" -#: src/readelf.c:12542 +#: src/readelf.c:12622 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" "\n" -"Segment notatki [%2zu] „%s†o dÅ‚ugoÅ›ci %<PRIu64> bajtów pod offsetem " +"Segment notatki [%2zu] „%s†o dÅ‚ugoÅ›ci %<PRIu64> B pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:12565 +#: src/readelf.c:12645 #, c-format msgid "" "\n" "Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" "\n" -"Segment notatki o dÅ‚ugoÅ›ci %<PRIu64> bajtów pod offsetem %#0<PRIx64>:\n" +"Segment notatki o dÅ‚ugoÅ›ci %<PRIu64> B pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12612 +#: src/readelf.c:12692 #, c-format msgid "" "\n" @@ -6012,22 +6309,22 @@ msgstr "" "\n" "Sekcja [%zu] „%s†nie ma danych do zrzucenia.\n" -#: src/readelf.c:12639 src/readelf.c:12690 +#: src/readelf.c:12719 src/readelf.c:12770 #, 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:12644 +#: src/readelf.c:12724 #, c-format msgid "" "\n" "Hex dump of section [%zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" "\n" -"Segment zrzutu szesnastkowego [%zu] „%sâ€, %<PRIu64> bajtów pod offsetem " +"Segment zrzutu szesnastkowego [%zu] „%sâ€, %<PRIu64> B pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:12649 +#: src/readelf.c:12729 #, c-format msgid "" "\n" @@ -6035,10 +6332,10 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" "\n" -"Zrzut szesnastkowy sekcji [%zu] „%sâ€, %<PRIu64> bajtów (%zd " -"nieskompresowanych) pod offsetem %#0<PRIx64>:\n" +"Zrzut szesnastkowy sekcji [%zu] „%sâ€, %<PRIu64> B (%zd nieskompresowanych) " +"pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12663 +#: src/readelf.c:12743 #, c-format msgid "" "\n" @@ -6047,16 +6344,16 @@ msgstr "" "\n" "Sekcja [%zu] „%s†nie ma ciÄ…gów do zrzucenia.\n" -#: src/readelf.c:12695 +#: src/readelf.c:12775 #, c-format msgid "" "\n" "String section [%zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" "\n" -"Sekcja ciÄ…gów [%zu] „%s†zawiera %<PRIu64> bajtów pod offsetem %#0<PRIx64>:\n" +"Sekcja ciÄ…gów [%zu] „%s†zawiera %<PRIu64> B pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12700 +#: src/readelf.c:12780 #, c-format msgid "" "\n" @@ -6064,10 +6361,10 @@ msgid "" "offset %#0<PRIx64>:\n" msgstr "" "\n" -"Sekcja ciÄ…gów [%zu] „%s†zawiera %<PRIu64> bajtów (%zd nieskompresowanych) " -"pod offsetem %#0<PRIx64>:\n" +"Sekcja ciÄ…gów [%zu] „%s†zawiera %<PRIu64> B (%zd nieskompresowanych) pod " +"offsetem %#0<PRIx64>:\n" -#: src/readelf.c:12749 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6076,7 +6373,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:12779 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6085,12 +6382,12 @@ msgstr "" "\n" "sekcja „%s†nie istnieje" -#: src/readelf.c:12836 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "nie można uzyskać indeksu symboli archiwum „%sâ€: %s" -#: src/readelf.c:12839 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6099,7 +6396,7 @@ msgstr "" "\n" "Archiwum „%s†nie ma indeksu symboli\n" -#: src/readelf.c:12843 +#: src/readelf.c:12923 #, c-format msgid "" "\n" @@ -6108,12 +6405,12 @@ msgstr "" "\n" "Indeks archiwum „%s†ma %zu wpisów:\n" -#: src/readelf.c:12861 +#: src/readelf.c:12941 #, 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:12866 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum „%s†zawiera:\n" @@ -6177,15 +6474,67 @@ msgstr "NieprawidÅ‚owa baza: %s" msgid "%s: file format not recognized" msgstr "%s: nie rozpoznano formatu pliku" +#: src/size.c:328 +msgctxt "bsd" +msgid "text" +msgstr "" + +#: src/size.c:329 +msgctxt "bsd" +msgid "data" +msgstr "" + +#: src/size.c:330 +msgctxt "bsd" +msgid "bss" +msgstr "" + +#: src/size.c:331 +msgctxt "bsd" +msgid "dec" +msgstr "" + +#: src/size.c:332 +msgctxt "bsd" +msgid "hex" +msgstr "" + +#: src/size.c:333 +msgctxt "bsd" +msgid "filename" +msgstr "" + #: src/size.c:418 src/size.c:560 #, c-format msgid " (ex %s)" msgstr " (ex %s)" +#: src/size.c:420 +#, fuzzy +#| msgid "invalid section" +msgctxt "sysv" +msgid "section" +msgstr "nieprawidÅ‚owa sekcja" + +#: src/size.c:421 +msgctxt "sysv" +msgid "size" +msgstr "" + +#: src/size.c:422 +msgctxt "sysv" +msgid "addr" +msgstr "" + +#: src/size.c:451 src/size.c:454 src/size.c:457 +msgctxt "sysv" +msgid "Total" +msgstr "" + #: src/size.c:482 -#, fuzzy, c-format +#, c-format msgid "cannot get section header" -msgstr "nie można uzyskać nagłówka sekcji\n" +msgstr "nie można uzyskać nagłówka sekcji" #: src/size.c:585 msgid "(TOTALS)\n" @@ -6194,7 +6543,7 @@ msgstr "(CAÅKOWITE)\n" #: src/stack.c:487 #, c-format msgid "-p PID should be a positive process id." -msgstr "-p PID powinien być dodatnim identyfikatorem procesu." +msgstr "-p PID musi być dodatnim identyfikatorem procesu." #: src/stack.c:493 #, c-format @@ -6204,12 +6553,12 @@ msgstr "Nie można otworzyć pliku core „%sâ€" #: src/stack.c:553 #, c-format msgid "-n MAXFRAMES should be 0 or higher." -msgstr "-n MAKSYMALNA_LICZBA_RAMEK powinna wynosić 0 lub wiÄ™cej." +msgstr "-n MAKSYMALNA-LICZBA-RAMEK musi wynosić 0 lub wiÄ™cej." #: src/stack.c:565 #, c-format msgid "-e EXEC needs a core given by --core." -msgstr "-e PLIK_WYKONYWALNY wymaga pliku core podanego za pomocÄ… opcji --core." +msgstr "-e PLIK-WYKONYWALNY wymaga pliku core podanego za pomocÄ… opcji --core." #: src/stack.c:569 #, c-format @@ -6219,7 +6568,7 @@ msgstr "-1 wymaga identyfikatora wÄ…tku podanego za pomocÄ… opcji -p." #: src/stack.c:573 #, c-format msgid "One of -p PID or --core COREFILE should be given." -msgstr "Tylko jedna z opcji -p PID lub --core PLIK_CORE powinna zostać podana." +msgstr "Tylko jedna z opcji -p PID lub --core PLIK-CORE może zostać podana." #: src/stack.c:645 msgid "Show stack of process PID" @@ -6227,11 +6576,11 @@ msgstr "WyÅ›wietla stos numeru PID procesu" #: src/stack.c:647 msgid "Show stack found in COREFILE" -msgstr "WyÅ›wietla stos odnaleziony w PLIKU_CORE" +msgstr "WyÅ›wietla stos odnaleziony w PLIKU-CORE" #: src/stack.c:648 msgid "(optional) EXECUTABLE that produced COREFILE" -msgstr "(opcjonalnie) PLIK_WYKONYWALNY, który utworzyÅ‚ PLIK_CORE" +msgstr "(opcjonalnie) PLIK-WYKONYWALNY, który utworzyÅ‚ PLIK-CORE" #: src/stack.c:652 msgid "Output selection options:" @@ -6284,12 +6633,12 @@ msgstr "WyÅ›wietla identyfikator kopii moduÅ‚u, wczytuje adres i offset pc" #: src/stack.c:673 msgid "Show the backtrace of only one thread" -msgstr "WyÅ›wietla wyjÄ…tek, jeÅ›li jest tylko jeden wÄ…tek" +msgstr "WyÅ›wietla Å›lad stosu, jeÅ›li jest tylko jeden wÄ…tek" #: src/stack.c:675 msgid "Show at most MAXFRAMES per thread (default 256, use 0 for unlimited)" msgstr "" -"WyÅ›wietla najwyżej MAKSYMALNÄ„_LICZBĘ_KLATEK na wÄ…tek (domyÅ›lnie 256, 0 " +"WyÅ›wietla najwyżej MAKSYMALNÄ„-LICZBĘ-KLATEK na wÄ…tek (domyÅ›lnie 256, 0 " "oznacza brak ograniczenia)" #: src/stack.c:677 @@ -6299,7 +6648,6 @@ msgstr "" "i debug" #: src/stack.c:685 -#, fuzzy msgid "" "Print a stack for each thread in a process or core file.\n" "\n" @@ -6314,8 +6662,8 @@ msgstr "" "\n" "Program koÅ„czy dziaÅ‚anie z kodem zwrotnym 0, jeÅ›li wszystkie ramki zostaÅ‚y " "wyÅ›wietlone bez żadnych bÅ‚Ä™dów. JeÅ›li niektóre ramki zostaÅ‚y wyÅ›wietlone, " -"ale wystÄ…piÅ‚y niekrytyczne bÅ‚Ä™dy, które mogÄ… spowodować niepeÅ‚ny wyjÄ…tek, to " -"program koÅ„czy dziaÅ‚anie z kodem zwrotnym 1. JeÅ›li żadne ramki nie mogÅ‚y " +"ale wystÄ…piÅ‚y niekrytyczne bÅ‚Ä™dy, które mogÄ… spowodować niepeÅ‚ny Å›lad stosu, " +"to program koÅ„czy dziaÅ‚anie z kodem zwrotnym 1. JeÅ›li żadne ramki nie mogÅ‚y " "zostać wyÅ›wietlone lub wystÄ…piÅ‚ krytyczny bÅ‚Ä…d, to program koÅ„czy dziaÅ‚anie " "z kodem zwrotnym 2. JeÅ›li program zostaÅ‚ wywoÅ‚any za pomocÄ… bÅ‚Ä™dnych lub " "brakujÄ…cych parametrów, to zakoÅ„czy on dziaÅ‚anie z kodem zwrotnym 64." @@ -6435,6 +6783,10 @@ msgid "" "is not reversible, incompatible with -f, -g, --remove-comment and --remove-" "section)" msgstr "" +"Podobne do opcji --reloc-debug-sections, ale rozwiÄ…zuje wszystkie proste " +"relokacje miÄ™dzy sekcjami debugowania na miejscu. Å»adne inne okrajanie nie " +"jest wykonywane (dziaÅ‚ania nie jest odwracalne, nie jest zgodne z opcjami -" +"f, -g, --remove-comment i --remove-section)" #: src/strip.c:89 msgid "Remove .comment section" @@ -6445,12 +6797,16 @@ 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 "" +"Usuwa podanÄ… sekcjÄ™. SEKCJA jest rozszerzonym wzorem. Może być podane wiÄ™cej " +"niż raz. Można usuwać tylko nieprzydzielone sekcje." #: src/strip.c:91 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." msgstr "" +"Zachowuje podanÄ… sekcjÄ™. SEKCJA jest rozszerzonym wzorem. Może być podane " +"wiÄ™cej niż raz." #. Short description of program. #: src/strip.c:98 @@ -6468,6 +6824,8 @@ msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" +"Opcja --reloc-debug-sections-only jest niezgodna z -f, -g, --remove-comment " +"i --remove-section" #: src/strip.c:267 #, c-format @@ -6485,26 +6843,26 @@ msgid "-F option specified twice" msgstr "OpcjÄ™ -F podano dwukrotnie" #: src/strip.c:362 -#, fuzzy, c-format +#, c-format msgid "cannot both keep and remove .comment section" -msgstr "Usuwa sekcjÄ™ .comment" +msgstr "nie można jednoczeÅ›nie zachować i usunąć sekcji .comment" #: src/strip.c:481 #, c-format msgid "bad relocation" msgstr "bÅ‚Ä™dna relokacja" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, 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:765 #, c-format msgid "while opening '%s'" msgstr "podczas otwierania „%sâ€" -#: src/strip.c:799 +#: src/strip.c:803 #, 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" @@ -6515,132 +6873,132 @@ 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:815 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: brak obsÅ‚ugi okrajania archiwum" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:1092 +#: src/strip.c:1097 #, c-format msgid "cannot get number of phdrs" msgstr "nie można uzyskać liczby phdr" -#: src/strip.c:1106 src/strip.c:1149 -#, fuzzy, c-format +#: src/strip.c:1111 src/strip.c:1154 +#, c-format msgid "cannot create new ehdr for file '%s': %s" -msgstr "nie można utworzyć nowego pliku „%sâ€: %s" +msgstr "nie można utworzyć nowego ehdr dla pliku „%sâ€: %s" -#: src/strip.c:1116 src/strip.c:1159 -#, fuzzy, c-format +#: src/strip.c:1121 src/strip.c:1164 +#, c-format msgid "cannot create new phdr for file '%s': %s" -msgstr "nie można utworzyć nowego pliku „%sâ€: %s" +msgstr "nie można utworzyć nowego phdr dla pliku „%sâ€: %s" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "plik „%s†ma bÅ‚Ä™dny format" -#: src/strip.c:1250 -#, fuzzy, c-format +#: src/strip.c:1254 +#, c-format msgid "Cannot remove allocated section '%s'" -msgstr "nie można przydzielić danych sekcji: %s" +msgstr "Nie można usunąć przydzielonej sekcji „%sâ€" -#: src/strip.c:1259 -#, fuzzy, c-format +#: src/strip.c:1263 +#, c-format msgid "Cannot both keep and remove section '%s'" -msgstr "nie można dodać nowej sekcji: %s" +msgstr "Nie można jednoczeÅ›nie zachować i usunąć sekcji „%sâ€" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "podczas tworzenia pliku wyjÅ›ciowego: %s" -#: src/strip.c:1688 -#, fuzzy, c-format +#: src/strip.c:1692 +#, c-format msgid "%s: error while updating ELF header: %s" -msgstr "%s: bÅ‚Ä…d podczas tworzenia nagłówka ELF: %s" +msgstr "%s: bÅ‚Ä…d podczas aktualizowania nagłówka ELF: %s" -#: src/strip.c:1697 -#, fuzzy, c-format +#: src/strip.c:1701 +#, c-format msgid "%s: error while getting shdrstrndx: %s" -msgstr "%s: bÅ‚Ä…d podczas tworzenia nagłówka ELF: %s" +msgstr "%s: bÅ‚Ä…d podczas uzyskiwania shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 -#, fuzzy, c-format +#: src/strip.c:1709 src/strip.c:2554 +#, c-format msgid "%s: error updating shdrstrndx: %s" -msgstr "%s: bÅ‚Ä…d podczas tworzenia nagłówka ELF: %s" +msgstr "%s: bÅ‚Ä…d podczas aktualizowania shdrstrndx: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjÅ›cia dla „%sâ€" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "podczas tworzenia tabeli ciÄ…gów nagłówka sekcji: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 #, c-format 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:2083 #, 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:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania „%sâ€: %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia „%sâ€" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:2541 +#: src/strip.c:2545 #, 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:2563 #, 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:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania „%sâ€" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, 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:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostÄ™pu i modyfikacji „%sâ€" @@ -6681,7 +7039,7 @@ msgstr "WyÅ›wietla tylko nazwy modułów i plików, identyfikatory kopii" #: src/unstrip.c:82 msgid "Force combining files even if some ELF headers don't seem to match" msgstr "" -"Wymusza Å‚Ä…czenie plików nawet, jeÅ›li niektóre nagłówki ELF siÄ™ nie zgadzajÄ…" +"Wymusza Å‚Ä…czenie plików, nawet jeÅ›li niektóre nagłówki ELF siÄ™ nie zgadzajÄ…" #: src/unstrip.c:126 #, c-format @@ -6724,36 +7082,36 @@ msgid "cannot create ELF header: %s" msgstr "nie można utworzyć nagłówka ELF: %s" #: src/unstrip.c:240 -#, fuzzy, c-format +#, c-format msgid "cannot get shdrstrndx:%s" -msgstr "nie można uzyskać sekcji: %s" +msgstr "nie można uzyskać shdrstrndx: %s" -#: src/unstrip.c:244 src/unstrip.c:2085 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "nie można uzyskać nagłówka ELF: %s" #: src/unstrip.c:254 -#, fuzzy, c-format +#, c-format msgid "cannot get new zero section: %s" -msgstr "nie można uzyskać sekcji: %s" +msgstr "nie można uzyskać nowej sekcji zerowej: %s" #: src/unstrip.c:257 -#, fuzzy, c-format +#, c-format msgid "cannot update new zero section: %s" -msgstr "nie można zaktualizować relokacji: %s" +msgstr "nie można zaktualizować nowej sekcji zerowej: %s" #: src/unstrip.c:261 #, c-format msgid "cannot copy ELF header: %s" msgstr "nie można skopiować nagłówka ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2103 src/unstrip.c:2146 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, c-format msgid "cannot get number of program headers: %s" msgstr "nie można uzyskać liczby nagłówków programu: %s" -#: src/unstrip.c:270 src/unstrip.c:2107 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "nie można utworzyć nagłówków programu: %s" @@ -6768,12 +7126,12 @@ msgstr "nie można skopiować nagłówka programu: %s" msgid "cannot copy section header: %s" msgstr "nie można skopiować nagłówka sekcji: %s" -#: src/unstrip.c:289 src/unstrip.c:1707 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "nie można uzyskać danych sekcji: %s" -#: src/unstrip.c:291 src/unstrip.c:1709 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "nie można skopiować danych sekcji: %s" @@ -6783,14 +7141,14 @@ 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:655 src/unstrip.c:689 src/unstrip.c:857 -#: src/unstrip.c:1749 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, 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:658 src/unstrip.c:679 src/unstrip.c:692 -#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "nie można zaktualizować tabeli symboli: %s" @@ -6800,166 +7158,176 @@ 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:465 src/unstrip.c:479 +#: 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:578 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "nie można uzyskać wersji symbolu: %s" -#: src/unstrip.c:591 +#: src/unstrip.c:595 #, 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:846 -#, fuzzy, c-format +#: src/unstrip.c:850 +#, c-format msgid "cannot get symbol section data: %s" -msgstr "nie można uzyskać danych sekcji: %s" +msgstr "nie można uzyskać danych sekcji symboli: %s" -#: src/unstrip.c:848 -#, fuzzy, c-format +#: src/unstrip.c:852 +#, c-format msgid "cannot get string section data: %s" -msgstr "nie można uzyskać danych sekcji: %s" +msgstr "nie można uzyskać danych sekcji ciÄ…gów: %s" -#: src/unstrip.c:865 +#: src/unstrip.c:869 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "nieprawidÅ‚owy offset ciÄ…gu w symbolu [%zu]" -#: src/unstrip.c:1023 src/unstrip.c:1427 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "nie można odczytać nazwy sekcji [%zu]: %s" -#: src/unstrip.c:1038 -#, fuzzy, c-format +#: src/unstrip.c:1042 +#, c-format msgid "bad sh_link for group section: %s" -msgstr "nieprawidÅ‚owa wartość sh_link w sekcji %zu" +msgstr "bÅ‚Ä™dne sh_link dla sekcji grupy: %s" -#: src/unstrip.c:1044 -#, fuzzy, c-format +#: src/unstrip.c:1048 +#, c-format msgid "couldn't get shdr for group section: %s" -msgstr "nie można uzyskać danych dla sekcji %d: %s" +msgstr "nie można uzyskać shdr dla sekcji grupy: %s" -#: src/unstrip.c:1049 -#, fuzzy, c-format +#: src/unstrip.c:1053 +#, c-format msgid "bad data for group symbol section: %s" -msgstr "nie można uzyskać danych dla sekcji symboli\n" +msgstr "bÅ‚Ä™dne dane dla sekcji symboli grupy: %s" -#: src/unstrip.c:1055 -#, fuzzy, c-format +#: src/unstrip.c:1059 +#, c-format msgid "couldn't get symbol for group section: %s" -msgstr "nie można uzyskać wersji symbolu: %s" +msgstr "nie można uzyskać symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1060 -#, fuzzy, c-format +#: src/unstrip.c:1064 +#, c-format msgid "bad symbol name for group section: %s" -msgstr "bÅ‚Ä™dny nagłówek kompresji dla sekcji %zd: %s" +msgstr "bÅ‚Ä™dna nazwa symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1102 src/unstrip.c:1121 src/unstrip.c:1159 +#: src/unstrip.c:1075 src/unstrip.c:1556 +#, c-format +msgid "cannot find matching section for [%zu] '%s'" +msgstr "nie można odnaleźć pasujÄ…cej sekcji dla [%zu] „%sâ€" + +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "nie można odczytać sekcji „.gnu.prelink_undoâ€: %s" -#: src/unstrip.c:1139 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "przepeÅ‚nienie z shnum = %zu w sekcji „%sâ€" -#: src/unstrip.c:1150 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "nieprawidÅ‚owa zawartość w sekcji „%sâ€" -#: src/unstrip.c:1206 src/unstrip.c:1553 -#, c-format -msgid "cannot find matching section for [%zu] '%s'" -msgstr "nie można odnaleźć pasujÄ…cej sekcji dla [%zu] „%sâ€" - -#: src/unstrip.c:1331 src/unstrip.c:1347 src/unstrip.c:1633 src/unstrip.c:1924 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, 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:1356 +#: src/unstrip.c:1364 #, 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:1385 src/unstrip.c:1389 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, 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:1393 src/unstrip.c:1397 src/unstrip.c:1648 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" -#: src/unstrip.c:1400 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "wiÄ™cej sekcji w okrojonym pliku niż w pliku debugowania — odwrócono " "parametry?" -#: src/unstrip.c:1404 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" -msgstr "" +msgstr "brak sekcji w okrojonym pliku" -#: src/unstrip.c:1475 src/unstrip.c:1568 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "nie można odczytać tabeli ciÄ…gów nagłówków sekcji: %s" -#: src/unstrip.c:1627 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "nie można dodać nowej sekcji: %s" -#: src/unstrip.c:1757 +#: src/unstrip.c:1760 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "symbol [%zu] ma nieprawidÅ‚owy indeks sekcji" -#: src/unstrip.c:1789 -#, fuzzy, c-format +#: src/unstrip.c:1792 +#, c-format msgid "group has invalid section index [%zd]" -msgstr "symbol [%zu] ma nieprawidÅ‚owy indeks sekcji" +msgstr "grupa ma nieprawidÅ‚owy indeks sekcji [%zd]" -#: src/unstrip.c:2064 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "nie można odczytać danych sekcji: %s" -#: src/unstrip.c:2093 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "nie można zaktualizować nagłówka ELF: %s" -#: src/unstrip.c:2117 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "nie można zaktualizować nagłówka programu: %s" -#: src/unstrip.c:2122 src/unstrip.c:2205 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "nie można zapisać pliku wyjÅ›ciowego: %s" -#: src/unstrip.c:2173 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Dane DWARF nie zostaÅ‚y dostosowane do przesuniÄ™cia wczesnego konsolidowania; " "proszÄ™ rozważyć polecenie prelink -u" -#: src/unstrip.c:2176 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6967,77 +7335,77 @@ msgstr "" "Dane DWARF w „%s†nie zostaÅ‚y dostosowane do przesuniÄ™cia wczesnego " "konsolidowania; proszÄ™ rozważyć polecenie prelink -u" -#: src/unstrip.c:2196 src/unstrip.c:2247 src/unstrip.c:2259 src/unstrip.c:2345 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/unstrip.c:2238 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "OSTRZEÅ»ENIE: " -#: src/unstrip.c:2240 +#: src/unstrip.c:2239 msgid ", use --force" msgstr ", należy użyć opcji --force" -#: src/unstrip.c:2263 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "Różna identyfikacja nagłówka ELF (e_ident)" -#: src/unstrip.c:2266 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "Różne typy nagłówka ELF (e_type)" -#: src/unstrip.c:2269 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "Różne typy maszyny nagłówka ELF (e_machine)" -#: src/unstrip.c:2272 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "okrojony nagłówek programu (e_phnum) jest mniejszy niż nieokrojony" -#: src/unstrip.c:2302 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "nie można odnaleźć okrojonego pliku dla moduÅ‚u „%sâ€: %s" -#: src/unstrip.c:2306 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "nie można otworzyć okrojonego pliku „%s†dla moduÅ‚u „%sâ€: %s" -#: src/unstrip.c:2321 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "nie można odnaleźć pliku debugowania dla moduÅ‚u „%sâ€: %s" -#: src/unstrip.c:2325 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "nie można otworzyć pliku debugowania „%s†dla moduÅ‚u „%sâ€: %s" -#: src/unstrip.c:2338 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "moduÅ‚ „%s†pliku „%s†nie zostaÅ‚ okrojony" -#: src/unstrip.c:2369 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" "nie można utworzyć pamiÄ™ci podrÄ™cznej adresów sekcji dla moduÅ‚u „%sâ€: %s" -#: src/unstrip.c:2501 +#: src/unstrip.c:2505 #, c-format msgid "no matching modules found" msgstr "nie odnaleziono pasujÄ…cych modułów" -#: src/unstrip.c:2510 +#: src/unstrip.c:2515 #, c-format msgid "matched more than one module" msgstr "pasuje wiÄ™cej niż jeden moduÅ‚" -#: src/unstrip.c:2554 +#: src/unstrip.c:2560 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7045,8 +7413,7 @@ msgstr "" "OKROJONY-PLIK PLIK-DEBUGOWANIA\n" "[MODUÅ…]" -#: src/unstrip.c:2555 -#, fuzzy +#: src/unstrip.c:2561 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7078,15 +7445,15 @@ msgstr "" "Pierwsza forma umieszcza wynik w PLIKU-DEBUGOWANIA, jeÅ›li nie podano opcji -" "o.\n" "\n" -"Parametr MODUÅ podaje wzorce nazw plików dopasowujÄ…ce moduÅ‚y do procesów.\n" +"Parametry MODUÅ podajÄ… wzorce nazw plików dopasowujÄ…ce moduÅ‚y do procesów.\n" "Za pomocÄ… opcji -f dopasowuje nazwÄ™ głównego (okrojonego) pliku (ukoÅ›niki " "nigdy nie sÄ… specjalne), w innym przypadku dopasowujÄ… proste nazwy modułów. " "JeÅ›li nie podano parametrów, przetwarza wszystkie odnalezione moduÅ‚y.\n" "\n" "Wiele modułów zostaje zapisanych do plików w KATALOGU-WYJÅšCIOWYM, tworzÄ…c " -"podkatalogi, jeÅ›li sÄ… wymagane. UżywajÄ…c opcji -m te pliki majÄ…ce proste " -"nazwy modułów, w innym przypadku majÄ… nazwy głównego pliku uzupeÅ‚nione " -"katalogiem w KATALOGU-WYJÅšCIOWYM.\n" +"podkatalogi, jeÅ›li sÄ… wymagane. UżywajÄ…c opcji -m te pliki majÄ… proste nazwy " +"modułów, w innym przypadku majÄ… nazwy głównego pliku uzupeÅ‚nione katalogiem " +"w KATALOGU-WYJÅšCIOWYM.\n" "\n" "UżywajÄ…c opcji -n żadne pliki nie zostajÄ… zapisane, a jeden wiersz do " "standardowego wyjÅ›cia dla każdego moduÅ‚u:\n" @@ -7101,7 +7468,29 @@ msgstr "" "jest nazwÄ… oddzielnego pliku debuginfo lub „-â€, jeÅ›li nie odnaleziono " "debuginfo lub „.â€, jeÅ›li PLIK zawiera informacje debugowania." -#: tests/backtrace.c:436 +#. Short description of program. +#: debuginfod/debuginfod-find.c:42 +msgid "Request debuginfo-related content from debuginfods listed in $" +msgstr "Żąda zawartość powiÄ…zanÄ… z debuginfo z debuginfod wymienionych w $" + +#. Strings for arguments in help texts. +#: debuginfod/debuginfod-find.c:46 +msgid "" +"debuginfo BUILDID\n" +"debuginfo PATH\n" +"executable BUILDID\n" +"executable PATH\n" +"source BUILDID /FILENAME\n" +"source PATH /FILENAME\n" +msgstr "" +"debuginfo IDENTYFIKATOR-KOPII\n" +"debuginfo ÅšCIEÅ»KA\n" +"executable IDENTYFIKATOR-KOPII\n" +"executable ÅšCIEÅ»KA\n" +"source IDENTYFIKATOR-KOPII /NAZWA-PLIKU\n" +"source ÅšCIEÅ»KA /NAZWA-PLIKU\n" + +#: tests/backtrace.c:483 msgid "Run executable" msgstr "Uruchamia plik wykonywalny" @@ -7113,79 +7502,6 @@ msgstr "Dodatkowo wyÅ›wietla nazwy funkcji" msgid "Show instances of inlined functions" msgstr "WyÅ›wietla wystÄ…pienia wstawionych funkcji" -#, fuzzy -#~ msgid "" -#~ " [%6tx] base address\n" -#~ " " -#~ msgstr " [%6tx] adres podstawowy %s\n" - -#, fuzzy -#~ msgid "%s: error getting zero section: %s" -#~ msgstr "%s: bÅ‚Ä…d podczas odczytywania pliku: %s" - -#, fuzzy -#~ msgid "%s: error while updating zero section: %s" -#~ msgstr "%s: bÅ‚Ä…d podczas odczytywania pliku: %s" - -#~ msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" -#~ msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" - -#~ msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" -#~ msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" - -#~ msgid "%#<PRIx64> <%s+%#<PRIx64>>" -#~ msgstr "%#<PRIx64> <%s+%#<PRIx64>>" - -#~ msgid "%#0*<PRIx64> <%s+%#<PRIx64>>" -#~ msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>" - -#~ msgid "%s+%#<PRIx64> <%s>" -#~ msgstr "%s+%#<PRIx64> <%s>" - -#~ msgid "%s+%#0*<PRIx64> <%s>" -#~ msgstr "%s+%#0*<PRIx64> <%s>" - -#~ msgid "%#<PRIx64> <%s>" -#~ msgstr "%#<PRIx64> <%s>" - -#~ msgid "%#0*<PRIx64> <%s>" -#~ msgstr "%#0*<PRIx64> <%s>" - -#~ msgid "%s+%#<PRIx64>" -#~ msgstr "%s+%#<PRIx64>" - -#~ msgid "%s+%#0*<PRIx64>" -#~ msgstr "%s+%#0*<PRIx64>" - -#~ msgid " %s..%s (%<PRIx64>)\n" -#~ msgstr " %s..%s (%<PRIx64>)\n" - -#~ msgid " %s..%s\n" -#~ msgstr " %s..%s\n" - -#~ msgid " advance address by %u to %s, op_index to %u\n" -#~ msgstr " zwiÄ™kszenie adresu o %u do %s, op_index do %u\n" - -#~ msgid " advance address by constant %u to %s, op_index to %u\n" -#~ msgstr " zwiÄ™kszenie adresu o staÅ‚Ä… %u do %s, op_index do %u\n" - -#~ msgid " [%6tx] %s..%s\n" -#~ msgstr " [%6tx] %s…%s\n" - -#~ msgid " %s..%s\n" -#~ msgstr " %s…%s\n" - -#~ msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s" -#~ msgstr "nie można uzyskać DIE pod offsetem %<PRIu64> w sekcji „%sâ€: %s" - -#~ msgid " [%6tx] %s..%s" -#~ msgstr " [%6tx] %s…%s" - -#~ msgid " %s..%s" -#~ msgstr " %s…%s" - -#~ msgid "vendor opcode not verified?" -#~ msgstr "instrukcja producenta nie zostaÅ‚a sprawdzona?" - -#~ msgid "-R option supports only .comment section" -#~ msgstr "Opcja -R obsÅ‚uguje tylko sekcjÄ™ .comment" +#, 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-02-05 21:10+0100\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\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:3453 -#: src/readelf.c:11501 src/unstrip.c:312 src/unstrip.c:2398 src/unstrip.c:2603 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "пам’ÑÑ‚ÑŒ вичерпано" @@ -111,6 +106,24 @@ msgstr "підтримки Ñерверів не передбачено" msgid "unknown error" msgstr "невідома помилка" +#: libcpu/i386_lex.l:122 +#, fuzzy, c-format +#| msgid "invalid page size value '%s': ignored" +msgid "invalid character '%c' at line %d; ignored" +msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñторінки «%s»: проігноровано" + +#: libcpu/i386_lex.l:123 +#, fuzzy, c-format +#| msgid "invalid page size value '%s': ignored" +msgid "invalid character '\\%o' at line %d; ignored" +msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñторінки «%s»: проігноровано" + +#: libcpu/i386_parse.y:554 +#, fuzzy, c-format +#| msgid "while reading linker script '%s': %s at line %d" +msgid "while reading i386 CPU description: %s at line %d" +msgstr "під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñкрипту ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»: %s у Ñ€Ñдку %d" + #: libdw/dwarf_error.c:59 msgid "invalid access" msgstr "некоректний доÑтуп" @@ -291,7 +304,7 @@ msgstr "невідомий код мови" msgid ".debug_addr section missing" msgstr "пропущено розділ .debug_addr" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2544 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 msgid "Input selection options:" msgstr "Вибір параметрів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:" @@ -519,8 +532,8 @@ msgstr "Ðе Ñ” файлом ET_CORE ELF" msgid "No backend" msgstr "Ðемає Ñервера" -#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77 -#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130 +#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 +#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "<unknown>" @@ -616,7 +629,7 @@ msgstr "некоректна розмірніÑÑ‚ÑŒ вхідного парамРmsgid "invalid size of destination operand" msgstr "некоректна розмірніÑÑ‚ÑŒ вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:6209 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "некоректне кодуваннÑ" @@ -701,8 +714,8 @@ msgstr "невідповідніÑÑ‚ÑŒ полів data/scn" msgid "invalid section header" msgstr "некоректний заголовок розділу" -#: libelf/elf_error.c:191 src/readelf.c:10012 src/readelf.c:10612 -#: src/readelf.c:10713 src/readelf.c:10895 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "некоректні дані" @@ -830,7 +843,7 @@ msgstr "Виводити розшифровані Ñимволи (ÐРГ завР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:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Інше:" @@ -1169,6 +1182,235 @@ msgstr "розмір архіву «%s» Ñ” занадто великим" msgid "cannot read ELF header of %s(%s): %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF з %s(%s): %s" +#: src/elfclassify.c:91 +msgid "opening" +msgstr "" + +#: src/elfclassify.c:98 +msgid "reading" +msgstr "" + +#: src/elfclassify.c:244 +#, fuzzy +#| msgid "cannot get ELF header" +msgid "ELF header" +msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF" + +#: src/elfclassify.c:255 +#, fuzzy +#| msgid "Program Headers:" +msgid "program headers" +msgstr "Заголовки програми:" + +#: src/elfclassify.c:264 +#, fuzzy +#| msgid "Program Headers:" +msgid "program header" +msgstr "Заголовки програми:" + +#: src/elfclassify.c:284 +#, fuzzy +#| msgid "Section Headers:" +msgid "section headers" +msgstr "Заголовки розділів:" + +#: src/elfclassify.c:295 +#, fuzzy +#| msgid "cannot get section header string table index" +msgid "section header string table index" +msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків" + +#: src/elfclassify.c:309 +#, fuzzy +#| msgid "cannot get section header" +msgid "could not obtain section header" +msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу" + +#: src/elfclassify.c:315 +#, fuzzy +#| msgid "cannot get section name" +msgid "could not obtain section name" +msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу" + +#: src/elfclassify.c:828 +msgid "writing to standard output" +msgstr "" + +#: src/elfclassify.c:855 +msgid "reading from standard input" +msgstr "" + +#: src/elfclassify.c:876 +#, fuzzy +#| msgid "Input selection options:" +msgid "Classification options" +msgstr "Вибір параметрів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:" + +#: src/elfclassify.c:878 +msgid "File looks like an ELF object or archive/static library (default)" +msgstr "" + +#: src/elfclassify.c:881 +msgid "File is an regular ELF object (not an archive/static library)" +msgstr "" + +#: src/elfclassify.c:884 +msgid "File is an ELF archive or static library" +msgstr "" + +#: src/elfclassify.c:887 +msgid "File is an ELF core dump file" +msgstr "" + +#: 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:893 +msgid "File is (primarily) an ELF program executable (not primarily a DSO)" +msgstr "" + +#: src/elfclassify.c:896 +msgid "File is an ELF program executable (might also be a DSO)" +msgstr "" + +#: src/elfclassify.c:899 +msgid "" +"File is (primarily) an ELF shared object (DSO) (not primarily an executable)" +msgstr "" + +#: src/elfclassify.c:902 +msgid "File is an ELF shared object (DSO) (might also be an executable)" +msgstr "" + +#: src/elfclassify.c:906 +#, fuzzy +#| msgid "cannot find kernel modules" +msgid "File is a linux kernel module" +msgstr "не вдалоÑÑ Ð²Ð¸Ñвити модулі Ñдра" + +#: src/elfclassify.c:908 +msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" +msgstr "" + +#: src/elfclassify.c:911 +msgid "File is a loadable ELF object (program or shared object)" +msgstr "" + +#: src/elfclassify.c:940 +msgid "Input flags" +msgstr "" + +#: src/elfclassify.c:942 +msgid "Only classify regular (not symlink nor special device) files" +msgstr "" + +#: src/elfclassify.c:944 +msgid "" +"Also read file names to process from standard input, separated by newlines" +msgstr "" + +#: src/elfclassify.c:947 +msgid "" +"Also read file names to process from standard input, separated by ASCII NUL " +"bytes" +msgstr "" + +#: src/elfclassify.c:950 +msgid "Do not read files from standard input (default)" +msgstr "" + +#: src/elfclassify.c:952 +msgid "Try to open compressed files or embedded (kernel) ELF images" +msgstr "" + +#: src/elfclassify.c:955 +#, fuzzy +#| msgid "Output format:" +msgid "Output flags" +msgstr "Формат виводу:" + +#: src/elfclassify.c:957 +msgid "Output names of files, separated by newline" +msgstr "" + +#: src/elfclassify.c:959 +msgid "Output names of files, separated by ASCII NUL" +msgstr "" + +#: src/elfclassify.c:961 +#, fuzzy +#| msgid "More than one output file name given." +msgid "Do not output file names" +msgstr "Вказано декілька назв файлів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…." + +#: src/elfclassify.c:963 +msgid "If printing file names, print matching files (default)" +msgstr "" + +#: src/elfclassify.c:965 +msgid "If printing file names, print files that do not match" +msgstr "" + +#: src/elfclassify.c:967 +msgid "Additional flags" +msgstr "" + +#: src/elfclassify.c:969 +msgid "Output additional information (can be specified multiple times)" +msgstr "" + +#: src/elfclassify.c:971 +msgid "Suppress some error output (counterpart to --verbose)" +msgstr "" + +#. Strings for arguments in help texts. +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 +#: src/readelf.c:158 +msgid "FILE..." +msgstr "ФÐЙЛ..." + +#: src/elfclassify.c:980 +msgid "" +"Determine the type of an ELF file.\n" +"\n" +"All of the classification options must apply at the same time to a " +"particular file. Classification options can be negated using a \"--not-\" " +"prefix.\n" +"\n" +"Since modern ELF does not clearly distinguish between programs and dynamic " +"shared objects, you should normally use either --executable or --shared to " +"identify the primary purpose of a file. Only one of the --shared and --" +"executable checks can pass for a file.\n" +"\n" +"If you want to know whether an ELF object might a program or a shared " +"library (but could be both), then use --program or --library. Some ELF files " +"will classify as both a program and a library.\n" +"\n" +"If you just want to know whether an ELF file is loadable (as program or " +"library) use --loadable. Note that files that only contain (separate) debug " +"information (--debug-only) are never --loadable (even though they might " +"contain program headers). Linux kernel modules are also not --loadable (in " +"the normal sense).\n" +"\n" +"Without any of the --print options, the program exits with status 0 if the " +"requested checks pass for all input files, with 1 if a check fails for any " +"file, and 2 if there is an environmental issue (such as a file read error or " +"a memory allocation error).\n" +"\n" +"When printing file names, the program exits with status 0 even if no file " +"names are printed, and exits with status 2 if there is an environmental " +"issue.\n" +"\n" +"On usage error (e.g. a bad option was given), the program exits with a " +"status code larger than 2.\n" +"\n" +"The --quiet or -q option suppresses some error warning output, but doesn't " +"change the exit status." +msgstr "" + #: src/elfcmp.c:60 msgid "Control options:" msgstr "Параметри керуваннÑ:" @@ -1362,14 +1604,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/unstrip.c:2194 src/unstrip.c:2223 +#: 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:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, 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" @@ -1379,7 +1621,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" @@ -1394,37 +1636,37 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу %zu: %s" msgid "cannot get relocation: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ переÑуваннÑ: %s" -#: src/elfcompress.c:115 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "параметр -o вказано двічі" -#: src/elfcompress.c:122 +#: src/elfcompress.c:124 #, c-format msgid "-t option specified twice" msgstr "параметр -t вказано двічі" -#: src/elfcompress.c:131 +#: src/elfcompress.c:133 #, c-format msgid "unknown compression type '%s'" msgstr "невідомий тип ÑтиÑÐ½ÐµÐ½Ð½Ñ Â«%s»" #. We need at least one input file. -#: src/elfcompress.c:143 src/elfcompress.c:1347 +#: src/elfcompress.c:145 src/elfcompress.c:1345 #, c-format msgid "No input file given" msgstr "Ðе надано файла вхідних даних" -#: src/elfcompress.c:149 src/elfcompress.c:1352 +#: src/elfcompress.c:151 src/elfcompress.c:1350 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "З параметром «-o» можна викориÑтовувати лише один файл вхідних даних" -#: src/elfcompress.c:1309 +#: src/elfcompress.c:1307 msgid "Place (de)compressed output into FILE" msgstr "ПоміÑтити результати Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ ÑтиÑÐºÐ°Ð½Ð½Ñ Ð´Ð¾ ФÐЙЛа" -#: src/elfcompress.c:1312 +#: src/elfcompress.c:1310 msgid "" "What type of compression to apply. TYPE can be 'none' (decompress), " "'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-" @@ -1435,7 +1677,7 @@ msgstr "" "назва — «zlib-gabi») або «zlib-gnu» (ÑтиÑÐºÐ°Ð½Ð½Ñ Ñƒ Ñтилі GNU .zdebug, інша " "назва — «gnu»)" -#: src/elfcompress.c:1315 +#: src/elfcompress.c:1313 msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" @@ -1443,12 +1685,12 @@ msgstr "" "назва РОЗДІЛу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ ÑтиÑканнÑ, РОЗДІЛ Ñ” розширеним взірцем із " "замінниками (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ -- «.?(z)debug*»)" -#: src/elfcompress.c:1318 +#: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" msgstr "" "ВивеÑти Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ розділу, Ñкий розпаковуєтьÑÑ Ñ‡Ð¸ ÑтиÑкаєтьÑÑ" -#: src/elfcompress.c:1321 +#: src/elfcompress.c:1319 msgid "" "Force compression of section even if it would become larger or update/" "rewrite the file even if no section would be (de)compressed" @@ -1456,21 +1698,16 @@ msgstr "" "ПримуÑове ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, навіть Ñкщо він Ñтане більшим, або Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð¸ " "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°, навіть Ñкщо жодного розділу не буде розпаковано або ÑтиÑнено" -#: src/elfcompress.c:1324 src/strip.c:93 +#: src/elfcompress.c:1322 src/strip.c:93 msgid "Relax a few rules to handle slightly broken ELF files" msgstr "" "Знехтувати декількома правилами Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ трохи пошкоджених файлів ELF" -#: src/elfcompress.c:1327 +#: src/elfcompress.c:1325 msgid "Be silent when a section cannot be compressed" msgstr "Ðе Ñповіщати, Ñкщо розділ неможливо ÑтиÑнути" -#. Strings for arguments in help texts. -#: src/elfcompress.c:1336 src/elflint.c:77 src/readelf.c:158 -msgid "FILE..." -msgstr "ФÐЙЛ..." - -#: src/elfcompress.c:1337 +#: src/elfcompress.c:1335 msgid "Compress or decompress sections in an ELF file." msgstr "СтиÑнути або розпакувати розділи у файлі ELF." @@ -1680,7 +1917,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:3444 src/elflint.c:4456 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу\n" @@ -2828,36 +3065,36 @@ msgstr "розділ [%2d] «%s»: немає Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BASE\n" msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "розділ [%2d] «%s»: невідома оÑновна верÑÑ–Ñ Â«%s»\n" -#: src/elflint.c:3436 +#: src/elflint.c:3448 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "розділ [%2d] «%s»: порожній розділ атрибутів об’єкта\n" -#: src/elflint.c:3457 +#: src/elflint.c:3464 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ формат атрибутів\n" -#: src/elflint.c:3473 +#: src/elflint.c:3475 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: поле нульового розміру у розділі атрибутів\n" -#: src/elflint.c:3482 +#: src/elflint.c:3484 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: некоректна довжина у розділі атрибутів\n" -#: src/elflint.c:3494 +#: src/elflint.c:3496 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершений Ñ€Ñдок назви поÑтачальника\n" -#: src/elflint.c:3511 +#: src/elflint.c:3513 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2865,12 +3102,12 @@ msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершене поле ULEB128 у тезі підрозділу " "атрибутів\n" -#: src/elflint.c:3520 +#: src/elflint.c:3522 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: обрізаний розділ атрибутів\n" -#: src/elflint.c:3529 +#: src/elflint.c:3531 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2878,7 +3115,7 @@ msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: поле нульового розміру у підрозділі " "атрибутів\n" -#: src/elflint.c:3544 +#: src/elflint.c:3546 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2886,7 +3123,7 @@ msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: некоректна довжина у підрозділі атрибутів\n" #. Tag_File -#: src/elflint.c:3555 +#: src/elflint.c:3557 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2894,35 +3131,35 @@ msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: підрозділ атрибутів міÑтить неочікуваний " "теґ %u\n" -#: src/elflint.c:3573 +#: src/elflint.c:3575 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершене поле ULEB128 у тезі атрибуту\n" -#: src/elflint.c:3584 +#: src/elflint.c:3586 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершений Ñ€Ñдок у атрибуті\n" -#: src/elflint.c:3597 +#: src/elflint.c:3599 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершений теґ атрибуту %u\n" -#: src/elflint.c:3601 +#: src/elflint.c:3603 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s атрибуту %<PRIu64>\n" -#: src/elflint.c:3611 +#: src/elflint.c:3613 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: невідомий поÑтачальник «%s»\n" -#: src/elflint.c:3617 +#: src/elflint.c:3619 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2930,47 +3167,47 @@ msgstr "" "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: зайві байти піÑÐ»Ñ Ð¾Ñтаннього розділу " "атрибутів\n" -#: src/elflint.c:3714 +#: src/elflint.c:3716 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок нульового розділу\n" -#: src/elflint.c:3718 +#: src/elflint.c:3720 #, c-format msgid "zeroth section has nonzero name\n" msgstr "нульовий розділ має ненульову назву\n" -#: src/elflint.c:3720 +#: src/elflint.c:3722 #, c-format msgid "zeroth section has nonzero type\n" msgstr "нульовий розділ має ненульовий тип\n" -#: src/elflint.c:3722 +#: src/elflint.c:3724 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "нульовий розділ має ненульові прапорці\n" -#: src/elflint.c:3724 +#: src/elflint.c:3726 #, c-format msgid "zeroth section has nonzero address\n" msgstr "нульовий розділ має ненульову адреÑу\n" -#: src/elflint.c:3726 +#: src/elflint.c:3728 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "нульовий розділ має ненульове зміщеннÑ\n" -#: src/elflint.c:3728 +#: src/elflint.c:3730 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ\n" -#: src/elflint.c:3730 +#: src/elflint.c:3732 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ запиÑу\n" -#: src/elflint.c:3733 +#: src/elflint.c:3735 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2979,7 +3216,7 @@ msgstr "" "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ, хоча заголовок ELF ман " "ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ shnum\n" -#: src/elflint.c:3737 +#: src/elflint.c:3739 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2988,7 +3225,7 @@ msgstr "" "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ, хоча у заголовку ELF " "немає Ñигналу Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñƒ shstrndx\n" -#: src/elflint.c:3741 +#: src/elflint.c:3743 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2997,28 +3234,28 @@ msgstr "" "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ, хоча у заголовку ELF " "немає Ñигналу Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñƒ phnum\n" -#: src/elflint.c:3759 +#: src/elflint.c:3761 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу [%2zu] «%s»: %s\n" -#: src/elflint.c:3768 +#: src/elflint.c:3770 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "розділ [%2zu]: некоректна назва\n" -#: src/elflint.c:3795 +#: src/elflint.c:3797 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" "розділ [%2d] «%s» належить до помилкового типу: мав бути %s, маємо %s\n" -#: src/elflint.c:3812 +#: src/elflint.c:3814 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, маємо %s\n" -#: src/elflint.c:3830 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -3026,12 +3263,12 @@ msgstr "" "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, можливо, %s, але " "маємо %s\n" -#: src/elflint.c:3847 +#: src/elflint.c:3849 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "у об’єктному файлі виÑвлено розділ [%2zu] «%s»\n" -#: src/elflint.c:3853 src/elflint.c:3885 +#: src/elflint.c:3855 src/elflint.c:3887 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -3039,7 +3276,7 @@ msgstr "" "у розділ [%2zu] «%s» вÑтановлено прапорець SHF_ALLOC, але немає придатного " "до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмента\n" -#: src/elflint.c:3858 src/elflint.c:3890 +#: src/elflint.c:3860 src/elflint.c:3892 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -3048,7 +3285,7 @@ msgstr "" "у розділі [%2zu] «%s» не вÑтановлено прапорець SHF_ALLOC, але Ñ” придатні до " "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегменти\n" -#: src/elflint.c:3866 +#: src/elflint.c:3868 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -3056,22 +3293,22 @@ msgstr "" "розділ [%2zu] «%s» Ñ” таблицею-покажчиком розділу розширень у файлі, Ñкий не " "Ñ” об’єктним\n" -#: src/elflint.c:3909 +#: src/elflint.c:3911 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "розділ [%2zu] «%s»: розмір не Ñ” кратним до розміру запиÑу\n" -#: src/elflint.c:3914 +#: src/elflint.c:3916 #, c-format msgid "cannot get section header\n" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу\n" -#: src/elflint.c:3924 +#: src/elflint.c:3926 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "розділ [%2zu] «%s» належить до непідтримуваного типу %d\n" -#: src/elflint.c:3944 +#: src/elflint.c:3946 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" @@ -3079,74 +3316,74 @@ msgstr "" "розділ [%2zu] «%s» міÑтить некоректні Ñпецифічні Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора прапорці " "%#<PRIx64>\n" -#: src/elflint.c:3954 +#: src/elflint.c:3956 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "розділ [%2zu] «%s» міÑтить невідомі прапорці %#<PRIx64>\n" -#: src/elflint.c:3962 +#: src/elflint.c:3964 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "розділ [%2zu] «%s»: адреÑа розділів локальних даних потоків не Ñ” нульовою\n" -#: src/elflint.c:3972 +#: src/elflint.c:3974 #, c-format msgid "section [%2zu] '%s': allocated section cannot be compressed\n" msgstr "" "розділ [%2zu] «%s»: розміщений у пам'ÑÑ‚Ñ– розділ не може бути ÑтиÑнений\n" -#: src/elflint.c:3977 +#: src/elflint.c:3979 #, c-format msgid "section [%2zu] '%s': nobits section cannot be compressed\n" msgstr "розділ [%2zu] «%s»: розділ nobits не може бути ÑтиÑнений\n" -#: src/elflint.c:3983 +#: src/elflint.c:3985 #, c-format msgid "" "section [%2zu] '%s': compressed section with no compression header: %s\n" msgstr "розділ [%2zu] «%s»: ÑтиÑнений розділ без заголовка ÑтиÑненнÑ: %s\n" -#: src/elflint.c:3989 +#: src/elflint.c:3991 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "розділ [%2zu] «%s»: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ у значенні компонуваннÑ\n" -#: src/elflint.c:3994 +#: src/elflint.c:3996 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "розділ [%2zu] «%s»: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ у значенні відомоÑтей\n" -#: src/elflint.c:4001 +#: src/elflint.c:4003 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "розділ [%2zu] «%s»: вÑтановлено прапорець strings без Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ merge\n" -#: src/elflint.c:4006 +#: src/elflint.c:4008 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "розділ [%2zu] «%s»: вÑтановлено прапорець merge, але розмір запиÑу Ñ” " "нульовим\n" -#: src/elflint.c:4025 +#: src/elflint.c:4027 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "розділ [%2zu] «%s» має неочікуваний тип %d Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ розділу\n" -#: src/elflint.c:4034 +#: src/elflint.c:4036 #, c-format msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n" msgstr "розділ [%2zu] «%s» у файлах debuginfo має належати до типу NOBITS\n" -#: src/elflint.c:4041 +#: src/elflint.c:4043 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "розділ [%2zu] «%s» Ñ” одночаÑно виконуваним Ñ– придатним до запиÑу\n" -#: src/elflint.c:4072 +#: src/elflint.c:4074 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -3155,7 +3392,7 @@ msgstr "" "розділ [%2zu] «%s» не повніÑÑ‚ÑŽ міÑтитьÑÑ Ñƒ Ñегменті запиÑу заголовка " "програми %d\n" -#: src/elflint.c:4082 +#: src/elflint.c:4084 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3164,7 +3401,7 @@ msgstr "" "розділ [%2zu] «%s» належить до типу NOBITS, але його Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ Ð· " "файла у Ñегментів запиÑу заголовка програми %d\n" -#: src/elflint.c:4108 +#: src/elflint.c:4110 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -3173,7 +3410,7 @@ msgstr "" "розділ [%2zu] «%s» належить до типу NOBITS, але його Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ Ð· " "файла у Ñегментів запиÑу заголовка програми %d, а вміÑÑ‚ файла Ñ” ненульовим\n" -#: src/elflint.c:4119 +#: src/elflint.c:4121 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -3182,19 +3419,19 @@ msgstr "" "розділ [%2zu] «%s» не належить до типу NOBITS, але його Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ " "виконуєтьÑÑ Ð· файла у Ñегментів запиÑу заголовка програми %d\n" -#: src/elflint.c:4130 +#: src/elflint.c:4132 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "розділ [%2zu] «%s» Ñ” виконуваним у невиконуваному Ñегменті %d\n" -#: src/elflint.c:4140 +#: src/elflint.c:4142 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" "розділ [%2zu] «%s» Ñ” придатним до запиÑу у непридатному до запиÑу Ñегменті " "%d\n" -#: src/elflint.c:4150 +#: src/elflint.c:4152 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -3202,7 +3439,7 @@ msgstr "" "розділ [%2zu] «%s»: вÑтановлено прапорець alloc, але розділ не перебуває у " "жодному завантаженому Ñегменті\n" -#: src/elflint.c:4156 +#: src/elflint.c:4158 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -3211,7 +3448,7 @@ msgstr "" "розділ [%2zu] «%s»: заголовок ELF повідомлÑÑ” про те, що це Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків " "заголовка розділу, але Ñ†Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ðµ належить до типу SHT_TYPE\n" -#: src/elflint.c:4164 +#: src/elflint.c:4166 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -3219,17 +3456,17 @@ msgstr "" "розділ [%2zu] «%s»: придатні до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¸ не можуть міÑтити " "динамічних таблиць Ñимволів\n" -#: src/elflint.c:4215 +#: src/elflint.c:4217 #, c-format msgid "more than one version symbol table present\n" msgstr "виÑвлено більше за одну таблицю Ñимволів верÑій\n" -#: src/elflint.c:4238 +#: src/elflint.c:4240 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "Ñ–Ñнує Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми INTERP, але не розділ .interp\n" -#: src/elflint.c:4249 +#: src/elflint.c:4251 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -3237,14 +3474,14 @@ msgstr "" "придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмент [%u] Ñ” виконуваним, але не міÑтить " "виконуваних розділів\n" -#: src/elflint.c:4255 +#: src/elflint.c:4257 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð» [%u] Ñ” придатним до запиÑу, але не міÑтить " "придатних до запиÑу розділів\n" -#: src/elflint.c:4266 +#: src/elflint.c:4268 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -3253,24 +3490,24 @@ msgstr "" "немає розділу .gnu.versym, хоча Ñ–Ñнує розділ .gnu.versym_d або .gnu." "versym_r\n" -#: src/elflint.c:4279 +#: src/elflint.c:4281 #, c-format msgid "duplicate version index %d\n" msgstr "дублікат індекÑу верÑÑ–Ñ— %d\n" -#: src/elflint.c:4293 +#: src/elflint.c:4295 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" "Ñ–Ñнує розділ .gnu.versym, але немає розділу .gnu.versym_d або .gnu.versym_r\n" -#: src/elflint.c:4342 +#: src/elflint.c:4344 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" "phdr[%d]: невідомий тип нотатки файла core %<PRIu32> за зміщеннÑм %<PRIu64>\n" -#: src/elflint.c:4346 +#: src/elflint.c:4348 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n" @@ -3278,7 +3515,7 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки файла core %<PRIu32> за зміщеннÑм " "%zu\n" -#: src/elflint.c:4395 +#: src/elflint.c:4397 #, c-format msgid "" "phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at " @@ -3287,7 +3524,7 @@ msgstr "" "phdr[%d]: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із іменем " "влаÑника «%s» за зміщеннÑм %zu\n" -#: src/elflint.c:4400 +#: src/elflint.c:4402 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> with owner name " @@ -3296,39 +3533,39 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із " "іменем влаÑника «%s» за зміщеннÑм %zu\n" -#: src/elflint.c:4419 +#: src/elflint.c:4421 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n" -#: src/elflint.c:4439 +#: src/elflint.c:4441 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток: %s\n" -#: src/elflint.c:4442 +#: src/elflint.c:4444 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: зайві %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтаннього запиÑу нотатки\n" -#: src/elflint.c:4463 +#: src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "розділ [%2d] «%s»: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n" -#: src/elflint.c:4470 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток\n" -#: src/elflint.c:4473 +#: src/elflint.c:4475 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" "розділ [%2d] «%s»: додаткові %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтанньої нотатки\n" -#: src/elflint.c:4491 +#: src/elflint.c:4493 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3336,66 +3573,66 @@ msgstr "" "заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів " "Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ файлів core\n" -#: src/elflint.c:4506 +#: src/elflint.c:4508 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: %s\n" -#: src/elflint.c:4516 +#: src/elflint.c:4518 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: невідомий тип запиÑу заголовка програми " "%#<PRIx64>\n" -#: src/elflint.c:4527 +#: src/elflint.c:4529 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ INTERP у заголовку програми\n" -#: src/elflint.c:4535 +#: src/elflint.c:4537 #, c-format msgid "more than one TLS entry in program header\n" msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ TLS у заголовку програми\n" -#: src/elflint.c:4542 +#: src/elflint.c:4544 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "у Ñтатичному виконуваному файлі не може бути динамічних розділів\n" -#: src/elflint.c:4556 +#: src/elflint.c:4558 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° динамічний розділ у заголовку програми має помилкове зміщеннÑ\n" -#: src/elflint.c:4559 +#: src/elflint.c:4561 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "розміри динамічного розділу у заголовку програми та у заголовку розділу не " "збігаютьÑÑ\n" -#: src/elflint.c:4569 +#: src/elflint.c:4571 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ GNU_RELRO у заголовку програми\n" -#: src/elflint.c:4590 +#: src/elflint.c:4592 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" "придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмент, до Ñкого звертаєтьÑÑ GNU_RELRO, " "непридатний до запиÑу\n" -#: src/elflint.c:4601 +#: src/elflint.c:4603 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "прапорці придатного до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмента [%u] не відповідають прапорцÑм " "GNU_RELRO [%u]\n" -#: src/elflint.c:4608 +#: src/elflint.c:4610 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" @@ -3403,76 +3640,76 @@ msgstr "" "прапорці GNU_RELRO [%u] не Ñ” підмножиною прапорців завантажуваного Ñегмента " "[%u]\n" -#: src/elflint.c:4617 src/elflint.c:4640 +#: src/elflint.c:4619 src/elflint.c:4642 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "Ñегмент %s не міÑтитьÑÑ Ñƒ завантаженому Ñегменті\n" -#: src/elflint.c:4646 +#: src/elflint.c:4648 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми у заголовку ELF Ñ– Ð·Ð°Ð¿Ð¸Ñ PHDR не збігаютьÑÑ" -#: src/elflint.c:4673 +#: src/elflint.c:4675 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° таблицю вікон викликів у заголовку програми має помилкове " "зміщеннÑ\n" -#: src/elflint.c:4676 +#: src/elflint.c:4678 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку " "розділу не збігаютьÑÑ\n" -#: src/elflint.c:4689 +#: src/elflint.c:4691 #, 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:4697 +#: src/elflint.c:4699 #, c-format msgid "call frame search table must be allocated\n" msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’ÑÑ‚Ñ–\n" -#: src/elflint.c:4700 +#: src/elflint.c:4702 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "розділ [%2zu] «%s» має бути розміщено у пам’ÑÑ‚Ñ–\n" -#: src/elflint.c:4704 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must not be writable\n" msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до запиÑу\n" -#: src/elflint.c:4707 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до запиÑу\n" -#: src/elflint.c:4712 +#: src/elflint.c:4714 #, c-format msgid "call frame search table must not be executable\n" msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до виконаннÑ\n" -#: src/elflint.c:4715 +#: src/elflint.c:4717 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконаннÑ\n" -#: src/elflint.c:4726 +#: src/elflint.c:4728 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: розмір файла перевищує об’єм пам’ÑÑ‚Ñ–\n" -#: src/elflint.c:4733 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” Ñтепенем 2\n" -#: src/elflint.c:4736 +#: src/elflint.c:4738 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3481,7 +3718,7 @@ msgstr "" "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ файлі Ñ– віртуальна адреÑа не " "ÑпіввідноÑÑÑ‚ÑŒÑÑ Ð· вирівнюваннÑм\n" -#: src/elflint.c:4749 +#: src/elflint.c:4751 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3490,109 +3727,109 @@ msgstr "" "виконуваний модуль/DSO з розділом .eh_frame_hdr не міÑтить запиÑу заголовка " "програми PT_GNU_EH_FRAME" -#: src/elflint.c:4783 +#: src/elflint.c:4785 #, c-format msgid "cannot read ELF header: %s\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF: %s\n" -#: src/elflint.c:4795 +#: src/elflint.c:4797 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "не вдалоÑÑ Ñтворити файл" -#: src/elflint.c:4816 +#: src/elflint.c:4818 #, 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/-" @@ -3601,7 +3838,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 " @@ -3610,7 +3847,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" @@ -3717,12 +3954,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:2767 #, 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:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла" @@ -3756,24 +3993,24 @@ msgstr "не вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ Ð msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "не вдалоÑÑ Ñтворити дерево пошуку" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 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:2711 -#: src/readelf.c:2787 src/readelf.c:2874 src/readelf.c:3472 src/readelf.c:3522 -#: src/readelf.c:3592 src/readelf.c:11328 src/readelf.c:12523 -#: src/readelf.c:12734 src/readelf.c:12803 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: 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:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -3787,7 +4024,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3796,28 +4033,53 @@ msgstr "" "%*s%-*s %-*s ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ %-*s %*s Розділ\n" "\n" -#: src/nm.c:1250 +#: src/nm.c:775 +#, fuzzy +#| msgid " Name: " +msgctxt "sysv" +msgid "Name" +msgstr "Ðазва: " + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:777 +msgctxt "sysv" +msgid "Value" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:779 +msgctxt "sysv" +msgid "Size" +msgstr "" + +#. TRANS: the "sysv|" parts makes the string unique. +#: src/nm.c:781 +msgctxt "sysv" +msgid "Line" +msgstr "" + +#: src/nm.c:1249 #, 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:1254 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: розмір розділу %zd «%s» не Ñ” кратним до розміру запиÑу" -#: src/nm.c:1334 +#: src/nm.c:1335 #, 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:1570 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: некоректна діÑ" -#: src/nm.c:1620 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: немає Ñимволів" @@ -3893,7 +4155,7 @@ msgstr "ВміÑÑ‚ розділу %s:\n" msgid "cannot disassemble" msgstr "не вдалоÑÑ Ð´Ð¸Ð·Ð°Ñемблювати" -#: src/objdump.c:760 +#: src/objdump.c:759 #, fuzzy, c-format msgid "cannot create backend for elf file" msgstr "не вдалоÑÑ Ñтворити файл" @@ -4079,7 +4341,7 @@ 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:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s" @@ -4089,11 +4351,11 @@ msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділі msgid "cannot get section: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12754 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:487 src/unstrip.c:608 -#: src/unstrip.c:629 src/unstrip.c:669 src/unstrip.c:885 src/unstrip.c:1216 -#: src/unstrip.c:1343 src/unstrip.c:1367 src/unstrip.c:1423 src/unstrip.c:1487 -#: src/unstrip.c:1662 src/unstrip.c:1813 src/unstrip.c:1956 src/unstrip.c:2055 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу: %s" @@ -4103,8 +4365,8 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу: msgid "cannot get section name" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу" -#: src/readelf.c:672 src/readelf.c:6628 src/readelf.c:10600 src/readelf.c:10702 -#: src/readelf.c:10880 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані %s: %s" @@ -4446,7 +4708,7 @@ msgstr "" " Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² на Ñегмент:\n" " Розділи Ñегмента..." -#: src/readelf.c:1464 src/unstrip.c:2114 src/unstrip.c:2156 src/unstrip.c:2163 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок програми: %s" @@ -4495,18 +4757,18 @@ msgstr "<ÐЕКОРЕКТÐИЙ СИМВОЛ>" msgid "<INVALID SECTION>" msgstr "<ÐЕКОРЕКТÐИЙ РОЗДІЛ>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3488 src/readelf.c:12625 -#: src/readelf.c:12632 src/readelf.c:12676 src/readelf.c:12683 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ розділ" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3493 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу [%zd]: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2717 src/readelf.c:2793 -#: src/readelf.c:3097 src/readelf.c:3171 src/readelf.c:5401 +#: 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:5407 #, c-format msgid "invalid sh_link value in section %zu" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link у розділі %zu" @@ -4681,20 +4943,20 @@ msgstr " â„–â„– Знач. Роз. Тип Зв’Ñз Вид 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:2590 +#: src/readelf.c:2595 #, c-format msgid "bad dynamic symbol" msgstr "помилковий динамічний Ñимвол" -#: src/readelf.c:2672 +#: src/readelf.c:2680 msgid "none" msgstr "немає" -#: src/readelf.c:2689 +#: src/readelf.c:2697 msgid "| <unknown>" msgstr "| <невідомо>" -#: src/readelf.c:2720 +#: src/readelf.c:2728 #, c-format msgid "" "\n" @@ -4717,17 +4979,17 @@ msgstr[2] "" "Розділ потреби у верÑÑ–ÑÑ… [%2u] «%s», що міÑтить %d запиÑів:\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n" -#: src/readelf.c:2741 +#: src/readelf.c:2749 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: ВерÑÑ–Ñ: %hu Файл: %s Кть: %hu\n" -#: src/readelf.c:2754 +#: src/readelf.c:2762 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Ðазва: %s Прап: %s ВерÑÑ–Ñ: %hu\n" -#: src/readelf.c:2797 +#: src/readelf.c:2805 #, c-format msgid "" "\n" @@ -4750,18 +5012,18 @@ msgstr[2] "" "Розділ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ— [%2u] «%s», що міÑтить %d запиÑів:\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n" -#: src/readelf.c:2825 +#: src/readelf.c:2833 #, 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:2840 +#: src/readelf.c:2848 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: батьківÑький %d: %s\n" #. Print the header. -#: src/readelf.c:3101 +#: src/readelf.c:3109 #, c-format msgid "" "\n" @@ -4784,15 +5046,15 @@ msgstr[2] "" "Розділ Ñимволів верÑій [%2u] «%s», що міÑтить %d запиÑів:\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»" -#: src/readelf.c:3129 +#: src/readelf.c:3137 msgid " 0 *local* " msgstr " 0 *локальний* " -#: src/readelf.c:3134 +#: src/readelf.c:3142 msgid " 1 *global* " msgstr " 1 *загальний* " -#: src/readelf.c:3176 +#: src/readelf.c:3184 #, c-format msgid "" "\n" @@ -4820,22 +5082,22 @@ msgstr[2] "" "блоками):\n" " Ðдр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ: [%2u] «%s»\n" -#: src/readelf.c:3198 +#: src/readelf.c:3206 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Довжина Ðомер % від загал. ПокриттÑ\n" -#: src/readelf.c:3200 +#: src/readelf.c:3208 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:3207 +#: src/readelf.c:3215 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:3220 +#: src/readelf.c:3228 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4844,37 +5106,37 @@ msgstr "" " Ð¡ÐµÑ€ÐµÐ´Ð½Ñ ÐºÑ–Ð»ÑŒÐºÑ–ÑÑ‚ÑŒ теÑтів: уÑпішний пошук: %f\n" "\t\t\t неуÑпішний пошук: %f\n" -#: src/readelf.c:3238 src/readelf.c:3302 src/readelf.c:3368 +#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 #, c-format msgid "cannot get data for section %d: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d: %s" -#: src/readelf.c:3246 +#: src/readelf.c:3254 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "некоректні дані у розділі sysv.hash %d" -#: src/readelf.c:3275 +#: src/readelf.c:3283 #, c-format msgid "invalid chain in sysv.hash section %d" msgstr "некоректний ланцюжок у розділі sysv.hash %d" -#: src/readelf.c:3310 +#: src/readelf.c:3318 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "некоректні дані у розділі sysv.hash64 %d" -#: src/readelf.c:3341 +#: src/readelf.c:3349 #, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "некоректний ланцюжок у розділі sysv.hash64 %d" -#: src/readelf.c:3377 +#: src/readelf.c:3385 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "некоректні дані у розділі gnu.hash %d" -#: src/readelf.c:3444 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4884,7 +5146,7 @@ msgstr "" " Розмір бітової маÑки: %zu байтів %<PRIuFAST32>%% вÑтановлених бітів зÑув " "2-го хешу: %u\n" -#: src/readelf.c:3533 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4905,7 +5167,7 @@ msgstr[2] "" "Розділ ÑпиÑку бібліотек [%2zu] «%s» за зміщеннÑм %#0<PRIx64> міÑтить %d " "запиÑів:\n" -#: src/readelf.c:3547 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4913,7 +5175,7 @@ msgstr "" " Бібліотека ЧаÑовий штамп ВерÑÑ–Ñ Ñуми " "Прапорці" -#: src/readelf.c:3606 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4924,102 +5186,102 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм " "%#0<PRIx64>:\n" -#: src/readelf.c:3623 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " ВлаÑник Розмір\n" -#: src/readelf.c:3647 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3686 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" #. Tag_File -#: src/readelf.c:3691 +#: src/readelf.c:3697 #, c-format msgid " File: %11<PRIu32>\n" msgstr " Файл: %11<PRIu32>\n" -#: src/readelf.c:3740 +#: src/readelf.c:3746 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3743 +#: src/readelf.c:3749 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3746 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3756 +#: src/readelf.c:3762 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3759 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3829 +#: src/readelf.c:3835 #, c-format msgid "sprintf failure" msgstr "помилка sprintf" -#: src/readelf.c:4311 +#: src/readelf.c:4317 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:4314 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:4792 +#: src/readelf.c:4798 #, c-format msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%2<PRIuMAX>] %s <ОБРІЗÐÐО>\n" -#: src/readelf.c:4859 +#: src/readelf.c:4865 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> викориÑтано з різними розмірами адреÑ" -#: src/readelf.c:4866 +#: src/readelf.c:4872 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> викориÑтано з різними розмірами зміщень" -#: src/readelf.c:4873 +#: src/readelf.c:4879 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> викориÑтано з різними базовими адреÑами" -#: src/readelf.c:4880 +#: src/readelf.c:4886 #, c-format msgid "%s %#<PRIx64> used with different attribute %s and %s" msgstr "%s %#<PRIx64> викориÑтано з різними атрибутами, %s Ñ– %s" -#: src/readelf.c:4980 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <ÐЕВИКОРИСТОВУВÐÐІ ДÐÐІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4988 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <ÐЕВИКОРИСТОВУВÐÐІ ДÐÐІ> ... %<PRIu64> байтів ...\n" -#: src/readelf.c:5091 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -5030,7 +5292,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" " [ Код]\n" -#: src/readelf.c:5099 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -5039,20 +5301,20 @@ msgstr "" "\n" "Розділ Ñкорочень за зміщеннÑм %<PRIu64>:\n" -#: src/readelf.c:5112 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÑкороченнÑ: %s\n" -#: src/readelf.c:5128 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] зміщеннÑ: %<PRId64>, дочірній: %s, мітка: %s\n" -#: src/readelf.c:5161 src/readelf.c:5470 src/readelf.c:5637 src/readelf.c:6022 -#: src/readelf.c:6638 src/readelf.c:8375 src/readelf.c:9064 src/readelf.c:9537 -#: src/readelf.c:9788 src/readelf.c:9954 src/readelf.c:10341 -#: src/readelf.c:10401 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -5061,54 +5323,54 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" -#: src/readelf.c:5174 +#: src/readelf.c:5180 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_addr: %s" -#: src/readelf.c:5274 src/readelf.c:5298 src/readelf.c:5682 src/readelf.c:9109 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, c-format msgid " Length: %8<PRIu64>\n" msgstr " Довжина: %8<PRIu64>\n" -#: src/readelf.c:5276 src/readelf.c:5313 src/readelf.c:5695 src/readelf.c:9122 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n" -#: src/readelf.c:5277 src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9131 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, c-format msgid " Address size: %8<PRIu64>\n" msgstr " Розмір адреÑи: %8<PRIu64>\n" -#: src/readelf.c:5279 src/readelf.c:5332 src/readelf.c:5714 src/readelf.c:9141 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, c-format msgid " Segment size: %8<PRIu64>\n" msgstr "" " Розмір Ñегмента: %8<PRIu64>\n" "\n" -#: src/readelf.c:5317 src/readelf.c:5699 src/readelf.c:9126 src/readelf.c:10533 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, c-format msgid "Unknown version" msgstr "Ðевідома верÑÑ–Ñ" -#: src/readelf.c:5327 src/readelf.c:5540 src/readelf.c:5709 src/readelf.c:9136 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, c-format msgid "unsupported address size" msgstr "непідтримуваний розмір адреÑи" -#: src/readelf.c:5338 src/readelf.c:5551 src/readelf.c:5719 src/readelf.c:9146 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "непідтримуваний розмір Ñегмента" -#: src/readelf.c:5391 src/readelf.c:5465 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані get .debug_aranges: %s" -#: src/readelf.c:5406 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5126,12 +5388,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщеннÑм %#<PRIx64> міÑтить %zu запиÑів:\n" -#: src/readelf.c:5437 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5439 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5139,7 +5401,7 @@ msgstr "" " [%*zu] початок: %0#*<PRIx64>, довжина: %5<PRIu64>, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:5483 src/readelf.c:8402 +#: src/readelf.c:5489 src/readelf.c:8426 #, c-format msgid "" "\n" @@ -5148,13 +5410,13 @@ msgstr "" "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм %zu:\n" -#: src/readelf.c:5487 src/readelf.c:5663 src/readelf.c:6662 src/readelf.c:8413 -#: src/readelf.c:9090 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "некоректні дані у розділі [%zu] «%s»" -#: src/readelf.c:5503 +#: src/readelf.c:5509 #, c-format msgid "" "\n" @@ -5163,27 +5425,27 @@ msgstr "" "\n" " Довжина: %6<PRIu64>\n" -#: src/readelf.c:5515 +#: src/readelf.c:5521 #, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " верÑÑ–Ñ DWARF: %6<PRIuFAST16>\n" -#: src/readelf.c:5519 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "непідтримувана верÑÑ–Ñ aranges" -#: src/readelf.c:5530 +#: src/readelf.c:5536 #, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU: %6<PRIx64>\n" -#: src/readelf.c:5536 +#: src/readelf.c:5542 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr " Розмір адреÑи: %6<PRIu64>\n" -#: src/readelf.c:5547 +#: src/readelf.c:5553 #, c-format msgid "" " Segment size: %6<PRIu64>\n" @@ -5192,17 +5454,17 @@ msgstr "" " Розмір Ñегмента: %6<PRIu64>\n" "\n" -#: src/readelf.c:5602 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr " %zu байтів доповненнÑ\n" -#: src/readelf.c:5646 +#: src/readelf.c:5652 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_rnglists: %s" -#: src/readelf.c:5669 src/readelf.c:9096 +#: src/readelf.c:5675 src/readelf.c:9177 #, c-format msgid "" "Table at Offset 0x%<PRIx64>:\n" @@ -5211,42 +5473,42 @@ msgstr "" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм 0x%<PRIx64>:\n" "\n" -#: src/readelf.c:5724 src/readelf.c:9151 +#: src/readelf.c:5730 src/readelf.c:9232 #, c-format msgid " Offset entries: %8<PRIu64>\n" msgstr " ЗапиÑи зміщеннÑ: %8<PRIu64>\n" -#: src/readelf.c:5740 src/readelf.c:9167 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr " Ðевідома оÑнова CU: " -#: src/readelf.c:5742 src/readelf.c:9169 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6<PRIx64>] base: " msgstr " ОÑнова CU [%6<PRIx64>]: " -#: src/readelf.c:5748 src/readelf.c:9175 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr " Ðе пов'Ñзано із CU.\n" -#: src/readelf.c:5759 src/readelf.c:9186 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "забагато запиÑів зÑуву Ð´Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ модулÑ" -#: src/readelf.c:5763 src/readelf.c:9190 +#: src/readelf.c:5769 src/readelf.c:9271 #, c-format msgid " Offsets starting at 0x%<PRIx64>:\n" msgstr " ЗміщеннÑ, що починаютьÑÑ Ð· 0x%<PRIx64>:\n" -#: src/readelf.c:5815 +#: src/readelf.c:5821 #, c-format msgid "invalid range list data" msgstr "некоректні дані ÑпиÑку діапазонів" -#: src/readelf.c:6000 src/readelf.c:9515 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" @@ -5255,12 +5517,12 @@ msgstr "" " %zu байтів доповненнÑ\n" "\n" -#: src/readelf.c:6017 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані .debug_ranges: %s" -#: src/readelf.c:6053 src/readelf.c:9570 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" @@ -5269,7 +5531,7 @@ msgstr "" "\n" " Ðевідома оÑнова CU: " -#: src/readelf.c:6055 src/readelf.c:9572 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" @@ -5278,31 +5540,31 @@ msgstr "" "\n" " ОÑнова CU [%6<PRIx64>]: " -#: src/readelf.c:6064 src/readelf.c:9598 src/readelf.c:9624 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:6089 src/readelf.c:9708 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " -#: src/readelf.c:6099 src/readelf.c:9718 +#: src/readelf.c:6105 src/readelf.c:9799 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній ÑпиÑок\n" -#: src/readelf.c:6359 +#: src/readelf.c:6365 msgid " <INVALID DATA>\n" msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:6616 +#: src/readelf.c:6622 #, c-format msgid "cannot get ELF: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ELF: %s" -#: src/readelf.c:6634 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5311,7 +5573,7 @@ msgstr "" "\n" "Розділ відомоÑтей щодо вікна викликів [%2zu] «%s» за зміщеннÑм %#<PRIx64>:\n" -#: src/readelf.c:6684 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5320,65 +5582,65 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:6785 src/readelf.c:6939 +#: src/readelf.c:6791 src/readelf.c:6945 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшеннÑ" -#: src/readelf.c:6800 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи FDE: " -#: src/readelf.c:6806 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° LSDA: " -#: src/readelf.c:6916 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (зміщеннÑ: %#<PRIx64>)" -#: src/readelf.c:6923 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ кінцÑ: %#<PRIx64>)" -#: src/readelf.c:6960 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sвказівник LSDA: %#<PRIx64>\n" -#: src/readelf.c:7045 +#: src/readelf.c:7051 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute code: %s" msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ код атрибута: %s" -#: src/readelf.c:7055 +#: src/readelf.c:7061 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute form: %s" msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ форму атрибута: %s" -#: src/readelf.c:7077 +#: src/readelf.c:7083 #, c-format msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° «%s» (%s): %s" -#: src/readelf.c:7407 +#: src/readelf.c:7413 #, c-format msgid "invalid file (%<PRId64>): %s" msgstr "некоректний файл (%<PRId64>): %s" -#: src/readelf.c:7411 +#: src/readelf.c:7417 #, c-format msgid "no srcfiles for CU [%<PRIx64>]" msgstr "немає srcfiles Ð´Ð»Ñ CU [%<PRIx64>]" -#: src/readelf.c:7415 +#: src/readelf.c:7421 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ CU DWARF: %s" -#: src/readelf.c:7728 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5389,12 +5651,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщеннÑм %#<PRIx64>:\n" " [ЗміщеннÑ]\n" -#: src/readelf.c:7778 +#: src/readelf.c:7786 #, c-format msgid "cannot get next unit: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ наÑтупний модуль: %s" -#: src/readelf.c:7797 +#: src/readelf.c:7806 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5407,7 +5669,7 @@ msgstr "" "%<PRIu8>, Розмір зміщеннÑ: %<PRIu8>\n" " ÐŸÑ–Ð´Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64> [%<PRIx64>]\n" -#: src/readelf.c:7809 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5418,38 +5680,38 @@ msgstr "" " ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, " "ЗміщеннÑ: %<PRIu8>\n" -#: src/readelf.c:7819 src/readelf.c:7982 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%<PRIu8>)" msgstr " Тип модулÑ: %s (%<PRIu8>)" -#: src/readelf.c:7846 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "невідома верÑÑ–Ñ (%d) або тип Ð¼Ð¾Ð´ÑƒÐ»Ñ (%d)" -#: src/readelf.c:7875 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ DIE: %s" -#: src/readelf.c:7884 +#: src/readelf.c:7893 #, c-format msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s" msgstr "" "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ мітку DIE за зміщеннÑм [%<PRIu64>] у розділі «%s»: %s" -#: src/readelf.c:7922 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s\n" -#: src/readelf.c:7930 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s" -#: src/readelf.c:7974 +#: src/readelf.c:7981 #, c-format msgid "" " Split compilation unit at offset %<PRIu64>:\n" @@ -5460,7 +5722,7 @@ msgstr "" " ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, " "ЗміщеннÑ: %<PRIu8>\n" -#: src/readelf.c:8026 +#: src/readelf.c:8033 #, c-format msgid "" "\n" @@ -5471,18 +5733,18 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" "\n" -#: src/readelf.c:8358 +#: src/readelf.c:8365 #, c-format msgid "unknown form: %s" msgstr "невідома форма: %s" -#: src/readelf.c:8389 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу лінійних даних: %s" #. Print what we got so far. -#: src/readelf.c:8491 +#: src/readelf.c:8517 #, c-format msgid "" "\n" @@ -5515,27 +5777,27 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:8513 +#: src/readelf.c:8539 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ верÑÑ–ÑŽ .debug_line: %u\n" -#: src/readelf.c:8521 +#: src/readelf.c:8547 #, c-format msgid "cannot handle address size: %u\n" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір адреÑи: %u\n" -#: src/readelf.c:8529 +#: src/readelf.c:8555 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір Ñелектора Ñегментів: %u\n" -#: src/readelf.c:8539 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщеннÑм %tu у розділі [%zu] «%s»" -#: src/readelf.c:8554 +#: src/readelf.c:8580 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" @@ -5543,7 +5805,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu аргумент\n" msgstr[1] " [%*<PRIuFAST8>] %hhu аргументи\n" msgstr[2] " [%*<PRIuFAST8>] %hhu аргументів\n" -#: src/readelf.c:8565 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5551,12 +5813,12 @@ msgstr "" "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ:" -#: src/readelf.c:8571 src/readelf.c:8648 +#: src/readelf.c:8597 src/readelf.c:8674 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8642 +#: src/readelf.c:8668 msgid "" "\n" "File name table:" @@ -5564,11 +5826,11 @@ msgstr "" "\n" " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð°Ð·Ð² файлів:" -#: src/readelf.c:8703 +#: src/readelf.c:8729 msgid " Entry Dir Time Size Name" msgstr " Ð—Ð°Ð¿Ð¸Ñ ÐšÐ°Ñ‚ Ð§Ð°Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðазва" -#: src/readelf.c:8742 +#: src/readelf.c:8775 #, fuzzy msgid "" "\n" @@ -5577,7 +5839,7 @@ msgstr "" "\n" "Оператори номерів Ñ€Ñдків:" -#: src/readelf.c:8746 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5585,118 +5847,129 @@ msgstr "" "\n" "Оператори номерів Ñ€Ñдків:" -#: src/readelf.c:8766 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "некоректну кількіÑÑ‚ÑŒ операцій на інÑтрукцію прирівнÑно до нулÑ" -#: src/readelf.c:8800 +#: src/readelf.c:8828 #, c-format msgid " special opcode %u: address+%u = " msgstr " Ñпеціальний код операції %u: адреÑа+%u = " -#: src/readelf.c:8804 +#: src/readelf.c:8832 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", індекÑ_оп = %u, Ñ€Ñдок%+d = %zu\n" -#: src/readelf.c:8807 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr ", Ñ€Ñдок%+d = %zu\n" -#: src/readelf.c:8825 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:8830 +#: src/readelf.c:8858 msgid " end of sequence" msgstr " кінець поÑлідовноÑÑ‚Ñ–" -#: src/readelf.c:8848 +#: src/readelf.c:8876 #, c-format msgid " set address to " msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " -#: src/readelf.c:8876 +#: src/readelf.c:8904 #, 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:8890 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr " вÑтановити Ñ€Ð¾Ð·Ñ€Ñ–Ð·Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ %u\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "Показувати також назви функцій" + #. Unknown, ignore it. -#: src/readelf.c:8895 +#: src/readelf.c:8976 msgid " unknown opcode" msgstr " невідомий код операції" #. Takes no argument. -#: src/readelf.c:8907 +#: src/readelf.c:8988 msgid " copy" msgstr " копіÑ" -#: src/readelf.c:8918 +#: src/readelf.c:8999 #, c-format msgid " advance address by %u to " msgstr " Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи на %u до " -#: src/readelf.c:8922 src/readelf.c:8983 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr ", op_index до %u" -#: src/readelf.c:8934 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " проÑувати Ñ€Ñдок на Ñталу %d до %<PRId64>\n" -#: src/readelf.c:8944 +#: src/readelf.c:9025 #, c-format msgid " set file to %<PRIu64>\n" msgstr " вÑтановити файл у %<PRIu64>\n" -#: src/readelf.c:8955 +#: src/readelf.c:9036 #, c-format msgid " set column to %<PRIu64>\n" msgstr " вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика %<PRIu64>\n" -#: src/readelf.c:8962 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " вÑтановити «%s» у %<PRIuFAST8>\n" #. Takes no argument. -#: src/readelf.c:8968 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr " вÑтановити прапорець базового блоку" -#: src/readelf.c:8979 +#: src/readelf.c:9060 #, c-format msgid " advance address by constant %u to " msgstr " збільшити адреÑу на Ñталу величину %u до " -#: src/readelf.c:8999 +#: src/readelf.c:9080 #, c-format msgid " advance address by fixed value %u to \n" msgstr " збільшити адреÑу на фікÑовану величину %u до \n" #. Takes no argument. -#: src/readelf.c:9009 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr " вÑтановити прапорець ÐºÑ–Ð½Ñ†Ñ Ð²Ñтупу" #. Takes no argument. -#: src/readelf.c:9014 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr " вÑтановити прапорець початку епілогу" -#: src/readelf.c:9024 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr " вÑтановити isa у %u\n" @@ -5704,7 +5977,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:9033 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" @@ -5712,102 +5985,102 @@ msgstr[0] " невідомий код операції з %<PRIu8> Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ msgstr[1] " невідомий код операції з %<PRIu8> параметрами:" msgstr[2] " невідомий код операції з %<PRIu8> параметрами:" -#: src/readelf.c:9073 +#: src/readelf.c:9154 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loclists: %s" -#: src/readelf.c:9239 +#: src/readelf.c:9320 #, fuzzy, c-format msgid " <INVALID DATA>\n" msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:9279 +#: src/readelf.c:9360 #, c-format msgid "invalid loclists data" msgstr "некоректні дані loclists" -#: src/readelf.c:9532 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loc: %s" -#: src/readelf.c:9745 src/readelf.c:10789 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " <INVALID DATA>\n" msgstr " <ÐЕКОРЕКТÐІ ДÐÐІ>\n" -#: src/readelf.c:9800 src/readelf.c:9963 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу відомоÑтей щодо макроÑів: %s" -#: src/readelf.c:9880 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений Ñ€Ñдок наприкінці розділу" -#: src/readelf.c:9903 +#: src/readelf.c:9984 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** пропущено аргумент DW_MACINFO_start_file наприкінці розділу" -#: src/readelf.c:10004 +#: src/readelf.c:10085 #, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " ЗміщеннÑ: 0x%<PRIx64>\n" -#: src/readelf.c:10016 +#: src/readelf.c:10097 #, c-format msgid " Version: %<PRIu16>\n" msgstr " ВерÑÑ–Ñ: %<PRIu16>\n" -#: src/readelf.c:10022 src/readelf.c:10909 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома верÑÑ–Ñ, не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розділ\n" -#: src/readelf.c:10029 +#: src/readelf.c:10110 #, c-format msgid " Flag: 0x%<PRIx8>" msgstr " Прапорець: 0x%<PRIx8>" -#: src/readelf.c:10058 +#: src/readelf.c:10139 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr " Довжина зміщеннÑ: %<PRIu8>\n" -#: src/readelf.c:10066 +#: src/readelf.c:10147 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ .debug_line: 0x%<PRIx64>\n" -#: src/readelf.c:10091 +#: src/readelf.c:10172 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ¾Ð´Ñ–Ð² операцій розширень, запиÑів — %<PRIu8>:\n" -#: src/readelf.c:10098 +#: src/readelf.c:10179 #, c-format msgid " [%<PRIx8>]" msgstr " [%<PRIx8>]" -#: src/readelf.c:10110 +#: src/readelf.c:10191 #, c-format msgid " %<PRIu8> arguments:" msgstr " %<PRIu8> аргументів:" -#: src/readelf.c:10125 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:10326 +#: src/readelf.c:10407 #, 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:10370 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -5818,37 +6091,43 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n" " %*s Ð Ñдок\n" -#: src/readelf.c:10385 +#. TRANS: the debugstr| prefix makes the string unique. +#: src/readelf.c:10456 +msgctxt "debugstr" +msgid "Offset" +msgstr "" + +#: src/readelf.c:10466 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** помилка, пропущено роздільник Ñ€Ñдків\n" -#: src/readelf.c:10414 +#: src/readelf.c:10495 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_str_offsets: %s" -#: src/readelf.c:10513 +#: src/readelf.c:10594 #, c-format msgid " Length: %8<PRIu64>\n" msgstr " Довжина: %8<PRIu64>\n" -#: src/readelf.c:10515 +#: src/readelf.c:10596 #, c-format msgid " Offset size: %8<PRIu8>\n" msgstr " Розмір зÑуву: %8<PRIu8>\n" -#: src/readelf.c:10529 +#: src/readelf.c:10610 #, c-format msgid " DWARF version: %8<PRIu16>\n" msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n" -#: src/readelf.c:10538 +#: src/readelf.c:10619 #, c-format msgid " Padding: %8<PRIx16>\n" msgstr " ЗаповненнÑ: %8<PRIx16>\n" -#: src/readelf.c:10592 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -5857,7 +6136,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10694 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -5866,22 +6145,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10717 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ LPStart: %#x " -#: src/readelf.c:10729 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ TType: %#x " -#: src/readelf.c:10744 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr " ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:%#x " -#: src/readelf.c:10757 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -5889,7 +6168,7 @@ msgstr "" "\n" " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:" -#: src/readelf.c:10771 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5902,12 +6181,12 @@ msgstr "" " МіÑце заÑтоÑуваннÑ: %#<PRIx64>\n" " ДіÑ: %u\n" -#: src/readelf.c:10844 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "некоректне ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ TType" -#: src/readelf.c:10871 +#: src/readelf.c:10952 #, c-format msgid "" "\n" @@ -5916,37 +6195,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщеннÑм %#<PRIx64> міÑтить %<PRId64> байтів:\n" -#: src/readelf.c:10900 +#: src/readelf.c:10981 #, c-format msgid " Version: %<PRId32>\n" msgstr " ВерÑÑ–Ñ: %<PRId32>\n" -#: src/readelf.c:10918 +#: src/readelf.c:10999 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ CU: %#<PRIx32>\n" -#: src/readelf.c:10925 +#: src/readelf.c:11006 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ TU: %#<PRIx32>\n" -#: src/readelf.c:10932 +#: src/readelf.c:11013 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: %#<PRIx32>\n" -#: src/readelf.c:10939 +#: src/readelf.c:11020 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñимволу: %#<PRIx32>\n" -#: src/readelf.c:10946 +#: src/readelf.c:11027 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " Ñтале зміщеннÑ: %#<PRIx32>\n" -#: src/readelf.c:10960 +#: src/readelf.c:11041 #, c-format msgid "" "\n" @@ -5955,7 +6234,7 @@ msgstr "" "\n" " СпиÑок CU зі зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n" -#: src/readelf.c:10985 +#: src/readelf.c:11066 #, c-format msgid "" "\n" @@ -5964,7 +6243,7 @@ msgstr "" "\n" " СпиÑок TU зі зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n" -#: src/readelf.c:11014 +#: src/readelf.c:11095 #, c-format msgid "" "\n" @@ -5973,7 +6252,7 @@ msgstr "" "\n" " СпиÑок Ð°Ð´Ñ€ÐµÑ Ð·Ñ– зміщеннÑм %#<PRIx32> міÑтить %zu запиÑів:\n" -#: src/readelf.c:11046 +#: src/readelf.c:11127 #, c-format msgid "" "\n" @@ -5982,18 +6261,18 @@ msgstr "" "\n" " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів за зміщеннÑм %#<PRIx32> міÑтить %zu позицій:\n" -#: src/readelf.c:11184 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ деÑкриптор контекÑту зневаджуваннÑ: %s" -#: src/readelf.c:11552 src/readelf.c:12179 src/readelf.c:12290 -#: src/readelf.c:12348 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ дані запиÑу Ñдра: %s" -#: src/readelf.c:11915 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -6002,21 +6281,21 @@ msgstr "" "\n" "%*s... <повторюєтьÑÑ %u разів> ..." -#: src/readelf.c:12427 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " ВлаÑник Розм. даних Тип\n" -#: src/readelf.c:12456 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:12508 +#: src/readelf.c:12588 #, c-format msgid "cannot get content of note: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ нотатки: %s" -#: src/readelf.c:12542 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -6026,7 +6305,7 @@ msgstr "" "Розділ запиÑів (note) [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм " "%#0<PRIx64>:\n" -#: src/readelf.c:12565 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -6035,7 +6314,7 @@ msgstr "" "\n" "Сегмент запиÑів з %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12612 +#: src/readelf.c:12692 #, c-format msgid "" "\n" @@ -6044,12 +6323,12 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міÑтитьÑÑ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n" -#: src/readelf.c:12639 src/readelf.c:12690 +#: src/readelf.c:12719 src/readelf.c:12770 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [%zu] «%s»: %s" -#: src/readelf.c:12644 +#: src/readelf.c:12724 #, c-format msgid "" "\n" @@ -6058,7 +6337,7 @@ msgstr "" "\n" "ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12649 +#: src/readelf.c:12729 #, c-format msgid "" "\n" @@ -6069,7 +6348,7 @@ msgstr "" "ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів (%zd неÑтиÑнено) за " "зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12663 +#: src/readelf.c:12743 #, c-format msgid "" "\n" @@ -6078,7 +6357,7 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міÑтитьÑÑ Ñ€Ñдків Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n" -#: src/readelf.c:12695 +#: src/readelf.c:12775 #, c-format msgid "" "\n" @@ -6087,7 +6366,7 @@ msgstr "" "\n" "Розділ Ñ€Ñдків [%zu] «%s» міÑтить %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n" -#: src/readelf.c:12700 +#: src/readelf.c:12780 #, c-format msgid "" "\n" @@ -6098,7 +6377,7 @@ msgstr "" "Ð Ñдок розділу [%zu] «%s» міÑтить %<PRIu64> байти (%zd неÑтиÑнено) на " "зміщенні %#0<PRIx64>:\n" -#: src/readelf.c:12749 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6107,7 +6386,7 @@ msgstr "" "\n" "розділу [%lu] не Ñ–Ñнує" -#: src/readelf.c:12779 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6116,12 +6395,12 @@ msgstr "" "\n" "розділу «%s» не Ñ–Ñнує" -#: src/readelf.c:12836 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ покажчик Ñимволів архіву «%s»: %s" -#: src/readelf.c:12839 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6130,7 +6409,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика Ñимволів\n" -#: src/readelf.c:12843 +#: src/readelf.c:12923 #, c-format msgid "" "\n" @@ -6139,12 +6418,12 @@ msgstr "" "\n" "Покажчик архіву «%s» міÑтить %zu запиÑів:\n" -#: src/readelf.c:12861 +#: src/readelf.c:12941 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ елемент за зміщеннÑм %zu у «%s»: %s" -#: src/readelf.c:12866 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» міÑтить:\n" @@ -6211,11 +6490,63 @@ msgstr "Ðекоректна оÑнова чиÑленнÑ: %s" msgid "%s: file format not recognized" msgstr "%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла" +#: src/size.c:328 +msgctxt "bsd" +msgid "text" +msgstr "" + +#: src/size.c:329 +msgctxt "bsd" +msgid "data" +msgstr "" + +#: src/size.c:330 +msgctxt "bsd" +msgid "bss" +msgstr "" + +#: src/size.c:331 +msgctxt "bsd" +msgid "dec" +msgstr "" + +#: src/size.c:332 +msgctxt "bsd" +msgid "hex" +msgstr "" + +#: src/size.c:333 +msgctxt "bsd" +msgid "filename" +msgstr "" + #: src/size.c:418 src/size.c:560 #, c-format msgid " (ex %s)" msgstr " (прикл. %s)" +#: src/size.c:420 +#, fuzzy +#| msgid "invalid section" +msgctxt "sysv" +msgid "section" +msgstr "некоректний розділ" + +#: src/size.c:421 +msgctxt "sysv" +msgid "size" +msgstr "" + +#: src/size.c:422 +msgctxt "sysv" +msgid "addr" +msgstr "" + +#: src/size.c:451 src/size.c:454 src/size.c:457 +msgctxt "sysv" +msgid "Total" +msgstr "" + #: src/size.c:482 #, c-format msgid "cannot get section header" @@ -6541,17 +6872,17 @@ msgstr "неможливо одночаÑно зберегти Ñ– вилучит msgid "bad relocation" msgstr "помилкове переÑуваннÑ" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані з вхідного файла «%s» за допомогою stat" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "під Ñ‡Ð°Ñ Ñпроби Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6564,133 +6895,133 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: підтримки Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ вміÑту з архіву не передбачено" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ канал Ñервера EBL" -#: src/strip.c:1092 +#: src/strip.c:1097 #, c-format msgid "cannot get number of phdrs" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, 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:1121 src/strip.c:1164 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "не вдалоÑÑ Ñтворити phdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»" -#: src/strip.c:1250 +#: src/strip.c:1254 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Ðеможливо вилучити розміщений у пам'ÑÑ‚Ñ– розділ «%s»" -#: src/strip.c:1259 +#: src/strip.c:1263 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Ðеможливо одночаÑно зберегти та вилучити розділ «%s»" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° з виведеними даними: %s" -#: src/strip.c:1688 +#: src/strip.c:1692 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1701 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ shdrstrndx: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "під Ñ‡Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… даних Ð´Ð»Ñ Â«%s»" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ заголовка розділу: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити дані розділу: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 #, c-format msgid "no memory to create section header string table" msgstr "недоÑтатньо пам'ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу" -#: src/strip.c:2079 +#: src/strip.c:2083 #, 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:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу «%s»: %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Â«%s»" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "під Ñ‡Ð°Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ñ— Ñуми Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних даних" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "під Ñ‡Ð°Ñ Ñпроби запиÑу «%s»" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Â«%s»: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалоÑÑ Ð²Ñтановити права доÑтупу та дату зміни «%s»" @@ -6783,7 +7114,7 @@ msgstr "не вдалоÑÑ Ñтворити заголовок ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ shdrstrndx:%s" -#: src/unstrip.c:244 src/unstrip.c:2085 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF: %s" @@ -6803,12 +7134,12 @@ msgstr "неможливо оновити новий нульовий розді msgid "cannot copy ELF header: %s" msgstr "не вдалоÑÑ Ñкопіювати заголовок ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2103 src/unstrip.c:2146 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, c-format msgid "cannot get number of program headers: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ заголовків програми: %s" -#: src/unstrip.c:270 src/unstrip.c:2107 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "не вдалоÑÑ Ñтворити заголовки програми: %s" @@ -6823,12 +7154,12 @@ msgstr "не вдалоÑÑ Ñкопіювати заголовок програ msgid "cannot copy section header: %s" msgstr "не вдалоÑÑ Ñкопіювати заголовок розділу: %s" -#: src/unstrip.c:289 src/unstrip.c:1707 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу: %s" -#: src/unstrip.c:291 src/unstrip.c:1709 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "не вдалоÑÑ Ñкопіювати дані розділу: %s" @@ -6838,14 +7169,14 @@ msgstr "не вдалоÑÑ Ñкопіювати дані розділу: %s" msgid "cannot create directory '%s'" msgstr "не вдалоÑÑ Ñтворити каталог «%s»" -#: src/unstrip.c:393 src/unstrip.c:655 src/unstrip.c:689 src/unstrip.c:857 -#: src/unstrip.c:1749 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñимволів: %s" -#: src/unstrip.c:409 src/unstrip.c:658 src/unstrip.c:679 src/unstrip.c:692 -#: src/unstrip.c:1770 src/unstrip.c:1965 src/unstrip.c:1989 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ таблицю Ñимволів: %s" @@ -6855,167 +7186,177 @@ msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ таблицю Ñимволів: %s" msgid "cannot update section header: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ заголовок розділу: %s" -#: src/unstrip.c:465 src/unstrip.c:479 +#: 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:578 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ верÑÑ–ÑŽ Ñимволу: %s" -#: src/unstrip.c:591 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "неочікуваний тип розділу у [%zu] з поÑиланнÑм sh_link на symtab" -#: src/unstrip.c:846 +#: src/unstrip.c:850 #, c-format msgid "cannot get symbol section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñимволів: %s" -#: src/unstrip.c:848 +#: src/unstrip.c:852 #, c-format msgid "cannot get string section data: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñ€Ñдків: %s" -#: src/unstrip.c:865 +#: src/unstrip.c:869 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "некоректне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ñдка у Ñимволі [%zu]" -#: src/unstrip.c:1023 src/unstrip.c:1427 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ назву розділу [%zu]: %s" -#: src/unstrip.c:1038 +#: src/unstrip.c:1042 #, c-format msgid "bad sh_link for group section: %s" msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1044 +#: src/unstrip.c:1048 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ shdr Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1049 +#: src/unstrip.c:1053 #, c-format msgid "bad data for group symbol section: %s" msgstr "помилкові дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñимволів груп: %s" -#: src/unstrip.c:1055 +#: src/unstrip.c:1059 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1060 +#: src/unstrip.c:1064 #, c-format msgid "bad symbol name for group section: %s" msgstr "помилкова назва Ñимволу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s" -#: src/unstrip.c:1102 src/unstrip.c:1121 src/unstrip.c:1159 +#: src/unstrip.c:1075 src/unstrip.c:1556 +#, c-format +msgid "cannot find matching section for [%zu] '%s'" +msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідний розділ Ð´Ð»Ñ [%zu] «%s»" + +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ «.gnu.prelink_undo»: %s" -#: src/unstrip.c:1139 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· shnum = %zu у розділі «%s»" -#: src/unstrip.c:1150 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "некоректний вміÑÑ‚ розділу «%s»" -#: src/unstrip.c:1206 src/unstrip.c:1553 -#, c-format -msgid "cannot find matching section for [%zu] '%s'" -msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідний розділ Ð´Ð»Ñ [%zu] «%s»" - -#: src/unstrip.c:1331 src/unstrip.c:1347 src/unstrip.c:1633 src/unstrip.c:1924 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ назву розділу до таблиці Ñ€Ñдків: %s" -#: src/unstrip.c:1356 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дані заголовка розділу у таблиці Ñ€Ñдків: %s" -#: src/unstrip.c:1385 src/unstrip.c:1389 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ заголовка розділу у таблиці Ñ€Ñдків: %s" -#: src/unstrip.c:1393 src/unstrip.c:1397 src/unstrip.c:1648 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s" -#: src/unstrip.c:1400 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "у очищеному файлі більше розділів ніж у файлі з даними Ð´Ð»Ñ Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ â€” " "помилковий порÑдок параметрів?" -#: src/unstrip.c:1404 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "у очищеному файлі немає розділів" -#: src/unstrip.c:1475 src/unstrip.c:1568 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ таблицю Ñ€Ñдків заголовка розділу: %s" -#: src/unstrip.c:1627 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ новий розділ: %s" -#: src/unstrip.c:1757 +#: src/unstrip.c:1760 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "Ñимвол [%zu] має некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ" -#: src/unstrip.c:1789 +#: src/unstrip.c:1792 #, c-format msgid "group has invalid section index [%zd]" msgstr "група міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [%zd]" -#: src/unstrip.c:2064 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані розділу: %s" -#: src/unstrip.c:2093 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ заголовок ELF: %s" -#: src/unstrip.c:2117 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ заголовок програми: %s" -#: src/unstrip.c:2122 src/unstrip.c:2205 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл виведених даних: %s" -#: src/unstrip.c:2173 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Дані DWARF не Ñкориговано відповідно до Ð²Ñ–Ð´Ñ…Ð¸Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ компонуваннÑм; " "Ñпробуйте виправити це командою prelink -u" -#: src/unstrip.c:2176 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7023,76 +7364,76 @@ msgstr "" "Дані DWARF у «%s» не Ñкориговано відповідно до Ð²Ñ–Ð´Ñ…Ð¸Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ " "компонуваннÑм; Ñпробуйте виправити це командою prelink -u" -#: src/unstrip.c:2196 src/unstrip.c:2247 src/unstrip.c:2259 src/unstrip.c:2345 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "не вдалоÑÑ Ñтворити деÑкриптор ELF: %s" -#: src/unstrip.c:2238 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "УВÐГÐ: " -#: src/unstrip.c:2240 +#: src/unstrip.c:2239 msgid ", use --force" msgstr ", ÑкориÑтайтеÑÑ --force" -#: src/unstrip.c:2263 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "Різні ідентифікатори заголовків ELF (e_ident)" -#: src/unstrip.c:2266 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "Різні типи заголовків ELF (e_type)" -#: src/unstrip.c:2269 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "Різні типи архітектур заголовків ELF (e_machine)" -#: src/unstrip.c:2272 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "очищений заголовок програми (e_phnum) Ñ” меншим за неочищений" -#: src/unstrip.c:2302 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ очищений файл Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s" -#: src/unstrip.c:2306 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ очищений файл «%s» Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s" -#: src/unstrip.c:2321 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файл діагноÑтичних даних Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s" -#: src/unstrip.c:2325 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл діагноÑтичних даних «%s» Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s" -#: src/unstrip.c:2338 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "у модулі «%s» файл «%s» не очищено strip" -#: src/unstrip.c:2369 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалоÑÑ ÐºÐµÑˆÑƒÐ²Ð°Ñ‚Ð¸ адреÑи розділів Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Â«%s»: %s" -#: src/unstrip.c:2501 +#: src/unstrip.c:2505 #, c-format msgid "no matching modules found" msgstr "відповідних модулів не виÑвлено" -#: src/unstrip.c:2510 +#: src/unstrip.c:2515 #, c-format msgid "matched more than one module" msgstr "вÑтановлено відповідніÑÑ‚ÑŒ декількох модулів" -#: src/unstrip.c:2554 +#: src/unstrip.c:2560 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7100,7 +7441,7 @@ msgstr "" "ОЧИЩЕÐИЙ-ФÐЙЛ ФÐЙЛ-DEBUG\n" "[МОДУЛЬ...]" -#: src/unstrip.c:2555 +#: src/unstrip.c:2561 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" @@ -7159,7 +7500,23 @@ msgstr "" "окремого файла діагноÑтичних даних або «-», Ñкщо файла діагноÑтичних даних " "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸, Ñ– «.», Ñкщо ФÐЙЛ Ñам міÑтить діагноÑтичні дані." -#: tests/backtrace.c:436 +#. Short description of program. +#: debuginfod/debuginfod-find.c:42 +msgid "Request debuginfo-related content from debuginfods listed in $" +msgstr "" + +#. Strings for arguments in help texts. +#: debuginfod/debuginfod-find.c:46 +msgid "" +"debuginfo BUILDID\n" +"debuginfo PATH\n" +"executable BUILDID\n" +"executable PATH\n" +"source BUILDID /FILENAME\n" +"source PATH /FILENAME\n" +msgstr "" + +#: tests/backtrace.c:483 msgid "Run executable" msgstr "ЗапуÑтити виконуваний файл" @@ -7171,6 +7528,10 @@ msgstr "Додатково вивеÑти назви функцій" msgid "Show instances of inlined functions" msgstr "ВивеÑти екземплÑри вбудованих функцій" +#, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ пам’ÑÑ‚ÑŒ" + #~ msgid "" #~ " [%6tx] base address\n" #~ " " @@ -7481,18 +7842,12 @@ msgstr "ВивеÑти екземплÑри вбудованих функцій" #~ msgid "unknown option `-%c %s'" #~ msgstr "невідомий параметр «-%c %s»" -#~ msgid "invalid page size value '%s': ignored" -#~ msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñторінки «%s»: проігноровано" - #~ msgid "invalid hash style '%s'" #~ msgstr "некоректний формат Ñ…ÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»" #~ msgid "invalid build-ID style '%s'" #~ msgstr "некоректний формат ідентифікатора Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Â«%s»" -#~ msgid "More than one output file name given." -#~ msgstr "Вказано декілька назв файлів Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…." - #~ msgid "Invalid optimization level `%s'" #~ msgstr "Ðекоректний рівень оптимізації «%s»" @@ -7716,9 +8071,6 @@ msgstr "ВивеÑти екземплÑри вбудованих функцій" #~ msgid "while reading version script '%s': %s at line %d" #~ msgstr "під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñкрипту верÑій «%s»: %s у Ñ€Ñдку %d" -#~ msgid "while reading linker script '%s': %s at line %d" -#~ msgstr "під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñкрипту ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»: %s у Ñ€Ñдку %d" - #~ msgid "" #~ "symbol '%s' is declared both local and global for unnamed version '%s'" #~ msgstr "" diff --git a/src/ChangeLog b/src/ChangeLog index e65620fd..05b2522d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,185 @@ +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 + error. + + * elfcompress.c (process_file): Remove redundant assignment in case of + "Nothing to do". + + * elfcompress.c (process_file): Set res to 0 in case of "Nothing to do". + +2021-04-19 Martin Liska <mliska@suse.cz> + + * elfclassify.c (run_classify): Use startswith. + * elfcompress.c (process_file): Likewise. + * nm.c (show_symbols_sysv): Likewise. + * readelf.c (print_debug): Likewise. + (handle_notes_data): Likewise. + (dump_data_section): Likewise. + (print_string_section): Likewise. + * strip.c (remove_debug_relocations): Likewise. + +2021-04-03 Mark Wielaard <mark@klomp.org> + + * nm.c (show_symbols): close dwfl_fd if dwfl_begin fails. + +2021-04-03 Mark Wielaard <mark@klomp.org> + + * unstrip.c (handle_output_dir_module): Free output_file when done. + +2021-04-03 Mark Wielaard <mark@klomp.org> + + * ar.c (do_oper_insert): Always close newfd. + +2021-03-03 Mark Wielaard <mark@klomp.org> + + * readelf.c (handle_symtab): Sanity check verneed vna_next, + vn_next and verdef vd_next offsets. + +2021-03-02 Timm Bäder <tbaeder@redhat.com> + + * elfcompress.c (process_file): Remove cleanup() function and + replace it with a cleanup label at the end of the function. + Initialize res to -1. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elfcompress.c (process_file): Move get_sections function... + (get_section): ...to top-level static function taking an + sections array and shnum. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elfcompress.c (process_file): Move get_section function... + (get_section): ...to top-level static function taking an + sections array. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elfcompress.c (process_file): Move set_section function... + (set_section): ...to top-level static function taking a + section array. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * unstrip.c (handle_implicit_modules): Inline the next function + in three places. This is simply dwfl_getmodules with match_module + callback providing mmi. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * unstrip.c (handle_explicit_files): Move warn function... + (warn): ...here as top-level static function taking stripped, + unstripped files and force flag as extra arguments. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * unstrip.c (copy_elided_sections): Inline find_unalloc_section + function into calling location. The sec pointer is set to NULL + before the if-else statement and only set when match is found. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * unstrip.c (find_alloc_sections_prelink): Move check_match to... + (check_match): Adjusted to return whether there was no match, + which indicates a failure. So callers are adjusted to or the + result into a local fail boolean. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * unstrip.c (adjust_relocs): Move adjust_reloc function to... + (adjust_reloc): ... here as static top-level function taking + a map array and size as extra arguments. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elflint.c (check_attributes): Rename and move left function... + (buffer_left): ...as static toplevel function taking both an + Elf_Data pointer argument and the unsigned char pointer p. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elflint.c (check_attributes): Rename and move pos function... + (buffer_pos): ...as static toplevel function taking an extra + Elf_Data pointer argument. + +2021-02-12 Mark Wielaard <mark@klomp.org> + + * readelf.c (print_debug_units): Type DIE offset is from start CU. + +2021-02-12 Mark Wielaard <mark@klomp.org> + + * readelf.c (attr_callback): Don't handle blocks as expression + blocks for DWARF version 4 or higher. + 2021-02-03 Timm Bäder <tbaeder@redhat.com> * ar.c (do_oper_extract): Extract should_truncate_fname function 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 @@ -1566,6 +1566,9 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, if (fd != -1) close (fd); + if (newfd != -1) + close (newfd); + return status; } diff --git a/src/elfclassify.c b/src/elfclassify.c index ae626bb1..2f70b29a 100644 --- a/src/elfclassify.c +++ b/src/elfclassify.c @@ -16,9 +16,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> +#include <system.h> #include <argp.h> -#include <error.h> #include <fcntl.h> #include <gelf.h> #include <stdbool.h> @@ -335,11 +335,8 @@ run_classify (void) stderr); has_bits_alloc = true; } - const char *debug_prefix = ".debug_"; - const char *zdebug_prefix = ".zdebug_"; - if (strncmp (section_name, debug_prefix, strlen (debug_prefix)) == 0 - || strncmp (section_name, zdebug_prefix, - strlen (zdebug_prefix)) == 0) + if (startswith (section_name, ".debug_") + || startswith (section_name, ".zdebug_")) { if (verbose > 1 && !has_debug_sections) fputs ("debug: .debug_* section found\n", stderr); diff --git a/src/elfcompress.c b/src/elfcompress.c index 1b5b1e36..2c6d91ba 100644 --- a/src/elfcompress.c +++ b/src/elfcompress.c @@ -52,6 +52,8 @@ static const char *foutput = NULL; #define T_DECOMPRESS 1 /* none */ #define T_COMPRESS_ZLIB 2 /* zlib */ #define T_COMPRESS_GNU 3 /* zlib-gnu */ +#define WORD_BITS (8U * sizeof (unsigned int)) + static int type = T_UNSET; struct section_pattern @@ -242,6 +244,28 @@ compress_section (Elf_Scn *scn, size_t orig_size, const char *name, return res; } +static void +set_section (unsigned int *sections, size_t ndx) +{ + sections[ndx / WORD_BITS] |= (1U << (ndx % WORD_BITS)); +} + +static bool +get_section (unsigned int *sections, size_t ndx) +{ + return (sections[ndx / WORD_BITS] & (1U << (ndx % WORD_BITS))) != 0; +} + +/* How many sections are we going to change? */ +static size_t +get_sections (unsigned int *sections, size_t shnum) +{ + size_t s = 0; + for (size_t i = 0; i < shnum / WORD_BITS + 1; i++) + s += __builtin_popcount (sections[i]); + return s; +} + static int process_file (const char *fname) { @@ -274,67 +298,13 @@ process_file (const char *fname) /* How many sections are we talking about? */ size_t shnum = 0; - -#define WORD_BITS (8U * sizeof (unsigned int)) - void set_section (size_t ndx) - { - sections[ndx / WORD_BITS] |= (1U << (ndx % WORD_BITS)); - } - - bool get_section (size_t ndx) - { - return (sections[ndx / WORD_BITS] & (1U << (ndx % WORD_BITS))) != 0; - } - - /* How many sections are we going to change? */ - size_t get_sections (void) - { - size_t s = 0; - for (size_t i = 0; i < shnum / WORD_BITS + 1; i++) - s += __builtin_popcount (sections[i]); - return s; - } - - int cleanup (int res) - { - elf_end (elf); - close (fd); - - elf_end (elfnew); - close (fdnew); - - if (fnew != NULL) - { - unlink (fnew); - free (fnew); - fnew = NULL; - } - - free (snamebuf); - if (names != NULL) - { - dwelf_strtab_free (names); - free (scnstrents); - free (symstrents); - free (namesbuf); - if (scnnames != NULL) - { - for (size_t n = 0; n < shnum; n++) - free (scnnames[n]); - free (scnnames); - } - } - - free (sections); - - return res; - } + int res = 1; fd = open (fname, O_RDONLY); if (fd < 0) { error (0, errno, "Couldn't open %s\n", fname); - return cleanup (-1); + goto cleanup; } elf = elf_begin (fd, ELF_C_READ, NULL); @@ -342,7 +312,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't open ELF file %s for reading: %s", fname, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* We don't handle ar files (or anything else), we probably should. */ @@ -353,21 +323,21 @@ process_file (const char *fname) error (0, 0, "Cannot handle ar files: %s", fname); else error (0, 0, "Unknown file type: %s", fname); - return cleanup (-1); + goto cleanup; } struct stat st; if (fstat (fd, &st) != 0) { error (0, errno, "Couldn't fstat %s", fname); - return cleanup (-1); + goto cleanup; } GElf_Ehdr ehdr; if (gelf_getehdr (elf, &ehdr) == NULL) { error (0, 0, "Couldn't get ehdr for %s: %s", fname, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Get the section header string table. */ @@ -376,7 +346,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get section header string table index in %s: %s", fname, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* How many sections are we talking about? */ @@ -384,13 +354,13 @@ process_file (const char *fname) { error (0, 0, "Couldn't get number of sections in %s: %s", fname, elf_errmsg (1)); - return cleanup (-1); + goto cleanup; } if (shnum == 0) { error (0, 0, "ELF file %s has no sections", fname); - return cleanup (-1); + goto cleanup; } sections = xcalloc (shnum / 8 + 1, sizeof (unsigned int)); @@ -399,7 +369,7 @@ process_file (const char *fname) if (elf_getphdrnum (elf, &phnum) != 0) { error (0, 0, "Couldn't get phdrnum: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Whether we need to adjust any section names (going to/from GNU @@ -456,7 +426,7 @@ process_file (const char *fname) { error (0, 0, "Unexpected section number %zd, expected only %zd", ndx, shnum); - cleanup (-1); + goto cleanup; } GElf_Shdr shdr_mem; @@ -464,21 +434,21 @@ process_file (const char *fname) if (shdr == NULL) { error (0, 0, "Couldn't get shdr for section %zd", ndx); - return cleanup (-1); + goto cleanup; } const char *sname = elf_strptr (elf, shdrstrndx, shdr->sh_name); if (sname == NULL) { error (0, 0, "Couldn't get name for section %zd", ndx); - return cleanup (-1); + goto cleanup; } if (section_name_matches (sname)) { if (!force && type == T_DECOMPRESS && (shdr->sh_flags & SHF_COMPRESSED) == 0 - && strncmp (sname, ".zdebug", strlen (".zdebug")) != 0) + && !startswith (sname, ".zdebug")) { if (verbose > 0) printf ("[%zd] %s already decompressed\n", ndx, sname); @@ -490,7 +460,7 @@ process_file (const char *fname) printf ("[%zd] %s already compressed\n", ndx, sname); } else if (!force && type == T_COMPRESS_GNU - && strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + && startswith (sname, ".zdebug")) { if (verbose > 0) printf ("[%zd] %s already GNU compressed\n", ndx, sname); @@ -498,15 +468,13 @@ process_file (const char *fname) else if (shdr->sh_type != SHT_NOBITS && (shdr->sh_flags & SHF_ALLOC) == 0) { - set_section (ndx); + set_section (sections, ndx); /* Check if we might want to change this section name. */ if (! adjust_names && ((type != T_COMPRESS_GNU - && strncmp (sname, ".zdebug", - strlen (".zdebug")) == 0) + && startswith (sname, ".zdebug")) || (type == T_COMPRESS_GNU - && strncmp (sname, ".debug", - strlen (".debug")) == 0))) + && startswith (sname, ".debug")))) adjust_names = true; /* We need a buffer this large if we change the names. */ @@ -532,7 +500,7 @@ process_file (const char *fname) { error (0, 0, "Multiple symbol tables (%zd, %zd) using the same string table unsupported", symtabndx, ndx); - return cleanup (-1); + goto cleanup; } symtabndx = ndx; } @@ -549,12 +517,12 @@ process_file (const char *fname) } } - if (foutput == NULL && get_sections () == 0) + if (foutput == NULL && get_sections (sections, shnum) == 0) { if (verbose > 0) printf ("Nothing to do.\n"); - fnew = NULL; - return cleanup (0); + res = 0; + goto cleanup; } if (adjust_names) @@ -563,7 +531,7 @@ process_file (const char *fname) if (names == NULL) { error (0, 0, "Not enough memory for new strtab"); - return cleanup (-1); + goto cleanup; } scnstrents = xmalloc (shnum * sizeof (Dwelf_Strent *)); @@ -590,7 +558,7 @@ process_file (const char *fname) /* Since we didn't create it we don't want to try to unlink it. */ free (fnew); fnew = NULL; - return cleanup (-1); + goto cleanup; } elfnew = elf_begin (fdnew, ELF_C_WRITE, NULL); @@ -598,21 +566,21 @@ process_file (const char *fname) { error (0, 0, "Couldn't open new ELF %s for writing: %s", fnew, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Create the new ELF header and copy over all the data. */ if (gelf_newehdr (elfnew, gelf_getclass (elf)) == 0) { error (0, 0, "Couldn't create new ehdr: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } GElf_Ehdr newehdr; if (gelf_getehdr (elfnew, &newehdr) == NULL) { error (0, 0, "Couldn't get new ehdr: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } newehdr.e_ident[EI_DATA] = ehdr.e_ident[EI_DATA]; @@ -625,7 +593,7 @@ process_file (const char *fname) if (gelf_update_ehdr (elfnew, &newehdr) == 0) { error (0, 0, "Couldn't update ehdr: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Copy over the phdrs as is. */ @@ -634,7 +602,7 @@ process_file (const char *fname) if (gelf_newphdr (elfnew, phnum) == 0) { error (0, 0, "Couldn't create phdrs: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } for (size_t cnt = 0; cnt < phnum; ++cnt) @@ -644,13 +612,13 @@ process_file (const char *fname) if (phdr == NULL) { error (0, 0, "Couldn't get phdr %zd: %s", cnt, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } if (gelf_update_phdr (elfnew, cnt, phdr) == 0) { error (0, 0, "Couldn't create phdr %zd: %s", cnt, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } } } @@ -687,14 +655,14 @@ process_file (const char *fname) /* (de)compress if section matched. */ char *sname = NULL; char *newname = NULL; - if (get_section (ndx)) + if (get_section (sections, ndx)) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (shdr == NULL) { error (0, 0, "Couldn't get shdr for section %zd", ndx); - return cleanup (-1); + goto cleanup; } uint64_t size = shdr->sh_size; @@ -702,7 +670,7 @@ process_file (const char *fname) if (sname == NULL) { error (0, 0, "Couldn't get name for section %zd", ndx); - return cleanup (-1); + goto cleanup; } /* strdup sname, the shdrstrndx section itself might be @@ -724,23 +692,23 @@ process_file (const char *fname) { if (compress_section (scn, size, sname, NULL, ndx, false, false, verbose > 0) < 0) - return cleanup (-1); + goto cleanup; } - else if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + else if (startswith (sname, ".zdebug")) { snamebuf[0] = '.'; strcpy (&snamebuf[1], &sname[2]); newname = snamebuf; if (compress_section (scn, size, sname, newname, ndx, true, false, verbose > 0) < 0) - return cleanup (-1); + goto cleanup; } else if (verbose > 0) printf ("[%zd] %s already decompressed\n", ndx, sname); break; case T_COMPRESS_GNU: - if (strncmp (sname, ".debug", strlen (".debug")) == 0) + if (startswith (sname, ".debug")) { if ((shdr->sh_flags & SHF_COMPRESSED) != 0) { @@ -748,7 +716,7 @@ process_file (const char *fname) Don't report even when verbose. */ if (compress_section (scn, size, sname, NULL, ndx, false, false, false) < 0) - return cleanup (-1); + goto cleanup; } snamebuf[0] = '.'; @@ -775,19 +743,19 @@ process_file (const char *fname) } else { - int res = compress_section (scn, size, sname, newname, - ndx, true, true, - verbose > 0); - if (res < 0) - return cleanup (-1); + int result = compress_section (scn, size, sname, newname, + ndx, true, true, + verbose > 0); + if (result < 0) + goto cleanup; - if (res == 0) + if (result == 0) newname = NULL; } } else if (verbose >= 0) { - if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) printf ("[%zd] %s unchanged, already GNU compressed", ndx, sname); else @@ -799,13 +767,13 @@ process_file (const char *fname) case T_COMPRESS_ZLIB: if ((shdr->sh_flags & SHF_COMPRESSED) == 0) { - if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) { /* First decompress to recompress zlib style. Don't report even when verbose. */ if (compress_section (scn, size, sname, NULL, ndx, true, false, false) < 0) - return cleanup (-1); + goto cleanup; snamebuf[0] = '.'; strcpy (&snamebuf[1], &sname[2]); @@ -833,7 +801,7 @@ process_file (const char *fname) } else if (compress_section (scn, size, sname, newname, ndx, false, true, verbose > 0) < 0) - return cleanup (-1); + goto cleanup; } else if (verbose > 0) printf ("[%zd] %s already compressed\n", ndx, sname); @@ -847,7 +815,7 @@ process_file (const char *fname) if (newscn == NULL) { error (0, 0, "Couldn't create new section %zd", ndx); - return cleanup (-1); + goto cleanup; } GElf_Shdr shdr_mem; @@ -855,13 +823,13 @@ process_file (const char *fname) if (shdr == NULL) { error (0, 0, "Couldn't get shdr for section %zd", ndx); - return cleanup (-1); + goto cleanup; } if (gelf_update_shdr (newscn, shdr) == 0) { error (0, 0, "Couldn't update section header %zd", ndx); - return cleanup (-1); + goto cleanup; } /* Except for the section header string table all data can be @@ -874,14 +842,14 @@ process_file (const char *fname) if (data == NULL) { error (0, 0, "Couldn't get data from section %zd", ndx); - return cleanup (-1); + goto cleanup; } Elf_Data *newdata = elf_newdata (newscn); if (newdata == NULL) { error (0, 0, "Couldn't create new data for section %zd", ndx); - return cleanup (-1); + goto cleanup; } *newdata = *data; @@ -899,7 +867,7 @@ process_file (const char *fname) if (name == NULL) { error (0, 0, "Couldn't get name for section [%zd]", ndx); - return cleanup (-1); + goto cleanup; } } @@ -908,7 +876,7 @@ process_file (const char *fname) if ((scnstrents[ndx] = dwelf_strtab_add (names, name)) == NULL) { error (0, 0, "No memory to add section name string table"); - return cleanup (-1); + goto cleanup; } /* If the symtab shares strings then add those too. */ @@ -925,17 +893,17 @@ process_file (const char *fname) /* Don't report the (internal) uncompression. */ if (compress_section (newscn, size, sname, NULL, ndx, false, false, false) < 0) - return cleanup (-1); + goto cleanup; symtab_size = size; symtab_compressed = T_COMPRESS_ZLIB; } - else if (strncmp (name, ".zdebug", strlen (".zdebug")) == 0) + else if (startswith (name, ".zdebug")) { /* Don't report the (internal) uncompression. */ if (compress_section (newscn, size, sname, NULL, ndx, true, false, false) < 0) - return cleanup (-1); + goto cleanup; symtab_size = size; symtab_compressed = T_COMPRESS_GNU; @@ -947,7 +915,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get symtab data for section [%zd] %s", ndx, name); - return cleanup (-1); + goto cleanup; } size_t elsize = gelf_fsize (elfnew, ELF_T_SYM, 1, EV_CURRENT); size_t syms = symd->d_size / elsize; @@ -959,7 +927,7 @@ process_file (const char *fname) if (sym == NULL) { error (0, 0, "Couldn't get symbol %zd", i); - return cleanup (-1); + goto cleanup; } if (sym->st_name != 0) { @@ -971,13 +939,13 @@ process_file (const char *fname) if (symname == NULL) { error (0, 0, "Couldn't get symbol %zd name", i); - return cleanup (-1); + goto cleanup; } symstrents[i] = dwelf_strtab_add (names, symname); if (symstrents[i] == NULL) { error (0, 0, "No memory to add to symbol name"); - return cleanup (-1); + goto cleanup; } } } @@ -996,19 +964,19 @@ process_file (const char *fname) { error (0, 0, "Couldn't get new section header string table [%zd]", shdrstrndx); - return cleanup (-1); + goto cleanup; } Elf_Data *data = elf_newdata (scn); if (data == NULL) { error (0, 0, "Couldn't create new section header string table data"); - return cleanup (-1); + goto cleanup; } if (dwelf_strtab_finalize (names, data) == NULL) { error (0, 0, "Not enough memory to create string table"); - return cleanup (-1); + goto cleanup; } namesbuf = data->d_buf; @@ -1018,7 +986,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get shdr for new section strings %zd", shdrstrndx); - return cleanup (-1); + goto cleanup; } /* Note that we also might have to compress and possibly set @@ -1038,7 +1006,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't update new section strings [%zd]", shdrstrndx); - return cleanup (-1); + goto cleanup; } /* We might have to compress the data if the user asked us to, @@ -1054,7 +1022,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get section header string table [%zd]", shdrstrndx); - return cleanup (-1); + goto cleanup; } shdr = gelf_getshdr (oldscn, &shdr_mem); @@ -1062,7 +1030,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get shdr for old section strings [%zd]", shdrstrndx); - return cleanup (-1); + goto cleanup; } shstrtab_name = elf_strptr (elf, shdrstrndx, shdr->sh_name); @@ -1070,13 +1038,13 @@ process_file (const char *fname) { error (0, 0, "Couldn't get name for old section strings [%zd]", shdrstrndx); - return cleanup (-1); + goto cleanup; } shstrtab_size = shdr->sh_size; if ((shdr->sh_flags & SHF_COMPRESSED) != 0) shstrtab_compressed = T_COMPRESS_ZLIB; - else if (strncmp (shstrtab_name, ".zdebug", strlen (".zdebug")) == 0) + else if (startswith (shstrtab_name, ".zdebug")) shstrtab_compressed = T_COMPRESS_GNU; } @@ -1087,7 +1055,7 @@ process_file (const char *fname) shstrtab_newname, shdrstrndx, shstrtab_compressed == T_COMPRESS_GNU, true, verbose > 0) < 0) - return cleanup (-1); + goto cleanup; } } @@ -1096,7 +1064,7 @@ process_file (const char *fname) if (gelf_getehdr (elfnew, &newehdr) == NULL) { error (0, 0, "Couldn't re-get new ehdr: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Set this after the sections have been created, otherwise section @@ -1104,7 +1072,7 @@ process_file (const char *fname) if (setshdrstrndx (elfnew, &newehdr, shdrstrndx) != 0) { error (0, 0, "Couldn't set new shdrstrndx: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Fixup pass. Adjust string table references, symbol table and @@ -1121,7 +1089,7 @@ process_file (const char *fname) if (shdr == NULL) { error (0, 0, "Couldn't get shdr for section %zd", ndx); - return cleanup (-1); + goto cleanup; } /* Keep the offset of allocated sections so they are at the @@ -1143,7 +1111,7 @@ process_file (const char *fname) if (gelf_update_shdr (scn, shdr) == 0) { error (0, 0, "Couldn't update section header %zd", ndx); - return cleanup (-1); + goto cleanup; } if (adjust_names && ndx == symtabndx) @@ -1156,7 +1124,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get new symtab data section [%zd]", ndx); - return cleanup (-1); + goto cleanup; } size_t elsize = gelf_fsize (elfnew, ELF_T_SYM, 1, EV_CURRENT); size_t syms = symd->d_size / elsize; @@ -1167,7 +1135,7 @@ process_file (const char *fname) if (sym == NULL) { error (0, 0, "2 Couldn't get symbol %zd", i); - return cleanup (-1); + goto cleanup; } if (sym->st_name != 0) @@ -1177,7 +1145,7 @@ process_file (const char *fname) if (gelf_update_sym (symd, i, sym) == 0) { error (0, 0, "Couldn't update symbol %zd", i); - return cleanup (-1); + goto cleanup; } } } @@ -1195,7 +1163,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get symbol table [%zd]", symtabndx); - return cleanup (-1); + goto cleanup; } shdr = gelf_getshdr (oldscn, &shdr_mem); @@ -1203,7 +1171,7 @@ process_file (const char *fname) { error (0, 0, "Couldn't get old symbol table shdr [%zd]", symtabndx); - return cleanup (-1); + goto cleanup; } symtab_name = elf_strptr (elf, shdrstrndx, shdr->sh_name); @@ -1211,14 +1179,13 @@ process_file (const char *fname) { error (0, 0, "Couldn't get old symbol table name [%zd]", symtabndx); - return cleanup (-1); + goto cleanup; } symtab_size = shdr->sh_size; if ((shdr->sh_flags & SHF_COMPRESSED) != 0) symtab_compressed = T_COMPRESS_ZLIB; - else if (strncmp (symtab_name, ".zdebug", - strlen (".zdebug")) == 0) + else if (startswith (symtab_name, ".zdebug")) symtab_compressed = T_COMPRESS_GNU; } @@ -1229,7 +1196,7 @@ process_file (const char *fname) symtab_newname, symtabndx, symtab_compressed == T_COMPRESS_GNU, true, verbose > 0) < 0) - return cleanup (-1); + goto cleanup; } } } @@ -1243,7 +1210,7 @@ process_file (const char *fname) if (gelf_getehdr (elfnew, &newehdr) == NULL) { error (0, 0, "Couldn't get ehdr: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } /* Position the shdrs after the last (unallocated) section. */ @@ -1258,7 +1225,7 @@ process_file (const char *fname) if (gelf_update_ehdr (elfnew, &newehdr) == 0) { error (0, 0, "Couldn't update ehdr: %s", elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } } @@ -1268,7 +1235,7 @@ process_file (const char *fname) if (elf_update (elfnew, ELF_C_WRITE) < 0) { error (0, 0, "Couldn't write %s: %s", fnew, elf_errmsg (-1)); - return cleanup (-1); + goto cleanup; } elf_end (elfnew); @@ -1290,14 +1257,45 @@ process_file (const char *fname) if (rename (fnew, fname) != 0) { error (0, errno, "Couldn't rename %s to %s", fnew, fname); - return cleanup (-1); + goto cleanup; } /* We are finally done with the new file, don't unlink it now. */ free (fnew); fnew = NULL; + res = 0; - return cleanup (0); +cleanup: + elf_end (elf); + close (fd); + + elf_end (elfnew); + close (fdnew); + + if (fnew != NULL) + { + unlink (fnew); + free (fnew); + fnew = NULL; + } + + free (snamebuf); + if (names != NULL) + { + dwelf_strtab_free (names); + free (scnstrents); + free (symstrents); + free (namesbuf); + if (scnnames != NULL) + { + for (size_t n = 0; n < shnum; n++) + free (scnnames[n]); + free (scnnames); + } + } + + free (sections); + return res; } int diff --git a/src/elflint.c b/src/elflint.c index 6a946838..ef7725ce 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -3428,6 +3428,18 @@ section [%2d] '%s': unknown parent version '%s'\n"), } } +static inline size_t +buffer_pos (Elf_Data *data, const unsigned char *p) +{ + return p - (const unsigned char *) data->d_buf; +} + +static inline size_t +buffer_left (Elf_Data *data, const unsigned char *p) +{ + return (const unsigned char *) data->d_buf + data->d_size - p; +} + static void check_attributes (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) { @@ -3446,11 +3458,6 @@ check_attributes (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) return; } - inline size_t pos (const unsigned char *p) - { - return p - (const unsigned char *) data->d_buf; - } - const unsigned char *p = data->d_buf; if (*p++ != 'A') { @@ -3459,12 +3466,7 @@ check_attributes (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) return; } - inline size_t left (void) - { - return (const unsigned char *) data->d_buf + data->d_size - p; - } - - while (left () >= 4) + while (buffer_left (data, p) >= 4) { uint32_t len; memcpy (&len, p, sizeof len); @@ -3472,16 +3474,16 @@ check_attributes (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) if (len == 0) ERROR (_("\ section [%2d] '%s': offset %zu: zero length field in attribute section\n"), - idx, section_name (ebl, idx), pos (p)); + idx, section_name (ebl, idx), buffer_pos (data, p)); if (MY_ELFDATA != ehdr->e_ident[EI_DATA]) CONVERT (len); - if (len > left ()) + if (len > buffer_left (data, p)) { ERROR (_("\ section [%2d] '%s': offset %zu: invalid length in attribute section\n"), - idx, section_name (ebl, idx), pos (p)); + idx, section_name (ebl, idx), buffer_pos (data, p)); break; } @@ -3493,7 +3495,7 @@ section [%2d] '%s': offset %zu: invalid length in attribute section\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: unterminated vendor name string\n"), - idx, section_name (ebl, idx), pos (p)); + idx, section_name (ebl, idx), buffer_pos (data, p)); break; } ++q; @@ -3510,7 +3512,7 @@ section [%2d] '%s': offset %zu: unterminated vendor name string\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"), - idx, section_name (ebl, idx), pos (chunk)); + idx, section_name (ebl, idx), buffer_pos (data, chunk)); break; } @@ -3519,7 +3521,7 @@ section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: truncated attribute section\n"), - idx, section_name (ebl, idx), pos (q)); + idx, section_name (ebl, idx), buffer_pos (data, q)); break; } @@ -3528,7 +3530,7 @@ section [%2d] '%s': offset %zu: truncated attribute section\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"), - idx, section_name (ebl, idx), pos (q)); + idx, section_name (ebl, idx), buffer_pos (data, q)); q += sizeof subsection_len; continue; @@ -3543,7 +3545,7 @@ section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"), - idx, section_name (ebl, idx), pos (q)); + idx, section_name (ebl, idx), buffer_pos (data, q)); break; } @@ -3554,7 +3556,7 @@ section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"), if (subsection_tag != 1) /* Tag_File */ ERROR (_("\ section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"), - idx, section_name (ebl, idx), pos (chunk), subsection_tag); + idx, section_name (ebl, idx), buffer_pos (data, chunk), subsection_tag); else { chunk += sizeof subsection_len; @@ -3572,7 +3574,7 @@ section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"), - idx, section_name (ebl, idx), pos (chunk)); + idx, section_name (ebl, idx), buffer_pos (data, chunk)); break; } } @@ -3583,7 +3585,7 @@ section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"), { ERROR (_("\ section [%2d] '%s': offset %zu: unterminated string in attribute\n"), - idx, section_name (ebl, idx), pos (chunk)); + idx, section_name (ebl, idx), buffer_pos (data, chunk)); break; } ++r; @@ -3596,11 +3598,11 @@ section [%2d] '%s': offset %zu: unterminated string in attribute\n"), &tag_name, &value_name)) ERROR (_("\ section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"), - idx, section_name (ebl, idx), pos (chunk), tag); + idx, section_name (ebl, idx), buffer_pos (data, chunk), tag); else if ((tag & 1) == 0 && value_name == NULL) ERROR (_("\ section [%2d] '%s': offset %zu: unrecognized %s attribute value %" PRIu64 "\n"), - idx, section_name (ebl, idx), pos (chunk), + idx, section_name (ebl, idx), buffer_pos (data, chunk), tag_name, value); chunk = r; @@ -3610,13 +3612,13 @@ section [%2d] '%s': offset %zu: unrecognized %s attribute value %" PRIu64 "\n"), else ERROR (_("\ section [%2d] '%s': offset %zu: vendor '%s' unknown\n"), - idx, section_name (ebl, idx), pos (p), name); + idx, section_name (ebl, idx), buffer_pos (data, p), name); } - if (left () != 0) + if (buffer_left (data, p) != 0) ERROR (_("\ section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"), - idx, section_name (ebl, idx), pos (p)); + idx, section_name (ebl, idx), buffer_pos (data, p)); } static bool has_loadable_segment; @@ -3703,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 @@ -4100,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; 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); @@ -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; @@ -736,7 +735,7 @@ 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. */ @@ -858,7 +857,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, bind = ebl_symbol_binding_name (ebl, GELF_ST_BIND (syms[cnt].sym.st_info), symbindbuf, sizeof (symbindbuf)); - if (bind != NULL && strncmp (bind, "GNU_", strlen ("GNU_")) == 0) + if (bind != NULL && startswith (bind, "GNU_")) bind += strlen ("GNU_"); printf ("%-*s|%s|%-6s|%-8s|%s|%*s|%s\n", longest_name, symstr, addressbuf, bind, @@ -1308,6 +1307,8 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, dwfl_getmodules (dwfl, &getdbg_dwflmod, &get, 0); } } + else + close (dwfl_fd); } } if (dbg != NULL) @@ -1338,7 +1339,7 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, 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..f7ea6c92 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -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 { diff --git a/src/readelf.c b/src/readelf.c index 11692bb5..c10038e3 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1335,7 +1335,7 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ _("bad compression header for section %zd: %s"), elf_ndxscn (scn), elf_errmsg (-1)); } - else if (strncmp(".zdebug", sname, strlen (".zdebug")) == 0) + else if (startswith (sname, ".zdebug")) { ssize_t size; if ((size = dwelf_scn_gnu_compressed_size (scn)) >= 0) @@ -2554,7 +2554,9 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) &vernaux_mem); while (vernaux != NULL && vernaux->vna_other != *versym - && vernaux->vna_next != 0) + && vernaux->vna_next != 0 + && (verneed_data->d_size - vna_offset + >= vernaux->vna_next)) { /* Update the offset. */ vna_offset += vernaux->vna_next; @@ -2571,6 +2573,9 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Found it. */ break; + if (verneed_data->d_size - vn_offset < verneed->vn_next) + break; + vn_offset += verneed->vn_next; verneed = (verneed->vn_next == 0 ? NULL @@ -2606,6 +2611,9 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Found the definition. */ break; + if (verdef_data->d_size - vd_offset < verdef->vd_next) + break; + vd_offset += verdef->vd_next; verdef = (verdef->vd_next == 0 ? NULL @@ -3157,7 +3165,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]]; @@ -3258,7 +3266,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; @@ -3324,7 +3332,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; @@ -3402,7 +3410,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]; @@ -3440,17 +3448,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); @@ -4879,7 +4885,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)); } } @@ -7599,7 +7605,9 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) case DW_AT_GNU_call_site_data_value: case DW_AT_GNU_call_site_target: case DW_AT_GNU_call_site_target_clobbered: - if (form != DW_FORM_data16) + if (form == DW_FORM_exprloc + || (form != DW_FORM_data16 + && attrp->cu->version < 4)) /* blocks were expressions. */ { putchar ('\n'); print_ops (cbargs->dwflmod, cbargs->dbg, @@ -7734,7 +7742,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; @@ -7792,7 +7800,8 @@ print_debug_units (Dwfl_Module *dwflmod, { Dwarf_Die typedie; Dwarf_Off dieoffset; - dieoffset = dwarf_dieoffset (dwarf_offdie_types (dbg, subdie_off, + dieoffset = dwarf_dieoffset (dwarf_offdie_types (dbg, cu->start + + subdie_off, &typedie)); printf (_(" Type unit at offset %" PRIu64 ":\n" " Version: %" PRIu16 @@ -7905,9 +7914,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) @@ -8362,6 +8369,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) @@ -8454,6 +8478,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; @@ -8737,10 +8763,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:")); @@ -8752,13 +8785,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) { @@ -8890,6 +8918,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")); @@ -11440,7 +11521,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) || (scnlen == dbglen + 5 && strstr (name, ".dwo") == name + dbglen + 1))) || (scnlen > 14 /* .gnu.debuglto_ prefix. */ - && strncmp (name, ".gnu.debuglto_", 14) == 0 + && startswith (name, ".gnu.debuglto_") && strcmp (&name[14], debug_sections[n].name) == 0) ) { @@ -12444,8 +12525,7 @@ handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr, into the owner name field. Extract just the owner name prefix here, then use the rest later as data. */ bool is_gnu_build_attr - = strncmp (name, ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX, - strlen (ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX)) == 0; + = startswith (name, ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX); const char *print_name = (is_gnu_build_attr ? ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX : name); size_t print_namesz = (is_gnu_build_attr @@ -12625,7 +12705,7 @@ dump_data_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name) _("Couldn't uncompress section"), elf_ndxscn (scn)); } - else if (strncmp (name, ".zdebug", strlen (".zdebug")) == 0) + else if (startswith (name, ".zdebug")) { if (elf_compress_gnu (scn, 0, 0) < 0) printf ("WARNING: %s [%zd]\n", @@ -12676,7 +12756,7 @@ print_string_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name) _("Couldn't uncompress section"), elf_ndxscn (scn)); } - else if (strncmp (name, ".zdebug", strlen (".zdebug")) == 0) + else if (startswith (name, ".zdebug")) { if (elf_compress_gnu (scn, 0, 0) < 0) printf ("WARNING: %s [%zd]\n", diff --git a/src/strip.c b/src/strip.c index 7a5d4e4c..d5b753d7 100644 --- a/src/strip.c +++ b/src/strip.c @@ -607,7 +607,7 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, GElf_Chdr tchdr; int tcompress_type = 0; bool is_gnu_compressed = false; - if (strncmp (tname, ".zdebug", strlen ("zdebug")) == 0) + if (startswith (tname, ".zdebug")) { is_gnu_compressed = true; if (elf_compress_gnu (tscn, 0, 0) != 1) @@ -705,17 +705,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 +956,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 +1062,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"); @@ -1191,8 +1196,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) @@ -1975,8 +1979,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; diff --git a/src/unstrip.c b/src/unstrip.c index 85803295..aacc9aad 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -432,6 +432,19 @@ update_sh_size (Elf_Scn *outscn, const Elf_Data *data) update_shdr (outscn, newshdr); } +static inline void +adjust_reloc (GElf_Xword *info, + size_t map[], size_t map_size) +{ + size_t ndx = GELF_R_SYM (*info); + if (ndx != STN_UNDEF) + { + if (ndx > map_size) + error (EXIT_FAILURE, 0, "bad symbol ndx section"); + *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info)); + } +} + /* Update relocation sections using the symbol table. */ static void adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, @@ -439,17 +452,6 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { Elf_Data *data = elf_getdata (outscn, NULL); - inline void adjust_reloc (GElf_Xword *info) - { - size_t ndx = GELF_R_SYM (*info); - if (ndx != STN_UNDEF) - { - if (ndx > map_size) - error (EXIT_FAILURE, 0, "bad symbol ndx section"); - *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info)); - } - } - switch (shdr->sh_type) { case SHT_REL: @@ -460,7 +462,8 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { GElf_Rel rel_mem; GElf_Rel *rel = gelf_getrel (data, i, &rel_mem); - adjust_reloc (&rel->r_info); + 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")); } @@ -474,7 +477,8 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { GElf_Rela rela_mem; GElf_Rela *rela = gelf_getrela (data, i, &rela_mem); - adjust_reloc (&rela->r_info); + 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")); } @@ -1063,6 +1067,20 @@ get_group_sig (Elf *elf, GElf_Shdr *shdr) return sig; } +static inline bool +check_match (bool match, Elf_Scn *scn, const char *name) +{ + if (!match) + { + error (0, 0, _("cannot find matching section for [%zu] '%s'"), + elf_ndxscn (scn), name); + return true; + } + + return false; +} + + /* Fix things up when prelink has moved some allocated sections around and the debuginfo file's section headers no longer match up. This fills in SECTIONS[0..NALLOC-1].outscn or exits. @@ -1198,16 +1216,6 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, } bool fail = false; - inline void check_match (bool match, Elf_Scn *scn, const char *name) - { - if (!match) - { - fail = true; - error (0, 0, _("cannot find matching section for [%zu] '%s'"), - elf_ndxscn (scn), name); - } - } - Elf_Scn *scn = NULL; while ((scn = elf_nextscn (debug, scn)) != NULL) { @@ -1238,7 +1246,7 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, for (size_t i = 0; shdr != NULL && i < nalloc; ++i) if (sections[i].outscn == scn) shdr = NULL; - check_match (shdr == NULL, scn, name); + fail |= check_match (shdr == NULL, scn, name); } if (fail) @@ -1294,7 +1302,7 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, } } - check_match (undo_sec == NULL, scn, name); + fail |= check_match (undo_sec == NULL, scn, name); } free (undo_sections); @@ -1446,29 +1454,6 @@ more sections in stripped file than debug file -- arguments reversed?")); stripped_symtab = §ions[nalloc]; } - /* Locate a matching unallocated section in SECTIONS. */ - inline struct section *find_unalloc_section (const GElf_Shdr *shdr, - const char *name, - const char *sig) - { - size_t l = nalloc, u = stripped_shnum - 1; - while (l < u) - { - size_t i = (l + u) / 2; - struct section *sec = §ions[i]; - int cmp = compare_unalloc_sections (shdr, &sec->shdr, - name, sec->name, - sig, sec->sig); - if (cmp < 0) - u = i; - else if (cmp > 0) - l = i + 1; - else - return sec; - } - return NULL; - } - Elf_Data *shstrtab = elf_getdata (elf_getscn (unstripped, unstripped_shstrndx), NULL); ELF_CHECK (shstrtab != NULL, @@ -1530,9 +1515,27 @@ more sections in stripped file than debug file -- arguments reversed?")); } else { - /* Look for the section that matches. */ - sec = find_unalloc_section (shdr, name, - get_group_sig (unstripped, shdr)); + /* Locate a matching unallocated section in SECTIONS. */ + const char *sig = get_group_sig (unstripped, shdr); + size_t l = nalloc, u = stripped_shnum - 1; + while (l < u) + { + size_t i = (l + u) / 2; + struct section *section = §ions[i]; + int cmp = compare_unalloc_sections (shdr, §ion->shdr, + name, section->name, + sig, section->sig); + if (cmp < 0) + u = i; + else if (cmp > 0) + l = i + 1; + else + { + sec = section; + break; + } + } + if (sec == NULL) { /* An additional unallocated section is fine if not SHT_NOBITS. @@ -2224,22 +2227,23 @@ open_file (const char *file, bool writable) return fd; } +/* Warn, and exit if not forced to continue, if some ELF header + sanity check for the stripped and unstripped files failed. */ +static void +warn (const char *msg, bool force, + const char *stripped_file, const char *unstripped_file) +{ + error (force ? 0 : EXIT_FAILURE, 0, "%s'%s' and '%s' %s%s.", + force ? _("WARNING: ") : "", + stripped_file, unstripped_file, msg, + force ? "" : _(", use --force")); +} + /* Handle a pair of files we need to open by name. */ static void handle_explicit_files (const char *output_file, bool create_dirs, bool force, const char *stripped_file, const char *unstripped_file) { - - /* Warn, and exit if not forced to continue, if some ELF header - sanity check for the stripped and unstripped files failed. */ - void warn (const char *msg) - { - error (force ? 0 : EXIT_FAILURE, 0, "%s'%s' and '%s' %s%s.", - force ? _("WARNING: ") : "", - stripped_file, unstripped_file, msg, - force ? "" : _(", use --force")); - } - int stripped_fd = open_file (stripped_file, false); Elf *stripped = elf_begin (stripped_fd, ELF_C_READ, NULL); GElf_Ehdr stripped_ehdr; @@ -2260,16 +2264,20 @@ handle_explicit_files (const char *output_file, bool create_dirs, bool force, if (memcmp (stripped_ehdr.e_ident, unstripped_ehdr.e_ident, EI_NIDENT) != 0) - warn (_("ELF header identification (e_ident) different")); + warn (_("ELF header identification (e_ident) different"), force, + stripped_file, unstripped_file); if (stripped_ehdr.e_type != unstripped_ehdr.e_type) - warn (_("ELF header type (e_type) different")); + warn (_("ELF header type (e_type) different"), force, + stripped_file, unstripped_file); if (stripped_ehdr.e_machine != unstripped_ehdr.e_machine) - warn (_("ELF header machine type (e_machine) different")); + warn (_("ELF header machine type (e_machine) different"), force, + stripped_file, unstripped_file); if (stripped_ehdr.e_phnum < unstripped_ehdr.e_phnum) - warn (_("stripped program header (e_phnum) smaller than unstripped")); + warn (_("stripped program header (e_phnum) smaller than unstripped"), + force, stripped_file, unstripped_file); } handle_file (output_file, create_dirs, stripped, &stripped_ehdr, unstripped); @@ -2393,11 +2401,11 @@ 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); + + free (output_file); } @@ -2492,21 +2500,18 @@ static void handle_implicit_modules (const struct arg_info *info) { struct match_module_info mmi = { info->args, NULL, info->match_files }; - inline ptrdiff_t next (ptrdiff_t offset) - { - return dwfl_getmodules (info->dwfl, &match_module, &mmi, offset); - } - ptrdiff_t offset = next (0); + ptrdiff_t offset = dwfl_getmodules (info->dwfl, &match_module, &mmi, 0); if (offset == 0) error (EXIT_FAILURE, 0, _("no matching modules found")); if (info->list) do list_module (mmi.found); - while ((offset = next (offset)) > 0); + while ((offset = dwfl_getmodules (info->dwfl, &match_module, &mmi, + offset)) > 0); else if (info->output_dir == NULL) { - if (next (offset) != 0) + if (dwfl_getmodules (info->dwfl, &match_module, &mmi, offset) != 0) error (EXIT_FAILURE, 0, _("matched more than one module")); handle_dwfl_module (info->output_file, false, info->force, mmi.found, info->all, info->ignore, info->relocate); @@ -2516,7 +2521,8 @@ handle_implicit_modules (const struct arg_info *info) handle_output_dir_module (info->output_dir, mmi.found, info->force, info->all, info->ignore, info->modnames, info->relocate); - while ((offset = next (offset)) > 0); + while ((offset = dwfl_getmodules (info->dwfl, &match_module, &mmi, + offset)) > 0); } int @@ -2598,9 +2604,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 907b6351..a59cdd51 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,381 @@ +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 + * run-debuginfod-find.sh: Test absence of 404-latch bug in client + curl handle reuse. + +2021-04-19 Martin Liska <mliska@suse.cz> + + * dwelf_elf_e_machine_string.c (main): Use startswith. + * dwelfgnucompressed.c (main): Likewise. + * elfgetchdr.c (main): Likewise. + * elfputzdata.c (main): Likewise. + * vdsosyms.c (module_callback): Likewise. + +2021-05-04 Alice Zhang <alizhang@redhat.com> + + * run-debuginfod-find.sh: Added tests for negative cache files. + +2021-04-26 Frank Ch. Eigler <fche@redhat.com> + + PR27571 + * run-debuginfod-find.sh: Add test case for unwriteable cache files. + +2021-04-23 Omar Sandoval <osandov@fb.com> + + * run-low_high_pc-dw-form-indirect.sh: New file. + * run-readelf-dw-form-indirect.sh: New file. + * testfile-dw-form-indirect.bz2: New file. + * Makefile.am (TESTS): Add run-low_high_pc-dw-form-indirect.sh and + run-readelf-dw-form-indirect.sh. + (EXTRA_DIST): Add run-low_high_pc-dw-form-indirect.sh, + run-readelf-dw-form-indirect.sh, and testfile-dw-form-indirect.bz2. + +2021-04-26 Frank Ch. Eigler <fche@redhat.com> + + PR26125 + * run-debuginfod-find.sh: Add test case for cache cleanup rmdir. + +2021-04-23 Frank Ch. Eigler <fche@redhat.com> + + * run-debuginfod-find.sh: Add a tiny test for client object reuse. + Add an "errfiles" test construct to ask the framework to print + various files in the case of an error. + +2021-03-30 Frank Ch. Eigler <fche@redhat.com> + + * run-debuginfod-find.sh: Add thread comm checks. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elfstrmerge.c (main): Move new_data_buf function to... + (new_data_buf): ...top-level static function adding fname, + ndx, shdrstrnd and shdrnum as arguments. + +2021-02-17 Timm Bäder <tbaeder@redhat.com> + + * elfstrmerge.c (main): Move newsecndx function to... + (newsecndx): ...top-level static function adding shdrstrndx, + shdrnum and fname as arguments. + +2021-02-25 Frank Ch. Eigler <fche@redhat.com> + + * run-debuginfod-find.sh: Add bad webapi artifacttype test. + +2021-02-17 Frank Ch. Eigler <fche@redhat.com> + + * run-debuginfod-find.sh: Tweak wait_ready() to also print -vvv log of + appropriate debuginfod if metric timeout occurs. Focus grooming + test carefully at a more deterministic metric. + +2021-02-12 Mark Wielaard <mark@klomp.org> + + * run-readelf-types.sh: Add CU start to type offset reference. + +2021-02-07 Alexander Miller <alex.miller@gmx.de> + + * Makefile.am (TESTS_ENVIRONMENT): Quote variables. + (valgrind_cmd): Unquote variable. + +2021-02-08 Érico Nogueira <ericonr@disroot.org> + + * run-debuginfod-find.sh: Check for cpio availability. + 2021-02-04 Frank Ch. Eigler <fche@redhat.com> * run-debuginfod-find.sh: Smoke test --fdcache-mintmp option handling. diff --git a/tests/Makefile.am b/tests/Makefile.am index c145720c..bfb8b13a 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 \ @@ -139,11 +140,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 \ @@ -158,6 +159,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 \ @@ -187,7 +189,9 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-getphdrnum.sh run-test-includes.sh \ leb128 read_unaligned \ msg_tst system-elf-libelf-test \ - $(asm_TESTS) run-disasm-bpf.sh + $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-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 @@ -209,7 +213,30 @@ 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-000-permission.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 endif endif @@ -278,7 +305,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile21.bz2 testfile21.index.bz2 \ testfile22.bz2 testfile23.bz2 testfile24.bz2 testfile25.bz2 \ testfile26.bz2 testfile27.bz2 \ - coverage.sh test-subr.sh test-wrapper.sh \ + coverage.sh test-subr.sh test-wrapper.sh debuginfod-subr.sh \ run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ run-readelf-test4.sh run-readelf-twofiles.sh \ run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \ @@ -310,6 +337,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 \ @@ -354,6 +382,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 \ @@ -376,7 +405,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 \ @@ -471,7 +509,30 @@ 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-000-permission.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 \ 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,40 +568,45 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-pt_gnu_prop-tests.sh \ testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \ run-getphdrnum.sh testfile-phdrs.elf.bz2 \ - run-test-includes.sh + run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ + 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 -valgrind_cmd='valgrind -q --leak-check=full --error-exitcode=1' +valgrind_cmd=valgrind -q --leak-check=full --error-exitcode=1 endif -installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir); \ - bindir=$(DESTDIR)$(bindir); \ +installed_TESTS_ENVIRONMENT = libdir='$(DESTDIR)$(libdir)'; \ + bindir='$(DESTDIR)$(bindir)'; \ LC_ALL=C; LANG=C; \ - VALGRIND_CMD=$(valgrind_cmd); \ - abs_srcdir=$(abs_srcdir); \ - abs_builddir=$(abs_builddir); \ - abs_top_builddir=$(abs_top_builddir); \ + VALGRIND_CMD='$(valgrind_cmd)'; \ + abs_srcdir='$(abs_srcdir)'; \ + abs_builddir='$(abs_builddir)'; \ + abs_top_builddir='$(abs_top_builddir)'; \ export abs_srcdir; export abs_builddir; \ export abs_top_builddir; \ export libdir; export bindir; \ export LC_ALL; export LANG; export VALGRIND_CMD; \ unset DEBUGINFOD_URLS; \ - NM=$(NM); export NM; \ - CC=$(CC); export CC; + NM='$(NM)'; export NM; \ + CC='$(CC)'; export CC; installed_LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \ installed $(tests_rpath) \ '$(program_transform_name)' -TESTS_ENVIRONMENT = LC_ALL=C; LANG=C; VALGRIND_CMD=$(valgrind_cmd); \ - abs_srcdir=$(abs_srcdir); abs_builddir=$(abs_builddir); \ - abs_top_builddir=$(abs_top_builddir); \ +TESTS_ENVIRONMENT = LC_ALL=C; LANG=C; VALGRIND_CMD='$(valgrind_cmd)'; \ + abs_srcdir='$(abs_srcdir)'; \ + abs_builddir='$(abs_builddir)'; \ + abs_top_builddir='$(abs_top_builddir)'; \ export abs_srcdir; export abs_builddir; \ export abs_top_builddir; \ export LC_ALL; export LANG; export VALGRIND_CMD; \ unset DEBUGINFOD_URLS; \ - NM=$(NM); export NM; \ - CC=$(CC); export CC; + NM='$(NM)'; export NM; \ + CC='$(CC)'; export CC; LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \ $(abs_top_builddir)/libdw:$(abs_top_builddir)/backends:$(abs_top_builddir)/libelf:$(abs_top_builddir)/libasm:$(abs_top_builddir)/debuginfod @@ -679,6 +745,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/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..59033f35 --- /dev/null +++ b/tests/debuginfod-subr.sh @@ -0,0 +1,160 @@ +# 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 diff --git a/tests/dwelf_elf_e_machine_string.c b/tests/dwelf_elf_e_machine_string.c index afad1058..30599c36 100644 --- a/tests/dwelf_elf_e_machine_string.c +++ b/tests/dwelf_elf_e_machine_string.c @@ -19,6 +19,8 @@ # include <config.h> #endif +#include <system.h> + #include <assert.h> #include <errno.h> #include <inttypes.h> @@ -41,7 +43,7 @@ main (int argc, char **argv) const char *machine; errno = 0; - if (strncmp ("0x", argv[i], 2) == 0) + if (startswith (argv[i], "0x")) val = strtol (&argv[i][2], NULL, 16); else val = strtol (argv[i], NULL, 10); diff --git a/tests/dwelfgnucompressed.c b/tests/dwelfgnucompressed.c index 0132271c..447f3d59 100644 --- a/tests/dwelfgnucompressed.c +++ b/tests/dwelfgnucompressed.c @@ -18,6 +18,8 @@ # include <config.h> #endif +#include <system.h> + #include <assert.h> #include <sys/types.h> #include <sys/stat.h> @@ -82,7 +84,7 @@ main (int argc, char *argv[]) break; } - if (strncmp(".zdebug", sname, strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) { ssize_t size; if ((size = dwelf_scn_gnu_compressed_size (scn)) == -1) 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/elfgetchdr.c b/tests/elfgetchdr.c index 44ba1789..171c4df8 100644 --- a/tests/elfgetchdr.c +++ b/tests/elfgetchdr.c @@ -18,6 +18,8 @@ # include <config.h> #endif +#include <system.h> + #include <assert.h> #include <sys/types.h> #include <sys/stat.h> @@ -99,7 +101,7 @@ main (int argc, char *argv[]) } /* This duplicates what the dwelfgnucompressed testcase does. */ - if (strncmp(".zdebug", sname, strlen (".zdebug")) == 0) + if (startswith (sname, ".zdebug")) { ssize_t size; if ((size = dwelf_scn_gnu_compressed_size (scn)) == -1) diff --git a/tests/elfputzdata.c b/tests/elfputzdata.c index 0d9c020e..0ff363f9 100644 --- a/tests/elfputzdata.c +++ b/tests/elfputzdata.c @@ -18,6 +18,8 @@ # include <config.h> #endif +#include <system.h> + #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> @@ -83,7 +85,7 @@ main (int argc, char *argv[]) printf ("Cannot compress %zd %s\n", idx, name); } else if ((shdr->sh_flags & SHF_COMPRESSED) != 0 - || strncmp (name, ".zdebug", strlen (".zdebug")) == 0) + || startswith (name, ".zdebug")) { printf ("Already compressed %zd %s\n", idx, name); } diff --git a/tests/elfstrmerge.c b/tests/elfstrmerge.c index abbdf3fd..197c6a5d 100644 --- a/tests/elfstrmerge.c +++ b/tests/elfstrmerge.c @@ -147,6 +147,47 @@ fail_elf_idx (const char *msg, const char *fname, size_t idx) abort(); } +/* section index mapping and sanity checking. */ +static size_t +newsecndx (size_t secndx, size_t shdrstrndx, size_t shdrnum, + const char *fname, + const char *what, size_t widx, + const char *member, size_t midx) +{ + if (unlikely (secndx == 0 || secndx == shdrstrndx || secndx >= shdrnum)) + { + /* Don't use fail... too specialized messages. Call release + outselves and then error. Ignores midx if widx is + zero. */ + release (); + if (widx == 0) + error (1, 0, "%s: bad section index %zd in %s for %s", + fname, secndx, what, member); + else if (midx == 0) + error (1, 0, "%s: bad section index %zd in %s %zd for %s", + fname, secndx, what, widx, member); + else + error (1, 0, "%s: bad section index %zd in %s %zd for %s %zd", + fname, secndx, what, widx, member, midx); + } + + return secndx < shdrstrndx ? secndx : secndx - 1; +} + +static void +new_data_buf (Elf_Data *d, const char *fname, + size_t ndx, size_t shdrstrndx, size_t shdrnum) +{ + size_t s = d->d_size; + if (s == 0) + fail_idx ("Expected data in section", fname, ndx); + void *b = malloc (d->d_size); + if (b == NULL) + fail_idx ("Couldn't allocated buffer for section", NULL, ndx); + newscnbufs[newsecndx (ndx, shdrstrndx, shdrnum, fname, + "section", ndx, "d_buf", 0)] = d->d_buf = b; +} + int main (int argc, char **argv) { @@ -325,30 +366,6 @@ main (int argc, char **argv) if (newstrtabdata.d_size >= shdrstrshdr->sh_size + strtabshdr->sh_size) fail ("Impossible, merged string table is larger", fname); - /* section index mapping and sanity checking. */ - size_t newsecndx (size_t secndx, const char *what, size_t widx, - const char *member, size_t midx) - { - if (unlikely (secndx == 0 || secndx == shdrstrndx || secndx >= shdrnum)) - { - /* Don't use fail... too specialized messages. Call release - ourselves and then error. Ignores midx if widx is - zero. */ - release (); - if (widx == 0) - error (1, 0, "%s: bad section index %zd in %s for %s", - fname, secndx, what, member); - else if (midx == 0) - error (1, 0, "%s: bad section index %zd in %s %zd for %s", - fname, secndx, what, widx, member); - else - error (1, 0, "%s: bad section index %zd in %s %zd for %s %zd", - fname, secndx, what, widx, member, midx); - } - - return secndx < shdrstrndx ? secndx : secndx - 1; - } - struct stat st; if (fstat (fd, &st) != 0) fail_errno("Couldn't fstat", fname); @@ -392,7 +409,8 @@ main (int argc, char **argv) newehdr.e_flags = ehdr.e_flags; /* The new file uses the new strtab as shstrtab. */ - size_t newstrtabndx = newsecndx (strtabndx, "ehdr", 0, "e_shstrndx", 0); + size_t newstrtabndx = newsecndx (strtabndx, shdrstrndx, shdrnum, + fname, "ehdr", 0, "e_shstrndx", 0); if (newstrtabndx < SHN_LORESERVE) newehdr.e_shstrndx = newstrtabndx; else @@ -460,11 +478,14 @@ main (int argc, char **argv) newshdr.sh_addr = shdr->sh_addr; newshdr.sh_size = shdr->sh_size; if (shdr->sh_link != 0) - newshdr.sh_link = newsecndx (shdr->sh_link, "shdr", ndx, "sh_link", 0); + newshdr.sh_link = newsecndx (shdr->sh_link, shdrstrndx, shdrnum, + fname, "shdr", ndx, "sh_link", 0); else newshdr.sh_link = 0; if (SH_INFO_LINK_P (shdr) && shdr->sh_info != 0) - newshdr.sh_info = newsecndx (shdr->sh_info, "shdr", ndx, "sh_info", 0); + newshdr.sh_info = newsecndx (shdr->sh_info, shdrstrndx, shdrnum, + fname, "shdr", ndx, "sh_info", 0); + else newshdr.sh_info = shdr->sh_info; newshdr.sh_entsize = shdr->sh_entsize; @@ -473,17 +494,6 @@ main (int argc, char **argv) manipulate the original data. Allocate and check here, so we have a list of all data buffers we might need to release when done. */ - void new_data_buf (Elf_Data *d) - { - size_t s = d->d_size; - if (s == 0) - fail_idx ("Expected data in section", fname, ndx); - void *b = malloc (d->d_size); - if (b == NULL) - fail_idx ("Couldn't allocated buffer for section", NULL, ndx); - newscnbufs[newsecndx (ndx, "section", ndx, "d_buf", 0)] = d->d_buf = b; - } - Elf_Data *newdata = elf_newdata (newscn); if (newdata == NULL) fail_elf_idx ("Couldn't create new data for section", fnew, ndx); @@ -510,7 +520,7 @@ main (int argc, char **argv) const bool update_name = shdr->sh_link == strtabndx; if (update_name && ndx != symtabndx) fail ("Only one symbol table using strtab expected", fname); - new_data_buf (newdata); + new_data_buf (newdata, fname, ndx, shdrstrndx, shdrnum); size_t syms = (data->d_size / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT)); for (size_t i = 0; i < syms; i++) @@ -526,8 +536,8 @@ main (int argc, char **argv) " for old shdrstrndx %zd\n", ndx, i, shdrstrndx); else if (sym.st_shndx != SHN_UNDEF && sym.st_shndx < SHN_LORESERVE) - sym.st_shndx = newsecndx (sym.st_shndx, "section", ndx, - "symbol", i); + sym.st_shndx = newsecndx (sym.st_shndx, shdrstrndx, shdrnum, + fname, "section", ndx, "symbol", i); if (update_name && sym.st_name != 0) sym.st_name = dwelf_strent_off (symstrents[i]); @@ -541,7 +551,7 @@ main (int argc, char **argv) case SHT_GROUP: { - new_data_buf (newdata); + new_data_buf (newdata, fname, ndx, shdrstrndx, shdrnum); /* A section group contains Elf32_Words. The first word is a flag value, the rest of the words are indexes of the sections belonging to the group. */ @@ -552,14 +562,14 @@ main (int argc, char **argv) fail_idx ("Not enough data in group section", fname, ndx); newgroup[0] = group[0]; for (size_t i = 1; i < words; i++) - newgroup[i] = newsecndx (group[i], "section", ndx, - "group", i); + newgroup[i] = newsecndx (group[i], shdrstrndx, shdrnum, + fname, "section", ndx, "group", i); } break; case SHT_SYMTAB_SHNDX: { - new_data_buf (newdata); + new_data_buf (newdata, fname, ndx, shdrstrndx, shdrnum); /* A SHNDX just contains an array of section indexes for the corresponding symbol table. The entry is SHN_UNDEF unless the corresponding symbol is @@ -571,8 +581,8 @@ main (int argc, char **argv) if (shndx[i] == SHN_UNDEF) newshndx[i] = SHN_UNDEF; else - newshndx[i] = newsecndx (shndx[i], "section", ndx, - "shndx", i); + newshndx[i] = newsecndx (shndx[i], shdrstrndx, shdrnum, + fname, "section", ndx, "shndx", i); } break; 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-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh new file mode 100755 index 00000000..c1b2cf81 --- /dev/null +++ b/tests/run-debuginfod-000-permission.sh @@ -0,0 +1,86 @@ +#!/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 / + +# 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 + +######################################################################## +# 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" + err +fi + +if [ `stat -c "%A" $DEBUGINFOD_CACHE_PATH/01234567/debuginfo` != "----------" ]; then + echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" + 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-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh new file mode 100755 index 00000000..030e0aa6 --- /dev/null +++ b/tests/run-debuginfod-archive-groom.sh @@ -0,0 +1,167 @@ +#!/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 +export DEBUGINFOD_TIMEOUT=10 + +# 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..5369949b --- /dev/null +++ b/tests/run-debuginfod-archive-rename.sh @@ -0,0 +1,104 @@ +#!/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 +export DEBUGINFOD_TIMEOUT=10 +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..9f7454bc --- /dev/null +++ b/tests/run-debuginfod-archive-test.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 + +# 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_TIMEOUT=10 +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..b9444426 --- /dev/null +++ b/tests/run-debuginfod-artifact-running.sh @@ -0,0 +1,122 @@ +#!/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 + +# Be patient when run on a busy machine things might take a bit. +export DEBUGINFOD_TIMEOUT=10 + +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..39ee5190 --- /dev/null +++ b/tests/run-debuginfod-dlopen.sh @@ -0,0 +1,94 @@ +#!/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 / + +# 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' +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..06f60e78 --- /dev/null +++ b/tests/run-debuginfod-extraction.sh @@ -0,0 +1,109 @@ +#!/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 + +# 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 + +# 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..1347e7b8 --- /dev/null +++ b/tests/run-debuginfod-federation-link.sh @@ -0,0 +1,165 @@ +#!/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_TIMEOUT=10 +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 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 +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..2d0fd6d4 --- /dev/null +++ b/tests/run-debuginfod-federation-metrics.sh @@ -0,0 +1,211 @@ +#!/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_TIMEOUT=10 +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 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/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..45761ed7 --- /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 +export DEBUGINFOD_TIMEOUT=10 +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 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 +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. + +######################################################################## +# Corrupt the sqlite database and get debuginfod to trip across its errors +curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' +dd if=/dev/zero of=$DB bs=1 count=1 + +# trigger some random activity that's Sure to get sqlite3 upset +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 +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/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 6340f60e..00000000 --- a/tests/run-debuginfod-find.sh +++ /dev/null @@ -1,578 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (C) 2019-2020 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 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=-vvvv - -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 - -# 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" - curl -s http://127.0.0.1:$port/metrics - 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 > vlog4 2>&1 & -PID1=$! -tempfiles vlog4 -# 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 - -# 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 - -######################################################################## - -# 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 - - -######################################################################## - -# 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 -# Expect 3 rpms to be deleted by the groom -# 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 -wait_ready $PORT1 'thread_work_total{role="groom"}' 2 -wait_ready $PORT1 'groom{statistic="file d/e"}' 3 - -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests - -testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true - -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)' vlog4 - -######################################################################## - -# 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 > vlog3 2>&1 & -PID2=$! -tempfiles vlog3 -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 vlog4 -curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true - -grep UA:TESTCURL vlog4 -grep XFF:TESTXFF vlog4 - - -# 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 -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 -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 - - -######################################################################## -# 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 vlog3 -grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog3 -grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog3 -grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog3 -grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog3 - -######################################################################## - -# 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 - -# 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 - -# 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..3bc9e799 --- /dev/null +++ b/tests/run-debuginfod-malformed.sh @@ -0,0 +1,114 @@ +#!/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 / + +# 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}/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-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..c9192510 --- /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/ls || 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..10b2ab49 --- /dev/null +++ b/tests/run-debuginfod-response-headers.sh @@ -0,0 +1,92 @@ +#!/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 + +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..dc9accb0 --- /dev/null +++ b/tests/run-debuginfod-tmp-home.sh @@ -0,0 +1,129 @@ +#!/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 / + +# 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}/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 000-perm 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-writable.sh b/tests/run-debuginfod-writable.sh new file mode 100755 index 00000000..9cc4ea1d --- /dev/null +++ b/tests/run-debuginfod-writable.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=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 / + +# 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 + +######################################################################## + +# 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-low_high_pc-dw-form-indirect.sh b/tests/run-low_high_pc-dw-form-indirect.sh new file mode 100755 index 00000000..6902982b --- /dev/null +++ b/tests/run-low_high_pc-dw-form-indirect.sh @@ -0,0 +1,23 @@ +#! /bin/sh +# Copyright (C) 2021 Facebook +# 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 + +# See run-readelf-dw-form-indirect +testfiles testfile-dw-form-indirect + +testrun ${abs_builddir}/low_high_pc -e ./testfile-dw-form-indirect 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-dw-form-indirect.sh b/tests/run-readelf-dw-form-indirect.sh new file mode 100755 index 00000000..58838484 --- /dev/null +++ b/tests/run-readelf-dw-form-indirect.sh @@ -0,0 +1,678 @@ +#! /bin/sh +# Copyright (C) 2021 Facebook +# 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 + +# // Program processed by https://github.com/facebookincubator/BOLT. +# // gcc -g -O2 -fno-reorder-blocks-and-partition -Wl,--emit-relocs primes.c -o primes +# // perf record -e cycles:u -j any,u -o perf.data -- ./primes 1000 > /dev/null +# // perf2bolt -p perf.data -o perf.fdata ./primes +# // llvm-bolt primes -o primes.bolt -data=perf.fdata -reorder-blocks=cache+ -reorder-functions=hfsort -split-functions=2 -split-all-cold -split-eh -dyno-stats -update-debug-sections +# +# #include <inttypes.h> +# #include <stdbool.h> +# #include <stdio.h> +# #include <stdlib.h> +# +# bool +# is_prime (uint32_t n) +# { +# if (n < 2) +# return false; +# if (n == 2) +# return true; +# if (n % 2 == 0) +# return false; +# for (uint32_t i = 3; i <= n / 2; i++) +# { +# if (n % i == 0) +# return false; +# } +# return true; +# } +# +# int +# main (int argc, char *argv[]) +# { +# if (argc != 2) +# return EXIT_FAILURE; +# int n = atoi (argv[1]); +# for (uint32_t i = 2; n > 0; i++) +# { +# if (is_prime (i)) +# { +# printf ("%" PRIu32 "\n", i); +# n--; +# } +# } +# return EXIT_SUCCESS; +# } +testfiles testfile-dw-form-indirect + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=info testfile-dw-form-indirect << EOF + +DWARF section [33] '.debug_info' at offset 0x801db0: + [Offset] + Compilation unit at offset 0: + Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 + [ b] compile_unit abbrev: 1 + producer (strp) "GNU C17 8.4.1 20200928 (Red Hat 8.4.1-1) -mtune=generic -march=x86-64 -g -O2 -fno-reorder-blocks-and-partition" + language (data1) C99 (12) + name (strp) "primes.c" + comp_dir (strp) "/home/osandov/bolt" + ranges (sec_offset) range list [ 10] + low_pc (addr) 000000000000000000 + stmt_list (sec_offset) 0 + [ 29] base_type abbrev: 2 + byte_size (data1) 1 + encoding (data1) unsigned_char (8) + name (strp) "unsigned char" + [ 30] base_type abbrev: 2 + byte_size (data1) 2 + encoding (data1) unsigned (7) + name (strp) "short unsigned int" + [ 37] base_type abbrev: 2 + byte_size (data1) 4 + encoding (data1) unsigned (7) + name (strp) "unsigned int" + [ 3e] base_type abbrev: 2 + byte_size (data1) 8 + encoding (data1) unsigned (7) + name (strp) "long unsigned int" + [ 45] base_type abbrev: 2 + byte_size (data1) 1 + encoding (data1) signed_char (6) + name (strp) "signed char" + [ 4c] base_type abbrev: 2 + byte_size (data1) 2 + encoding (data1) signed (5) + name (strp) "short int" + [ 53] base_type abbrev: 3 + byte_size (data1) 4 + encoding (data1) signed (5) + name (string) "int" + [ 5a] typedef abbrev: 4 + name (strp) "__uint32_t" + decl_file (data1) types.h (3) + decl_line (data1) 41 + decl_column (data1) 22 + type (ref4) [ 37] + [ 66] base_type abbrev: 2 + byte_size (data1) 8 + encoding (data1) signed (5) + name (strp) "long int" + [ 6d] typedef abbrev: 4 + name (strp) "__off_t" + decl_file (data1) types.h (3) + decl_line (data1) 150 + decl_column (data1) 25 + type (ref4) [ 66] + [ 79] typedef abbrev: 4 + name (strp) "__off64_t" + decl_file (data1) types.h (3) + decl_line (data1) 151 + decl_column (data1) 27 + type (ref4) [ 66] + [ 85] pointer_type abbrev: 5 + byte_size (data1) 8 + [ 87] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 8d] + [ 8d] base_type abbrev: 2 + byte_size (data1) 1 + encoding (data1) signed_char (6) + name (strp) "char" + [ 94] const_type abbrev: 7 + type (ref4) [ 8d] + [ 99] typedef abbrev: 4 + name (strp) "uint32_t" + decl_file (data1) stdint-uintn.h (4) + decl_line (data1) 26 + decl_column (data1) 20 + type (ref4) [ 5a] + [ a5] typedef abbrev: 4 + name (strp) "size_t" + decl_file (data1) stddef.h (5) + decl_line (data1) 216 + decl_column (data1) 23 + type (ref4) [ 3e] + [ b1] structure_type abbrev: 8 + name (strp) "_IO_FILE" + byte_size (data1) 216 + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 49 + decl_column (data1) 8 + sibling (ref4) [ 238] + [ be] member abbrev: 9 + name (strp) "_flags" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 51 + decl_column (data1) 7 + type (ref4) [ 53] + data_member_location (data1) 0 + [ cb] member abbrev: 9 + name (strp) "_IO_read_ptr" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 54 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 8 + [ d8] member abbrev: 9 + name (strp) "_IO_read_end" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 55 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 16 + [ e5] member abbrev: 9 + name (strp) "_IO_read_base" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 56 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 24 + [ f2] member abbrev: 9 + name (strp) "_IO_write_base" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 57 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 32 + [ ff] member abbrev: 9 + name (strp) "_IO_write_ptr" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 58 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 40 + [ 10c] member abbrev: 9 + name (strp) "_IO_write_end" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 59 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 48 + [ 119] member abbrev: 9 + name (strp) "_IO_buf_base" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 60 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 56 + [ 126] member abbrev: 9 + name (strp) "_IO_buf_end" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 61 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 64 + [ 133] member abbrev: 9 + name (strp) "_IO_save_base" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 64 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 72 + [ 140] member abbrev: 9 + name (strp) "_IO_backup_base" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 65 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 80 + [ 14d] member abbrev: 9 + name (strp) "_IO_save_end" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 66 + decl_column (data1) 9 + type (ref4) [ 87] + data_member_location (data1) 88 + [ 15a] member abbrev: 9 + name (strp) "_markers" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 68 + decl_column (data1) 22 + type (ref4) [ 251] + data_member_location (data1) 96 + [ 167] member abbrev: 9 + name (strp) "_chain" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 70 + decl_column (data1) 20 + type (ref4) [ 257] + data_member_location (data1) 104 + [ 174] member abbrev: 9 + name (strp) "_fileno" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 72 + decl_column (data1) 7 + type (ref4) [ 53] + data_member_location (data1) 112 + [ 181] member abbrev: 9 + name (strp) "_flags2" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 73 + decl_column (data1) 7 + type (ref4) [ 53] + data_member_location (data1) 116 + [ 18e] member abbrev: 9 + name (strp) "_old_offset" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 74 + decl_column (data1) 11 + type (ref4) [ 6d] + data_member_location (data1) 120 + [ 19b] member abbrev: 9 + name (strp) "_cur_column" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 77 + decl_column (data1) 18 + type (ref4) [ 30] + data_member_location (data1) 128 + [ 1a8] member abbrev: 9 + name (strp) "_vtable_offset" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 78 + decl_column (data1) 15 + type (ref4) [ 45] + data_member_location (data1) 130 + [ 1b5] member abbrev: 9 + name (strp) "_shortbuf" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 79 + decl_column (data1) 8 + type (ref4) [ 25d] + data_member_location (data1) 131 + [ 1c2] member abbrev: 9 + name (strp) "_lock" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 81 + decl_column (data1) 15 + type (ref4) [ 26d] + data_member_location (data1) 136 + [ 1cf] member abbrev: 9 + name (strp) "_offset" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 89 + decl_column (data1) 13 + type (ref4) [ 79] + data_member_location (data1) 144 + [ 1dc] member abbrev: 9 + name (strp) "_codecvt" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 91 + decl_column (data1) 23 + type (ref4) [ 278] + data_member_location (data1) 152 + [ 1e9] member abbrev: 9 + name (strp) "_wide_data" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 92 + decl_column (data1) 25 + type (ref4) [ 283] + data_member_location (data1) 160 + [ 1f6] member abbrev: 9 + name (strp) "_freeres_list" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 93 + decl_column (data1) 20 + type (ref4) [ 257] + data_member_location (data1) 168 + [ 203] member abbrev: 9 + name (strp) "_freeres_buf" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 94 + decl_column (data1) 9 + type (ref4) [ 85] + data_member_location (data1) 176 + [ 210] member abbrev: 9 + name (strp) "__pad5" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 95 + decl_column (data1) 10 + type (ref4) [ a5] + data_member_location (data1) 184 + [ 21d] member abbrev: 9 + name (strp) "_mode" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 96 + decl_column (data1) 7 + type (ref4) [ 53] + data_member_location (data1) 192 + [ 22a] member abbrev: 9 + name (strp) "_unused2" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 98 + decl_column (data1) 8 + type (ref4) [ 289] + data_member_location (data1) 196 + [ 238] typedef abbrev: 4 + name (strp) "FILE" + decl_file (data1) FILE.h (7) + decl_line (data1) 7 + decl_column (data1) 25 + type (ref4) [ b1] + [ 244] typedef abbrev: 10 + name (strp) "_IO_lock_t" + decl_file (data1) struct_FILE.h (6) + decl_line (data1) 43 + decl_column (data1) 14 + [ 24c] structure_type abbrev: 11 + name (strp) "_IO_marker" + declaration (flag_present) yes + [ 251] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 24c] + [ 257] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ b1] + [ 25d] array_type abbrev: 12 + type (ref4) [ 8d] + sibling (ref4) [ 26d] + [ 266] subrange_type abbrev: 13 + type (ref4) [ 3e] + upper_bound (data1) 0 + [ 26d] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 244] + [ 273] structure_type abbrev: 11 + name (strp) "_IO_codecvt" + declaration (flag_present) yes + [ 278] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 273] + [ 27e] structure_type abbrev: 11 + name (strp) "_IO_wide_data" + declaration (flag_present) yes + [ 283] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 27e] + [ 289] array_type abbrev: 12 + type (ref4) [ 8d] + sibling (ref4) [ 299] + [ 292] subrange_type abbrev: 13 + type (ref4) [ 3e] + upper_bound (data1) 19 + [ 299] variable abbrev: 14 + name (strp) "stdin" + decl_file (data1) stdio.h (8) + decl_line (data1) 137 + decl_column (data1) 14 + type (ref4) [ 2a5] + external (flag_present) yes + declaration (flag_present) yes + [ 2a5] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 238] + [ 2ab] variable abbrev: 14 + name (strp) "stdout" + decl_file (data1) stdio.h (8) + decl_line (data1) 138 + decl_column (data1) 14 + type (ref4) [ 2a5] + external (flag_present) yes + declaration (flag_present) yes + [ 2b7] variable abbrev: 14 + name (strp) "stderr" + decl_file (data1) stdio.h (8) + decl_line (data1) 139 + decl_column (data1) 14 + type (ref4) [ 2a5] + external (flag_present) yes + declaration (flag_present) yes + [ 2c3] variable abbrev: 14 + name (strp) "sys_nerr" + decl_file (data1) sys_errlist.h (9) + decl_line (data1) 26 + decl_column (data1) 12 + type (ref4) [ 53] + external (flag_present) yes + declaration (flag_present) yes + [ 2cf] array_type abbrev: 12 + type (ref4) [ 2e5] + sibling (ref4) [ 2da] + [ 2d8] subrange_type abbrev: 15 + [ 2da] const_type abbrev: 7 + type (ref4) [ 2cf] + [ 2df] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 94] + [ 2e5] const_type abbrev: 7 + type (ref4) [ 2df] + [ 2ea] variable abbrev: 14 + name (strp) "sys_errlist" + decl_file (data1) sys_errlist.h (9) + decl_line (data1) 27 + decl_column (data1) 26 + type (ref4) [ 2da] + external (flag_present) yes + declaration (flag_present) yes + [ 2f6] base_type abbrev: 2 + byte_size (data1) 8 + encoding (data1) signed (5) + name (strp) "long long int" + [ 2fd] base_type abbrev: 2 + byte_size (data1) 8 + encoding (data1) unsigned (7) + name (strp) "long long unsigned int" + [ 304] subprogram abbrev: 16 + external (flag_present) yes + name (strp) "main" + decl_file (data1) primes.c (1) + decl_line (data1) 24 + decl_column (data1) 1 + prototyped (flag_present) yes + type (ref4) [ 53] + ranges (sec_offset) range list [ 50] + low_pc (addr) 000000000000000000 + frame_base (exprloc) + [ 0] call_frame_cfa + GNU_all_call_sites (flag_present) yes + sibling (ref4) [ 429] + [ 326] formal_parameter abbrev: 17 + name (strp) "argc" + decl_file (data1) primes.c (1) + decl_line (data1) 24 + decl_column (data1) 11 + type (ref4) [ 53] + location (sec_offset) location list [ 10] + GNU_locviews (sec_offset) location list [ 0] + [ 33a] formal_parameter abbrev: 17 + name (strp) "argv" + decl_file (data1) primes.c (1) + decl_line (data1) 24 + decl_column (data1) 23 + type (ref4) [ 429] + location (sec_offset) location list [ 72] + GNU_locviews (sec_offset) location list [ 3d] + [ 34e] variable abbrev: 18 + name (string) "n" + decl_file (data1) primes.c (1) + decl_line (data1) 28 + decl_column (data1) 7 + type (ref4) [ 53] + location (sec_offset) location list [ d4] + GNU_locviews (sec_offset) location list [ 7a] + [ 360] lexical_block abbrev: 19 + ranges (sec_offset) range list [ 80] + sibling (ref4) [ 3ed] + [ 369] variable abbrev: 18 + name (string) "i" + decl_file (data1) primes.c (1) + decl_line (data1) 29 + decl_column (data1) 17 + type (ref4) [ 99] + location (sec_offset) location list [ 158] + GNU_locviews (sec_offset) location list [ f5] + [ 37b] inlined_subroutine abbrev: 20 + abstract_origin (ref4) [ 42f] + entry_pc (addr) 0x0000000000400520 + GNU_entry_view (data1) 6 + ranges (sec_offset) range list [ e0] + call_file (data1) primes.c (1) + call_line (data1) 31 + call_column (data1) 11 + sibling (ref4) [ 3cb] + [ 394] formal_parameter abbrev: 21 + abstract_origin (ref4) [ 440] + location (sec_offset) location list [ 1dd] + GNU_locviews (sec_offset) location list [ 186] + [ 3a1] inlined_subroutine abbrev: 22 + abstract_origin (ref4) [ 42f] + ranges (sec_offset) range list [ 120] + call_file (data1) primes.c (1) + call_line (data1) 7 + call_column (data1) 1 + [ 3ad] formal_parameter abbrev: 23 + abstract_origin (ref4) [ 440] + [ 3b2] lexical_block abbrev: 24 + abstract_origin (ref4) [ 44a] + ranges (sec_offset) range list [ 120] + [ 3bb] variable abbrev: 25 + abstract_origin (ref4) [ 44b] + location (sec_offset) location list [ 250] + GNU_locviews (sec_offset) location list [ 203] + [ 3cb] GNU_call_site abbrev: 26 + low_pc (addr) 0x0000000000a000c7 <.annobin_init.c.unlikely.cold.0+0x47> + abstract_origin (ref4) [ 4e2] + [ 3d8] GNU_call_site_parameter abbrev: 27 + location (exprloc) + [ 0] reg5 + GNU_call_site_value (exprloc) + [ 0] addr 0x400788 <__dso_handle+0x8> + [ 3e5] GNU_call_site_parameter abbrev: 27 + location (exprloc) + [ 0] reg4 + GNU_call_site_value (exprloc) + [ 0] breg3 -1 + [ 3ed] inlined_subroutine abbrev: 28 + abstract_origin (ref4) [ 45e] + entry_pc (addr) 0x00000000004004fb + GNU_entry_view (data1) 1 + ranges (sec_offset) range list [ 150] + call_file (data1) primes.c (1) + call_line (data1) 28 + call_column (data1) 11 + [ 402] formal_parameter abbrev: 21 + abstract_origin (ref4) [ 470] + location (sec_offset) location list [ 2ad] + GNU_locviews (sec_offset) location list [ 268] + [ 40f] GNU_call_site abbrev: 26 + low_pc (addr) 0x0000000000a000a4 <.annobin_init.c.unlikely.cold.0+0x24> + abstract_origin (ref4) [ 4ef] + [ 41c] GNU_call_site_parameter abbrev: 27 + location (exprloc) + [ 0] reg4 + GNU_call_site_value (exprloc) + [ 0] lit0 + [ 421] GNU_call_site_parameter abbrev: 27 + location (exprloc) + [ 0] reg1 + GNU_call_site_value (exprloc) + [ 0] lit10 + [ 429] pointer_type abbrev: 6 + byte_size (data1) 8 + type (ref4) [ 87] + [ 42f] subprogram abbrev: 29 + external (flag_present) yes + name (strp) "is_prime" + decl_file (data1) primes.c (1) + decl_line (data1) 7 + decl_column (data1) 1 + prototyped (flag_present) yes + type (ref4) [ 457] + inline (data1) inlined (1) + sibling (ref4) [ 457] + [ 440] formal_parameter abbrev: 30 + name (string) "n" + decl_file (data1) primes.c (1) + decl_line (data1) 7 + decl_column (data1) 20 + type (ref4) [ 99] + [ 44a] lexical_block abbrev: 31 + [ 44b] variable abbrev: 32 + name (string) "i" + decl_file (data1) primes.c (1) + decl_line (data1) 15 + decl_column (data1) 17 + type (ref4) [ 99] + [ 457] base_type abbrev: 2 + byte_size (data1) 1 + encoding (data1) boolean (2) + name (strp) "_Bool" + [ 45e] subprogram abbrev: 33 + external (flag_present) yes + name (strp) "atoi" + decl_file (data1) stdlib.h (2) + decl_line (data2) 361 + decl_column (data1) 1 + prototyped (flag_present) yes + type (ref4) [ 53] + inline (data1) declared_inlined (3) + sibling (ref4) [ 47e] + [ 470] formal_parameter abbrev: 34 + name (strp) "__nptr" + decl_file (data1) stdlib.h (2) + decl_line (data2) 361 + decl_column (data1) 1 + type (ref4) [ 2df] + [ 47e] subprogram abbrev: 35 + abstract_origin (ref4) [ 42f] + low_pc (addr) 0x0000000000400680 <is_prime> + high_pc (data8) 101 (0x00000000004006e5) + frame_base (exprloc) + [ 0] call_frame_cfa + GNU_all_call_sites (flag_present) yes + sibling (ref4) [ 4e2] + [ 499] formal_parameter abbrev: 36 + abstract_origin (ref4) [ 440] + location (exprloc) + [ 0] reg5 + [ 4a0] inlined_subroutine abbrev: 37 + abstract_origin (ref4) [ 42f] + ranges (sec_offset) range list [ 1a0] + low_pc (addr) 000000000000000000 + call_file (data1) primes.c (1) + call_line (data1) 7 + call_column (data1) 1 + [ 4b8] formal_parameter abbrev: 23 + abstract_origin (ref4) [ 440] + [ 4bd] lexical_block abbrev: 38 + abstract_origin (ref4) [ 44a] + ranges (sec_offset) range list [ 1a0] + low_pc (addr) 000000000000000000 + [ 4d2] variable abbrev: 25 + abstract_origin (ref4) [ 44b] + location (sec_offset) location list [ 2d1] + GNU_locviews (sec_offset) location list [ 28e] + [ 4e2] subprogram abbrev: 39 + external (flag_present) yes + declaration (flag_present) yes + linkage_name (strp) "printf" + name (strp) "printf" + decl_file (data1) stdio.h (8) + decl_line (data2) 332 + decl_column (data1) 12 + [ 4ef] subprogram abbrev: 40 + external (flag_present) yes + declaration (flag_present) yes + linkage_name (strp) "strtol" + name (strp) "strtol" + decl_file (data1) stdlib.h (2) + decl_line (data1) 176 + decl_column (data1) 17 +EOF 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-readelf-types.sh b/tests/run-readelf-types.sh index a7af5734..4f312697 100755 --- a/tests/run-readelf-types.sh +++ b/tests/run-readelf-types.sh @@ -97,7 +97,7 @@ DWARF section [32] '.debug_types' at offset 0x1260: specification (ref4) [ 34] Type unit at offset 67: Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 - Type signature: 0x18763953736e2de0, Type offset: 0x25 [25] + Type signature: 0x18763953736e2de0, Type offset: 0x25 [68] [ 5a] type_unit abbrev: 1 language (data1) C_plus_plus (4) GNU_odr_signature (data8) 16005269134005989797 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-dw-form-indirect.bz2 b/tests/testfile-dw-form-indirect.bz2 Binary files differnew file mode 100755 index 00000000..e531c11d --- /dev/null +++ b/tests/testfile-dw-form-indirect.bz2 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/vdsosyms.c b/tests/vdsosyms.c index 83ab034f..ff1a18a8 100644 --- a/tests/vdsosyms.c +++ b/tests/vdsosyms.c @@ -43,7 +43,7 @@ module_callback (Dwfl_Module *mod, void **userdata __attribute__((unused)), { /* We can only recognize the vdso by inspecting the "magic name". */ printf ("module name: %s\n", name); - if (strncmp ("[vdso: ", name, 7) == 0) + if (startswith (name, "[vdso: ")) { vdso_syms = dwfl_module_getsymtab (mod); printf ("vdso syms: %d\n", vdso_syms); @@ -30,7 +30,7 @@ #ifndef _ELFUTILS_VERSION_H #define _ELFUTILS_VERSION_H 1 -#define _ELFUTILS_VERSION 183 +#define _ELFUTILS_VERSION 186 #define _ELFUTILS_PREREQ(major, minor) \ (_ELFUTILS_VERSION >= ((major) * 1000 + (minor))) |