aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-05-10 06:57:18 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-05-10 06:57:18 +0000
commit79e60315c7033a9e6a2c4c54d33fa30c7e755875 (patch)
tree37dc9588c44c399f0f459a03240c68a969c95353
parent4d980bcb74bb3ee657809251bcd61c255960a01c (diff)
parentcf803a80b3135abe66f38db75d4e0b00928f4059 (diff)
downloadelfutils-android13-mainline-permission-release.tar.gz
Change-Id: Iadff7cd905b69083b6d8a7ece15c8551037baaef
-rw-r--r--Android.bp22
-rw-r--r--ChangeLog43
-rw-r--r--NEWS53
-rw-r--r--backends/ChangeLog18
-rw-r--r--backends/aarch64_symbol.c4
-rw-r--r--backends/arm_symbol.c4
-rw-r--r--backends/riscv_init.c21
-rw-r--r--backends/riscv_retval.c86
-rw-r--r--config.h40
-rw-r--r--config/ChangeLog48
-rw-r--r--config/Makefile.am9
-rw-r--r--config/debuginfod.sysconfig1
-rw-r--r--config/elfutils.spec.in51
-rw-r--r--config/eu.am26
-rw-r--r--config/profile.csh.in25
-rw-r--r--config/profile.sh.in19
-rw-r--r--configure.ac76
-rw-r--r--debuginfod/ChangeLog252
-rw-r--r--debuginfod/debuginfod-client.c557
-rw-r--r--debuginfod/debuginfod.cxx753
-rw-r--r--debuginfod/debuginfod.h.in3
-rw-r--r--doc/ChangeLog45
-rw-r--r--doc/Makefile.am5
-rw-r--r--doc/debuginfod-client-config.7129
-rw-r--r--doc/debuginfod-find.134
-rw-r--r--doc/debuginfod.8139
-rw-r--r--doc/debuginfod_find_debuginfo.377
-rw-r--r--lib/Android.bp6
-rw-r--r--lib/ChangeLog65
-rw-r--r--lib/Makefile.am4
-rw-r--r--lib/color.c6
-rw-r--r--lib/dynamicsizehash.c2
-rw-r--r--lib/dynamicsizehash_concurrent.c2
-rw-r--r--lib/error.c75
-rw-r--r--lib/eu-config.h65
-rw-r--r--lib/fixedsizehash.h6
-rw-r--r--lib/libeu.h2
-rw-r--r--lib/system.h42
-rw-r--r--lib/xasprintf.c52
-rw-r--r--libasm/ChangeLog18
-rw-r--r--libasm/asm_align.c5
-rw-r--r--libasm/asm_begin.c3
-rw-r--r--libasm/asm_fill.c3
-rw-r--r--libasm/asm_newabssym.c2
-rw-r--r--libasm/asm_newcomsym.c2
-rw-r--r--libasm/asm_newscn.c2
-rw-r--r--libasm/asm_newscngrp.c2
-rw-r--r--libasm/asm_newsubscn.c2
-rw-r--r--libasm/asm_newsym.c2
-rw-r--r--libasm/disasm_begin.c2
-rw-r--r--libasm/libasmP.h2
-rw-r--r--libcpu/Android.bp9
-rw-r--r--libdw/ChangeLog84
-rw-r--r--libdw/Makefile.am1
-rw-r--r--libdw/dwarf.h4
-rw-r--r--libdw/dwarf_aggregate_size.c50
-rw-r--r--libdw/dwarf_arrayorder.c2
-rw-r--r--libdw/dwarf_begin_elf.c127
-rw-r--r--libdw/dwarf_bitoffset.c2
-rw-r--r--libdw/dwarf_bitsize.c2
-rw-r--r--libdw/dwarf_bytesize.c2
-rw-r--r--libdw/dwarf_child.c13
-rw-r--r--libdw/dwarf_decl_column.c2
-rw-r--r--libdw/dwarf_decl_file.c2
-rw-r--r--libdw/dwarf_decl_line.c2
-rw-r--r--libdw/dwarf_getattrs.c13
-rw-r--r--libdw/dwarf_getlocation.c17
-rw-r--r--libdw/dwarf_getpubnames.c5
-rw-r--r--libdw/dwarf_getsrclines.c38
-rw-r--r--libdw/dwarf_linecontext.c45
-rw-r--r--libdw/dwarf_linefunctionname.c52
-rw-r--r--libdw/dwarf_srclang.c4
-rw-r--r--libdw/libdw.h9
-rw-r--r--libdw/libdw.map6
-rw-r--r--libdw/libdwP.h15
-rw-r--r--libdw/libdw_form.c6
-rw-r--r--libdwelf/ChangeLog11
-rw-r--r--libdwelf/dwelf_elf_begin.c2
-rw-r--r--libdwelf/dwelf_strtab.c5
-rw-r--r--libdwfl/ChangeLog31
-rw-r--r--libdwfl/core-file.c4
-rw-r--r--libdwfl/dwfl_frame.c4
-rw-r--r--libdwfl/dwfl_module_build_id.c4
-rw-r--r--libdwfl/dwfl_module_getdwarf.c4
-rw-r--r--libdwfl/dwfl_report_elf.c4
-rw-r--r--libdwfl/link_map.c2
-rw-r--r--libdwfl/linux-kernel-modules.c6
-rw-r--r--libdwfl/linux-pid-attach.c8
-rw-r--r--libdwfl/relocate.c8
-rw-r--r--libebl/ChangeLog9
-rw-r--r--libebl/eblobjnotetypename.c5
-rw-r--r--libebl/eblopenbackend.c6
-rw-r--r--libelf/ChangeLog24
-rw-r--r--libelf/common.h2
-rw-r--r--libelf/elf32_updatefile.c4
-rw-r--r--libelf/elf_begin.c2
-rw-r--r--libelf/elf_getarsym.c5
-rw-r--r--libelf/elf_getdata.c22
-rw-r--r--libelf/elf_getscn.c4
-rw-r--r--libelf/elf_newdata.c2
-rw-r--r--libelf/elf_newscn.c10
-rw-r--r--libelf/elf_readall.c2
-rw-r--r--libelf/elf_strptr.c4
-rw-r--r--patches/config.h.patch42
-rw-r--r--po/ChangeLog29
-rw-r--r--po/Makevars11
-rw-r--r--po/POTFILES.in6
-rw-r--r--po/de.po1387
-rw-r--r--po/es.po1398
-rw-r--r--po/ja.po2396
-rw-r--r--po/pl.po2188
-rw-r--r--po/uk.po1402
-rw-r--r--src/ChangeLog182
-rw-r--r--src/Makefile.am3
-rw-r--r--src/ar.c3
-rw-r--r--src/elfclassify.c9
-rw-r--r--src/elfcompress.c292
-rw-r--r--src/elflint.c60
-rw-r--r--src/findtextrel.c59
-rw-r--r--src/nm.c11
-rw-r--r--src/objdump.c17
-rw-r--r--src/readelf.c148
-rw-r--r--src/strip.c24
-rw-r--r--src/unstrip.c164
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/ChangeLog378
-rw-r--r--tests/Makefile.am111
-rw-r--r--tests/backtrace.c61
-rwxr-xr-xtests/debuginfod-subr.sh160
-rw-r--r--tests/dwelf_elf_e_machine_string.c4
-rw-r--r--tests/dwelfgnucompressed.c4
-rw-r--r--tests/elfcopy.c2
-rw-r--r--tests/elfgetchdr.c4
-rw-r--r--tests/elfputzdata.c4
-rw-r--r--tests/elfstrmerge.c104
-rw-r--r--tests/nvidia_extended_linemap_libdw.c166
-rwxr-xr-xtests/run-debuginfod-000-permission.sh86
-rwxr-xr-xtests/run-debuginfod-archive-groom.sh167
-rwxr-xr-xtests/run-debuginfod-archive-rename.sh104
-rwxr-xr-xtests/run-debuginfod-archive-test.sh88
-rwxr-xr-xtests/run-debuginfod-artifact-running.sh122
-rwxr-xr-xtests/run-debuginfod-dlopen.sh94
-rwxr-xr-xtests/run-debuginfod-duplicate-urls.sh56
-rwxr-xr-xtests/run-debuginfod-extraction-passive.sh77
-rwxr-xr-xtests/run-debuginfod-extraction.sh109
-rwxr-xr-xtests/run-debuginfod-fd-prefetch-caches.sh66
-rwxr-xr-xtests/run-debuginfod-federation-link.sh165
-rwxr-xr-xtests/run-debuginfod-federation-metrics.sh211
-rwxr-xr-xtests/run-debuginfod-federation-sqlite.sh202
-rwxr-xr-xtests/run-debuginfod-file.sh41
-rwxr-xr-xtests/run-debuginfod-find.sh578
-rwxr-xr-xtests/run-debuginfod-malformed.sh114
-rwxr-xr-xtests/run-debuginfod-no-urls.sh41
-rwxr-xr-xtests/run-debuginfod-percent-escape.sh60
-rwxr-xr-xtests/run-debuginfod-query-retry.sh35
-rwxr-xr-xtests/run-debuginfod-regex.sh101
-rwxr-xr-xtests/run-debuginfod-response-headers.sh92
-rwxr-xr-xtests/run-debuginfod-sizetime.sh82
-rwxr-xr-xtests/run-debuginfod-tmp-home.sh129
-rwxr-xr-xtests/run-debuginfod-writable.sh91
-rwxr-xr-xtests/run-debuginfod-x-forwarded-for.sh63
-rwxr-xr-xtests/run-low_high_pc-dw-form-indirect.sh23
-rwxr-xr-xtests/run-nvidia-extended-linemap-libdw.sh60
-rwxr-xr-xtests/run-nvidia-extended-linemap-readelf.sh120
-rwxr-xr-xtests/run-readelf-dw-form-indirect.sh678
-rwxr-xr-xtests/run-readelf-fat-lto.sh53
-rwxr-xr-xtests/run-readelf-multi-noline.sh170
-rwxr-xr-xtests/run-readelf-types.sh2
-rwxr-xr-xtests/run-strip-largealign.sh35
-rwxr-xr-xtests/run-varlocs-vars.sh93
-rw-r--r--tests/show-die-info.c2
-rwxr-xr-xtests/testfile-dw-form-indirect.bz2bin0 -> 7007 bytes
-rw-r--r--tests/testfile-dwarf5-fat-lto.o.bz2bin0 -> 3101 bytes
-rw-r--r--tests/testfile-largealign.o.bz2bin0 -> 183 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf4-32.o.bz2bin0 -> 568 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf4-64.o.bz2bin0 -> 605 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf5-32.o.bz2bin0 -> 741 bytes
-rw-r--r--tests/testfile-vars-clang-dwarf5-64.o.bz2bin0 -> 761 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf4-32.o.bz2bin0 -> 660 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf4-64.o.bz2bin0 -> 691 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf5-32.o.bz2bin0 -> 728 bytes
-rw-r--r--tests/testfile-vars-gcc-dwarf5-64.o.bz2bin0 -> 768 bytes
-rwxr-xr-xtests/testfile_multi_noline.bz2bin0 -> 3155 bytes
-rw-r--r--tests/testfile_nvidia_linemap.bz2bin0 -> 2365 bytes
-rw-r--r--tests/vdsosyms.c2
-rw-r--r--version.h2
186 files changed, 13460 insertions, 5202 deletions
diff --git a/Android.bp b/Android.bp
index 2ca70cc9..9d73c192 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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",
}
diff --git a/ChangeLog b/ChangeLog
index d379e713..d61b21c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index 6437f201..490932ae 100644
--- a/NEWS
+++ b/NEWS
@@ -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);
+}
diff --git a/config.h b/config.h
index 5a31eb58..ea861944 100644
--- a/config.h
+++ b/config.h
@@ -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
diff --git a/po/de.po b/po/de.po
index 50904135..cb5e011a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: elfutils VERSION\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-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 -("
diff --git a/po/es.po b/po/es.po
index bdfcc14b..a65b516c 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: elfutils.master.es\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-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'"
diff --git a/po/ja.po b/po/ja.po
index 9fe007ce..595bdffb 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-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'"
diff --git a/po/pl.po b/po/pl.po
index 260955ab..f50b9f8a 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -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"
diff --git a/po/uk.po b/po/uk.po
index 53d2898a..cac761e3 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2021-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
diff --git a/src/ar.c b/src/ar.c
index 66b2c4fd..ab6098f0 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -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);
diff --git a/src/nm.c b/src/nm.c
index fb761ef3..2ae29c4d 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -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 = &sections[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 = &sections[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 = &sections[i];
+ int cmp = compare_unalloc_sections (shdr, &section->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
new file mode 100755
index 00000000..e531c11d
--- /dev/null
+++ b/tests/testfile-dw-form-indirect.bz2
Binary files differ
diff --git a/tests/testfile-dwarf5-fat-lto.o.bz2 b/tests/testfile-dwarf5-fat-lto.o.bz2
new file mode 100644
index 00000000..ce3659f4
--- /dev/null
+++ b/tests/testfile-dwarf5-fat-lto.o.bz2
Binary files differ
diff --git a/tests/testfile-largealign.o.bz2 b/tests/testfile-largealign.o.bz2
new file mode 100644
index 00000000..324c1eae
--- /dev/null
+++ b/tests/testfile-largealign.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf4-32.o.bz2 b/tests/testfile-vars-clang-dwarf4-32.o.bz2
new file mode 100644
index 00000000..c1ddf81f
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf4-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf4-64.o.bz2 b/tests/testfile-vars-clang-dwarf4-64.o.bz2
new file mode 100644
index 00000000..df33299f
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf4-64.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf5-32.o.bz2 b/tests/testfile-vars-clang-dwarf5-32.o.bz2
new file mode 100644
index 00000000..b1d6b6c4
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf5-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-clang-dwarf5-64.o.bz2 b/tests/testfile-vars-clang-dwarf5-64.o.bz2
new file mode 100644
index 00000000..adf6c6a5
--- /dev/null
+++ b/tests/testfile-vars-clang-dwarf5-64.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf4-32.o.bz2 b/tests/testfile-vars-gcc-dwarf4-32.o.bz2
new file mode 100644
index 00000000..da9aac73
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf4-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf4-64.o.bz2 b/tests/testfile-vars-gcc-dwarf4-64.o.bz2
new file mode 100644
index 00000000..26421644
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf4-64.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf5-32.o.bz2 b/tests/testfile-vars-gcc-dwarf5-32.o.bz2
new file mode 100644
index 00000000..cb1c7054
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf5-32.o.bz2
Binary files differ
diff --git a/tests/testfile-vars-gcc-dwarf5-64.o.bz2 b/tests/testfile-vars-gcc-dwarf5-64.o.bz2
new file mode 100644
index 00000000..e286f8f7
--- /dev/null
+++ b/tests/testfile-vars-gcc-dwarf5-64.o.bz2
Binary files differ
diff --git a/tests/testfile_multi_noline.bz2 b/tests/testfile_multi_noline.bz2
new file mode 100755
index 00000000..39320d1f
--- /dev/null
+++ b/tests/testfile_multi_noline.bz2
Binary files differ
diff --git a/tests/testfile_nvidia_linemap.bz2 b/tests/testfile_nvidia_linemap.bz2
new file mode 100644
index 00000000..8a6d09fb
--- /dev/null
+++ b/tests/testfile_nvidia_linemap.bz2
Binary files differ
diff --git a/tests/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);
diff --git a/version.h b/version.h
index 8690a24b..99186be7 100644
--- a/version.h
+++ b/version.h
@@ -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)))