summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2020-06-11 23:16:21 +0200
committerMark Wielaard <mark@klomp.org>2020-06-11 23:16:21 +0200
commit50a6eeef7d87623faa65126dc3d16c2a8e613aea (patch)
tree19a35135efaac56c49a30316c6572c7b4d6ec4aa
parent49f13584d60322578c19b6118393ab04236ca7bf (diff)
parenta2bc0214a5615551d89cef8d160bdbaafd5f1a83 (diff)
Merge tag 'elfutils-0.180' into mjw/RH-DTSdts-0.180
elfutils 0.180 release
-rw-r--r--.gitignore28
-rw-r--r--CONTRIBUTING2
-rw-r--r--ChangeLog33
-rw-r--r--NEWS49
-rw-r--r--README2
-rw-r--r--backends/ChangeLog20
-rw-r--r--backends/aarch64_init.c11
-rw-r--r--backends/alpha_init.c11
-rw-r--r--backends/arm_init.c11
-rw-r--r--backends/bpf_init.c10
-rw-r--r--backends/csky_init.c11
-rw-r--r--backends/i386_init.c11
-rw-r--r--backends/ia64_init.c11
-rw-r--r--backends/libebl_CPU.h3
-rw-r--r--backends/m68k_init.c11
-rw-r--r--backends/ppc64_init.c11
-rw-r--r--backends/ppc_init.c11
-rw-r--r--backends/riscv_init.c11
-rw-r--r--backends/s390_init.c11
-rw-r--r--backends/sh_init.c11
-rw-r--r--backends/sparc_init.c11
-rw-r--r--backends/tilegx_init.c11
-rw-r--r--backends/x86_64_init.c11
-rw-r--r--config/ChangeLog59
-rw-r--r--config/Makefile.am5
-rw-r--r--config/debuginfod.service1
-rw-r--r--config/debuginfod.sysconfig2
-rw-r--r--config/elfutils.spec.in62
-rwxr-xr-xconfig/upload-release.sh2
-rw-r--r--configure.ac29
-rw-r--r--debuginfod/ChangeLog247
-rw-r--r--debuginfod/Makefile.am2
-rw-r--r--debuginfod/debuginfod-client.c495
-rw-r--r--debuginfod/debuginfod-find.c91
-rw-r--r--debuginfod/debuginfod.cxx1828
-rw-r--r--debuginfod/debuginfod.h19
-rw-r--r--debuginfod/libdebuginfod.map7
-rw-r--r--doc/ChangeLog89
-rw-r--r--doc/Makefile.am13
-rw-r--r--doc/debuginfod-find.127
-rw-r--r--doc/debuginfod.8193
-rw-r--r--doc/debuginfod_add_http_header.31
-rw-r--r--doc/debuginfod_find_debuginfo.3100
-rw-r--r--doc/debuginfod_get_url.31
-rw-r--r--doc/debuginfod_get_user_data.31
-rw-r--r--doc/debuginfod_set_user_data.31
-rw-r--r--lib/ChangeLog4
-rw-r--r--lib/printversion.c2
-rw-r--r--libasm/ChangeLog9
-rw-r--r--libasm/asm_end.c2
-rw-r--r--libasm/libasm.h2
-rw-r--r--libasm/libasmP.h1
-rw-r--r--libcpu/ChangeLog13
-rw-r--r--libcpu/Makefile.am3
-rw-r--r--libcpu/i386_disasm.c11
-rw-r--r--libcpu/i386_parse.y1
-rw-r--r--libdw/ChangeLog21
-rw-r--r--libdw/dwarf_begin_elf.c4
-rw-r--r--libdw/dwarf_decl_file.c2
-rw-r--r--libdw/dwarf_ranges.c5
-rw-r--r--libdw/libdw.h9
-rw-r--r--libdw/libdw_alloc.c5
-rw-r--r--libdw/libdw_visit_scopes.c6
-rw-r--r--libdwelf/ChangeLog5
-rw-r--r--libdwelf/dwelf_elf_e_machine_string.c4
-rw-r--r--libdwfl/ChangeLog44
-rw-r--r--libdwfl/core-file.c17
-rw-r--r--libdwfl/find-debuginfo.c28
-rw-r--r--libdwfl/gzip.c2
-rw-r--r--libdwfl/libdwfl.h20
-rw-r--r--libdwfl/libdwflP.h7
-rw-r--r--libdwfl/linux-kernel-modules.c36
-rw-r--r--libdwfl/segment.c35
-rw-r--r--libebl/ChangeLog24
-rw-r--r--libebl/eblopenbackend.c22
-rw-r--r--libebl/eblsegmenttypename.c2
-rw-r--r--libebl/libeblP.h6
-rw-r--r--libelf/ChangeLog28
-rw-r--r--libelf/elf.h106
-rw-r--r--libelf/elf_compress.c12
-rw-r--r--libelf/elf_getdata.c2
-rw-r--r--libelf/elf_getphdrnum.c20
-rw-r--r--libelf/elf_strptr.c2
-rw-r--r--po/ChangeLog8
-rw-r--r--po/de.po653
-rw-r--r--po/es.po655
-rw-r--r--po/ja.po653
-rw-r--r--po/pl.po653
-rw-r--r--po/uk.po1260
-rw-r--r--src/ChangeLog55
-rw-r--r--src/elflint.c19
-rw-r--r--src/nm.c92
-rw-r--r--src/objdump.c3
-rw-r--r--src/readelf.c9
-rw-r--r--src/size.c7
-rw-r--r--tests/ChangeLog206
-rw-r--r--tests/Makefile.am53
-rw-r--r--tests/asm-tst1.c1
-rw-r--r--tests/asm-tst2.c1
-rw-r--r--tests/asm-tst3.c1
-rw-r--r--tests/asm-tst4.c1
-rw-r--r--tests/asm-tst5.c1
-rw-r--r--tests/asm-tst6.c1
-rw-r--r--tests/asm-tst7.c1
-rw-r--r--tests/asm-tst8.c1
-rw-r--r--tests/asm-tst9.c1
-rw-r--r--tests/backtrace-data.c1
-rw-r--r--tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddebbin0 -> 3820 bytes
-rw-r--r--tests/debuginfod-debs/hithere_1.0-1.debian.tar.xzbin0 -> 764 bytes
-rw-r--r--tests/debuginfod-debs/hithere_1.0-1.dsc19
-rw-r--r--tests/debuginfod-debs/hithere_1.0-1_amd64.debbin0 -> 3020 bytes
-rw-r--r--tests/debuginfod-debs/hithere_1.0.orig.tar.gzbin0 -> 617 bytes
-rw-r--r--tests/debuginfod-rpms/fedora31/hello3-1.0-2.src.rpmbin0 -> 8135 bytes
-rw-r--r--tests/debuginfod-rpms/fedora31/hello3-1.0-2.x86_64.rpmbin0 -> 10350 bytes
-rw-r--r--tests/debuginfod-rpms/fedora31/hello3-debuginfo-1.0-2.x86_64.rpmbin0 -> 11223 bytes
-rw-r--r--tests/debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpmbin0 -> 7268 bytes
-rw-r--r--tests/debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpmbin0 -> 10263 bytes
-rw-r--r--tests/debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpmbin0 -> 10806 bytes
-rw-r--r--tests/debuginfod-rpms/hello3.spec.60
-rw-r--r--tests/debuginfod-tars/hello-1-1-x86_64.pkg.tar.xzbin0 -> 3572 bytes
-rw-r--r--tests/debuginfod-tars/hello-debug-1-1-x86_64.pkg.tar.bz2bin0 -> 5814 bytes
-rw-r--r--tests/debuginfod-tars/pacman-sources/PKGBUILD19
-rw-r--r--tests/debuginfod-tars/pacman-sources/README.md19
-rw-r--r--tests/debuginfod-tars/pacman-sources/hello.c6
-rw-r--r--tests/dwfl-report-segment-contiguous.c82
-rw-r--r--tests/elfputzdata.c21
-rw-r--r--tests/getphdrnum.c48
-rwxr-xr-xtests/run-allfcts.sh79
-rwxr-xr-xtests/run-debuginfod-find.sh264
-rwxr-xr-xtests/run-elfclassify.sh4
-rwxr-xr-xtests/run-getphdrnum.sh137
-rwxr-xr-xtests/run-lfs-symbols.sh27
-rwxr-xr-xtests/run-nm-syms.sh166
-rwxr-xr-xtests/run-pt_gnu_prop-tests.sh135
-rwxr-xr-xtests/run-varlocs-self.sh4
-rw-r--r--tests/test-subr.sh13
-rwxr-xr-xtests/testfile-lto-gcc10.bz2bin0 -> 4319 bytes
-rwxr-xr-xtests/testfile-lto-gcc8.bz2bin0 -> 3686 bytes
-rwxr-xr-xtests/testfile-lto-gcc9.bz2bin0 -> 3809 bytes
-rw-r--r--tests/testfile-phdrs.elf.bz2bin0 -> 188 bytes
-rwxr-xr-xtests/testfile_pt_gnu_prop.bz2bin0 -> 1593 bytes
-rwxr-xr-xtests/testfile_pt_gnu_prop32.bz2bin0 -> 1777 bytes
-rw-r--r--tests/testfilesyms32.bz2bin0 -> 771 bytes
-rw-r--r--tests/testfilesyms64.bz2bin0 -> 652 bytes
144 files changed, 6497 insertions, 3051 deletions
diff --git a/.gitignore b/.gitignore
index 72f22855..c9790941 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,7 @@ Makefile.in
/config/install-sh
/config/libdw.pc
/config/libelf.pc
+/config/libdebuginfod.pc
/config/missing
/config/test-driver
/config/ylwrap
@@ -43,6 +44,8 @@ Makefile.in
/libcpu/*_gendis
/libcpu/*_lex.c
/libcpu/*_parse.[ch]
+/debuginfod/debuginfod
+/debuginfod/debuginfod-find
/libdw/known-dwarf.h
/po/*.gmo
/po/*.pot
@@ -76,8 +79,10 @@ Makefile.in
/tests/*.trs
/tests/addrcfi
/tests/addrscopes
+/tests/addsections
/tests/aggregate_size
/tests/alldts
+/tests/all-dwarf-ranges
/tests/allfcts
/tests/allregs
/tests/arextract
@@ -92,6 +97,7 @@ Makefile.in
/tests/asm-tst7
/tests/asm-tst8
/tests/asm-tst9
+/tests/attr-integrate-skel
/tests/backtrace
/tests/backtrace-child
/tests/backtrace-child-biarch
@@ -99,27 +105,35 @@ Makefile.in
/tests/backtrace-dwarf
/tests/buildid
/tests/debugaltlink
+/tests/debuginfod_build_id_find
/tests/debuglink
/tests/deleted
+/tests/dwarfcfi
+/tests/dwarf_default_lower_bound
+/tests/dwarf-die-addr-die
/tests/dwarf-getmacros
/tests/dwarf-getstring
/tests/dwarf-ranges
+/tests/dwelf_elf_e_machine_string
/tests/dwelfgnucompressed
/tests/dwfl-addr-sect
/tests/dwfl-bug-addr-overflow
/tests/dwfl-bug-fd-leak
/tests/dwfl-bug-getmodules
/tests/dwfl-bug-report
-/tests/dwfl-proc-attach
-/tests/dwfl-report-elf-align
/tests/dwfllines
/tests/dwflmodtest
+/tests/dwfl-proc-attach
+/tests/dwfl-report-elf-align
+/tests/dwfl-report-segment-contiguous
/tests/dwflsyms
/tests/early-offscn
/tests/ecp
+/tests/elfcopy
/tests/elfgetchdr
/tests/elfgetzdata
/tests/elfputzdata
+/tests/elfrdwrnop
/tests/elfshphehdr
/tests/elfstrmerge
/tests/elfstrtab
@@ -131,8 +145,11 @@ Makefile.in
/tests/get-aranges
/tests/get-files
/tests/get-lines
+/tests/getphdrnum
/tests/get-pubnames
/tests/getsrc_die
+/tests/get-units-invalid
+/tests/get-units-split
/tests/hash
/tests/line2addr
/tests/low_high_pc
@@ -140,6 +157,9 @@ Makefile.in
/tests/newdata
/tests/newfile
/tests/newscn
+/tests/next_cfi
+/tests/next-files
+/tests/next-lines
/tests/peel_type
/tests/rdwrmmap
/tests/rerequest_tag
@@ -156,12 +176,14 @@ Makefile.in
/tests/test-nlist
/tests/typeiter
/tests/typeiter2
+/tests/unit-info
/tests/update1
/tests/update2
/tests/update3
/tests/update4
/tests/varlocs
-/tests/vendorelf
/tests/vdsosyms
+/tests/vendorelf
+/tests/xlate_notes
/tests/zstrptr
/version.h
diff --git a/CONTRIBUTING b/CONTRIBUTING
index e3d5a0f7..bb48975b 100644
--- a/CONTRIBUTING
+++ b/CONTRIBUTING
@@ -8,7 +8,7 @@ elfutils-devel@sourceware.org.
https://sourceware.org/ml/elfutils-devel/
To subscribe send an email to elfutils-devel-subscribe@sourceware.org
-Or use the form at https://sourceware.org/lists.html#ml-requestor
+Or use the form at https://sourceware.org/mailman/listinfo/elfutils-devel
Please supply patches using git format-patch or using git send-email.
diff --git a/ChangeLog b/ChangeLog
index 0e229622..763fa002 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2020-06-11 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Set version to 0.180.
+ * NEWS: Add 0.180 section.
+ * .gitignore: Update with new generated file.
+
+2020-06-10 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (MODVERSION): Remove.
+
+2020-03-30 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Set version to 0.179.
+ * NEWS: Add 0.179 section.
+
+2020-03-25 Mark Wielaard <mark@klomp.org>
+
+ * README: Update mailinglist subscription info.
+ * CONTRIBUTING: Likewise.
+
+2020-02-03 Frank Ch. Eigler <fche@redhat.com>
+
+ * configure.ac: Tolerate CXX= for debuginfod configuration.
+
+2019-12-11 Omar Sandoval <osandov@fb.com>
+
+ * configure.ac: Apply -Werror after user-defined CFLAGS in
+ -D_FORTIFY_SOURCE=2 check.
+
+2019-12-06 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac: Add ac_cv_buildid check.
+
2019-11-26 Mark Wielaard <mark@klomp.org>
* configure.ac: Set version to 0.178.
diff --git a/NEWS b/NEWS
index c147ad3c..3d097c68 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,52 @@
+Version 0.180
+
+elflint: Allow SHF_EXCLUDE as generic section flag when --gnu is given.
+
+libdw, readelf: Handle GCC LTO .gnu.debuglto_ prefix.
+
+libdw: Use correct CU to resolve file names in dwarf_decl_file.
+
+libdwfl: Handle debugaltlink in dwfl_standard_find_debuginfo.
+
+size: Also obey radix printing for bsd format.
+
+nm: Explicitly print weak 'V' or 'T' and common 'C' symbols.
+
+Version 0.179
+
+debuginfod-client: When DEBUGINFOD_PROGRESS is set and the program doesn't
+ install its own debuginfod_progressfn_t show download
+ progress on stderr.
+ DEBUGINFOD_TIMEOUT is now defined as seconds to get at
+ least 100K, defaults to 90 seconds.
+ Default to $XDG_CACHE_HOME/debuginfod_client.
+ New functions debuginfod_set_user_data,
+ debuginfod_get_user_data, debuginfod_get_url and
+ debuginfod_add_http_header.
+ Support for file:// URLs.
+
+debuginfod: Uses libarchive directly for reading rpm archives.
+ Support for indexing .deb/.ddeb archives through dpkg-deb
+ or bsdtar.
+ Generic archive support through -Z EXT[=CMD]. Which can be
+ used for example for arch-linux pacman files by using
+ -Z '.tar.zst=zstdcat'.
+ Better logging using User-Agent and X-Forwarded-For headers.
+ More prometheus metrics.
+ Support for eliding dots or extraneous slashes in path names.
+
+debuginfod-find: Accept /path/names in place of buildid hex.
+
+libelf: Handle PN_XNUM in elf_getphdrnum before shdr 0 is cached
+ Ensure zlib resource cleanup on failure.
+
+libdwfl: dwfl_linux_kernel_find_elf and dwfl_linux_kernel_report_offline
+ now find and handle a compressed vmlinuz image.
+
+readelf, elflint: Handle PT_GNU_PROPERTY.
+
+translations: Updated Ukrainian translation.
+
Version 0.178
debuginfod: New server, client tool and library to index and fetch
diff --git a/README b/README
index 0e15bae6..06a9fcd0 100644
--- a/README
+++ b/README
@@ -24,7 +24,7 @@ elfutils-devel@sourceware.org.
https://sourceware.org/ml/elfutils-devel/
To subscribe send an email to elfutils-devel-subscribe@sourceware.org
-Or use the form at https://sourceware.org/lists.html#ml-requestor
+Or use the form at https://sourceware.org/mailman/listinfo/elfutils-devel
See the CONTRIBUTING file for how to propose patches to the code.
diff --git a/backends/ChangeLog b/backends/ChangeLog
index 3f5f9bb0..7d3578b0 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,23 @@
+2020-06-10 Mark Wielard <mark@klomp.org>
+
+ * aarch64_init.c (aarch64_init): Remove ehlen, return eh.
+ * alpha_init.c (alpha_init): Likewise.
+ * arm_init.c (arm_init): Likewise.
+ * bpf_init.c (bpf_init): Likewise.
+ * csky_init.c (csky_init): Likewise.
+ * i386_init.c (i386_init): Likewise.
+ * ia64_init.c (ia64_init): Likewise.
+ * m68k_init.c (m68k_init): Likewise.
+ * ppc64_init.c (ppc64_init): Likewise.
+ * ppc_init.c (ppc_init): Likewise.
+ * riscv_init.c (riscv_init): Likewise.
+ * s390_init.c (s390_init): Likewise.
+ * sh_init.c (sh_init): Likewise.
+ * sparc_init.c (sparc_init): Likewise.
+ * tilegx_init.c (tilegx_init): Likewise.
+ * x86_64_init.c (x86_64_init): Likewise.
+ * libebl_CPU.h (init): Adjust EBLHOOK signature.
+
2019-07-05 Omar Sandoval <osandov@fb.com>
* Makefile.am: Replace libcpu_{i386,x86_64,bpf}.a with libcpu.a.
diff --git a/backends/aarch64_init.c b/backends/aarch64_init.c
index 95268ae0..66bfae94 100644
--- a/backends/aarch64_init.c
+++ b/backends/aarch64_init.c
@@ -38,16 +38,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
aarch64_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
aarch64_init_reloc (eh);
HOOK (eh, register_info);
@@ -65,5 +60,5 @@ aarch64_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, set_initial_registers_tid);
HOOK (eh, unwind);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/alpha_init.c b/backends/alpha_init.c
index f66f40c5..c69aec6d 100644
--- a/backends/alpha_init.c
+++ b/backends/alpha_init.c
@@ -39,16 +39,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
alpha_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
alpha_init_reloc (eh);
HOOK (eh, dynamic_tag_name);
@@ -64,5 +59,5 @@ alpha_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, auxv_info);
eh->sysvhash_entrysize = sizeof (Elf64_Xword);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/arm_init.c b/backends/arm_init.c
index af023f02..edd53b75 100644
--- a/backends/arm_init.c
+++ b/backends/arm_init.c
@@ -39,16 +39,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
arm_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
arm_init_reloc (eh);
HOOK (eh, segment_type_name);
@@ -72,5 +67,5 @@ arm_init (Elf *elf __attribute__ ((unused)),
/* Bit zero encodes whether an function address is THUMB or ARM. */
eh->func_addr_mask = ~(GElf_Addr)1;
- return MODVERSION;
+ return eh;
}
diff --git a/backends/bpf_init.c b/backends/bpf_init.c
index d407d378..f20f339e 100644
--- a/backends/bpf_init.c
+++ b/backends/bpf_init.c
@@ -39,20 +39,16 @@
#include "common-reloc.c"
-const char *
+Ebl *
bpf_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh, size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
bpf_init_reloc (eh);
HOOK (eh, register_info);
HOOK (eh, disasm);
HOOK (eh, reloc_simple_type);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/csky_init.c b/backends/csky_init.c
index b34a03aa..b2863ced 100644
--- a/backends/csky_init.c
+++ b/backends/csky_init.c
@@ -37,16 +37,11 @@
/* This defines the common reloc hooks based on csky_reloc.def. */
#include "common-reloc.c"
-const char *
+Ebl *
csky_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
csky_init_reloc (eh);
HOOK (eh, abi_cfi);
@@ -61,5 +56,5 @@ csky_init (Elf *elf __attribute__ ((unused)),
/* gcc/config/ #define DWARF_FRAME_REGISTERS. */
eh->frame_nregs = 38;
- return MODVERSION;
+ return eh;
}
diff --git a/backends/i386_init.c b/backends/i386_init.c
index 67428b53..3f6b9ed1 100644
--- a/backends/i386_init.c
+++ b/backends/i386_init.c
@@ -38,16 +38,11 @@
/* This defines the common reloc hooks based on i386_reloc.def. */
#include "common-reloc.c"
-const char *
+Ebl *
i386_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
i386_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -66,5 +61,5 @@ i386_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, set_initial_registers_tid);
HOOK (eh, unwind);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/ia64_init.c b/backends/ia64_init.c
index 2d1f43f2..b46b35cc 100644
--- a/backends/ia64_init.c
+++ b/backends/ia64_init.c
@@ -38,16 +38,11 @@
/* This defines the common reloc hooks based on ia64_reloc.def. */
#include "common-reloc.c"
-const char *
+Ebl *
ia64_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
ia64_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -61,5 +56,5 @@ ia64_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, return_value_location);
HOOK (eh, check_reloc_target_type);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/libebl_CPU.h b/backends/libebl_CPU.h
index ef2b922b..0e507bd3 100644
--- a/backends/libebl_CPU.h
+++ b/backends/libebl_CPU.h
@@ -37,8 +37,7 @@
#define EBLHOOK_2(a, b) a##b
/* Constructor. */
-extern const char *EBLHOOK(init) (Elf *elf, GElf_Half machine,
- Ebl *eh, size_t ehlen);
+extern Ebl *EBLHOOK(init) (Elf *elf, GElf_Half machine, Ebl *eh);
#include "ebl-hooks.h"
diff --git a/backends/m68k_init.c b/backends/m68k_init.c
index 05d544c1..7b94f23a 100644
--- a/backends/m68k_init.c
+++ b/backends/m68k_init.c
@@ -37,16 +37,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
m68k_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
m68k_init_reloc (eh);
HOOK (eh, gotpc_reloc_check);
@@ -59,5 +54,5 @@ m68k_init (Elf *elf __attribute__ ((unused)),
eh->frame_nregs = 25;
HOOK (eh, set_initial_registers_tid);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c
index c2e7043b..f509aef6 100644
--- a/backends/ppc64_init.c
+++ b/backends/ppc64_init.c
@@ -41,16 +41,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
ppc64_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
ppc64_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -107,5 +102,5 @@ ppc64_init (Elf *elf __attribute__ ((unused)),
}
}
- return MODVERSION;
+ return eh;
}
diff --git a/backends/ppc_init.c b/backends/ppc_init.c
index eb286c25..ac440ab2 100644
--- a/backends/ppc_init.c
+++ b/backends/ppc_init.c
@@ -39,16 +39,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
ppc_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
ppc_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -69,5 +64,5 @@ ppc_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, set_initial_registers_tid);
HOOK (eh, dwarf_to_regno);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/riscv_init.c b/backends/riscv_init.c
index 9be5c6f2..551e7bb6 100644
--- a/backends/riscv_init.c
+++ b/backends/riscv_init.c
@@ -43,16 +43,11 @@ extern __typeof (EBLHOOK (return_value_location))
extern __typeof (EBLHOOK (core_note)) riscv64_core_note attribute_hidden;
-const char *
+Ebl *
riscv_init (Elf *elf,
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
riscv_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -73,5 +68,5 @@ riscv_init (Elf *elf,
== EF_RISCV_FLOAT_ABI_DOUBLE))
eh->return_value_location = riscv_return_value_location_lp64d;
- return MODVERSION;
+ return eh;
}
diff --git a/backends/s390_init.c b/backends/s390_init.c
index b4f3e7f8..fd79502d 100644
--- a/backends/s390_init.c
+++ b/backends/s390_init.c
@@ -40,16 +40,11 @@
extern __typeof (s390_core_note) s390x_core_note;
-const char *
+Ebl *
s390_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
s390_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -75,5 +70,5 @@ s390_init (Elf *elf __attribute__ ((unused)),
if (eh->class == ELFCLASS64)
eh->sysvhash_entrysize = sizeof (Elf64_Xword);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/sh_init.c b/backends/sh_init.c
index 24f4d4a4..05cf8b18 100644
--- a/backends/sh_init.c
+++ b/backends/sh_init.c
@@ -39,16 +39,11 @@
#include "common-reloc.c"
-const char *
+Ebl *
sh_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
sh_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -58,5 +53,5 @@ sh_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, register_info);
HOOK (eh, return_value_location);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/sparc_init.c b/backends/sparc_init.c
index 6daff114..647a7897 100644
--- a/backends/sparc_init.c
+++ b/backends/sparc_init.c
@@ -44,16 +44,11 @@
extern __typeof (EBLHOOK (core_note)) sparc64_core_note attribute_hidden;
-const char *
+Ebl *
sparc_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
sparc_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -79,5 +74,5 @@ sparc_init (Elf *elf __attribute__ ((unused)),
eh->ra_offset = 8;
HOOK (eh, set_initial_registers_tid);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/tilegx_init.c b/backends/tilegx_init.c
index 66df9318..0f79542a 100644
--- a/backends/tilegx_init.c
+++ b/backends/tilegx_init.c
@@ -37,16 +37,11 @@
/* This defines the common reloc hooks based on tilegx_reloc.def. */
#include "common-reloc.c"
-const char *
+Ebl *
tilegx_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
tilegx_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -54,5 +49,5 @@ tilegx_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, register_info);
HOOK (eh, core_note);
- return MODVERSION;
+ return eh;
}
diff --git a/backends/x86_64_init.c b/backends/x86_64_init.c
index 8abafb7f..44c1ad28 100644
--- a/backends/x86_64_init.c
+++ b/backends/x86_64_init.c
@@ -41,16 +41,11 @@
extern __typeof (EBLHOOK (core_note)) x32_core_note attribute_hidden;
-const char *
+Ebl *
x86_64_init (Elf *elf __attribute__ ((unused)),
GElf_Half machine __attribute__ ((unused)),
- Ebl *eh,
- size_t ehlen)
+ Ebl *eh)
{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
/* We handle it. */
x86_64_init_reloc (eh);
HOOK (eh, reloc_simple_type);
@@ -70,5 +65,5 @@ x86_64_init (Elf *elf __attribute__ ((unused)),
HOOK (eh, set_initial_registers_tid);
HOOK (eh, unwind);
- return MODVERSION;
+ return eh;
}
diff --git a/config/ChangeLog b/config/ChangeLog
index 16379207..2ad93702 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,62 @@
+2020-06-11 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in: Update for 0.189.
+
+2020-04-21 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.sysconfig (DEBUGINFOD_PATHS): Add /var/lib/pulp.
+
+2020-03-30 Mark Wielaard <mark@klomp.org>
+
+ * upload-release.sh: chmod uploaded dir and files to make them
+ readable.
+
+2020-03-30 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in: Update for 0.179.
+
+2020-03-25 Frank Ch. Eigler <fche@redhat.com>
+
+ * elfutils.spec.in: *Require: bsdtar instead of dpkg.
+
+2020-03-04 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in (package debuginfod): Remove Requires: rpm.
+ Add Requires: dpkg.
+
+2020-01-12 Frank Ch. Eigler <fche@redhat.com>
+
+ * elfutils.spec.in: Typo fix for "Requires: debuginfod-client".
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.service: Set PrivateTmp=yes.
+
+2020-01-01 Dmitry V. Levin <ldv@altlinux.org>
+
+ * Makefile.am (pkgconfig_DATA): Conditionalize libdebuginfod.pc
+ on DEBUGINFOD.
+
+2019-12-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * elfutils.spec.in (debuginfod): Add BuildRequire dpkg
+ for deb testing. (Available on Fedora & EPEL, not base RHEL.)
+
+2019-12-05 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in: Add explicit version-release requires for all
+ packages.
+
+2019-11-28 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in (debuginfod): Add an explicit Requires
+ elfutils-debuginfod-client.
+
+2019-11-27 Mark Wielaard <mark@klomp.org>
+
+ * elfutils.spec.in: Move all versioned libdebuginfod libraries
+ from debuginfod-client-devel to debuginfod-client.
+
2019-11-26 Mark Wielaard <mark@klomp.org>
* elfutils.spec.in: Remove Group tags, remove fedora and rhel
diff --git a/config/Makefile.am b/config/Makefile.am
index 55e895ac..11f17df0 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -33,7 +33,10 @@ EXTRA_DIST = elfutils.spec.in known-dwarf.awk 10-default-yama-scope.conf \
debuginfod.service debuginfod.sysconfig
pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = libelf.pc libdw.pc libdebuginfod.pc
+pkgconfig_DATA = libelf.pc libdw.pc
+if DEBUGINFOD
+pkgconfig_DATA += libdebuginfod.pc
+endif
if MAINTAINER_MODE
$(srcdir)/elfutils.spec.in: $(top_srcdir)/NEWS
diff --git a/config/debuginfod.service b/config/debuginfod.service
index d8ef072b..8fca343f 100644
--- a/config/debuginfod.service
+++ b/config/debuginfod.service
@@ -10,6 +10,7 @@ Group=debuginfod
#CacheDirectory=debuginfod
ExecStart=/usr/bin/debuginfod -d /var/cache/debuginfod/debuginfod.sqlite -p $DEBUGINFOD_PORT $DEBUGINFOD_VERBOSE $DEBUGINFOD_PRAGMAS $DEBUGINFOD_PATHS
TimeoutStopSec=10
+PrivateTmp=yes
[Install]
WantedBy=multi-user.target
diff --git a/config/debuginfod.sysconfig b/config/debuginfod.sysconfig
index c56bcf3f..44603874 100644
--- a/config/debuginfod.sysconfig
+++ b/config/debuginfod.sysconfig
@@ -3,7 +3,7 @@ DEBUGINFOD_PORT="8002"
#DEBUGINFOD_VERBOSE="-v"
# some common places to find trustworthy ELF/DWARF files and RPMs
-DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin /usr/lib /usr/lib64 /var/cache/yum /var/cache/dnf"
+DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin /usr/lib /usr/lib64 /var/cache/yum /var/cache/dnf /var/lib/pulp"
# prefer reliability/durability over performance
#DEBUGINFOD_PRAGMAS="-D 'pragma synchronous=full;'"
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
index 46779340..7388829c 100644
--- a/config/elfutils.spec.in
+++ b/config/elfutils.spec.in
@@ -1,16 +1,16 @@
# -*- rpm-spec-*-
-Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
Name: elfutils
Version: @PACKAGE_VERSION@
Release: 1
URL: http://elfutils.org/
License: GPLv3+ and (GPLv2+ or LGPLv3+) and GFDL
Source: ftp://sourceware.org/pub/elfutils/%{version}/elfutils-%{version}.tar.bz2
+Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
Requires: elfutils-libelf = %{version}-%{release}
Requires: elfutils-libs = %{version}-%{release}
# Can be a Recommends if rpm supports that
-Requires: elfutils-debuginfod-client
+Requires: elfutils-debuginfod-client = %{version}-%{release}
BuildRequires: gcc
# For libstdc++ demangle support
@@ -35,6 +35,7 @@ BuildRequires: pkgconfig(libarchive) >= 3.1.2
BuildRequires: bzip2
# For the run-debuginfod-find.sh test case in %check for /usr/sbin/ss
BuildRequires: iproute
+BuildRequires: bsdtar
BuildRequires: curl
%define _gnu %{nil}
@@ -54,7 +55,7 @@ License: GPLv2+ or LGPLv3+
Requires: elfutils-libelf = %{version}-%{release}
Requires: default-yama-scope
# Can be a Recommends if rpm supports that
-Requires: elfutils-debuginfod-client
+Requires: elfutils-debuginfod-client = %{version}-%{release}
%description libs
The elfutils-libs package contains libraries which implement DWARF, ELF,
@@ -68,11 +69,8 @@ Summary: Development libraries to handle compiled objects
License: GPLv2+ or LGPLv3+
Requires: elfutils-libs = %{version}-%{release}
Requires: elfutils-libelf-devel = %{version}-%{release}
-%if 0%{?rhel} >= 8 || 0%{?fedora} >= 20
-Recommends: elfutils-debuginfod-client-devel
-%else
-Requires: elfutils-debuginfod-client-devel
-%endif
+# Can be a Recommends if rpm supports that
+Requires: elfutils-debuginfod-client-devel = %{version}-%{release}
%description devel
The elfutils-devel package contains the libraries to create
@@ -87,8 +85,8 @@ Requires: elfutils-devel = %{version}-%{release}
Requires: elfutils-libelf-devel-static = %{version}-%{release}
%description devel-static
-The elfutils-devel-static archive contains the static archives
-with the code the handle compiled objects.
+The elfutils-devel-static package contains the static archives
+with the code to handle compiled objects.
%package libelf
Summary: Library to read and write ELF files
@@ -144,17 +142,21 @@ License: GPLv3+ and (GPLv2+ or LGPLv3+)
%package debuginfod-client-devel
Summary: Libraries and headers to build debuginfod client applications
License: GPLv2+ or LGPLv3+
+Requires: elfutils-debuginfod-client = %{version}-%{release}
%package debuginfod
Summary: HTTP ELF/DWARF file server addressed by build-id
License: GPLv3+
+Requires: elfutils-libs = %{version}-%{release}
+Requires: elfutils-libelf = %{version}-%{release}
+Requires: elfutils-debuginfod-client = %{version}-%{release}
BuildRequires: systemd
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
Requires(pre): shadow-utils
-# For /usr/bin/cpio2rpm
-Requires: rpm
+# To extract .deb files with a bsdtar (= libarchive) subshell
+Requires: bsdtar
%description debuginfod-client
The elfutils-debuginfod-client package contains shared libraries
@@ -289,6 +291,7 @@ fi
%files debuginfod-client
%defattr(-,root,root)
%{_libdir}/libdebuginfod-%{version}.so
+%{_libdir}/libdebuginfod.so.*
%{_bindir}/debuginfod-find
%{_mandir}/man1/debuginfod-find.1*
@@ -297,7 +300,7 @@ fi
%{_libdir}/pkgconfig/libdebuginfod.pc
%{_mandir}/man3/debuginfod_*.3*
%{_includedir}/elfutils/debuginfod.h
-%{_libdir}/libdebuginfod.so*
+%{_libdir}/libdebuginfod.so
%files debuginfod
%defattr(-,root,root)
@@ -324,6 +327,39 @@ exit 0
%systemd_postun_with_restart debuginfod.service
%changelog
+* Thu Jun 11 2020 Mark Wielaard <mark@klomp.org> 0.180-1
+- elflint: Allow SHF_EXCLUDE as generic section flag when --gnu is given.
+- libdw, readelf: Handle GCC LTO .gnu.debuglto_ prefix.
+- libdw: Use correct CU to resolve file names in dwarf_decl_file.
+- libdwfl: Handle debugaltlink in dwfl_standard_find_debuginfo.
+- size: Also obey radix printing for bsd format.
+- nm: Explicitly print weak 'V' or 'T' and common 'C' symbols.
+
+* Mon Mar 30 2020 Mark Wielaard <mark@klomp.org> 0.179-1
+- debuginfod-client: When DEBUGINFOD_PROGRESS is set and the program
+ doesn't install its own debuginfod_progressfn_t show download
+ progress on stderr.
+ DEBUGINFOD_TIMEOUT is now defined as seconds to get at least 100K,
+ defaults to 90 seconds.
+ Default to $XDG_CACHE_HOME/debuginfod_client.
+ New functions debuginfod_set_user_data, debuginfod_get_user_data,
+ debuginfod_get_url and debuginfod_add_http_header.
+ Support for file:// URLs.
+- debuginfod: Uses libarchive directly for reading rpm archives.
+ Support for indexing .deb/.ddeb archives through dpkg-deb or bsdtar.
+ Generic archive support through -Z EXT[=CMD]. Which can be used for
+ example for arch-linux pacman files by using -Z '.tar.zst=zstdcat'.
+ Better logging using User-Agent and X-Forwarded-For headers.
+ More prometheus metrics.
+ Support for eliding dots or extraneous slashes in path names.
+- debuginfod-find: Accept /path/names in place of buildid hex.
+- libelf: Handle PN_XNUM in elf_getphdrnum before shdr 0 is cached.
+ Ensure zlib resource cleanup on failure.
+- libdwfl: dwfl_linux_kernel_find_elf and dwfl_linux_kernel_report_offline
+ now find and handle a compressed vmlinuz image.
+- readelf, elflint: Handle PT_GNU_PROPERTY.
+- translations: Updated Ukrainian translation.
+
* Tue Nov 26 2019 Mark Wielaard <mark@klomp.org> 0.178-1
- debuginfod: New server, client tool and library to index and fetch
ELF/DWARF files addressed by build-id through HTTP.
diff --git a/config/upload-release.sh b/config/upload-release.sh
index df5e3a07..b52642ea 100755
--- a/config/upload-release.sh
+++ b/config/upload-release.sh
@@ -50,6 +50,8 @@ cp -r $VERSION $HOME/elfutils-$VERSION
# Upload
scp -r $VERSION sourceware.org:/sourceware/ftp/pub/elfutils/
ssh sourceware.org "(cd /sourceware/ftp/pub/elfutils \
+ && chmod go+rx $VERSION \
+ && chmod go+r $VERSION/elfutils-$VERSION.tar.bz2* \
&& ln -sf $VERSION/elfutils-$VERSION.tar.bz2 elfutils-latest.tar.bz2 \
&& ln -sf $VERSION/elfutils-$VERSION.tar.bz2.sig elfutils-latest.tar.bz2.sig \
&& ls -lah elfutils-latest*)"
diff --git a/configure.ac b/configure.ac
index 4ec5dea2..f38c32c3 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.178],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
+AC_INIT([elfutils],[0.180],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
dnl Workaround for older autoconf < 2.64
m4_ifndef([AC_PACKAGE_URL],
@@ -47,7 +47,7 @@ fi
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_FILES([config/Makefile])
-AC_COPYRIGHT([Copyright (C) 1996-2018 The elfutils developers.])
+AC_COPYRIGHT([Copyright (C) 1996-2020 The elfutils developers.])
AC_PREREQ(2.63) dnl Minimum Autoconf version required.
dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
@@ -203,6 +203,15 @@ if test "$ac_cv_zdefs" = "yes"; then
dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
fi
+# We really want build-ids. Warn and force generating them if gcc was
+# configure without --enable-linker-build-id
+AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
+AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))])
+if test "$ac_cv_buildid" = "no"; then
+ AC_MSG_WARN([compiler doesn't generate build-id by default])
+ LDFLAGS="$LDFLAGS -Wl,--build-id"
+fi
+
ZRELRO_LDFLAGS="-Wl,-z,relro"
AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
save_LDFLAGS="$LDFLAGS"
@@ -270,7 +279,7 @@ case "$CFLAGS" in
;;
*)
save_CFLAGS="$CFLAGS"
- CFLAGS="-D_FORTIFY_SOURCE=2 -Werror $CFLAGS"
+ CFLAGS="-D_FORTIFY_SOURCE=2 $CFLAGS -Werror"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <string.h>
int main() { return 0; }
@@ -624,12 +633,6 @@ esac
# Round up to the next release API (x.y) version.
eu_version=$(( (eu_version + 999) / 1000 ))
-dnl Unique ID for this build.
-MODVERSION="Build for ${eu_version} ${ac_cv_build}"
-AC_SUBST([MODVERSION])
-AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
-AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
-
AC_CHECK_SIZEOF(long)
# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
@@ -684,18 +687,18 @@ fi
# both client and server.
AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server and client]))
AC_PROG_CXX
-AX_CXX_COMPILE_STDCXX(11, noext, optional)
AS_IF([test "x$enable_debuginfod" != "xno"], [
- AC_MSG_NOTICE([checking debuginfod dependencies, disable to skip])
+ AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip])
+ AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
+ AC_MSG_NOTICE([checking debuginfod dependencies, --disable-debuginfod to skip])
enable_debuginfod=yes # presume success
PKG_PROG_PKG_CONFIG
- if test "x$ac_cv_prog_ac_ct_CXX" = "x"; then enable_debuginfod=no; fi
PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 0.9.33],[],[enable_debuginfod=no])
PKG_CHECK_MODULES([libcurl],[libcurl >= 7.29.0],[],[enable_debuginfod=no])
PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no])
PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no])
if test "x$enable_debuginfod" = "xno"; then
- AC_MSG_ERROR([C++ compiler or dependencies not found, use --disable-debuginfod to disable.])
+ AC_MSG_ERROR([dependencies not found, use --disable-debuginfod to disable.])
fi
])
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index 8aa29443..bc3bce32 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,250 @@
+2020-03-29 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_add_http_header): Check header
+ contains precisely one colon that isn't the first or last char.
+
+2020-03-29 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (struct debuginfod_client): Add a flag field
+ for progressfn printing.
+ (default_progressfn): Set it if printing \rsomething.
+ (debuginfod_end): Terminate with \n if flag set, i.e., only if the
+ default_progressfn was actually called.
+
+2020-03-27 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (parse_opt): Check port is not zero.
+
+2020-03-28 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (handle_buildid_r_match): During archive
+ extraction / fdcache prefetching, set the mtime of each
+ file in the cache.
+
+2020-03-27 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-find.c (main): Extract buildid from /binary/ if
+ given instead of hex string.
+ * Makefile.am: Add elfutils library prereqs for debuginfod-find.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.h, libdebuginfod.map: New functions for _add_url_header.
+ * debuginfod-client.c (struct debuginfod_client): Add headers fields.
+ (debuginfod_add_http_header): New client api to add outgoing headers.
+ (add_default_headers): Renamed from add_extra_headers, skip if flag.
+ (debuginfod_query_server): Pass accumulated headers to libcurl.
+ (debuginfod_end): Clean accumulated headers.
+ (debuginfod_find_*): Add default headers at this point.
+ * debuginfod.cxx (handle_buildid): Add conn pointer. Use it to relay
+ incoming UA and XFF headers to federated upstream debuginfods.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (handler_cb): Export two families of metrics for
+ prometheus traffic analysis: response times and data amounts.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (parse_opt): For -U, prefer dpkg-deb
+ after all if access(3)-able, fallback to bsdtar.
+
+2020-03-25 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (parse_opt): Associate a bsdtar subshell with
+ the .deb & .ddeb extensions, instead of dpkg-deb.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): Don't
+ set CURLOPT_PATH_AS_IS on old curl. Mostly harmless.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): Set
+ CURLOPT_PATH_AS_IS, to propagate file names verbatim.
+ * debuginfod.cxx (canon_pathname): Implement RFC3986
+ style pathname canonicalization.
+ (handle_buildid): Canonicalize incoming webapi source
+ paths, accept either one.
+ (scan_source_file, archive_classify): Store both
+ original and canonicalized dwarf-source file names.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (handle_buildid): In case of federated fallback
+ queries, handle errors analogously to local ENOENT/404.
+ (handle_metrics): Return a size-of-response value.
+ (handler_cb): Add code to time entire application-side processing
+ stage + response sizes + http codes, so as to emit a complete
+ httpd-flavoured log line for each webapi request.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): Print the
+ default_progressfn terminating \n message only if that progressfn
+ is actually set.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-find.c (main): Correct /source full-pathness check for
+ "debuginfod-find -v source deadbeef /pathname" case.
+
+2020-03-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (struct debuginfod_client): Add url field.
+ (struct handle_data): Add client field as backpointer.
+ (debuginfod_write_callback): Compute & save URL.
+ (default_progressfn): Print front pieces of the URL.
+ (debuginfod_query_server): Clear URL and cleanup after progressfn.
+ * debuginfod-find.c (main): Print URL at transfer conclusion.
+
+2020-03-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.h, libdebuginfod.map: New functions for _get/set_user().
+ * debuginfod-client.c: Implement them.
+ * debuginfod-find.c: Include a token call just for testing them.
+
+2020-03-03 Aaron Merey <amerey@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): Update
+ cache_path even when new default path already exists.
+
+2020-02-27 Aaron Merey <amerey@redhat.com>
+
+ * debuginfod-client.c (xalloc_str): New macro. Call
+ asprintf with error checking.
+ (debuginfod_query_server): Use XDG_CACHE_HOME as a default
+ cache location if it is set. Replace snprintf with xalloc_str.
+
+2020-02-26 Konrad Kleine <kkleine@redhat.com>
+
+ * debuginfod-client.c (debuginfod_query_server): Handle curl's
+ response code correctly when DEBUGINFOD_URLS begin with file://
+
+2020-02-25 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (parse_opt): Treat -R as if -Z.rpm .
+
+2020-02-25 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (fdcache_prefetch): New parameter.
+ (parse_opt): Parse it.
+ (main): Default it.
+ (fdcache::fd_size_mb): Change to double for accuracy.
+ (fdcache::probe): New function.
+ (fdcache::intern): New option to intern at end of LRU.
+ (fdcache::lookup): Clean fdcache.
+ (handle_buildid_r_match): Implement multi-stage archive
+ parsing, with optional prefetching of extracted contents
+ into the fdcache.
+
+2020-02-19 Aaron Merey <amerey@redhat.com>
+
+ * debuginfod-client.c (debuginfod_clean_cache): Restrict
+ cleanup to client-pattern files.
+
+2020-02-05 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (argp options): Add -Z option.
+ (canonicalized_archive_entry_pathname): New function for
+ distro-agnostic file name matching/storage.
+
+2020-01-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (dwarf_extract_source_paths): Don't print
+ "skipping hat" messages at verbosity <=3, too noisy.
+
+2020-01-19 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (scanq): Rework to let groomer/fts threads
+ synchronize with an empty workqueue, and lock out workqueue
+ consumers.
+ (thread_groom): Adopt new scanq idle APIs to lock out scanners.
+ (thread_main_fts_source_paths): Adopt new scanq idler API to
+ avoid being restarted while scanners haven't even finished yet.
+ (thread_main_*): Increment thread_work_total metric only after
+ a work cycle is completed, not when it begins.
+
+2020-01-18 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (thread_main_scanner): Handle empty source_paths[].
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (libarchive_fdcache): New class/facility to own a
+ cache of temporary files that were previously extracted from an
+ archive. If only it could store just unlinked fd's instead of
+ filenames.
+ (handle_buildid_r_match): Use it to answer dwz/altdebug and webapi
+ requests.
+ (groom): Clean it.
+ (main): Initialize the cache control parameters from heuristics.
+ Use a consistent tmpdir for these and tmp files elsewhere.
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (conninfo): Print User-Agent and X-Forwarded-For
+ request headers, after mild safety-censorship (for easier machine
+ processing).
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx: Rework threading model.
+ (workq): New class for concurrent work-queue.
+ (semaphore): Removed class, now unused.
+ (scan_source_file_path): Rework into ...
+ (scan_source_file): New function.
+ (thread_main_scan_source_file_path): Nuke.
+ (scan_source_archive_path): Rework into ...
+ (scan_archive_file): New function.
+ (thread_main_scanner): New function for scanner threads.
+ (thread_main_fts_source_paths): New function for traversal thread.
+ (scan_source_paths): ... doing this.
+ (thread_groom): Tweak metrics for consistency.
+ (main): Start 1 traversal and N scanner threads if needed.
+
+2019-01-02 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.cxx (default_connect_timeout): Removed.
+ (default_transfer_timeout): Removed.
+ (default_timeout): New. Default to 90 seconds.
+ (debuginfod_query_server): Parse server_timeout_envvar as one number.
+ Set as CURLOPT_LOW_SPEED_TIME, with CURL_OPT_LOW_SPEED_LIMITE as 100K.
+
+2020-01-09 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (add_extra_headers): New function,
+ based on mjw's draft.
+ (debuginfod_query_server): Call it.
+
+2019-12-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (*_rpm_*): Rename to *_archive_* throughout.
+ (scan_archives): New read-mostly global to identify archive
+ file extensions and corresponding extractor commands.
+ (parse_opt): Handle new -U flag.
+
+2019-12-19 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-client.c (default_progressfn): New function.
+ (debuginfod_begin): Use it if $DEBUGINFOD_PROGRESS set.
+ (server_timeout): Bump to 30 seconds.
+ (debuginfod_query_server): Call progressfn -after- rather than
+ before curl ops, to make it likely that a successful transfer
+ results in final a=b call. Tweak cleanup sequence.
+ * debuginfod.h: Document $DEBUGINFOD_PROGRESS name.
+
+2019-12-09 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_query_server): Check
+ server_urls_envvar early.
+
+2019-12-03 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod-client.c (debuginfod_query_server): Use separate
+ local variables for CURLcode curl_res and CURLMcode curlm_res.
+
2019-11-26 Mark Wielaard <mark@klomp.org>
* Makefile.am (BUILD_STATIC): Add needed libraries for libdw and
diff --git a/debuginfod/Makefile.am b/debuginfod/Makefile.am
index 7ae74e06..47b6e431 100644
--- a/debuginfod/Makefile.am
+++ b/debuginfod/Makefile.am
@@ -62,7 +62,7 @@ debuginfod_SOURCES = debuginfod.cxx
debuginfod_LDADD = $(libdw) $(libelf) $(libeu) $(libdebuginfod) $(libmicrohttpd_LIBS) $(libcurl_LIBS) $(sqlite3_LIBS) $(libarchive_LIBS) -lpthread -ldl
debuginfod_find_SOURCES = debuginfod-find.c
-debuginfod_find_LDADD = $(libeu) $(libdebuginfod)
+debuginfod_find_LDADD = $(libdw) $(libelf) $(libeu) $(libdebuginfod)
lib_LIBRARIES = libdebuginfod.a
noinst_LIBRARIES = libdebuginfod_pic.a
diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index 6e62b86c..a7dfbfb1 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 Red Hat, Inc.
+ 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
@@ -40,6 +40,7 @@
#include "config.h"
#include "debuginfod.h"
+#include "system.h"
#include <assert.h>
#include <dirent.h>
#include <stdio.h>
@@ -49,6 +50,7 @@
#include <errno.h>
#include <fcntl.h>
#include <fts.h>
+#include <regex.h>
#include <string.h>
#include <stdbool.h>
#include <linux/limits.h>
@@ -57,6 +59,7 @@
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/utsname.h>
#include <curl/curl.h>
/* If fts.h is included before config.h, its indirect inclusions may not
@@ -76,6 +79,20 @@ struct debuginfod_client
/* Progress/interrupt callback function. */
debuginfod_progressfn_t progressfn;
+ /* Stores user data. */
+ void* user_data;
+
+ /* Stores current/last url, if any. */
+ char* url;
+
+ /* Accumulates outgoing http header names/values. */
+ int user_agent_set_p; /* affects add_default_headers */
+ struct curl_slist *headers;
+
+ /* Flags the default_progressfn having printed something that
+ debuginfod_end needs to terminate. */
+ int default_progressfn_printed_p;
+
/* 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
@@ -96,18 +113,18 @@ static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */
/* Location of the cache of files downloaded from debuginfods.
The default parent directory is $HOME, or '/' if $HOME doesn't exist. */
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.
- This env var must be set for debuginfod-client to run. */
+/* 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.
- This env var must be set for debuginfod-client to run. */
+/* Timeout for debuginfods, in seconds (to get at least 100K). */
static const char *server_timeout_envvar = DEBUGINFOD_TIMEOUT_ENV_VAR;
-static int server_timeout = 5;
+static const long default_timeout = 90;
+
/* Data associated with a particular CURL easy handle. Passed to
the write callback. */
@@ -122,6 +139,9 @@ struct handle_data
/* This handle. */
CURL *handle;
+ /* The client object whom we're serving. */
+ debuginfod_client *client;
+
/* Pointer to handle that should write to fd. Initially points to NULL,
then points to the first handle that begins writing the target file
to the cache. Used to ensure that a file is not downloaded from
@@ -138,7 +158,17 @@ debuginfod_write_callback (char *ptr, size_t size, size_t nmemb, void *data)
/* Indicate to other handles that they can abort their transfer. */
if (*d->target_handle == NULL)
- *d->target_handle = d->handle;
+ {
+ *d->target_handle = d->handle;
+ /* update the client object */
+ const char *url = NULL;
+ (void) curl_easy_getinfo (d->handle, CURLINFO_EFFECTIVE_URL, &url);
+ if (url)
+ {
+ free (d->client->url);
+ d->client->url = strdup(url); /* ok if fails */
+ }
+ }
/* If this handle isn't the target handle, abort transfer. */
if (*d->target_handle != d->handle)
@@ -240,10 +270,19 @@ debuginfod_clean_cache(debuginfod_client *c,
if (fts == NULL)
return -errno;
+ regex_t re;
+ const char * pattern = ".*/[a-f0-9]+/(debuginfo|executable|source.*)$";
+ if (regcomp (&re, pattern, REG_EXTENDED | REG_NOSUB) != 0)
+ return -ENOMEM;
+
FTSENT *f;
long files = 0;
while ((f = fts_read(fts)) != NULL)
{
+ /* ignore any files that do not match the pattern. */
+ if (regexec (&re, f->fts_path, 0, NULL, 0) != 0)
+ continue;
+
files++;
if (c->progressfn) /* inform/check progress callback */
if ((c->progressfn) (c, files, 0))
@@ -267,7 +306,8 @@ debuginfod_clean_cache(debuginfod_client *c,
;
}
}
- fts_close(fts);
+ fts_close (fts);
+ regfree (&re);
/* Update timestamp representing when the cache was last cleaned. */
utime (interval_path, NULL);
@@ -278,6 +318,136 @@ debuginfod_clean_cache(debuginfod_client *c,
#define MAX_BUILD_ID_BYTES 64
+static void
+add_default_headers(debuginfod_client *client)
+{
+ if (client->user_agent_set_p)
+ return;
+
+ /* Compute a User-Agent: string to send. The more accurately this
+ describes this host, the likelier that the debuginfod servers
+ might be able to locate debuginfo for us. */
+
+ char* utspart = NULL;
+ struct utsname uts;
+ int rc = 0;
+ rc = uname (&uts);
+ if (rc == 0)
+ rc = asprintf(& utspart, "%s/%s", uts.sysname, uts.machine);
+ if (rc < 0)
+ utspart = NULL;
+
+ FILE *f = fopen ("/etc/os-release", "r");
+ if (f == NULL)
+ f = fopen ("/usr/lib/os-release", "r");
+ char *id = NULL;
+ char *version = NULL;
+ if (f != NULL)
+ {
+ while (id == NULL || version == NULL)
+ {
+ char buf[128];
+ char *s = &buf[0];
+ if (fgets (s, sizeof(buf), f) == NULL)
+ break;
+
+ int len = strlen (s);
+ if (len < 3)
+ continue;
+ if (s[len - 1] == '\n')
+ {
+ s[len - 1] = '\0';
+ len--;
+ }
+
+ char *v = strchr (s, '=');
+ if (v == NULL || strlen (v) < 2)
+ continue;
+
+ /* Split var and value. */
+ *v = '\0';
+ v++;
+
+ /* Remove optional quotes around value string. */
+ if (*v == '"' || *v == '\'')
+ {
+ v++;
+ s[len - 1] = '\0';
+ }
+ if (strcmp (s, "ID") == 0)
+ id = strdup (v);
+ if (strcmp (s, "VERSION_ID") == 0)
+ version = strdup (v);
+ }
+ fclose (f);
+ }
+
+ char *ua = NULL;
+ rc = asprintf(& ua, "User-Agent: %s/%s,%s,%s/%s",
+ PACKAGE_NAME, PACKAGE_VERSION,
+ utspart ?: "",
+ id ?: "",
+ version ?: "");
+ if (rc < 0)
+ ua = NULL;
+
+ if (ua)
+ (void) debuginfod_add_http_header (client, ua);
+
+ free (ua);
+ free (id);
+ free (version);
+ free (utspart);
+}
+
+
+#define xalloc_str(p, fmt, args...) \
+ do \
+ { \
+ if (asprintf (&p, fmt, args) < 0) \
+ { \
+ p = NULL; \
+ rc = -ENOMEM; \
+ goto out; \
+ } \
+ } while (0)
+
+
+/* Offer a basic form of progress tracing */
+static int
+default_progressfn (debuginfod_client *c, long a, long b)
+{
+ const char* url = debuginfod_get_url (c);
+ int len = 0;
+
+ /* We prefer to print the host part of the URL to keep the
+ message short. */
+ if (url != NULL)
+ {
+ const char* buildid = strstr(url, "buildid/");
+ if (buildid != NULL)
+ len = (buildid - url);
+ else
+ len = strlen(url);
+ }
+
+ if (b == 0 || url==NULL) /* early stage */
+ dprintf(STDERR_FILENO,
+ "\rDownloading %c", "-/|\\"[a % 4]);
+ else if (b < 0) /* download in progress but unknown total length */
+ dprintf(STDERR_FILENO,
+ "\rDownloading from %.*s %ld",
+ len, url, a);
+ else /* download in progress, and known total length */
+ dprintf(STDERR_FILENO,
+ "\rDownloading from %.*s %ld/%ld",
+ len, url, a, b);
+ c->default_progressfn_printed_p = 1;
+
+ return 0;
+}
+
+
/* Query each of the server URLs found in $DEBUGINFOD_URLS for the file
with the specified build-id, type (debuginfo, executable or source)
and filename. filename may be NULL. If found, return a file
@@ -291,16 +461,32 @@ debuginfod_query_server (debuginfod_client *c,
const char *filename,
char **path)
{
- char *urls_envvar;
char *server_urls;
- char cache_path[PATH_MAX];
- char maxage_path[PATH_MAX*3]; /* These *3 multipliers are to shut up gcc -Wformat-truncation */
- char interval_path[PATH_MAX*4];
- char target_cache_dir[PATH_MAX*2];
- char target_cache_path[PATH_MAX*4];
- char target_cache_tmppath[PATH_MAX*5];
- char suffix[PATH_MAX*2];
+ char *urls_envvar;
+ char *cache_path = NULL;
+ char *maxage_path = NULL;
+ char *interval_path = NULL;
+ char *target_cache_dir = NULL;
+ char *target_cache_path = NULL;
+ char *target_cache_tmppath = NULL;
+ char suffix[PATH_MAX];
char build_id_bytes[MAX_BUILD_ID_BYTES * 2 + 1];
+ int rc;
+
+ /* Clear the obsolete URL from a previous _find operation. */
+ free (c->url);
+ c->url = NULL;
+
+ add_default_headers(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);
+ if (urls_envvar == NULL || urls_envvar[0] == '\0')
+ {
+ rc = -ENOSYS;
+ goto out;
+ }
/* Copy lowercase hex representation of build_id into buf. */
if ((build_id_len >= MAX_BUILD_ID_BYTES) ||
@@ -349,31 +535,75 @@ debuginfod_query_server (debuginfod_client *c,
/* set paths needed to perform the query
example format
- cache_path: $HOME/.debuginfod_cache
- target_cache_dir: $HOME/.debuginfod_cache/0123abcd
- target_cache_path: $HOME/.debuginfod_cache/0123abcd/debuginfo
- target_cache_path: $HOME/.debuginfod_cache/0123abcd/source#PATH#TO#SOURCE ?
+ cache_path: $HOME/.cache
+ target_cache_dir: $HOME/.cache/0123abcd
+ target_cache_path: $HOME/.cache/0123abcd/debuginfo
+ target_cache_path: $HOME/.cache/0123abcd/source#PATH#TO#SOURCE ?
+
+ $XDG_CACHE_HOME takes priority over $HOME/.cache.
+ $DEBUGINFOD_CACHE_PATH takes priority over $HOME/.cache and $XDG_CACHE_HOME.
*/
- if (getenv(cache_path_envvar))
- strcpy(cache_path, getenv(cache_path_envvar));
+ /* Determine location of the cache. The path specified by the debuginfod
+ cache environment variable takes priority. */
+ char *cache_var = getenv(cache_path_envvar);
+ if (cache_var != NULL && strlen (cache_var) > 0)
+ xalloc_str (cache_path, "%s", cache_var);
else
{
- if (getenv("HOME"))
- sprintf(cache_path, "%s/%s", getenv("HOME"), cache_default_name);
- else
- sprintf(cache_path, "/%s", cache_default_name);
+ /* If a cache already exists in $HOME ('/' if $HOME isn't set), then use
+ that. Otherwise use the XDG cache directory naming format. */
+ xalloc_str (cache_path, "%s/%s", getenv ("HOME") ?: "/", cache_default_name);
+
+ struct stat st;
+ if (stat (cache_path, &st) < 0)
+ {
+ char cachedir[PATH_MAX];
+ char *xdg = getenv ("XDG_CACHE_HOME");
+
+ if (xdg != NULL && strlen (xdg) > 0)
+ snprintf (cachedir, PATH_MAX, "%s", xdg);
+ else
+ snprintf (cachedir, PATH_MAX, "%s/.cache", getenv ("HOME") ?: "/");
+
+ /* Create XDG cache directory if it doesn't exist. */
+ if (stat (cachedir, &st) == 0)
+ {
+ if (! S_ISDIR (st.st_mode))
+ {
+ rc = -EEXIST;
+ goto out;
+ }
+ }
+ else
+ {
+ rc = mkdir (cachedir, 0700);
+
+ /* Also check for EEXIST and S_ISDIR in case another client just
+ happened to create the cache. */
+ if (rc < 0
+ && (errno != EEXIST
+ || stat (cachedir, &st) != 0
+ || ! S_ISDIR (st.st_mode)))
+ {
+ rc = -errno;
+ goto out;
+ }
+ }
+
+ free (cache_path);
+ xalloc_str (cache_path, "%s/%s", cachedir, cache_xdg_name);
+ }
}
- /* avoid using snprintf here due to compiler warning. */
- snprintf(target_cache_dir, sizeof(target_cache_dir), "%s/%s", cache_path, build_id_bytes);
- snprintf(target_cache_path, sizeof(target_cache_path), "%s/%s%s", target_cache_dir, type, suffix);
- snprintf(target_cache_tmppath, sizeof(target_cache_tmppath), "%s.XXXXXX", target_cache_path);
+ xalloc_str (target_cache_dir, "%s/%s", cache_path, build_id_bytes);
+ xalloc_str (target_cache_path, "%s/%s%s", target_cache_dir, type, suffix);
+ xalloc_str (target_cache_tmppath, "%s.XXXXXX", target_cache_path);
/* XXX combine these */
- snprintf(interval_path, sizeof(interval_path), "%s/%s", cache_path, cache_clean_interval_filename);
- snprintf(maxage_path, sizeof(maxage_path), "%s/%s", cache_path, cache_max_unused_age_filename);
- int rc = debuginfod_init_cache(cache_path, interval_path, maxage_path);
+ xalloc_str (interval_path, "%s/%s", cache_path, cache_clean_interval_filename);
+ xalloc_str (maxage_path, "%s/%s", cache_path, cache_max_unused_age_filename);
+ rc = debuginfod_init_cache(cache_path, interval_path, maxage_path);
if (rc != 0)
goto out;
rc = debuginfod_clean_cache(c, cache_path, interval_path, maxage_path);
@@ -387,19 +617,14 @@ debuginfod_query_server (debuginfod_client *c,
/* Success!!!! */
if (path != NULL)
*path = strdup(target_cache_path);
- return fd;
- }
-
-
- urls_envvar = getenv(server_urls_envvar);
- if (urls_envvar == NULL || urls_envvar[0] == '\0')
- {
- rc = -ENOSYS;
+ rc = fd;
goto out;
}
- if (getenv(server_timeout_envvar))
- server_timeout = atoi (getenv(server_timeout_envvar));
+ long timeout = default_timeout;
+ const char* timeout_envvar = getenv(server_timeout_envvar);
+ if (timeout_envvar != NULL)
+ timeout = atoi (timeout_envvar);
/* make a copy of the envvar so it can be safely modified. */
server_urls = strdup(urls_envvar);
@@ -464,6 +689,7 @@ debuginfod_query_server (debuginfod_client *c,
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)
{
@@ -491,14 +717,28 @@ debuginfod_query_server (debuginfod_client *c,
CURLOPT_WRITEFUNCTION,
debuginfod_write_callback);
curl_easy_setopt(data[i].handle, CURLOPT_WRITEDATA, (void*)&data[i]);
- curl_easy_setopt(data[i].handle, CURLOPT_TIMEOUT, (long) server_timeout);
+ if (timeout > 0)
+ {
+ /* Make sure there is at least some progress,
+ try to get at least 100K per timeout seconds. */
+ curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_TIME,
+ timeout);
+ curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_LIMIT,
+ 100 * 1024L);
+ }
curl_easy_setopt(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);
+#if LIBCURL_VERSION_NUM >= 0x072a00 /* 7.42.0 */
+ curl_easy_setopt(data[i].handle, CURLOPT_PATH_AS_IS, (long) 1);
+#else
+ /* On old curl; no big deal, canonicalization here is almost the
+ same, except perhaps for ? # type decorations at the tail. */
+#endif
curl_easy_setopt(data[i].handle, CURLOPT_AUTOREFERER, (long) 1);
curl_easy_setopt(data[i].handle, CURLOPT_ACCEPT_ENCODING, "");
- curl_easy_setopt(data[i].handle, CURLOPT_USERAGENT, (void*) PACKAGE_STRING);
+ 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);
@@ -509,15 +749,35 @@ debuginfod_query_server (debuginfod_client *c,
long loops = 0;
do
{
- CURLMcode curl_res;
+ /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */
+ curl_multi_wait(curlm, NULL, 0, 1000, NULL);
+
+ /* If the target file has been found, abort the other queries. */
+ if (target_handle != NULL)
+ for (int i = 0; i < num_urls; i++)
+ if (data[i].handle != target_handle)
+ curl_multi_remove_handle(curlm, data[i].handle);
+
+ CURLMcode curlm_res = curl_multi_perform(curlm, &still_running);
+ if (curlm_res != CURLM_OK)
+ {
+ switch (curlm_res)
+ {
+ case CURLM_CALL_MULTI_PERFORM: continue;
+ case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break;
+ default: rc = -ENETUNREACH; break;
+ }
+ goto out1;
+ }
if (c->progressfn) /* inform/check progress callback */
{
loops ++;
long pa = loops; /* default params for progress callback */
- long pb = 0;
+ long pb = 0; /* transfer_timeout tempting, but loops != elapsed-time */
if (target_handle) /* we've committed to a server; report its download progress */
{
+ CURLcode curl_res;
#ifdef CURLINFO_SIZE_DOWNLOAD_T
curl_off_t dl;
curl_res = curl_easy_getinfo(target_handle,
@@ -534,6 +794,8 @@ debuginfod_query_server (debuginfod_client *c,
pa = (dl > LONG_MAX ? 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
curl_off_t cl;
curl_res = curl_easy_getinfo(target_handle,
@@ -554,27 +816,6 @@ debuginfod_query_server (debuginfod_client *c,
if ((*c->progressfn) (c, pa, pb))
break;
}
-
- /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */
- curl_multi_wait(curlm, NULL, 0, 1000, NULL);
-
- /* If the target file has been found, abort the other queries. */
- if (target_handle != NULL)
- for (int i = 0; i < num_urls; i++)
- if (data[i].handle != target_handle)
- curl_multi_remove_handle(curlm, data[i].handle);
-
- curl_res = curl_multi_perform(curlm, &still_running);
- if (curl_res != CURLM_OK)
- {
- switch (curl_res)
- {
- case CURLM_CALL_MULTI_PERFORM: continue;
- case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break;
- default: rc = -ENETUNREACH; break;
- }
- goto out1;
- }
} while (still_running);
/* Check whether a query was successful. If so, assign its handle
@@ -610,20 +851,34 @@ debuginfod_query_server (debuginfod_client *c,
else
{
/* Query completed without an error. Confirm that the
- response code is 200 and set verified_handle. */
- long resp_code = 500;
- CURLcode curl_res;
+ response code is 200 when using HTTP/HTTPS and 0 when
+ using file:// and set verified_handle. */
- curl_res = curl_easy_getinfo(target_handle,
- CURLINFO_RESPONSE_CODE,
- &resp_code);
-
- if (curl_res == CURLE_OK
- && resp_code == 200
- && msg->easy_handle != NULL)
+ if (msg->easy_handle != NULL)
{
- verified_handle = msg->easy_handle;
- break;
+ char *effective_url = NULL;
+ long resp_code = 500;
+ CURLcode ok1 = curl_easy_getinfo (target_handle,
+ CURLINFO_EFFECTIVE_URL,
+ &effective_url);
+ CURLcode ok2 = curl_easy_getinfo (target_handle,
+ CURLINFO_RESPONSE_CODE,
+ &resp_code);
+ if(ok1 == CURLE_OK && ok2 == CURLE_OK && effective_url)
+ {
+ if (strncmp (effective_url, "http", 4) == 0)
+ if (resp_code == 200)
+ {
+ verified_handle = msg->easy_handle;
+ break;
+ }
+ if (strncmp (effective_url, "file", 4) == 0)
+ if (resp_code == 0)
+ {
+ verified_handle = msg->easy_handle;
+ break;
+ }
+ }
}
}
}
@@ -659,12 +914,14 @@ debuginfod_query_server (debuginfod_client *c,
curl_multi_cleanup (curlm);
free (data);
free (server_urls);
+
/* don't close fd - we're returning it */
/* don't unlink the tmppath; it's already been renamed. */
if (path != NULL)
*path = strdup(target_cache_path);
- return fd;
+ rc = fd;
+ goto out;
/* error exits */
out1:
@@ -673,32 +930,75 @@ debuginfod_query_server (debuginfod_client *c,
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);
- close (fd);
out0:
free (server_urls);
+/* general purpose exit */
out:
+ /* 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,
+ and without a newline. */
+ if (c->default_progressfn_printed_p)
+ dprintf(STDERR_FILENO, "\n");
+
+ free (cache_path);
+ free (maxage_path);
+ free (interval_path);
+ free (target_cache_dir);
+ free (target_cache_path);
+ free (target_cache_tmppath);
return rc;
}
+
+
/* See debuginfod.h */
debuginfod_client *
debuginfod_begin (void)
{
debuginfod_client *client;
size_t size = sizeof (struct debuginfod_client);
- client = (debuginfod_client *) malloc (size);
+ client = (debuginfod_client *) calloc (1, size);
if (client != NULL)
- client->progressfn = NULL;
+ {
+ if (getenv(DEBUGINFOD_PROGRESS_ENV_VAR))
+ client->progressfn = default_progressfn;
+ }
return client;
}
void
+debuginfod_set_user_data(debuginfod_client *client,
+ void *data)
+{
+ client->user_data = data;
+}
+
+void *
+debuginfod_get_user_data(debuginfod_client *client)
+{
+ return client->user_data;
+}
+
+const char *
+debuginfod_get_url(debuginfod_client *client)
+{
+ return client->url;
+}
+
+void
debuginfod_end (debuginfod_client *client)
{
+ if (client == NULL)
+ return;
+
+ curl_slist_free_all (client->headers);
+ free (client->url);
free (client);
}
@@ -732,6 +1032,33 @@ int debuginfod_find_source(debuginfod_client *client,
}
+/* Add an outgoing HTTP header. */
+int debuginfod_add_http_header (debuginfod_client *client, const char* header)
+{
+ /* Sanity check header value is of the form Header: Value.
+ It should contain exactly one colon that isn't the first or
+ last character. */
+ char *colon = strchr (header, ':');
+ if (colon == NULL
+ || colon == header
+ || *(colon + 1) == '\0'
+ || strchr (colon + 1, ':') != NULL)
+ return -EINVAL;
+
+ struct curl_slist *temp = curl_slist_append (client->headers, header);
+ if (temp == NULL)
+ return -ENOMEM;
+
+ /* Track if User-Agent: is being set. If so, signal not to add the
+ default one. */
+ if (strncmp (header, "User-Agent:", 11) == 0)
+ client->user_agent_set_p = 1;
+
+ client->headers = temp;
+ return 0;
+}
+
+
void
debuginfod_set_progressfn(debuginfod_client *client,
debuginfod_progressfn_t fn)
diff --git a/debuginfod/debuginfod-find.c b/debuginfod/debuginfod-find.c
index 8bd3a3db..83a43ce4 100644
--- a/debuginfod/debuginfod-find.c
+++ b/debuginfod/debuginfod-find.c
@@ -1,6 +1,6 @@
/* Command-line frontend for retrieving ELF / DWARF / source files
from the debuginfod.
- Copyright (C) 2019 Red Hat, Inc.
+ 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
@@ -25,6 +25,10 @@
#include <stdlib.h>
#include <string.h>
#include <argp.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <gelf.h>
+#include <libdwelf.h>
/* Name and version of program. */
@@ -39,8 +43,12 @@ static const char doc[] = N_("Request debuginfo-related content "
/* Strings for arguments in help texts. */
static const char args_doc[] = N_("debuginfo BUILDID\n"
+ "debuginfo PATH\n"
"executable BUILDID\n"
- "source BUILDID /FILENAME");
+ "executable PATH\n"
+ "source BUILDID /FILENAME\n"
+ "source PATH /FILENAME\n");
+
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
@@ -51,6 +59,7 @@ static const struct argp_option options[] =
/* debuginfod connection handle. */
static debuginfod_client *client;
+static int verbose;
int progressfn(debuginfod_client *c __attribute__((__unused__)),
long a, long b)
@@ -66,7 +75,8 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state)
(void) state;
switch (key)
{
- case 'v': debuginfod_set_progressfn (client, & progressfn); break;
+ case 'v': verbose++;
+ debuginfod_set_progressfn (client, & progressfn); break;
default: return ARGP_ERR_UNKNOWN;
}
return 0;
@@ -84,6 +94,8 @@ static struct argp argp =
int
main(int argc, char** argv)
{
+ elf_version (EV_CURRENT);
+
client = debuginfod_begin ();
if (client == NULL)
{
@@ -91,6 +103,9 @@ main(int argc, char** argv)
return 1;
}
+ /* Exercise user data pointer, to support testing only. */
+ debuginfod_set_user_data (client, (void *)"Progress");
+
int remaining;
(void) argp_parse (&argp, argc, argv, ARGP_IN_ORDER|ARGP_NO_ARGS, &remaining, NULL);
@@ -100,29 +115,72 @@ main(int argc, char** argv)
return 1;
}
- int rc;
+ /* If we were passed an ELF file name in the BUILDID slot, look in there. */
+ unsigned char* build_id = (unsigned char*) argv[remaining+1];
+ int build_id_len = 0; /* assume text */
+
+ int any_non_hex = 0;
+ int i;
+ for (i = 0; build_id[i] != '\0'; i++)
+ if ((build_id[i] >= '0' && build_id[i] <= '9') ||
+ (build_id[i] >= 'a' && build_id[i] <= 'f'))
+ ;
+ else
+ any_non_hex = 1;
+
+ int fd = -1;
+ Elf* elf = NULL;
+ if (any_non_hex) /* raw build-id */
+ {
+ fd = open ((char*) build_id, O_RDONLY);
+ if (fd < 0)
+ fprintf (stderr, "Cannot open %s: %s\n", build_id, strerror(errno));
+ }
+ if (fd >= 0)
+ {
+ elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
+ if (elf == NULL)
+ fprintf (stderr, "Cannot elf_begin %s: %s\n", build_id, elf_errmsg(-1));
+ }
+ if (elf != NULL)
+ {
+ const void *extracted_build_id;
+ ssize_t s = dwelf_elf_gnu_build_id(elf, &extracted_build_id);
+ if (s > 0)
+ {
+ /* Success: replace the build_id pointer/len with the binary blob
+ that elfutils is keeping for us. It'll remain valid until elf_end(). */
+ build_id = (unsigned char*) extracted_build_id;
+ build_id_len = s;
+ }
+ else
+ fprintf (stderr, "Cannot extract build-id from %s: %s\n", build_id, elf_errmsg(-1));
+ }
+
char *cache_name;
+ int rc = 0;
/* Check whether FILETYPE is valid and call the appropriate
debuginfod_find_* function. If FILETYPE is "source"
then ensure a FILENAME was also supplied as an argument. */
if (strcmp(argv[remaining], "debuginfo") == 0)
rc = debuginfod_find_debuginfo(client,
- (unsigned char *)argv[remaining+1], 0,
+ build_id, build_id_len,
&cache_name);
else if (strcmp(argv[remaining], "executable") == 0)
rc = debuginfod_find_executable(client,
- (unsigned char *)argv[remaining+1], 0,
+ build_id, build_id_len,
&cache_name);
else if (strcmp(argv[remaining], "source") == 0)
{
- if (remaining+2 == argc || argv[3][0] != '/')
+ if (remaining+2 == argc || argv[remaining+2][0] != '/')
{
fprintf(stderr, "If FILETYPE is \"source\" then absolute /FILENAME must be given\n");
return 1;
}
- rc = debuginfod_find_source(client, (unsigned char *)argv[remaining+1],
- 0, argv[remaining+2], &cache_name);
+ rc = debuginfod_find_source(client,
+ build_id, build_id_len,
+ argv[remaining+2], &cache_name);
}
else
{
@@ -130,6 +188,19 @@ main(int argc, char** argv)
return 1;
}
+ if (verbose)
+ {
+ const char* url = debuginfod_get_url (client);
+ if (url != NULL)
+ fprintf(stderr, "Downloaded from %s\n", url);
+ }
+
+ debuginfod_end (client);
+ if (elf)
+ elf_end(elf);
+ if (fd >= 0)
+ close (fd);
+
if (rc < 0)
{
fprintf(stderr, "Server query failed: %s\n", strerror(-rc));
@@ -137,9 +208,7 @@ main(int argc, char** argv)
}
printf("%s\n", cache_name);
-
free (cache_name);
- debuginfod_end (client);
return 0;
}
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index aa7ffcf6..76f1fa52 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -1,5 +1,5 @@
/* Debuginfo-over-http server.
- Copyright (C) 2019 Red Hat, Inc.
+ 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
@@ -52,6 +52,7 @@ extern "C" {
#include <signal.h>
#include <sys/stat.h>
#include <sys/time.h>
+#include <sys/vfs.h>
#include <unistd.h>
#include <fcntl.h>
#include <netdb.h>
@@ -79,6 +80,7 @@ extern "C" {
#include <ostream>
#include <sstream>
#include <mutex>
+#include <deque>
#include <condition_variable>
#include <thread>
// #include <regex> // on rhel7 gcc 4.8, not competent
@@ -106,6 +108,15 @@ using namespace std;
#endif
+inline bool
+string_endswith(const string& haystack, const string& needle)
+{
+ return (haystack.size() >= needle.size() &&
+ equal(haystack.end()-needle.size(), haystack.end(),
+ needle.begin()));
+}
+
+
// Roll this identifier for every sqlite schema incompatiblity.
#define BUILDIDS "buildids9"
@@ -231,9 +242,9 @@ static const char DEBUGINFOD_SQLITE_DDL[] =
"create view if not exists " BUILDIDS "_stats as\n"
" select 'file d/e' as label,count(*) as quantity from " BUILDIDS "_f_de\n"
"union all select 'file s',count(*) from " BUILDIDS "_f_s\n"
- "union all select 'rpm d/e',count(*) from " BUILDIDS "_r_de\n"
- "union all select 'rpm sref',count(*) from " BUILDIDS "_r_sref\n"
- "union all select 'rpm sdef',count(*) from " BUILDIDS "_r_sdef\n"
+ "union all select 'archive d/e',count(*) from " BUILDIDS "_r_de\n"
+ "union all select 'archive sref',count(*) from " BUILDIDS "_r_sref\n"
+ "union all select 'archive sdef',count(*) from " BUILDIDS "_r_sdef\n"
"union all select 'buildids',count(*) from " BUILDIDS "_buildids\n"
"union all select 'filenames',count(*) from " BUILDIDS "_files\n"
"union all select 'files scanned (#)',count(*) from " BUILDIDS "_file_mtime_scanned\n"
@@ -322,9 +333,11 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
static const struct argp_option options[] =
{
{ NULL, 0, NULL, 0, "Scanners:", 1 },
- { "scan-file-dir", 'F', NULL, 0, "Enable ELF/DWARF file scanning threads.", 0 },
- { "scan-rpm-dir", 'R', NULL, 0, "Enable RPM scanning threads.", 0 },
- // "source-oci-imageregistry" ...
+ { "scan-file-dir", 'F', NULL, 0, "Enable ELF/DWARF file scanning.", 0 },
+ { "scan-rpm-dir", 'R', NULL, 0, "Enable RPM scanning.", 0 },
+ { "scan-deb-dir", 'U', NULL, 0, "Enable DEB scanning.", 0 },
+ { "scan-archive", 'Z', "EXT=CMD", 0, "Enable arbitrary archive scanning.", 0 },
+ // "source-oci-imageregistry" ...
{ NULL, 0, NULL, 0, "Options:", 2 },
{ "logical", 'L', NULL, 0, "Follow symlinks, default=ignore.", 0 },
@@ -338,7 +351,12 @@ 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 },
-
+#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
+ { "fdcache-mbs", ARGP_KEY_FDCACHE_MBS, "MB", 0, "Maximum total size of archive file fdcache.", 0 },
+#define ARGP_KEY_FDCACHE_PREFETCH 0x1003
+ { "fdcache-prefetch", ARGP_KEY_FDCACHE_PREFETCH, "NUM", 0, "Number of archive files to prefetch into fdcache.", 0 },
{ NULL, 0, NULL, 0, NULL, 0 }
};
@@ -359,7 +377,7 @@ static struct argp argp =
static string db_path;
-static sqlite3 *db;
+static sqlite3 *db; // single connection, serialized across all our threads!
static unsigned verbose;
static volatile sig_atomic_t interrupted = 0;
static volatile sig_atomic_t sigusr1 = 0;
@@ -367,15 +385,19 @@ static volatile sig_atomic_t sigusr2 = 0;
static unsigned http_port = 8002;
static unsigned rescan_s = 300;
static unsigned groom_s = 86400;
-static unsigned maxigroom = false;
+static bool maxigroom = false;
static unsigned concurrency = std::thread::hardware_concurrency() ?: 1;
static set<string> source_paths;
static bool scan_files = false;
-static bool scan_rpms = false;
+static map<string,string> scan_archives;
static vector<string> extra_ddl;
static regex_t file_include_regex;
static regex_t file_exclude_regex;
static bool traverse_logical;
+static long fdcache_fds;
+static long fdcache_mbs;
+static long fdcache_prefetch;
+static string tmpdir;
static void set_metric(const string& key, int64_t value);
// static void inc_metric(const string& key);
@@ -387,6 +409,7 @@ static void inc_metric(const string& metric,
static void add_metric(const string& metric,
const string& lname, const string& lvalue,
int64_t value);
+// static void add_metric(const string& metric, int64_t value);
/* Handle program arguments. */
static error_t
@@ -399,10 +422,37 @@ parse_opt (int key, char *arg,
case 'v': verbose ++; break;
case 'd': db_path = string(arg); break;
case 'p': http_port = (unsigned) atoi(arg);
- if (http_port > 65535) argp_failure(state, 1, EINVAL, "port number");
+ if (http_port == 0 || http_port > 65535)
+ argp_failure(state, 1, EINVAL, "port number");
break;
case 'F': scan_files = true; break;
- case 'R': scan_rpms = true; break;
+ case 'R':
+ 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)<";
+ }
+ // .udeb too?
+ break;
+ case 'Z':
+ {
+ char* extension = strchr(arg, '=');
+ if (arg[0] == '\0')
+ argp_failure(state, 1, EINVAL, "missing EXT");
+ else if (extension)
+ scan_archives[string(arg, (extension-arg))]=string(extension+1);
+ else
+ scan_archives[string(arg)]=string("cat");
+ }
+ break;
case 'L':
traverse_logical = true;
break;
@@ -433,6 +483,15 @@ parse_opt (int key, char *arg,
if (rc != 0)
argp_failure(state, 1, EINVAL, "regular expession");
break;
+ case ARGP_KEY_FDCACHE_FDS:
+ fdcache_fds = atol (arg);
+ break;
+ case ARGP_KEY_FDCACHE_MBS:
+ fdcache_mbs = atol (arg);
+ break;
+ case ARGP_KEY_FDCACHE_PREFETCH:
+ fdcache_prefetch = atol (arg);
+ break;
case ARGP_KEY_ARG:
source_paths.insert(string(arg));
break;
@@ -503,39 +562,84 @@ struct elfutils_exception: public reportable_exception
////////////////////////////////////////////////////////////////////////
-// a c++ counting-semaphore class ... since we're c++11 not c++20
-
-class semaphore
+template <typename Payload>
+class workq
{
+ set<Payload> q; // eliminate duplicates
+ mutex mtx;
+ condition_variable cv;
+ bool dead;
+ unsigned idlers;
+
public:
- semaphore (unsigned c=1): count(c) {}
- inline void notify () {
+ workq() { dead = false; idlers = 0; }
+ ~workq() {}
+
+ void push_back(const Payload& p)
+ {
unique_lock<mutex> lock(mtx);
- count++;
- cv.notify_one();
+ q.insert (p);
+ set_metric("thread_work_pending","role","scan", q.size());
+ cv.notify_all();
}
- inline void wait() {
+
+ // kill this workqueue, wake up all idlers / scanners
+ void nuke() {
unique_lock<mutex> lock(mtx);
- while (count == 0)
+ // optional: q.clear();
+ dead = true;
+ cv.notify_all();
+ }
+
+ // block this scanner thread until there is work to do and no active
+ bool wait_front (Payload& p)
+ {
+ unique_lock<mutex> lock(mtx);
+ while (!dead && (q.size() == 0 || idlers > 0))
cv.wait(lock);
- count--;
+ if (dead)
+ return false;
+ else
+ {
+ p = * q.begin();
+ q.erase (q.begin());
+ set_metric("thread_work_pending","role","scan", q.size());
+ if (q.size() == 0)
+ cv.notify_all(); // maybe wake up waiting idlers
+ return true;
+ }
}
-private:
- mutex mtx;
- condition_variable cv;
- unsigned count;
-};
+ // 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))
+ cv.wait(lock);
+ idlers ++;
+ }
-class semaphore_borrower
-{
-public:
- semaphore_borrower(semaphore* s): sem(s) { sem->wait(); }
- ~semaphore_borrower() { sem->notify(); }
-private:
- semaphore* sem;
+ void done_idle ()
+ {
+ unique_lock<mutex> lock(mtx);
+ idlers --;
+ cv.notify_all(); // maybe wake up waiting scanners, but probably not (shutting down)
+ }
};
+typedef struct stat stat_t;
+typedef pair<string,stat_t> scan_payload;
+inline bool operator< (const scan_payload& a, const scan_payload& b)
+{
+ return a.first < b.first; // don't bother compare the stat fields
+}
+static workq<scan_payload> scanq; // just a single one
+// producer & idler: thread_main_fts_source_paths()
+// consumer: thread_main_scanner()
+// idler: thread_main_groom()
+
+
////////////////////////////////////////////////////////////////////////
@@ -706,7 +810,17 @@ private:
////////////////////////////////////////////////////////////////////////
-
+static string
+header_censor(const string& str)
+{
+ string y;
+ for (auto&& x : str)
+ {
+ if (isalnum(x) || x == '/' || x == '.' || x == ',' || x == '_' || x == ':')
+ y += x;
+ }
+ return y;
+}
static string
@@ -735,13 +849,21 @@ conninfo (struct MHD_Connection * conn)
hostname[0] = servname[0] = '\0';
}
- return string(hostname) + string(":") + string(servname);
+ // extract headers relevant to administration
+ const char* user_agent = MHD_lookup_connection_value (conn, MHD_HEADER_KIND, "User-Agent") ?: "";
+ const char* x_forwarded_for = MHD_lookup_connection_value (conn, MHD_HEADER_KIND, "X-Forwarded-For") ?: "";
+ // NB: these are untrustworthy, beware if machine-processing log files
+
+ return string(hostname) + string(":") + string(servname) +
+ string(" UA:") + header_censor(string(user_agent)) +
+ string(" XFF:") + header_censor(string(x_forwarded_for));
}
////////////////////////////////////////////////////////////////////////
+
static void
add_mhd_last_modified (struct MHD_Response *resp, time_t mtime)
{
@@ -833,6 +955,268 @@ shell_escape(const string& str)
}
+// PR25548: Perform POSIX / RFC3986 style path canonicalization on the input string.
+//
+// Namely:
+// // -> /
+// /foo/../ -> /
+// /./ -> /
+//
+// This mapping is done on dwarf-side source path names, which may
+// include these constructs, so we can deal with debuginfod clients
+// that accidentally canonicalize the paths.
+//
+// realpath(3) is close but not quite right, because it also resolves
+// symbolic links. Symlinks at the debuginfod server have nothing to
+// do with the build-time symlinks, thus they must not be considered.
+//
+// see also curl Curl_dedotdotify() aka RFC3986, which we mostly follow here
+// see also libc __realpath()
+// see also llvm llvm::sys::path::remove_dots()
+static string
+canon_pathname (const string& input)
+{
+ string i = input; // 5.2.4 (1)
+ string o;
+
+ while (i.size() != 0)
+ {
+ // 5.2.4 (2) A
+ if (i.substr(0,3) == "../")
+ i = i.substr(3);
+ else if(i.substr(0,2) == "./")
+ i = i.substr(2);
+
+ // 5.2.4 (2) B
+ else if (i.substr(0,3) == "/./")
+ i = i.substr(2);
+ else if (i == "/.")
+ i = ""; // no need to handle "/." complete-path-segment case; we're dealing with file names
+
+ // 5.2.4 (2) C
+ else if (i.substr(0,4) == "/../") {
+ i = i.substr(3);
+ string::size_type sl = o.rfind("/");
+ if (sl != string::npos)
+ o = o.substr(0, sl);
+ else
+ o = "";
+ } else if (i == "/..")
+ i = ""; // no need to handle "/.." complete-path-segment case; we're dealing with file names
+
+ // 5.2.4 (2) D
+ // no need to handle these cases; we're dealing with file names
+ else if (i == ".")
+ i = "";
+ else if (i == "..")
+ i = "";
+
+ // POSIX special: map // to /
+ else if (i.substr(0,2) == "//")
+ i = i.substr(1);
+
+ // 5.2.4 (2) E
+ else {
+ string::size_type next_slash = i.find("/", (i[0]=='/' ? 1 : 0)); // skip first slash
+ o += i.substr(0, next_slash);
+ if (next_slash == string::npos)
+ i = "";
+ else
+ i = i.substr(next_slash);
+ }
+ }
+
+ return o;
+}
+
+
+
+// A map-like class that owns a cache of file descriptors (indexed by
+// file / content names).
+//
+// If only it could use fd's instead of file names ... but we can't
+// dup(2) to create independent descriptors for the same unlinked
+// files, so would have to use some goofy linux /proc/self/fd/%d
+// hack such as the following
+
+#if 0
+int superdup(int fd)
+{
+#ifdef __linux__
+ char *fdpath = NULL;
+ int rc = asprintf(& fdpath, "/proc/self/fd/%d", fd);
+ int newfd;
+ if (rc >= 0)
+ newfd = open(fdpath, O_RDONLY);
+ else
+ newfd = -1;
+ free (fdpath);
+ return newfd;
+#else
+ return -1;
+#endif
+}
+#endif
+
+class libarchive_fdcache
+{
+private:
+ mutex fdcache_lock;
+
+ struct fdcache_entry
+ {
+ string archive;
+ string entry;
+ string fd;
+ double fd_size_mb; // slightly rounded up megabytes
+ };
+ deque<fdcache_entry> lru; // @head: most recently used
+ long max_fds;
+ long max_mbs;
+
+public:
+ 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
+ {
+ if (i->archive == a && i->entry == b)
+ {
+ unlink (i->fd.c_str());
+ lru.erase(i);
+ 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)
+ lru.push_front(n);
+ else
+ lru.push_back(n);
+ if (verbose > 3)
+ obatched(clog) << "fdcache interned a=" << a << " b=" << b
+ << " fd=" << fd << " mb=" << mb << " front=" << front_p << endl;
+ }
+
+ // NB: we age the cache at lookup time too
+ if (front_p)
+ this->limit(max_fds, max_mbs); // age cache if required
+ }
+
+ int lookup(const string& a, const string& b)
+ {
+ int fd = -1;
+ {
+ unique_lock<mutex> lock(fdcache_lock);
+ for (auto i = lru.begin(); i < lru.end(); i++)
+ {
+ if (i->archive == a && i->entry == b)
+ { // found it; move it to head of lru
+ fdcache_entry n = *i;
+ lru.erase(i); // invalidates i, so no more iteration!
+ lru.push_front(n);
+
+ fd = open(n.fd.c_str(), O_RDONLY); // NB: no problem if dup() fails; looks like cache miss
+ break;
+ }
+ }
+ }
+
+ if (fd >= 0)
+ this->limit(max_fds, max_mbs); // age cache if required
+
+ return fd;
+ }
+
+ int probe(const string& a, const string& b) // just a cache residency check - don't modify LRU state, don't open
+ {
+ unique_lock<mutex> lock(fdcache_lock);
+ for (auto i = lru.begin(); i < lru.end(); i++)
+ {
+ if (i->archive == a && i->entry == b)
+ return true;
+ }
+ return false;
+ }
+
+ void clear(const string& a, const string& b)
+ {
+ unique_lock<mutex> lock(fdcache_lock);
+ for (auto i = lru.begin(); i < lru.end(); i++)
+ {
+ if (i->archive == a && i->entry == b)
+ { // found it; move it to head of lru
+ fdcache_entry n = *i;
+ lru.erase(i); // invalidates i, so no more iteration!
+ unlink (n.fd.c_str());
+ return;
+ }
+ }
+ }
+
+ void limit(long maxfds, long maxmbs)
+ {
+ if (verbose > 3 && (this->max_fds != maxfds || this->max_mbs != maxmbs))
+ obatched(clog) << "fdcache limited to maxfds=" << maxfds << " maxmbs=" << maxmbs << endl;
+
+ unique_lock<mutex> lock(fdcache_lock);
+ this->max_fds = maxfds;
+ this->max_mbs = maxmbs;
+
+ long total_fd = 0;
+ double total_mb = 0.0;
+ for (auto i = lru.begin(); i < lru.end(); i++)
+ {
+ // 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)
+ {
+ // found the cut here point!
+
+ for (auto j = i; j < lru.end(); j++) // close all the fds from here on in
+ {
+ if (verbose > 3)
+ obatched(clog) << "fdcache evicted a=" << j->archive << " b=" << j->entry
+ << " fd=" << j->fd << " mb=" << j->fd_size_mb << endl;
+ unlink (j->fd.c_str());
+ }
+
+ lru.erase(i, lru.end()); // erase the nodes generally
+ break;
+ }
+
+ }
+ }
+
+ ~libarchive_fdcache()
+ {
+ limit(0, 0);
+ }
+};
+static libarchive_fdcache fdcache;
+
+
+// For security/portability reasons, many distro-package archives have
+// a "./" in front of path names; others have nothing, others have
+// "/". Canonicalize them all to a single leading "/", with the
+// assumption that this matches the dwarf-derived file names too.
+string canonicalized_archive_entry_pathname(struct archive_entry *e)
+{
+ string fn = archive_entry_pathname(e);
+ if (fn.size() == 0)
+ return fn;
+ if (fn[0] == '/')
+ return fn;
+ if (fn[0] == '.')
+ return fn.substr(1);
+ else
+ return string("/")+fn;
+}
+
+
+
static struct MHD_Response*
handle_buildid_r_match (int64_t b_mtime,
const string& b_source0,
@@ -851,11 +1235,69 @@ handle_buildid_r_match (int64_t b_mtime,
return 0;
}
- string popen_cmd = string("rpm2cpio " + shell_escape(b_source0));
- FILE* fp = popen (popen_cmd.c_str(), "r"); // "e" O_CLOEXEC?
- if (fp == NULL)
- throw libc_exception (errno, string("popen ") + popen_cmd);
- defer_dtor<FILE*,int> fp_closer (fp, pclose);
+ // check for a match in the fdcache first
+ int fd = fdcache.lookup(b_source0, b_source1);
+ while (fd >= 0) // got one!; NB: this is really an if() with a possible branch out to the end
+ {
+ rc = fstat(fd, &fs);
+ if (rc < 0) // disappeared?
+ {
+ if (verbose)
+ obatched(clog) << "cannot fstat fdcache " << b_source0 << endl;
+ close(fd);
+ fdcache.clear(b_source0, b_source1);
+ break; // branch out of if "loop", to try new libarchive fetch attempt
+ }
+
+ struct MHD_Response* r = MHD_create_response_from_fd (fs.st_size, fd);
+ if (r == 0)
+ {
+ if (verbose)
+ obatched(clog) << "cannot create fd-response for " << b_source0 << endl;
+ close(fd);
+ break; // branch out of if "loop", to try new libarchive fetch attempt
+ }
+
+ inc_metric ("http_responses_total","result","archive fdcache");
+
+ MHD_add_response_header (r, "Content-Type", "application/octet-stream");
+ add_mhd_last_modified (r, fs.st_mtime);
+ if (verbose > 1)
+ obatched(clog) << "serving fdcache archive " << b_source0 << " file " << b_source1 << endl;
+ /* libmicrohttpd will close it. */
+ if (result_fd)
+ *result_fd = fd;
+ return r;
+ // NB: see, we never go around the 'loop' more than once
+ }
+
+ // no match ... grumble, must process the archive
+ string archive_decoder = "/dev/null";
+ string archive_extension = "";
+ for (auto&& arch : scan_archives)
+ if (string_endswith(b_source0, arch.first))
+ {
+ archive_extension = arch.first;
+ archive_decoder = arch.second;
+ }
+ FILE* fp;
+ defer_dtor<FILE*,int>::dtor_fn dfn;
+ if (archive_decoder != "cat")
+ {
+ string popen_cmd = archive_decoder + " " + shell_escape(b_source0);
+ fp = popen (popen_cmd.c_str(), "r"); // "e" O_CLOEXEC?
+ dfn = pclose;
+ if (fp == NULL)
+ throw libc_exception (errno, string("popen ") + popen_cmd);
+ }
+ else
+ {
+ fp = fopen (b_source0.c_str(), "r");
+ dfn = fclose;
+ if (fp == NULL)
+ throw libc_exception (errno, string("fopen ") + b_source0);
+ }
+ defer_dtor<FILE*,int> fp_closer (fp, dfn);
struct archive *a;
a = archive_read_new();
@@ -863,19 +1305,30 @@ handle_buildid_r_match (int64_t b_mtime,
throw archive_exception("cannot create archive reader");
defer_dtor<struct archive*,int> archive_closer (a, archive_read_free);
- rc = archive_read_support_format_cpio(a);
+ rc = archive_read_support_format_all(a);
if (rc != ARCHIVE_OK)
- throw archive_exception(a, "cannot select cpio format");
+ throw archive_exception(a, "cannot select all format");
rc = archive_read_support_filter_all(a);
if (rc != ARCHIVE_OK)
throw archive_exception(a, "cannot select all filters");
rc = archive_read_open_FILE (a, fp);
if (rc != ARCHIVE_OK)
- throw archive_exception(a, "cannot open archive from rpm2cpio pipe");
+ throw archive_exception(a, "cannot open archive from pipe");
- while(1) // parse cpio archive entries
+ // archive traversal is in three stages, no, four stages:
+ // 1) skip entries whose names do not match the requested one
+ // 2) extract the matching entry name (set r = result)
+ // 3) extract some number of prefetched entries (just into fdcache)
+ // 4) abort any further processing
+ struct MHD_Response* r = 0; // will set in stage 2
+ unsigned prefetch_count = fdcache_prefetch; // will decrement in stage 3
+
+ while(r == 0 || prefetch_count > 0) // stage 1, 2, or 3
{
+ if (interrupted)
+ break;
+
struct archive_entry *e;
rc = archive_read_next_header (a, &e);
if (rc != ARCHIVE_OK)
@@ -884,48 +1337,81 @@ handle_buildid_r_match (int64_t b_mtime,
if (! S_ISREG(archive_entry_mode (e))) // skip non-files completely
continue;
- string fn = archive_entry_pathname (e);
- if (fn != string(".")+b_source1)
+ string fn = canonicalized_archive_entry_pathname (e);
+ if ((r == 0) && (fn != b_source1)) // stage 1
+ continue;
+
+ if (fdcache.probe (b_source0, fn)) // skip if already interned
continue;
// extract this file to a temporary file
- char tmppath[PATH_MAX] = "/tmp/debuginfod.XXXXXX"; // XXX: $TMP_DIR etc.
- int fd = mkstemp (tmppath);
+ char* tmppath = NULL;
+ rc = asprintf (&tmppath, "%s/debuginfod.XXXXXX", tmpdir.c_str());
+ if (rc < 0)
+ throw libc_exception (ENOMEM, "cannot allocate tmppath");
+ defer_dtor<void*,void> tmmpath_freer (tmppath, free);
+ fd = mkstemp (tmppath);
if (fd < 0)
throw libc_exception (errno, "cannot create temporary file");
- unlink (tmppath); // unlink now so OS will release the file as soon as we close the fd
+ // NB: don't unlink (tmppath), as fdcache will take charge of it.
rc = archive_read_data_into_fd (a, fd);
- if (rc != ARCHIVE_OK)
+ if (rc != ARCHIVE_OK) // e.g. ENOSPC!
{
close (fd);
+ unlink (tmppath);
throw archive_exception(a, "cannot extract file");
}
- inc_metric ("http_responses_total","result","rpm");
- struct MHD_Response* r = MHD_create_response_from_fd (archive_entry_size(e), fd);
+ // Set the mtime so the fdcache file mtimes, even prefetched ones,
+ // propagate to future webapi clients.
+ struct timeval tvs[2];
+ tvs[0].tv_sec = tvs[1].tv_sec = archive_entry_mtime(e);
+ tvs[0].tv_usec = tvs[1].tv_usec = 0;
+ (void) futimes (fd, tvs); /* best effort */
+
+ if (r != 0) // stage 3
+ {
+ // NB: now we know we have a complete reusable file; make fdcache
+ // responsible for unlinking it later.
+ fdcache.intern(b_source0, fn,
+ tmppath, archive_entry_size(e),
+ false); // prefetched ones go to back of lru
+ prefetch_count --;
+ close (fd); // we're not saving this fd to make a mhd-response from!
+ continue;
+ }
+
+ // NB: now we know we have a complete reusable file; make fdcache
+ // responsible for unlinking it later.
+ fdcache.intern(b_source0, b_source1,
+ tmppath, archive_entry_size(e),
+ true); // requested ones go to the front of lru
+
+ inc_metric ("http_responses_total","result",archive_extension + " archive");
+ r = MHD_create_response_from_fd (archive_entry_size(e), fd);
if (r == 0)
{
if (verbose)
obatched(clog) << "cannot create fd-response for " << b_source0 << endl;
close(fd);
- break; // assume no chance of better luck around another iteration
+ break; // assume no chance of better luck around another iteration; no other copies of same file
}
else
{
MHD_add_response_header (r, "Content-Type", "application/octet-stream");
add_mhd_last_modified (r, archive_entry_mtime(e));
if (verbose > 1)
- obatched(clog) << "serving rpm " << b_source0 << " file " << b_source1 << endl;
+ obatched(clog) << "serving archive " << b_source0 << " file " << b_source1 << endl;
/* libmicrohttpd will close it. */
if (result_fd)
*result_fd = fd;
- return r;
+ continue;
}
}
// XXX: rpm/file not found: delete this R entry?
- return 0;
+ return r;
}
@@ -955,11 +1441,12 @@ debuginfod_find_progress (debuginfod_client *, long a, long b)
}
-static struct MHD_Response* handle_buildid (const string& buildid /* unsafe */,
- const string& artifacttype /* unsafe */,
- const string& suffix /* unsafe */,
- int *result_fd
- )
+static struct MHD_Response*
+handle_buildid (MHD_Connection* conn,
+ const string& buildid /* unsafe */,
+ const string& artifacttype /* unsafe */,
+ const string& suffix /* unsafe */,
+ int *result_fd)
{
// validate artifacttype
string atype_code;
@@ -1001,12 +1488,17 @@ static struct MHD_Response* handle_buildid (const string& buildid /* unsafe */,
}
else if (atype_code == "S")
{
+ // PR25548
+ // Incoming source queries may come in with either dwarf-level OR canonicalized paths.
+ // We let the query pass with either one.
+
pp = new sqlite_ps (db, "mhd-query-s",
- "select mtime, sourcetype, source0, source1 from " BUILDIDS "_query_s where buildid = ? and artifactsrc = ? "
+ "select mtime, sourcetype, source0, source1 from " BUILDIDS "_query_s where buildid = ? and artifactsrc in (?,?) "
"order by sharedprefix(source0,source0ref) desc, mtime desc");
pp->reset();
pp->bind(1, buildid);
pp->bind(2, suffix);
+ pp->bind(3, canon_pathname(suffix));
}
unique_ptr<sqlite_ps> ps_closer(pp); // release pp if exception or return
@@ -1043,6 +1535,35 @@ static struct MHD_Response* handle_buildid (const string& buildid /* unsafe */,
{
debuginfod_set_progressfn (client, & debuginfod_find_progress);
+ if (conn)
+ {
+ // Transcribe incoming User-Agent:
+ string ua = MHD_lookup_connection_value (conn, MHD_HEADER_KIND, "User-Agent") ?: "";
+ string ua_complete = string("User-Agent: ") + ua;
+ debuginfod_add_http_header (client, ua_complete.c_str());
+
+ // Compute larger XFF:, for avoiding info loss during
+ // federation, and for future cyclicity detection.
+ string xff = MHD_lookup_connection_value (conn, MHD_HEADER_KIND, "X-Forwarded-For") ?: "";
+ if (xff != "")
+ xff += string(", "); // comma separated list
+
+ // Compute the client's numeric IP address only - so can't merge with conninfo()
+ const union MHD_ConnectionInfo *u = MHD_get_connection_info (conn,
+ MHD_CONNECTION_INFO_CLIENT_ADDRESS);
+ struct sockaddr *so = u ? u->client_addr : 0;
+ char hostname[256] = ""; // RFC1035
+ if (so && so->sa_family == AF_INET)
+ (void) getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), NULL, 0,
+ NI_NUMERICHOST);
+ else if (so && so->sa_family == AF_INET6)
+ (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0,
+ NI_NUMERICHOST);
+
+ string xff_complete = string("X-Forwarded-For: ")+xff+string(hostname);
+ debuginfod_add_http_header (client, xff_complete.c_str());
+ }
+
if (artifacttype == "debuginfo")
fd = debuginfod_find_debuginfo (client,
(const unsigned char*) buildid.c_str(),
@@ -1081,8 +1602,16 @@ static struct MHD_Response* handle_buildid (const string& buildid /* unsafe */,
}
close (fd);
}
- else if (fd != -ENOSYS) // no DEBUGINFOD_URLS configured
- throw libc_exception(-fd, "upstream debuginfod query failed");
+ else
+ switch(fd)
+ {
+ case -ENOSYS:
+ break;
+ case -ENOENT:
+ break;
+ default: // some more tricky error
+ throw libc_exception(-fd, "upstream debuginfod query failed");
+ }
throw reportable_exception(MHD_HTTP_NOT_FOUND, "not found");
}
@@ -1157,13 +1686,22 @@ add_metric(const string& metric,
unique_lock<mutex> lock(metrics_lock);
metrics[key] += value;
}
+#if 0
+static void
+add_metric(const string& metric,
+ int64_t value)
+{
+ unique_lock<mutex> lock(metrics_lock);
+ metrics[metric] += value;
+}
+#endif
// and more for higher arity labels if needed
static struct MHD_Response*
-handle_metrics ()
+handle_metrics (off_t* size)
{
stringstream o;
{
@@ -1175,6 +1713,7 @@ handle_metrics ()
MHD_Response* r = MHD_create_response_from_buffer (os.size(),
(void*) os.c_str(),
MHD_RESPMEM_MUST_COPY);
+ *size = os.size();
MHD_add_response_header (r, "Content-Type", "text/plain");
return r;
}
@@ -1197,8 +1736,11 @@ handler_cb (void * /*cls*/,
struct MHD_Response *r = NULL;
string url_copy = url;
- if (verbose)
- obatched(clog) << conninfo(connection) << " " << method << " " << url << endl;
+ int rc = MHD_NO; // mhd
+ int http_code = 500;
+ off_t http_size = -1;
+ struct timeval tv_start, tv_end;
+ gettimeofday (&tv_start, NULL);
try
{
@@ -1231,12 +1773,21 @@ handler_cb (void * /*cls*/,
}
inc_metric("http_requests_total", "type", artifacttype);
- r = handle_buildid(buildid, artifacttype, suffix, 0); // NB: don't care about result-fd
+ // get the resulting fd so we can report its size
+ int fd;
+ r = handle_buildid(connection, buildid, artifacttype, suffix, &fd);
+ if (r)
+ {
+ struct stat fs;
+ if (fstat(fd, &fs) == 0)
+ http_size = fs.st_size;
+ // libmicrohttpd will close (fd);
+ }
}
else if (url1 == "/metrics")
{
inc_metric("http_requests_total", "type", "metrics");
- r = handle_metrics();
+ r = handle_metrics(& http_size);
}
else
throw reportable_exception("webapi error, unrecognized /operation");
@@ -1244,16 +1795,39 @@ handler_cb (void * /*cls*/,
if (r == 0)
throw reportable_exception("internal error, missing response");
- int rc = MHD_queue_response (connection, MHD_HTTP_OK, r);
+ rc = MHD_queue_response (connection, MHD_HTTP_OK, r);
+ http_code = MHD_HTTP_OK;
MHD_destroy_response (r);
- return rc;
}
catch (const reportable_exception& e)
{
inc_metric("http_responses_total","result","error");
e.report(clog);
- return e.mhd_send_response (connection);
+ http_code = e.code;
+ http_size = e.message.size();
+ rc = e.mhd_send_response (connection);
}
+
+ gettimeofday (&tv_end, NULL);
+ double deltas = (tv_end.tv_sec - tv_start.tv_sec) + (tv_end.tv_usec - tv_start.tv_usec)*0.000001;
+ obatched(clog) << conninfo(connection)
+ << ' ' << method << ' ' << url
+ << ' ' << http_code << ' ' << http_size
+ << ' ' << (int)(deltas*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_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);
+
+ return rc;
}
@@ -1300,7 +1874,7 @@ dwarf_extract_source_paths (Elf *elf, set<string>& debug_sourcefiles)
struct MHD_Response *r = 0;
try
{
- r = handle_buildid (buildid, "debuginfo", "", &alt_fd);
+ r = handle_buildid (0, buildid, "debuginfo", "", &alt_fd);
}
catch (const reportable_exception& e)
{
@@ -1399,7 +1973,8 @@ dwarf_extract_source_paths (Elf *elf, set<string>& debug_sourcefiles)
waldo = (string (comp_dir) + string("/") + string (hat));
else
{
- obatched(clog) << "skipping hat=" << hat << " due to empty comp_dir" << endl;
+ if (verbose > 3)
+ obatched(clog) << "skipping hat=" << hat << " due to empty comp_dir" << endl;
continue;
}
@@ -1544,334 +2119,222 @@ elf_classify (int fd, bool &executable_p, bool &debuginfo_p, string &buildid, se
}
-static semaphore* scan_concurrency_sem = 0; // used to implement -c load limiting
-
-
static void
-scan_source_file_path (const string& dir)
+scan_source_file (const string& rps, const stat_t& st,
+ sqlite_ps& ps_upsert_buildids,
+ sqlite_ps& ps_upsert_files,
+ sqlite_ps& ps_upsert_de,
+ sqlite_ps& ps_upsert_s,
+ sqlite_ps& ps_query,
+ sqlite_ps& ps_scan_done,
+ unsigned& fts_cached,
+ unsigned& fts_executable,
+ unsigned& fts_debuginfo,
+ unsigned& fts_sourcefiles)
{
- obatched(clog) << "fts/file traversing " << dir << endl;
+ /* See if we know of it already. */
+ int rc = ps_query
+ .reset()
+ .bind(1, rps)
+ .bind(2, st.st_mtime)
+ .step();
+ ps_query.reset();
+ if (rc == SQLITE_ROW) // i.e., a result, as opposed to DONE (no results)
+ // no need to recheck a file/version we already know
+ // specifically, no need to elf-begin a file we already determined is non-elf
+ // (so is stored with buildid=NULL)
+ {
+ fts_cached++;
+ return;
+ }
- struct timeval tv_start, tv_end;
- gettimeofday (&tv_start, NULL);
-
- sqlite_ps ps_upsert_buildids (db, "file-buildids-intern", "insert or ignore into " BUILDIDS "_buildids VALUES (NULL, ?);");
- sqlite_ps ps_upsert_files (db, "file-files-intern", "insert or ignore into " BUILDIDS "_files VALUES (NULL, ?);");
- sqlite_ps ps_upsert_de (db, "file-de-upsert",
- "insert or ignore into " BUILDIDS "_f_de "
- "(buildid, debuginfo_p, executable_p, file, mtime) "
- "values ((select id from " BUILDIDS "_buildids where hex = ?),"
- " ?,?,"
- " (select id from " BUILDIDS "_files where name = ?), ?);");
- sqlite_ps ps_upsert_s (db, "file-s-upsert",
- "insert or ignore into " BUILDIDS "_f_s "
- "(buildid, artifactsrc, file, mtime) "
- "values ((select id from " BUILDIDS "_buildids where hex = ?),"
- " (select id from " BUILDIDS "_files where name = ?),"
- " (select id from " BUILDIDS "_files where name = ?),"
- " ?);");
- sqlite_ps ps_query (db, "file-negativehit-find",
- "select 1 from " BUILDIDS "_file_mtime_scanned where sourcetype = 'F' and file = (select id from " BUILDIDS "_files where name = ?) and mtime = ?;");
- sqlite_ps ps_scan_done (db, "file-scanned",
- "insert or ignore into " BUILDIDS "_file_mtime_scanned (sourcetype, file, mtime, size)"
- "values ('F', (select id from " BUILDIDS "_files where name = ?), ?, ?);");
+ bool executable_p = false, debuginfo_p = false; // E and/or D
+ string buildid;
+ set<string> sourcefiles;
+ int fd = open (rps.c_str(), O_RDONLY);
+ try
+ {
+ if (fd >= 0)
+ elf_classify (fd, executable_p, debuginfo_p, buildid, sourcefiles);
+ else
+ throw libc_exception(errno, string("open ") + rps);
+ inc_metric ("scanned_total","source","file");
+ }
+ // NB: we catch exceptions here too, so that we can
+ // cache the corrupt-elf case (!executable_p &&
+ // !debuginfo_p) just below, just as if we had an
+ // EPERM error from open(2).
+ catch (const reportable_exception& e)
+ {
+ e.report(clog);
+ }
- char * const dirs[] = { (char*) dir.c_str(), NULL };
+ if (fd >= 0)
+ close (fd);
- unsigned fts_scanned=0, fts_regex=0, fts_cached=0, fts_debuginfo=0, fts_executable=0, fts_sourcefiles=0;
+ // register this file name in the interning table
+ ps_upsert_files
+ .reset()
+ .bind(1, rps)
+ .step_ok_done();
- FTS *fts = fts_open (dirs,
- (traverse_logical ? FTS_LOGICAL : FTS_PHYSICAL|FTS_XDEV)
- | FTS_NOCHDIR /* multithreaded */,
- NULL);
- if (fts == NULL)
+ if (buildid == "")
{
- obatched(cerr) << "cannot fts_open " << dir << endl;
- return;
+ // no point storing an elf file without buildid
+ executable_p = false;
+ debuginfo_p = false;
}
-
- FTSENT *f;
- while ((f = fts_read (fts)) != NULL)
+ else
{
- semaphore_borrower handle_one_file (scan_concurrency_sem);
+ // register this build-id in the interning table
+ ps_upsert_buildids
+ .reset()
+ .bind(1, buildid)
+ .step_ok_done();
+ }
- fts_scanned ++;
- if (interrupted)
- break;
+ if (executable_p)
+ fts_executable ++;
+ if (debuginfo_p)
+ fts_debuginfo ++;
+ if (executable_p || debuginfo_p)
+ {
+ ps_upsert_de
+ .reset()
+ .bind(1, buildid)
+ .bind(2, debuginfo_p ? 1 : 0)
+ .bind(3, executable_p ? 1 : 0)
+ .bind(4, rps)
+ .bind(5, st.st_mtime)
+ .step_ok_done();
+ }
+ if (executable_p)
+ inc_metric("found_executable_total","source","files");
+ if (debuginfo_p)
+ inc_metric("found_debuginfo_total","source","files");
- if (verbose > 2)
- obatched(clog) << "fts/file traversing " << f->fts_path << endl;
+ if (sourcefiles.size() && buildid != "")
+ {
+ fts_sourcefiles += sourcefiles.size();
- try
+ for (auto&& dwarfsrc : sourcefiles)
{
- /* Found a file. Convert it to an absolute path, so
- the buildid database does not have relative path
- names that are unresolvable from a subsequent run
- in a different cwd. */
- char *rp = realpath(f->fts_path, NULL);
- if (rp == NULL)
- continue; // ignore dangling symlink or such
- string rps = string(rp);
- free (rp);
-
- bool ri = !regexec (&file_include_regex, rps.c_str(), 0, 0, 0);
- bool rx = !regexec (&file_exclude_regex, rps.c_str(), 0, 0, 0);
- if (!ri || rx)
- {
- if (verbose > 3)
- obatched(clog) << "fts/file skipped by regex " << (!ri ? "I" : "") << (rx ? "X" : "") << endl;
- fts_regex ++;
- continue;
- }
-
- switch (f->fts_info)
- {
- case FTS_D:
- break;
-
- case FTS_DP:
- break;
-
- case FTS_F:
- {
- /* See if we know of it already. */
- int rc = ps_query
- .reset()
- .bind(1, rps)
- .bind(2, f->fts_statp->st_mtime)
- .step();
- ps_query.reset();
- if (rc == SQLITE_ROW) // i.e., a result, as opposed to DONE (no results)
- // no need to recheck a file/version we already know
- // specifically, no need to elf-begin a file we already determined is non-elf
- // (so is stored with buildid=NULL)
- {
- fts_cached ++;
- continue;
- }
-
- bool executable_p = false, debuginfo_p = false; // E and/or D
- string buildid;
- set<string> sourcefiles;
-
- int fd = open (rps.c_str(), O_RDONLY);
- try
- {
- if (fd >= 0)
- elf_classify (fd, executable_p, debuginfo_p, buildid, sourcefiles);
- else
- throw libc_exception(errno, string("open ") + rps);
- inc_metric ("scanned_total","source","file");
- }
-
- // NB: we catch exceptions here too, so that we can
- // cache the corrupt-elf case (!executable_p &&
- // !debuginfo_p) just below, just as if we had an
- // EPERM error from open(2).
-
- catch (const reportable_exception& e)
- {
- e.report(clog);
- }
-
- if (fd >= 0)
- close (fd);
-
- // register this file name in the interning table
- ps_upsert_files
- .reset()
- .bind(1, rps)
- .step_ok_done();
-
- if (buildid == "")
- {
- // no point storing an elf file without buildid
- executable_p = false;
- debuginfo_p = false;
- }
- else
- {
- // register this build-id in the interning table
- ps_upsert_buildids
- .reset()
- .bind(1, buildid)
- .step_ok_done();
- }
-
- if (executable_p)
- fts_executable ++;
- if (debuginfo_p)
- fts_debuginfo ++;
- if (executable_p || debuginfo_p)
- {
- ps_upsert_de
- .reset()
- .bind(1, buildid)
- .bind(2, debuginfo_p ? 1 : 0)
- .bind(3, executable_p ? 1 : 0)
- .bind(4, rps)
- .bind(5, f->fts_statp->st_mtime)
- .step_ok_done();
- }
- if (executable_p)
- inc_metric("found_executable_total","source","files");
- if (debuginfo_p)
- inc_metric("found_debuginfo_total","source","files");
-
- if (sourcefiles.size() && buildid != "")
- {
- fts_sourcefiles += sourcefiles.size();
-
- for (auto&& dwarfsrc : sourcefiles)
- {
- char *srp = realpath(dwarfsrc.c_str(), NULL);
- if (srp == NULL) // also if DWZ unresolved dwarfsrc=""
- continue; // unresolvable files are not a serious problem
- // throw libc_exception(errno, "fts/file realpath " + srcpath);
- string srps = string(srp);
- free (srp);
-
- struct stat sfs;
- rc = stat(srps.c_str(), &sfs);
- if (rc != 0)
- continue;
-
- if (verbose > 2)
- obatched(clog) << "recorded buildid=" << buildid << " file=" << srps
- << " mtime=" << sfs.st_mtime
- << " as source " << dwarfsrc << endl;
-
- ps_upsert_files
- .reset()
- .bind(1, srps)
- .step_ok_done();
-
- // register the dwarfsrc name in the interning table too
- ps_upsert_files
- .reset()
- .bind(1, dwarfsrc)
- .step_ok_done();
-
- ps_upsert_s
- .reset()
- .bind(1, buildid)
- .bind(2, dwarfsrc)
- .bind(3, srps)
- .bind(4, sfs.st_mtime)
- .step_ok_done();
-
- inc_metric("found_sourcerefs_total","source","files");
- }
- }
-
- ps_scan_done
- .reset()
- .bind(1, rps)
- .bind(2, f->fts_statp->st_mtime)
- .bind(3, f->fts_statp->st_size)
- .step_ok_done();
-
- if (verbose > 2)
- obatched(clog) << "recorded buildid=" << buildid << " file=" << rps
- << " mtime=" << f->fts_statp->st_mtime << " atype="
- << (executable_p ? "E" : "")
- << (debuginfo_p ? "D" : "") << endl;
- }
- break;
+ char *srp = realpath(dwarfsrc.c_str(), NULL);
+ if (srp == NULL) // also if DWZ unresolved dwarfsrc=""
+ continue; // unresolvable files are not a serious problem
+ // throw libc_exception(errno, "fts/file realpath " + srcpath);
+ string srps = string(srp);
+ free (srp);
+
+ struct stat sfs;
+ rc = stat(srps.c_str(), &sfs);
+ if (rc != 0)
+ continue;
- case FTS_ERR:
- case FTS_NS:
- throw libc_exception(f->fts_errno, string("fts/file traversal ") + string(f->fts_path));
+ if (verbose > 2)
+ obatched(clog) << "recorded buildid=" << buildid << " file=" << srps
+ << " mtime=" << sfs.st_mtime
+ << " as source " << dwarfsrc << endl;
- default:
- case FTS_SL: /* ignore symlinks; seen in non-L mode only */
- break;
- }
+ ps_upsert_files
+ .reset()
+ .bind(1, srps)
+ .step_ok_done();
- if ((verbose && f->fts_info == FTS_DP) ||
- (verbose > 1 && f->fts_info == FTS_F))
- obatched(clog) << "fts/file traversing " << rps << ", scanned=" << fts_scanned
- << ", regex-skipped=" << fts_regex
- << ", cached=" << fts_cached << ", debuginfo=" << fts_debuginfo
- << ", executable=" << fts_executable << ", source=" << fts_sourcefiles << endl;
- }
- catch (const reportable_exception& e)
- {
- e.report(clog);
- }
- }
- fts_close (fts);
+ // register the dwarfsrc name in the interning table too
+ ps_upsert_files
+ .reset()
+ .bind(1, dwarfsrc)
+ .step_ok_done();
- gettimeofday (&tv_end, NULL);
- double deltas = (tv_end.tv_sec - tv_start.tv_sec) + (tv_end.tv_usec - tv_start.tv_usec)*0.000001;
+ ps_upsert_s
+ .reset()
+ .bind(1, buildid)
+ .bind(2, dwarfsrc)
+ .bind(3, srps)
+ .bind(4, sfs.st_mtime)
+ .step_ok_done();
- obatched(clog) << "fts/file traversed " << dir << " in " << deltas << "s, scanned=" << fts_scanned
- << ", regex-skipped=" << fts_regex
- << ", cached=" << fts_cached << ", debuginfo=" << fts_debuginfo
- << ", executable=" << fts_executable << ", source=" << fts_sourcefiles << endl;
-}
+ // PR25548: also store canonicalized source path
+ string dwarfsrc_canon = canon_pathname (dwarfsrc);
+ if (dwarfsrc_canon != dwarfsrc)
+ {
+ if (verbose > 3)
+ obatched(clog) << "canonicalized src=" << dwarfsrc << " alias=" << dwarfsrc_canon << endl;
+ ps_upsert_files
+ .reset()
+ .bind(1, dwarfsrc_canon)
+ .step_ok_done();
-static void*
-thread_main_scan_source_file_path (void* arg)
-{
- string dir = string((const char*) arg);
+ ps_upsert_s
+ .reset()
+ .bind(1, buildid)
+ .bind(2, dwarfsrc_canon)
+ .bind(3, srps)
+ .bind(4, sfs.st_mtime)
+ .step_ok_done();
+ }
- unsigned rescan_timer = 0;
- sig_atomic_t forced_rescan_count = 0;
- set_metric("thread_timer_max", "file", dir, rescan_s);
- set_metric("thread_tid", "file", dir, tid());
- while (! interrupted)
- {
- set_metric("thread_timer", "file", dir, rescan_timer);
- set_metric("thread_forced_total", "file", dir, forced_rescan_count);
- if (rescan_s && rescan_timer > rescan_s)
- rescan_timer = 0;
- if (sigusr1 != forced_rescan_count)
- {
- forced_rescan_count = sigusr1;
- rescan_timer = 0;
+ inc_metric("found_sourcerefs_total","source","files");
}
- if (rescan_timer == 0)
- try
- {
- set_metric("thread_working", "file", dir, time(NULL));
- inc_metric("thread_work_total", "file", dir);
- scan_source_file_path (dir);
- set_metric("thread_working", "file", dir, 0);
- }
- catch (const sqlite_exception& e)
- {
- obatched(cerr) << e.message << endl;
- }
- sleep (1);
- rescan_timer ++;
}
- return 0;
+ ps_scan_done
+ .reset()
+ .bind(1, rps)
+ .bind(2, st.st_mtime)
+ .bind(3, st.st_size)
+ .step_ok_done();
+
+ if (verbose > 2)
+ obatched(clog) << "recorded buildid=" << buildid << " file=" << rps
+ << " mtime=" << st.st_mtime << " atype="
+ << (executable_p ? "E" : "")
+ << (debuginfo_p ? "D" : "") << endl;
}
-////////////////////////////////////////////////////////////////////////
-
-// Analyze given *.rpm file of given age; record buildids / exec/debuginfo-ness of its
+// Analyze given archive file of given age; record buildids / exec/debuginfo-ness of its
// constituent files with given upsert statements.
static void
-rpm_classify (const string& rps, sqlite_ps& ps_upsert_buildids, sqlite_ps& ps_upsert_files,
- sqlite_ps& ps_upsert_de, sqlite_ps& ps_upsert_sref, sqlite_ps& ps_upsert_sdef,
- time_t mtime,
- unsigned& fts_executable, unsigned& fts_debuginfo, unsigned& fts_sref, unsigned& fts_sdef,
- bool& fts_sref_complete_p)
+archive_classify (const string& rps, string& archive_extension,
+ sqlite_ps& ps_upsert_buildids, sqlite_ps& ps_upsert_files,
+ sqlite_ps& ps_upsert_de, sqlite_ps& ps_upsert_sref, sqlite_ps& ps_upsert_sdef,
+ time_t mtime,
+ unsigned& fts_executable, unsigned& fts_debuginfo, unsigned& fts_sref, unsigned& fts_sdef,
+ bool& fts_sref_complete_p)
{
- string popen_cmd = string("rpm2cpio " + shell_escape(rps));
- FILE* fp = popen (popen_cmd.c_str(), "r"); // "e" O_CLOEXEC?
- if (fp == NULL)
- throw libc_exception (errno, string("popen ") + popen_cmd);
- defer_dtor<FILE*,int> fp_closer (fp, pclose);
+ string archive_decoder = "/dev/null";
+ for (auto&& arch : scan_archives)
+ if (string_endswith(rps, arch.first))
+ {
+ archive_extension = arch.first;
+ archive_decoder = arch.second;
+ }
+
+ FILE* fp;
+ defer_dtor<FILE*,int>::dtor_fn dfn;
+ if (archive_decoder != "cat")
+ {
+ string popen_cmd = archive_decoder + " " + shell_escape(rps);
+ fp = popen (popen_cmd.c_str(), "r"); // "e" O_CLOEXEC?
+ dfn = pclose;
+ if (fp == NULL)
+ throw libc_exception (errno, string("popen ") + popen_cmd);
+ }
+ else
+ {
+ fp = fopen (rps.c_str(), "r");
+ dfn = fclose;
+ if (fp == NULL)
+ throw libc_exception (errno, string("fopen ") + rps);
+ }
+ defer_dtor<FILE*,int> fp_closer (fp, dfn);
struct archive *a;
a = archive_read_new();
@@ -1879,19 +2342,19 @@ rpm_classify (const string& rps, sqlite_ps& ps_upsert_buildids, sqlite_ps& ps_up
throw archive_exception("cannot create archive reader");
defer_dtor<struct archive*,int> archive_closer (a, archive_read_free);
- int rc = archive_read_support_format_cpio(a);
+ int rc = archive_read_support_format_all(a);
if (rc != ARCHIVE_OK)
- throw archive_exception(a, "cannot select cpio format");
+ throw archive_exception(a, "cannot select all formats");
rc = archive_read_support_filter_all(a);
if (rc != ARCHIVE_OK)
throw archive_exception(a, "cannot select all filters");
rc = archive_read_open_FILE (a, fp);
if (rc != ARCHIVE_OK)
- throw archive_exception(a, "cannot open archive from rpm2cpio pipe");
+ throw archive_exception(a, "cannot open archive from pipe");
if (verbose > 3)
- obatched(clog) << "rpm2cpio|libarchive scanning " << rps << endl;
+ obatched(clog) << "libarchive scanning " << rps << endl;
while(1) // parse cpio archive entries
{
@@ -1905,17 +2368,14 @@ rpm_classify (const string& rps, sqlite_ps& ps_upsert_buildids, sqlite_ps& ps_up
if (! S_ISREG(archive_entry_mode (e))) // skip non-files completely
continue;
- string fn = archive_entry_pathname (e);
- if (fn.size() > 1 && fn[0] == '.')
- fn = fn.substr(1); // trim off the leading '.'
+ string fn = canonicalized_archive_entry_pathname (e);
if (verbose > 3)
- obatched(clog) << "rpm2cpio|libarchive checking " << fn << endl;
+ obatched(clog) << "libarchive checking " << fn << endl;
// extract this file to a temporary file
- const char *tmpdir_env = getenv ("TMPDIR") ?: "/tmp";
char* tmppath = NULL;
- rc = asprintf (&tmppath, "%s/debuginfod.XXXXXX", tmpdir_env);
+ rc = asprintf (&tmppath, "%s/debuginfod.XXXXXX", tmpdir.c_str());
if (rc < 0)
throw libc_exception (ENOMEM, "cannot allocate tmppath");
defer_dtor<void*,void> tmmpath_freer (tmppath, free);
@@ -1978,6 +2438,26 @@ rpm_classify (const string& rps, sqlite_ps& ps_upsert_buildids, sqlite_ps& ps_up
.bind(2, s)
.step_ok_done();
+ // PR25548: also store canonicalized source path
+ const string& dwarfsrc = s;
+ string dwarfsrc_canon = canon_pathname (dwarfsrc);
+ if (dwarfsrc_canon != dwarfsrc)
+ {
+ if (verbose > 3)
+ obatched(clog) << "canonicalized src=" << dwarfsrc << " alias=" << dwarfsrc_canon << endl;
+
+ ps_upsert_files
+ .reset()
+ .bind(1, dwarfsrc_canon)
+ .step_ok_done();
+
+ ps_upsert_sref
+ .reset()
+ .bind(1, buildid)
+ .bind(2, dwarfsrc_canon)
+ .step_ok_done();
+ }
+
fts_sref ++;
}
}
@@ -2027,250 +2507,351 @@ rpm_classify (const string& rps, sqlite_ps& ps_upsert_buildids, sqlite_ps& ps_up
-// scan for *.rpm files
+// scan for archive files such as .rpm
static void
-scan_source_rpm_path (const string& dir)
+scan_archive_file (const string& rps, const stat_t& st,
+ sqlite_ps& ps_upsert_buildids,
+ sqlite_ps& ps_upsert_files,
+ sqlite_ps& ps_upsert_de,
+ sqlite_ps& ps_upsert_sref,
+ sqlite_ps& ps_upsert_sdef,
+ sqlite_ps& ps_query,
+ sqlite_ps& ps_scan_done,
+ unsigned& fts_cached,
+ unsigned& fts_executable,
+ unsigned& fts_debuginfo,
+ unsigned& fts_sref,
+ unsigned& fts_sdef)
+{
+ /* See if we know of it already. */
+ int rc = ps_query
+ .reset()
+ .bind(1, rps)
+ .bind(2, st.st_mtime)
+ .step();
+ ps_query.reset();
+ if (rc == SQLITE_ROW) // i.e., a result, as opposed to DONE (no results)
+ // no need to recheck a file/version we already know
+ // specifically, no need to parse this archive again, since we already have
+ // it as a D or E or S record,
+ // (so is stored with buildid=NULL)
+ {
+ fts_cached ++;
+ return;
+ }
+
+ // intern the archive file name
+ ps_upsert_files
+ .reset()
+ .bind(1, rps)
+ .step_ok_done();
+
+ // extract the archive contents
+ unsigned my_fts_executable = 0, my_fts_debuginfo = 0, my_fts_sref = 0, my_fts_sdef = 0;
+ bool my_fts_sref_complete_p = true;
+ try
+ {
+ string archive_extension;
+ archive_classify (rps, archive_extension,
+ ps_upsert_buildids, ps_upsert_files,
+ ps_upsert_de, ps_upsert_sref, ps_upsert_sdef, // dalt
+ st.st_mtime,
+ my_fts_executable, my_fts_debuginfo, my_fts_sref, my_fts_sdef,
+ my_fts_sref_complete_p);
+ inc_metric ("scanned_total","source",archive_extension + " archive");
+ add_metric("found_debuginfo_total","source",archive_extension + " archive",
+ my_fts_debuginfo);
+ add_metric("found_executable_total","source",archive_extension + " archive",
+ my_fts_executable);
+ add_metric("found_sourcerefs_total","source",archive_extension + " archive",
+ my_fts_sref);
+ }
+ catch (const reportable_exception& e)
+ {
+ e.report(clog);
+ }
+
+ if (verbose > 2)
+ obatched(clog) << "scanned archive=" << rps
+ << " mtime=" << st.st_mtime
+ << " executables=" << my_fts_executable
+ << " debuginfos=" << my_fts_debuginfo
+ << " srefs=" << my_fts_sref
+ << " sdefs=" << my_fts_sdef
+ << endl;
+
+ fts_executable += my_fts_executable;
+ fts_debuginfo += my_fts_debuginfo;
+ fts_sref += my_fts_sref;
+ fts_sdef += my_fts_sdef;
+
+ if (my_fts_sref_complete_p) // leave incomplete?
+ ps_scan_done
+ .reset()
+ .bind(1, rps)
+ .bind(2, st.st_mtime)
+ .bind(3, st.st_size)
+ .step_ok_done();
+}
+
+
+
+////////////////////////////////////////////////////////////////////////
+
+
+
+// The thread that consumes file names off of the scanq. We hold
+// the persistent sqlite_ps's at this level and delegate file/archive
+// scanning to other functions.
+static void*
+thread_main_scanner (void* arg)
{
- obatched(clog) << "fts/rpm traversing " << dir << endl;
+ (void) arg;
+
+ // all the prepared statements fit to use, the _f_ set:
+ sqlite_ps ps_f_upsert_buildids (db, "file-buildids-intern", "insert or ignore into " BUILDIDS "_buildids VALUES (NULL, ?);");
+ sqlite_ps ps_f_upsert_files (db, "file-files-intern", "insert or ignore into " BUILDIDS "_files VALUES (NULL, ?);");
+ sqlite_ps ps_f_upsert_de (db, "file-de-upsert",
+ "insert or ignore into " BUILDIDS "_f_de "
+ "(buildid, debuginfo_p, executable_p, file, mtime) "
+ "values ((select id from " BUILDIDS "_buildids where hex = ?),"
+ " ?,?,"
+ " (select id from " BUILDIDS "_files where name = ?), ?);");
+ sqlite_ps ps_f_upsert_s (db, "file-s-upsert",
+ "insert or ignore into " BUILDIDS "_f_s "
+ "(buildid, artifactsrc, file, mtime) "
+ "values ((select id from " BUILDIDS "_buildids where hex = ?),"
+ " (select id from " BUILDIDS "_files where name = ?),"
+ " (select id from " BUILDIDS "_files where name = ?),"
+ " ?);");
+ sqlite_ps ps_f_query (db, "file-negativehit-find",
+ "select 1 from " BUILDIDS "_file_mtime_scanned where sourcetype = 'F' "
+ "and file = (select id from " BUILDIDS "_files where name = ?) and mtime = ?;");
+ sqlite_ps ps_f_scan_done (db, "file-scanned",
+ "insert or ignore into " BUILDIDS "_file_mtime_scanned (sourcetype, file, mtime, size)"
+ "values ('F', (select id from " BUILDIDS "_files where name = ?), ?, ?);");
- sqlite_ps ps_upsert_buildids (db, "rpm-buildid-intern", "insert or ignore into " BUILDIDS "_buildids VALUES (NULL, ?);");
- sqlite_ps ps_upsert_files (db, "rpm-file-intern", "insert or ignore into " BUILDIDS "_files VALUES (NULL, ?);");
- sqlite_ps ps_upsert_de (db, "rpm-de-insert",
+ // and now for the _r_ set
+ sqlite_ps ps_r_upsert_buildids (db, "rpm-buildid-intern", "insert or ignore into " BUILDIDS "_buildids VALUES (NULL, ?);");
+ sqlite_ps ps_r_upsert_files (db, "rpm-file-intern", "insert or ignore into " BUILDIDS "_files VALUES (NULL, ?);");
+ sqlite_ps ps_r_upsert_de (db, "rpm-de-insert",
"insert or ignore into " BUILDIDS "_r_de (buildid, debuginfo_p, executable_p, file, mtime, content) values ("
"(select id from " BUILDIDS "_buildids where hex = ?), ?, ?, "
"(select id from " BUILDIDS "_files where name = ?), ?, "
"(select id from " BUILDIDS "_files where name = ?));");
- sqlite_ps ps_upsert_sref (db, "rpm-sref-insert",
+ sqlite_ps ps_r_upsert_sref (db, "rpm-sref-insert",
"insert or ignore into " BUILDIDS "_r_sref (buildid, artifactsrc) values ("
"(select id from " BUILDIDS "_buildids where hex = ?), "
"(select id from " BUILDIDS "_files where name = ?));");
- sqlite_ps ps_upsert_sdef (db, "rpm-sdef-insert",
+ sqlite_ps ps_r_upsert_sdef (db, "rpm-sdef-insert",
"insert or ignore into " BUILDIDS "_r_sdef (file, mtime, content) values ("
"(select id from " BUILDIDS "_files where name = ?), ?,"
"(select id from " BUILDIDS "_files where name = ?));");
- sqlite_ps ps_query (db, "rpm-negativehit-query",
+ sqlite_ps ps_r_query (db, "rpm-negativehit-query",
"select 1 from " BUILDIDS "_file_mtime_scanned where "
"sourcetype = 'R' and file = (select id from " BUILDIDS "_files where name = ?) and mtime = ?;");
- sqlite_ps ps_scan_done (db, "rpm-scanned",
+ sqlite_ps ps_r_scan_done (db, "rpm-scanned",
"insert or ignore into " BUILDIDS "_file_mtime_scanned (sourcetype, file, mtime, size)"
"values ('R', (select id from " BUILDIDS "_files where name = ?), ?, ?);");
- char * const dirs[] = { (char*) dir.c_str(), NULL };
- struct timeval tv_start, tv_end;
- gettimeofday (&tv_start, NULL);
- unsigned fts_scanned=0, fts_regex=0, fts_cached=0, fts_debuginfo=0;
- unsigned fts_executable=0, fts_rpm = 0, fts_sref=0, fts_sdef=0;
+ unsigned fts_cached = 0, fts_executable = 0, fts_debuginfo = 0, fts_sourcefiles = 0;
+ unsigned fts_sref = 0, fts_sdef = 0;
- FTS *fts = fts_open (dirs,
- (traverse_logical ? FTS_LOGICAL : FTS_PHYSICAL|FTS_XDEV)
- | FTS_NOCHDIR /* multithreaded */,
- NULL);
- if (fts == NULL)
- {
- obatched(cerr) << "cannot fts_open " << dir << endl;
- return;
- }
-
- FTSENT *f;
- while ((f = fts_read (fts)) != NULL)
+ add_metric("thread_count", "role", "scan", 1);
+ add_metric("thread_busy", "role", "scan", 1);
+ while (! interrupted)
{
- semaphore_borrower handle_one_file (scan_concurrency_sem);
-
- fts_scanned ++;
- if (interrupted)
- break;
+ scan_payload p;
- if (verbose > 2)
- obatched(clog) << "fts/rpm traversing " << f->fts_path << endl;
+ add_metric("thread_busy", "role", "scan", -1);
+ bool gotone = scanq.wait_front(p);
+ add_metric("thread_busy", "role", "scan", 1);
+ if (! gotone) continue; // or break
try
{
- /* Found a file. Convert it to an absolute path, so
- the buildid database does not have relative path
- names that are unresolvable from a subsequent run
- in a different cwd. */
- char *rp = realpath(f->fts_path, NULL);
- if (rp == NULL)
- continue; // ignore dangling symlink or such
- string rps = string(rp);
- free (rp);
-
- bool ri = !regexec (&file_include_regex, rps.c_str(), 0, 0, 0);
- bool rx = !regexec (&file_exclude_regex, rps.c_str(), 0, 0, 0);
- if (!ri || rx)
- {
- if (verbose > 3)
- obatched(clog) << "fts/rpm skipped by regex " << (!ri ? "I" : "") << (rx ? "X" : "") << endl;
- fts_regex ++;
- continue;
- }
+ bool scan_archive = false;
+ for (auto&& arch : scan_archives)
+ if (string_endswith(p.first, arch.first))
+ scan_archive = true;
+
+ if (scan_archive)
+ scan_archive_file (p.first, p.second,
+ ps_r_upsert_buildids,
+ ps_r_upsert_files,
+ ps_r_upsert_de,
+ ps_r_upsert_sref,
+ ps_r_upsert_sdef,
+ ps_r_query,
+ ps_r_scan_done,
+ fts_cached,
+ fts_executable,
+ fts_debuginfo,
+ fts_sref,
+ fts_sdef);
+
+ if (scan_files) // NB: maybe "else if" ?
+ scan_source_file (p.first, p.second,
+ ps_f_upsert_buildids,
+ ps_f_upsert_files,
+ ps_f_upsert_de,
+ ps_f_upsert_s,
+ ps_f_query,
+ ps_f_scan_done,
+ fts_cached, fts_executable, fts_debuginfo, fts_sourcefiles);
+ }
+ catch (const reportable_exception& e)
+ {
+ e.report(cerr);
+ }
- switch (f->fts_info)
- {
- case FTS_D:
- break;
+ inc_metric("thread_work_total", "role","scan");
+ }
- case FTS_DP:
- break;
+ add_metric("thread_busy", "role", "scan", -1);
+ return 0;
+}
- case FTS_F:
- {
- // heuristic: reject if file name does not end with ".rpm"
- // (alternative: try opening with librpm etc., caching)
- string suffix = ".rpm";
- if (rps.size() < suffix.size() ||
- rps.substr(rps.size()-suffix.size()) != suffix)
- continue;
- fts_rpm ++;
-
- /* See if we know of it already. */
- int rc = ps_query
- .reset()
- .bind(1, rps)
- .bind(2, f->fts_statp->st_mtime)
- .step();
- ps_query.reset();
- if (rc == SQLITE_ROW) // i.e., a result, as opposed to DONE (no results)
- // no need to recheck a file/version we already know
- // specifically, no need to parse this rpm again, since we already have
- // it as a D or E or S record,
- // (so is stored with buildid=NULL)
- {
- fts_cached ++;
- continue;
- }
-
- // intern the rpm file name
- ps_upsert_files
- .reset()
- .bind(1, rps)
- .step_ok_done();
-
- // extract the rpm contents via popen("rpm2cpio") | libarchive | loop-of-elf_classify()
- unsigned my_fts_executable = 0, my_fts_debuginfo = 0, my_fts_sref = 0, my_fts_sdef = 0;
- bool my_fts_sref_complete_p = true;
- try
- {
- rpm_classify (rps,
- ps_upsert_buildids, ps_upsert_files,
- ps_upsert_de, ps_upsert_sref, ps_upsert_sdef, // dalt
- f->fts_statp->st_mtime,
- my_fts_executable, my_fts_debuginfo, my_fts_sref, my_fts_sdef,
- my_fts_sref_complete_p);
- inc_metric ("scanned_total","source","rpm");
- add_metric("found_debuginfo_total","source","rpm",
- my_fts_debuginfo);
- add_metric("found_executable_total","source","rpm",
- my_fts_executable);
- add_metric("found_sourcerefs_total","source","rpm",
- my_fts_sref);
- }
- catch (const reportable_exception& e)
- {
- e.report(clog);
- }
-
- if (verbose > 2)
- obatched(clog) << "scanned rpm=" << rps
- << " mtime=" << f->fts_statp->st_mtime
- << " executables=" << my_fts_executable
- << " debuginfos=" << my_fts_debuginfo
- << " srefs=" << my_fts_sref
- << " sdefs=" << my_fts_sdef
- << endl;
-
- fts_executable += my_fts_executable;
- fts_debuginfo += my_fts_debuginfo;
- fts_sref += my_fts_sref;
- fts_sdef += my_fts_sdef;
-
- if (my_fts_sref_complete_p) // leave incomplete?
- ps_scan_done
- .reset()
- .bind(1, rps)
- .bind(2, f->fts_statp->st_mtime)
- .bind(3, f->fts_statp->st_size)
- .step_ok_done();
- }
- break;
- case FTS_ERR:
- case FTS_NS:
- throw libc_exception(f->fts_errno, string("fts/rpm traversal ") + string(f->fts_path));
- default:
- case FTS_SL: /* ignore symlinks; seen in non-L mode only */
- break;
- }
+// The thread that traverses all the source_paths and enqueues all the
+// matching files into the file/archive scan queue.
+static void
+scan_source_paths()
+{
+ // NB: fedora 31 glibc/fts(3) crashes inside fts_read() on empty
+ // path list.
+ if (source_paths.empty())
+ return;
- if ((verbose && f->fts_info == FTS_DP) ||
- (verbose > 1 && f->fts_info == FTS_F))
- obatched(clog) << "fts/rpm traversing " << rps << ", scanned=" << fts_scanned
- << ", regex-skipped=" << fts_regex
- << ", rpm=" << fts_rpm << ", cached=" << fts_cached << ", debuginfo=" << fts_debuginfo
- << ", executable=" << fts_executable
- << ", sourcerefs=" << fts_sref << ", sourcedefs=" << fts_sdef << endl;
- }
- catch (const reportable_exception& e)
+ // Turn the source_paths into an fts(3)-compatible char**. Since
+ // source_paths[] does not change after argv processing, the
+ // c_str()'s are safe to keep around awile.
+ vector<const char *> sps;
+ for (auto&& sp: source_paths)
+ sps.push_back(sp.c_str());
+ sps.push_back(NULL);
+
+ FTS *fts = fts_open ((char * const *)sps.data(),
+ (traverse_logical ? FTS_LOGICAL : FTS_PHYSICAL|FTS_XDEV)
+ | FTS_NOCHDIR /* multithreaded */,
+ NULL);
+ if (fts == NULL)
+ throw libc_exception(errno, "cannot fts_open");
+ defer_dtor<FTS*,int> fts_cleanup (fts, fts_close);
+
+ struct timeval tv_start, tv_end;
+ gettimeofday (&tv_start, NULL);
+ unsigned fts_scanned = 0, fts_regex = 0;
+
+ FTSENT *f;
+ while ((f = fts_read (fts)) != NULL)
+ {
+ if (interrupted) break;
+
+ fts_scanned ++;
+
+ if (verbose > 2)
+ obatched(clog) << "fts traversing " << f->fts_path << endl;
+
+ /* Found a file. Convert it to an absolute path, so
+ the buildid database does not have relative path
+ names that are unresolvable from a subsequent run
+ in a different cwd. */
+ char *rp = realpath(f->fts_path, NULL);
+ if (rp == NULL)
+ continue; // ignore dangling symlink or such
+ string rps = string(rp);
+ free (rp);
+
+ bool ri = !regexec (&file_include_regex, rps.c_str(), 0, 0, 0);
+ bool rx = !regexec (&file_exclude_regex, rps.c_str(), 0, 0, 0);
+ if (!ri || rx)
+ {
+ if (verbose > 3)
+ obatched(clog) << "fts skipped by regex " << (!ri ? "I" : "") << (rx ? "X" : "") << endl;
+ fts_regex ++;
+ continue;
+ }
+
+ switch (f->fts_info)
+ {
+ case FTS_F:
+ scanq.push_back (make_pair(rps, *f->fts_statp));
+ break;
+
+ case FTS_ERR:
+ case FTS_NS:
+ // report on some types of errors because they may reflect fixable misconfiguration
{
- e.report(clog);
+ auto x = libc_exception(f->fts_errno, string("fts traversal ") + string(f->fts_path));
+ x.report(cerr);
}
- }
- fts_close (fts);
+ break;
+ default:
+ ;
+ /* ignore */
+ }
+ }
gettimeofday (&tv_end, NULL);
double deltas = (tv_end.tv_sec - tv_start.tv_sec) + (tv_end.tv_usec - tv_start.tv_usec)*0.000001;
- obatched(clog) << "fts/rpm traversed " << dir << " in " << deltas << "s, scanned=" << fts_scanned
- << ", regex-skipped=" << fts_regex
- << ", rpm=" << fts_rpm << ", cached=" << fts_cached << ", debuginfo=" << fts_debuginfo
- << ", executable=" << fts_executable
- << ", sourcerefs=" << fts_sref << ", sourcedefs=" << fts_sdef << endl;
+ obatched(clog) << "fts traversed source paths in " << deltas << "s, scanned=" << fts_scanned
+ << ", regex-skipped=" << fts_regex << endl;
}
-
static void*
-thread_main_scan_source_rpm_path (void* arg)
+thread_main_fts_source_paths (void* arg)
{
- string dir = string((const char*) arg);
+ (void) arg; // ignore; we operate on global data
- unsigned rescan_timer = 0;
sig_atomic_t forced_rescan_count = 0;
- set_metric("thread_timer_max", "rpm", dir, rescan_s);
- set_metric("thread_tid", "rpm", dir, tid());
+ set_metric("thread_tid", "role","traverse", tid());
+ add_metric("thread_count", "role", "traverse", 1);
+
+ time_t last_rescan = 0;
+
while (! interrupted)
{
- set_metric("thread_timer", "rpm", dir, rescan_timer);
- set_metric("thread_forced_total", "rpm", dir, forced_rescan_count);
- if (rescan_s && rescan_timer > rescan_s)
- rescan_timer = 0;
+ sleep (1);
+ scanq.wait_idle(); // don't start a new traversal while scanners haven't finished the job
+ scanq.done_idle(); // release the hounds
+ if (interrupted) break;
+
+ time_t now = time(NULL);
+ bool rescan_now = false;
+ if (last_rescan == 0) // at least one initial rescan is documented even for -t0
+ rescan_now = true;
+ if (rescan_s > 0 && (long)now > (long)(last_rescan + rescan_s))
+ rescan_now = true;
if (sigusr1 != forced_rescan_count)
{
forced_rescan_count = sigusr1;
- rescan_timer = 0;
+ rescan_now = true;
}
- if (rescan_timer == 0)
+ if (rescan_now)
try
{
- set_metric("thread_working", "rpm", dir, time(NULL));
- inc_metric("thread_work_total", "rpm", dir);
- scan_source_rpm_path (dir);
- set_metric("thread_working", "rpm", dir, 0);
+ set_metric("thread_busy", "role","traverse", 1);
+ scan_source_paths();
+ last_rescan = time(NULL); // NB: now was before scanning
+ inc_metric("thread_work_total", "role","traverse");
+ set_metric("thread_busy", "role","traverse", 0);
}
- catch (const sqlite_exception& e)
+ catch (const reportable_exception& e)
{
- obatched(cerr) << e.message << endl;
+ e.report(cerr);
}
- sleep (1);
- rescan_timer ++;
}
return 0;
}
+
////////////////////////////////////////////////////////////////////////
static void
@@ -2359,6 +2940,9 @@ void groom()
sqlite3_db_release_memory(db); // shrink the process if possible
+ fdcache.limit(0,0); // release the fdcache contents
+ fdcache.limit(fdcache_fds,fdcache_mbs); // restore status quo parameters
+
gettimeofday (&tv_end, NULL);
double deltas = (tv_end.tv_sec - tv_start.tv_sec) + (tv_end.tv_usec - tv_start.tv_usec)*0.000001;
@@ -2369,35 +2953,44 @@ void groom()
static void*
thread_main_groom (void* /*arg*/)
{
- unsigned groom_timer = 0;
sig_atomic_t forced_groom_count = 0;
- set_metric("thread_timer_max", "role", "groom", groom_s);
set_metric("thread_tid", "role", "groom", tid());
- while (! interrupted)
+ add_metric("thread_count", "role", "groom", 1);
+
+ time_t last_groom = 0;
+
+ while (1)
{
- set_metric("thread_timer", "role", "groom", groom_timer);
- set_metric("thread_forced_total", "role", "groom", forced_groom_count);
- if (groom_s && groom_timer > groom_s)
- groom_timer = 0;
+ sleep (1);
+ scanq.wait_idle(); // PR25394: block scanners during grooming!
+ if (interrupted) break;
+
+ time_t now = time(NULL);
+ bool groom_now = false;
+ if (last_groom == 0) // at least one initial groom is documented even for -g0
+ groom_now = true;
+ if (groom_s > 0 && (long)now > (long)(last_groom + groom_s))
+ groom_now = true;
if (sigusr2 != forced_groom_count)
{
forced_groom_count = sigusr2;
- groom_timer = 0;
+ groom_now = true;
}
- if (groom_timer == 0)
+ if (groom_now)
try
{
- set_metric("thread_working", "role", "groom", time(NULL));
- inc_metric("thread_work_total", "role", "groom");
+ set_metric("thread_busy", "role", "groom", 1);
groom ();
- set_metric("thread_working", "role", "groom", 0);
+ last_groom = time(NULL); // NB: now was before grooming
+ inc_metric("thread_work_total", "role", "groom");
+ set_metric("thread_busy", "role", "groom", 0);
}
catch (const sqlite_exception& e)
{
obatched(cerr) << e.message << endl;
}
- sleep (1);
- groom_timer ++;
+
+ scanq.done_idle();
}
return 0;
@@ -2473,6 +3066,8 @@ main (int argc, char *argv[])
/* Tell the library which version we are expecting. */
elf_version (EV_CURRENT);
+ tmpdir = string(getenv("TMPDIR") ?: "/tmp");
+
/* Set computed default values. */
db_path = string(getenv("HOME") ?: "/") + string("/.debuginfod.sqlite"); /* XDG? */
int rc = regcomp (& file_include_regex, ".*", REG_EXTENDED|REG_NOSUB); // match everything
@@ -2482,6 +3077,16 @@ main (int argc, char *argv[])
if (rc != 0)
error (EXIT_FAILURE, 0, "regcomp failure: %d", rc);
+ // default parameters for fdcache are computed from system stats
+ struct statfs sfs;
+ rc = statfs(tmpdir.c_str(), &sfs);
+ if (rc < 0)
+ fdcache_mbs = 1024; // 1 gigabyte
+ else
+ fdcache_mbs = sfs.f_bavail * sfs.f_bsize / 1024 / 1024 / 4; // 25% of free space
+ fdcache_prefetch = 64; // guesstimate storage is this much less costly than re-decompression
+ fdcache_fds = (concurrency + fdcache_prefetch) * 2;
+
/* Parse and process arguments. */
int remaining;
argp_program_version_hook = print_version; // this works
@@ -2490,8 +3095,10 @@ main (int argc, char *argv[])
error (EXIT_FAILURE, 0,
"unexpected argument: %s", argv[remaining]);
- if (!scan_rpms && !scan_files && source_paths.size()>0)
- obatched(clog) << "warning: without -F and/or -R, ignoring PATHs" << endl;
+ 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);
(void) signal (SIGPIPE, SIG_IGN); // microhttpd can generate it incidentally, ignore
(void) signal (SIGINT, signal_handler); // ^C
@@ -2500,9 +3107,6 @@ main (int argc, char *argv[])
(void) signal (SIGUSR1, sigusr1_handler); // end-user
(void) signal (SIGUSR2, sigusr2_handler); // end-user
- // do this before any threads start
- scan_concurrency_sem = new semaphore(concurrency);
-
/* Get database ready. */
rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE
|SQLITE_OPEN_CREATE
@@ -2611,64 +3215,68 @@ main (int argc, char *argv[])
if (maxigroom)
obatched(clog) << "maxigroomed database" << endl;
-
obatched(clog) << "search concurrency " << concurrency << endl;
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) << "groom time " << groom_s << endl;
+ if (scan_archives.size()>0)
+ {
+ obatched ob(clog);
+ auto& o = ob << "scanning archive types ";
+ for (auto&& arch : scan_archives)
+ o << arch.first << "(" << arch.second << ") ";
+ o << endl;
+ }
const char* du = getenv(DEBUGINFOD_URLS_ENV_VAR);
if (du && du[0] != '\0') // set to non-empty string?
obatched(clog) << "upstream debuginfod servers: " << du << endl;
- vector<pthread_t> source_file_scanner_threads;
- vector<pthread_t> source_rpm_scanner_threads;
- pthread_t groom_thread;
+ vector<pthread_t> all_threads;
- rc = pthread_create (& groom_thread, NULL, thread_main_groom, NULL);
+ pthread_t pt;
+ rc = pthread_create (& pt, NULL, thread_main_groom, NULL);
if (rc < 0)
error (0, 0, "warning: cannot spawn thread (%d) to groom database\n", rc);
-
- if (scan_files) for (auto&& it : source_paths)
- {
- pthread_t pt;
- rc = pthread_create (& pt, NULL, thread_main_scan_source_file_path, (void*) it.c_str());
- if (rc < 0)
- error (0, 0, "warning: cannot spawn thread (%d) to scan source files %s\n", rc, it.c_str());
- else
- source_file_scanner_threads.push_back(pt);
- }
+ else
+ all_threads.push_back(pt);
- if (scan_rpms) for (auto&& it : source_paths)
+ if (scan_files || scan_archives.size() > 0)
{
- pthread_t pt;
- rc = pthread_create (& pt, NULL, thread_main_scan_source_rpm_path, (void*) it.c_str());
+ pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL);
if (rc < 0)
- error (0, 0, "warning: cannot spawn thread (%d) to scan source rpms %s\n", rc, it.c_str());
- else
- source_rpm_scanner_threads.push_back(pt);
+ error (0, 0, "warning: cannot spawn thread (%d) to traverse source paths\n", rc);
+ all_threads.push_back(pt);
+ for (unsigned i=0; i<concurrency; i++)
+ {
+ pthread_create (& pt, NULL, thread_main_scanner, NULL);
+ if (rc < 0)
+ error (0, 0, "warning: cannot spawn thread (%d) to scan source files / archives\n", rc);
+ all_threads.push_back(pt);
+ }
}
/* Trivial main loop! */
set_metric("ready", 1);
while (! interrupted)
pause ();
+ scanq.nuke(); // wake up any remaining scanq-related threads, let them die
set_metric("ready", 0);
if (verbose)
obatched(clog) << "stopping" << endl;
- /* Join any source scanning threads. */
- for (auto&& it : source_file_scanner_threads)
- pthread_join (it, NULL);
- for (auto&& it : source_rpm_scanner_threads)
+ /* Join all our threads. */
+ for (auto&& it : all_threads)
pthread_join (it, NULL);
- pthread_join (groom_thread, NULL);
-
+
/* Stop all the web service threads. */
if (d4) MHD_stop_daemon (d4);
if (d6) MHD_stop_daemon (d6);
/* With all threads known dead, we can clean up the global resources. */
- delete scan_concurrency_sem;
rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_CLEANUP_DDL, NULL, NULL, NULL);
if (rc != SQLITE_OK)
{
diff --git a/debuginfod/debuginfod.h b/debuginfod/debuginfod.h
index 6b1b1cc3..8d90838b 100644
--- a/debuginfod/debuginfod.h
+++ b/debuginfod/debuginfod.h
@@ -1,5 +1,5 @@
/* External declarations for the libdebuginfod client library.
- Copyright (C) 2019 Red Hat, Inc.
+ 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
@@ -33,6 +33,7 @@
#define DEBUGINFOD_URLS_ENV_VAR "DEBUGINFOD_URLS"
#define DEBUGINFOD_CACHE_PATH_ENV_VAR "DEBUGINFOD_CACHE_PATH"
#define DEBUGINFOD_TIMEOUT_ENV_VAR "DEBUGINFOD_TIMEOUT"
+#define DEBUGINFOD_PROGRESS_ENV_VAR "DEBUGINFOD_PROGRESS"
/* Handle for debuginfod-client connection. */
typedef struct debuginfod_client debuginfod_client;
@@ -47,13 +48,13 @@ debuginfod_client *debuginfod_begin (void);
/* Query the urls contained in $DEBUGINFOD_URLS for a file with
the specified type and build id. If build_id_len == 0, the
build_id is supplied as a lowercase hexadecimal string; otherwise
- it is a binary blob of given legnth.
+ it is a binary blob of given length.
If successful, return a file descriptor to the target, otherwise
return a posix error code. If successful, set *path to a
strdup'd copy of the name of the same file in the cache.
Caller must free() it later. */
-
+
int debuginfod_find_debuginfo (debuginfod_client *client,
const unsigned char *build_id,
int build_id_len,
@@ -74,6 +75,18 @@ typedef int (*debuginfod_progressfn_t)(debuginfod_client *c, long a, long b);
void debuginfod_set_progressfn(debuginfod_client *c,
debuginfod_progressfn_t fn);
+/* Set the user parameter. */
+void debuginfod_set_user_data (debuginfod_client *client, void *value);
+
+/* Get the user parameter. */
+void* debuginfod_get_user_data (debuginfod_client *client);
+
+/* Get the current or last active URL, if known. */
+const char* debuginfod_get_url (debuginfod_client *client);
+
+/* Add an outgoing HTTP request "Header: Value". Copies string. */
+int debuginfod_add_http_header (debuginfod_client *client, const char* header);
+
/* Release debuginfod client connection context handle. */
void debuginfod_end (debuginfod_client *client);
diff --git a/debuginfod/libdebuginfod.map b/debuginfod/libdebuginfod.map
index 0d26f93e..b8edfb01 100644
--- a/debuginfod/libdebuginfod.map
+++ b/debuginfod/libdebuginfod.map
@@ -8,3 +8,10 @@ ELFUTILS_0.178 {
debuginfod_find_source;
debuginfod_set_progressfn;
} ELFUTILS_0;
+ELFUTILS_0.179 {
+ global:
+ debuginfod_set_user_data;
+ debuginfod_get_user_data;
+ debuginfod_get_url;
+ debuginfod_add_http_header;
+};
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 00a61ac3..f598b7f2 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,92 @@
+2020-03-29 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod_find_debuginfo.3 (HTTP HEADER): Document the expected
+ header format and purpose.
+
+2020-03-28 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.8: Document valid --port=NUM range, excludes 0.
+
+2020-03-27 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-find.1: Document /path/-based buildid passing.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod_add_http_header.3: New function, documented ...
+ * debuginfod_find_debuginfo.3: ... here.
+ * Makefile.am (notrans_dist_*_man3): Add it.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.8 (-R): Note zstd compression complications
+ and workaround.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-find.1, debuginfod_find_debuginfo.3: Document
+ source path canonicalization.
+
+2020-03-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod_get_url.3: New function, documented ...
+ * debuginfod_find_debuginfo.3: ... here.
+ * Makefile.am (notrans_dist_*_man3): Add it.
+
+2020-03-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod_get_user.3, _set_user.3: New functions, documented ...
+ * debuginfod_find_debuginfo.3: ... here.
+ * Makefile.am (notrans_dist_*_man3): List all debuginfod .3 functions.
+
+2020-02-25 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.8: Note that -R works just like -Z.rpm .
+
+2020-02-25 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.8: Document new --fdcache-prefetch option.
+
+2020-02-05 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.8: Document new -Z flag and tweak other bits.
+
+2020-01-10 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod_find_debuginfo.3 (DEBUGINFOD_PROGRESS): Mention progress
+ output goes to stderr.
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com
+
+ * debuginfod.8: Document --fdcache-fds and --fdcache-mbs opts.
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.8: Rework sections dealing with traversal/scanning,
+ explaining new threading model.
+
+2020-01-02 Mark Wielaard <mark@klomp.org>
+
+ * debuginfod.8 (DEBUGINFOD_TIMEOUT): Document as seconds to
+ provide 100K, default 90.
+ * debuginfod-find.1 (DEBUGINFOD_TIMEOUT): Likewise.
+ * debuginfod_find_debuginfo.3 (DEBUGINFOD_TIMEOUT): Likewise.
+
+2019-12-22 Frank Ch. Eigler <fche@redhat.com
+
+ * debuginfod.8: Add -U (DEB) flag, generalize RPM to "archive".
+
+2019-12-04 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-find.1: Bump default timeout to 30.
+ * debuginfod_find_debuginfo.3: Ditto.
+ Document $DEBUGINFOD_PROGRESS.
+
+2019-11-26 Frank Ch. Eigler <fche@redhat.com>
+ Aaron Merey <amerey@redhat.com>
+
+ * debuginfod.8, find-debuginfo.1, debuginfod_*.3: New files.
+
2019-09-02 Mark Wielaard <mark@klomp.org>
* readelf.1 (symbols): Add optional section name.
diff --git a/doc/Makefile.am b/doc/Makefile.am
index b5db01ff..f0c7e55d 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,7 +1,7 @@
## Process this file with automake to create Makefile.in
## Configure input file for elfutils.
##
-## Copyright (C) 1996-2001, 2002, 2005, 2019 Red Hat, Inc.
+## Copyright (C) 1996-2001, 2002, 2005, 2019-2020 Red Hat, Inc.
## This file is part of elfutils.
##
## This file is free software; you can redistribute it and/or modify
@@ -24,7 +24,16 @@ notrans_dist_man1_MANS=
if DEBUGINFOD
notrans_dist_man8_MANS += debuginfod.8
-notrans_dist_man3_MANS += debuginfod_find_debuginfo.3 debuginfod_find_source.3 debuginfod_find_executable.3 debuginfod_set_progressfn.3
+notrans_dist_man3_MANS += debuginfod_add_http_header.3
+notrans_dist_man3_MANS += debuginfod_begin.3
+notrans_dist_man3_MANS += debuginfod_end.3
+notrans_dist_man3_MANS += debuginfod_find_debuginfo.3
+notrans_dist_man3_MANS += debuginfod_find_executable.3
+notrans_dist_man3_MANS += debuginfod_find_source.3
+notrans_dist_man3_MANS += debuginfod_get_user_data.3
+notrans_dist_man3_MANS += debuginfod_get_url.3
+notrans_dist_man3_MANS += debuginfod_set_progressfn.3
+notrans_dist_man3_MANS += debuginfod_set_user_data.3
notrans_dist_man1_MANS += debuginfod-find.1
endif
diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1
index a759ecba..aeb1cb12 100644
--- a/doc/debuginfod-find.1
+++ b/doc/debuginfod-find.1
@@ -19,10 +19,11 @@ debuginfod-find \- request debuginfo-related data
.SH SYNOPSIS
.B debuginfod-find [\fIOPTION\fP]... debuginfo \fIBUILDID\fP
-
+.B debuginfod-find [\fIOPTION\fP]... debuginfo \fIPATH\fP
.B debuginfod-find [\fIOPTION\fP]... executable \fIBUILDID\fP
-
+.B debuginfod-find [\fIOPTION\fP]... executable \fIPATH\fP
.B debuginfod-find [\fIOPTION\fP]... source \fIBUILDID\fP \fI/FILENAME\fP
+.B debuginfod-find [\fIOPTION\fP]... source \fIPATH\fP \fI/FILENAME\fP
.SH DESCRIPTION
\fBdebuginfod-find\fP queries one or more \fBdebuginfod\fP servers for
@@ -52,6 +53,14 @@ Then the hexadecimal BUILDID is simply:
8713b9c3fb8a720137a4a08b325905c7aaf8429d
.ESAMPLE
+In place of the hexadecimal \fIBUILDID\fP, debuginfod-find also
+accepts a path name to to an ELF binary, from which it extracts the
+buildid. In this case, ensure the file name has some character other
+than \fB[0-9a-f]\fP. Files ambiguously named files like
+"\fBdeadbeef\fP" can be passed with a \fB./deadbeef\fP extra path
+component.
+
+
.SS debuginfo \fIBUILDID\fP
If the given buildid is known to a server, this request will result
@@ -78,10 +87,11 @@ is made up of multiple CUs. Therefore, to disambiguate, debuginfod
expects source queries to prefix relative path names with the CU
compilation-directory, followed by a mandatory "/".
-Note: the user should not elide \fB../\fP or \fB/./\fP or extraneous
-\fB///\fP sorts of path components in the directory names, because if
-this is how those names appear in the DWARF files, that is what
-debuginfod needs to see too.
+Note: the caller may or may not elide \fB../\fP or \fB/./\fP or extraneous
+\fB///\fP sorts of path components in the directory names. debuginfod
+accepts both forms. Specifically, debuginfod canonicalizes path names
+according to RFC3986 section 5.2.4 (Remove Dot Segments), plus reducing
+any \fB//\fP to \fB/\fP in the path.
For example:
.TS
@@ -120,8 +130,9 @@ 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 respond within this many seconds
-is skipped. The default is 5.
+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
diff --git a/doc/debuginfod.8 b/doc/debuginfod.8
index 210550e8..a645ceed 100644
--- a/doc/debuginfod.8
+++ b/doc/debuginfod.8
@@ -24,7 +24,7 @@ debuginfod \- debuginfo-related http file-server daemon
.SH DESCRIPTION
\fBdebuginfod\fP serves debuginfo-related artifacts over HTTP. It
periodically scans a set of directories for ELF/DWARF files and their
-associated source code, as well as RPM files containing the above, to
+associated source code, as well as archive files containing the above, to
build an index by their buildid. This index is used when remote
clients use the HTTP webapi, to fetch these files by the same buildid.
@@ -34,17 +34,23 @@ debuginfod servers, it queries them for the same information, just as
\fBdebuginfod-find\fP would. If successful, it locally caches then
relays the file content to the original requester.
-If the \fB\-F\fP option is given, each listed PATH creates a thread to
-scan for matching ELF/DWARF/source files under the given physical
-directory. Source files are matched with DWARF files based on the
-AT_comp_dir (compilation directory) attributes inside it. Duplicate
-directories are ignored. You may use a file name for a PATH, but
-source code indexing may be incomplete; prefer using a directory that
-contains the binaries. Caution: source files listed in the DWARF may
-be a path \fIanywhere\fP in the file system, and debuginfod will
-readily serve their content on demand. (Imagine a doctored DWARF file
-that lists \fI/etc/passwd\fP as a source file.) If this is a concern,
-audit your binaries with tools such as:
+Indexing the given PATHs proceeds using multiple threads. One thread
+periodically traverses all the given PATHs logically or physically
+(see the \fB\-L\fP option). Duplicate PATHs are ignored. You may use
+a file name for a PATH, but source code indexing may be incomplete;
+prefer using a directory that contains the binaries. The traversal
+thread enumerates all matching files (see the \fB\-I\fP and \fB\-X\fP
+options) into a work queue. A collection of scanner threads (see the
+\fB\-c\fP option) wait at the work queue to analyze files in parallel.
+
+If the \fB\-F\fP option is given, each file is scanned as an ELF/DWARF
+file. Source files are matched with DWARF files based on the
+AT_comp_dir (compilation directory) attributes inside it. Caution:
+source files listed in the DWARF may be a path \fIanywhere\fP in the
+file system, and debuginfod will readily serve their content on
+demand. (Imagine a doctored DWARF file that lists \fI/etc/passwd\fP
+as a source file.) If this is a concern, audit your binaries with
+tools such as:
.SAMPLE
% eu-readelf -wline BINARY | sed -n '/^Directory.table/,/^File.name.table/p'
@@ -55,33 +61,55 @@ or even use debuginfod itself:
^C
.ESAMPLE
-If the \fB\-R\fP option is given each listed PATH creates a thread to
-scan for ELF/DWARF/source files contained in matching RPMs under the
-given physical directory. Duplicate directories are ignored. You may
-use a file name for a PATH, but source code indexing may be
-incomplete; prefer using a directory that contains normal RPMs
-alongside debuginfo/debugsource RPMs. Because of complications such
-as DWZ-compressed debuginfo, may require \fItwo\fP scan passes to
-identify all source code. Source files for RPMs are only served
-from other RPMs, so the caution for \-F does not apply.
+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
+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
+for RPMs are only served from other RPMs, so the caution for \-F does
+not apply. Note that due to Debian/Ubuntu packaging policies &
+mechanisms, debuginfod cannot resolve source files for DEB/DDEB at
+all.
-If no PATH is listed, or neither \-F nor \-R option is given, then
-\fBdebuginfod\fP will simply serve content that it scanned into its
-index in previous runs: the data is cumulative.
-
-File names must match extended regular expressions given by the \-I
-option and not the \-X option (if any) in order to be considered.
+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.
.SH OPTIONS
.TP
.B "\-F"
-Activate ELF/DWARF file scanning threads. The default is off.
+Activate ELF/DWARF file scanning. The default is off.
+
+.TP
+.B "\-Z EXT" "\-Z EXT=CMD"
+Activate an additional pattern in archive scanning. Files with name
+extension EXT (include the dot) will be processed. If CMD is given,
+it is invoked with the file name added to its argument list, and
+should produce a common archive on its standard output. Otherwise,
+the file is read as if CMD were "cat". Since debuginfod internally
+uses \fBlibarchive\fP to read archive files, it can accept a wide
+range of archive formats and compression modes. The default is no
+additional patterns. This option may be repeated.
.TP
.B "\-R"
-Activate RPM file scanning threads. The default is off.
+Activate RPM patterns in archive scanning. The default is off.
+Equivalent to \fB\%\-Z\~.rpm=cat\fP, since libarchive can natively
+process RPM archives. If your version of libarchive is much older
+than 2020, be aware that some distributions have switched to an
+incompatible zstd compression for their payload. You may experiment
+with \fB\%\-Z\ .rpm='(rpm2cpio|zstdcat)<'\fP instead of \fB\-R\fP.
+
+.TP
+.B "\-U"
+Activate DEB/DDEB patterns in archive scanning. The default is off.
+Equivalent to \fB\%\-Z\ .deb='dpkg-deb\ \-\-fsys\-tarfile\fP'
+\fB\%\-Z\ .ddeb='dpkg-deb\ \-\-fsys\-tarfile'\fP.
.TP
.B "\-d FILE" "\-\-database=FILE"
@@ -91,7 +119,7 @@ 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 filesytem. It should not be shared across
machines or users, to maximize sqlite locking performance. The
-default database file is $HOME/.debuginfod.sqlite.
+default database file is \%$HOME/.debuginfod.sqlite.
.TP
.B "\-D SQL" "\-\-ddl=SQL"
@@ -102,9 +130,10 @@ repeated. The default is nothing extra.
.TP
.B "\-p NUM" "\-\-port=NUM"
-Set the TCP port number on which debuginfod should listen, to service
-HTTP requests. Both IPv4 and IPV6 sockets are opened, if possible.
-The webapi is documented below. The default port number is 8002.
+Set the TCP port number (0 < NUM < 65536) on which debuginfod should
+listen, to service HTTP requests. Both IPv4 and IPV6 sockets are
+opened, if possible. The webapi is documented below. The default
+port number is 8002.
.TP
.B "\-I REGEX" "\-\-include=REGEX" "\-X REGEX" "\-\-exclude=REGEX"
@@ -114,13 +143,14 @@ extended REs, thus may include alternation. They are evaluated
against the full path of each file, based on its \fBrealpath(3)\fP
canonicalization. By default, all files are included and none are
excluded. A file that matches both include and exclude REGEX is
-excluded. (The \fIcontents\fP of RPM files are not subject to
-inclusion or exclusion filtering: they are all processed.)
+excluded. (The \fIcontents\fP of archive files are not subject to
+inclusion or exclusion filtering: they are all processed.) Only the
+last of each type of regular expression given is used.
.TP
.B "\-t SECONDS" "\-\-rescan\-time=SECONDS"
-Set the rescan time for the file and RPM directories. This is the
-amount of time the scanning threads will wait after finishing a scan,
+Set the rescan time for the file and archive directories. This is the
+amount of time the traversal thread will wait after finishing a scan,
before doing it again. A rescan for unchanged files is fast (because
the index also stores the file mtimes). A time of zero is acceptable,
and means that only one initial scan should performed. The default
@@ -143,8 +173,8 @@ independent of the groom time (including if it was zero).
.B "\-G"
Run an extraordinary maximal-grooming pass at debuginfod startup.
This pass can take considerable time, because it tries to remove any
-debuginfo-unrelated content from the RPM-related parts of the index.
-It should not be run if any recent RPM-related indexing operations
+debuginfo-unrelated content from the archive-related parts of the index.
+It should not be run if any recent archive-related indexing operations
were aborted early. It can take considerable space, because it
finishes up with an sqlite "vacuum" operation, which repacks the
database file by triplicating it temporarily. The default is not to
@@ -152,11 +182,11 @@ do maximal-grooming. See also the \fIDATA MANAGEMENT\fP section.
.TP
.B "\-c NUM" "\-\-concurrency=NUM"
-Set the concurrency limit for all the scanning threads. While many
-threads may be spawned to cover all the given PATHs, only NUM may
-concurrently do CPU-intensive operations like parsing an ELF file
-or an RPM. The default is the number of processors on the system;
-the minimum is 1.
+Set the concurrency limit for the scanning queue threads, which work
+together to process archives & files located by the traversal thread.
+This important for controlling CPU-intensive operations like parsing
+an ELF file and especially decompressing archives. The default is the
+number of processors on the system; the minimum is 1.
.TP
.B "\-L"
@@ -168,6 +198,19 @@ loops in the symbolic directory tree might lead to \fIinfinite
traversal\fP.
.TP
+.B "\-\-fdcache\-fds=NUM" "\-\-fdcache\-mbs=MB" "\-\-fdcache\-prefetch=NUM2"
+Configure limits on a cache that keeps recently extracted files from
+archives. Up to NUM requested files and up to a total of MB megabytes
+will be kept extracted, in order to avoid having to decompress their
+archives over and over again. In addition, up to NUM2 other files
+from an archive may be prefetched into the cache before they are even
+requested. The default NUM, NUM2, and MB values depend on the
+concurrency of the system, and on the available disk space on the
+$TMPDIR or \fB/tmp\fP filesystem. This is because that is where the
+most recently used extracted files are kept. Grooming cleans this
+cache.
+
+.TP
.B "\-v"
Increase verbosity of logging to the standard error file descriptor.
May be repeated to increase details. The default verbosity is 0.
@@ -226,10 +269,11 @@ is made up of multiple CUs. Therefore, to disambiguate, debuginfod
expects source queries to prefix relative path names with the CU
compilation-directory, followed by a mandatory "/".
-Note: contrary to RFC 3986, the client should not elide \fB../\fP or
-\fB/./\fP or extraneous \fB///\fP sorts of path components in the
-directory names, because if this is how those names appear in the
-DWARF files, that is what debuginfod needs to see too.
+Note: the caller may or may not elide \fB../\fP or \fB/./\fP or extraneous
+\fB///\fP sorts of path components in the directory names. debuginfod
+accepts both forms. Specifically, debuginfod canonicalizes path names
+according to RFC3986 section 5.2.4 (Remove Dot Segments), plus reducing
+any \fB//\fP to \fB/\fP in the path.
For example:
.TS
@@ -257,10 +301,10 @@ many files. This section offers some advice about the implications.
As a general explanation for size, consider that debuginfod indexes
ELF/DWARF files, it stores their names and referenced source file
-names, and buildids will be stored. When indexing RPMs, it stores
-every file name \fIof or in\fP an RPM, every buildid, plus every
-source file name referenced from a DWARF file. (Indexing RPMs takes
-more space because the source files often reside in separate
+names, and buildids will be stored. When indexing archives, it stores
+every file name \fIof or in\fP an archive, every buildid, plus every
+source file name referenced from a DWARF file. (Indexing archives
+takes more space because the source files often reside in separate
subpackages that may not be indexed at the same pass, so extra
metadata has to be kept.)
@@ -283,14 +327,14 @@ 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
-RPM content index such as file names found in RPMs ("rpm sdef"
-records) that are not referred to as source files from any binaries
-find in RPMs ("rpm 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 RPM traversals were interrupted, so the not
-all source file references were known. Use it rarely to polish a
-complete index.
+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
@@ -317,7 +361,7 @@ happens, new versions of debuginfod will issue SQL statements to
\fIdrop\fP all prior schema & data, and start over. So, disk space
will not be wasted for retaining a no-longer-useable dataset.
-In summary, if your system can bear a 0.5%-3% index-to-RPM-dataset
+In summary, if your system can bear a 0.5%-3% index-to-archive-dataset
size ratio, and slow growth afterwards, you should not need to
worry about disk space. If a system crash corrupts the database,
or you want to force debuginfod to reset and start over, simply
@@ -347,25 +391,34 @@ enabled.
.SH "ENVIRONMENT VARIABLES"
-.TP 21
+.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 21
+.TP
.B DEBUGINFOD_TIMEOUT
This environment variable governs the timeout for each debuginfod HTTP
-connection. A server that fails to respond within this many seconds
-is skipped. The default is 5.
+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
+.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. The default is $HOME/.debuginfod_client_cache.
-.\" XXX describe cache eviction policy
+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
@@ -376,8 +429,10 @@ Default database file.
.PD
.TP 20
-.B $HOME/.debuginfod_client_cache
+.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
diff --git a/doc/debuginfod_add_http_header.3 b/doc/debuginfod_add_http_header.3
new file mode 100644
index 00000000..16279936
--- /dev/null
+++ b/doc/debuginfod_add_http_header.3
@@ -0,0 +1 @@
+.so man3/debuginfod_find_debuginfo.3
diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3
index be8eed09..d9717d73 100644
--- a/doc/debuginfod_find_debuginfo.3
+++ b/doc/debuginfod_find_debuginfo.3
@@ -21,9 +21,15 @@ debuginfod_find_debuginfo \- request debuginfo from debuginfod
.nf
.B #include <elfutils/debuginfod.h>
.PP
+Link with \fB-ldebuginfod\fP.
+
+CONNECTION HANDLE
+
.BI "debuginfod_client *debuginfod_begin(void);"
.BI "void debuginfod_end(debuginfod_client *" client ");"
+LOOKUP FUNCTIONS
+
.BI "int debuginfod_find_debuginfo(debuginfod_client *" client ","
.BI " const unsigned char *" build_id ","
.BI " int " build_id_len ","
@@ -38,12 +44,18 @@ debuginfod_find_debuginfo \- request debuginfo from debuginfod
.BI " const char *" filename ","
.BI " char ** " path ");"
-.BI "typedef int (*debuginfo_progressfn_t)(debuginfod_client *" client ","
-.BI " long a, long b);"
-.BI "void debuginfod_set_progressfn(debuginfod_client *" client ","
-.BI " debuginfo_progressfn_t " progressfn ");"
+OPTIONAL FUNCTIONS
-Link with \fB-ldebuginfod\fP.
+.BI "typedef int (*debuginfod_progressfn_t)(debuginfod_client *" client ","
+.BI " long a, long b);"
+.BI "void debuginfod_set_progressfn(debuginfod_client *" client ","
+.BI " debuginfod_progressfn_t " progressfn ");"
+.BI "void debuginfod_set_user_data(debuginfod_client *" client ","
+.BI " void *" data ");"
+.BI "void* debuginfod_get_user_data(debuginfod_client *" client ");"
+.BI "const char* debuginfod_get_url(debuginfod_client *" client ");"
+.BI "int debuginfod_add_http_header(debuginfod_client *" client ","
+.BI " const char* " header ");"
.SH DESCRIPTION
@@ -77,10 +89,11 @@ paths, and yet an executable is made up of multiple CUs. Therefore, to
disambiguate, debuginfod expects source queries to prefix relative path
names with the CU compilation-directory, followed by a mandatory "/".
-Note: the caller should not elide \fB../\fP or \fB/./\fP or extraneous
-\fB///\fP sorts of path components in the directory names, because if
-this is how those names appear in the DWARF files, that is what
-debuginfod needs to see too.
+Note: the caller may or may not elide \fB../\fP or \fB/./\fP or extraneous
+\fB///\fP sorts of path components in the directory names. debuginfod
+accepts both forms. Specifically, debuginfod canonicalizes path names
+according to RFC3986 section 5.2.4 (Remove Dot Segments), plus reducing
+any \fB//\fP to \fB/\fP in the path.
If \fIpath\fP is not NULL and the query is successful, \fIpath\fP is set
to the path of the file in the cache. The caller must \fBfree\fP() this value.
@@ -102,7 +115,12 @@ to the client cache and a file descriptor to that file is returned.
The caller needs to \fBclose\fP() this descriptor. Otherwise, a
negative error code is returned.
-.SH "PROGRESS CALLBACK"
+.SH "OPTIONAL FUNCTIONS"
+
+A small number of optional functions are available to tune or query
+the operation of the debuginfod client.
+
+.SS "PROGRESS CALLBACK"
As the \fBdebuginfod_find_*\fP() functions may block for seconds or
longer, a progress callback function is called periodically, if
@@ -125,6 +143,47 @@ continue the work, or any other value to stop work as soon as
possible. Consequently, the \fBdebuginfod_find_*\fP() function will
likely return with an error, but might still succeed.
+.SS "USER DATA POINTER"
+
+A single \fIvoid *\fP pointer associated with the connection handle
+may be set any time via
+.BR \%debuginfod_set_user_data () ,
+and retrieved via
+.BR \%debuginfod_get_user_data () .
+The value is undefined if unset.
+
+.SS "URL"
+
+The URL of the current or most recent outgoing download, if known,
+may be retrieved via
+.BR \%debuginfod_get_url ()
+from the progressfn callback, or afterwards. It may be NULL.
+The resulting string is owned by the library, and must not be modified
+or freed. The caller should copy it if it is needed beyond the release
+of the client object.
+
+.SS "HTTP HEADER"
+
+Before a lookup function is initiated, a client application may
+add HTTP request headers to future downloads.
+.BR \%debuginfod_add_http_header ()
+may be called with strings of the form
+.BR \%"Header:\~value" .
+These strings are copied by the library. A zero return value
+indicates success, but out-of-memory conditions may result in
+a non-zero \fI-ENOMEM\fP. If the string is in the wrong form
+\fI-EINVAL\fP will be returned.
+
+Note that the current debuginfod-client library implementation uses
+libcurl, but you shouldn't rely on that fact. Don't use this function
+for replacing any standard headers, except for the User-Agent mentioned
+below. The only supported usage of this function is for adding an
+optional header which might or might not be passed through to the
+server for logging purposes only.
+
+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
@@ -164,14 +223,26 @@ 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 respond within this many seconds
-is skipped. The default is 5.
+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_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. The default is $HOME/.debuginfod_client_cache.
+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
@@ -235,7 +306,8 @@ the timeout duration. See debuginfod(8) for more information.
.PD .1v
.TP 20
.B $HOME/.debuginfod_client_cache
-Default cache directory.
+Default cache directory. If XDG_CACHE_HOME is not set then
+\fB$HOME/.cache/debuginfod_client\fP is used.
.PD
.SH "SEE ALSO"
diff --git a/doc/debuginfod_get_url.3 b/doc/debuginfod_get_url.3
new file mode 100644
index 00000000..16279936
--- /dev/null
+++ b/doc/debuginfod_get_url.3
@@ -0,0 +1 @@
+.so man3/debuginfod_find_debuginfo.3
diff --git a/doc/debuginfod_get_user_data.3 b/doc/debuginfod_get_user_data.3
new file mode 100644
index 00000000..16279936
--- /dev/null
+++ b/doc/debuginfod_get_user_data.3
@@ -0,0 +1 @@
+.so man3/debuginfod_find_debuginfo.3
diff --git a/doc/debuginfod_set_user_data.3 b/doc/debuginfod_set_user_data.3
new file mode 100644
index 00000000..16279936
--- /dev/null
+++ b/doc/debuginfod_set_user_data.3
@@ -0,0 +1 @@
+.so man3/debuginfod_find_debuginfo.3
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 51c79841..f4ab6d48 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,7 @@
+2020-06-11 Mark Wielaaard <mark@klomp.org>
+
+ * printversion.c (print_version): Update copyright year.
+
2019-08-25 Srđan Milaković <sm108@rice.edu>
* dynamicsizehash_concurrent.{c,h}: New files.
diff --git a/lib/printversion.c b/lib/printversion.c
index 17832f40..28981d20 100644
--- a/lib/printversion.c
+++ b/lib/printversion.c
@@ -41,5 +41,5 @@ print_version (FILE *stream, struct argp_state *state)
Copyright (C) %s The elfutils developers <%s>.\n\
This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2018", PACKAGE_URL);
+"), "2020", PACKAGE_URL);
}
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
index a1abac88..2c092abe 100644
--- a/libasm/ChangeLog
+++ b/libasm/ChangeLog
@@ -1,3 +1,12 @@
+2020-04-25 Mark Wielaard <mark@klomp.org>
+
+ * asm_end.c (text_end): Call fflush instead of fclose.
+
+2020-01-08 Mark Wielaard <mark@klomp.org>
+
+ * libasm.h: Don't include libebl.h. Define an opaque Ebl handle.
+ * libasmP.h: Do include libebl.h.
+
2019-08-28 Mark Wielaard <mark@klomp.org>
* Makefile.am (libasm_so_DEPS): Replace libebl.a with libebl_pic.a.
diff --git a/libasm/asm_end.c b/libasm/asm_end.c
index 99e95017..3b8582fd 100644
--- a/libasm/asm_end.c
+++ b/libasm/asm_end.c
@@ -47,7 +47,7 @@
static int
text_end (AsmCtx_t *ctx __attribute__ ((unused)))
{
- if (fclose (ctx->out.file) != 0)
+ if (fflush (ctx->out.file) != 0)
{
__libasm_seterrno (ASM_E_IOERROR);
return -1;
diff --git a/libasm/libasm.h b/libasm/libasm.h
index 5c612243..a45c9fa3 100644
--- a/libasm/libasm.h
+++ b/libasm/libasm.h
@@ -32,7 +32,7 @@
#include <stdbool.h>
#include <stdint.h>
-#include <libebl.h>
+typedef struct ebl Ebl;
/* Opaque type for the assembler context descriptor. */
diff --git a/libasm/libasmP.h b/libasm/libasmP.h
index 54460cf9..a4703fc3 100644
--- a/libasm/libasmP.h
+++ b/libasm/libasmP.h
@@ -31,6 +31,7 @@
#include <stdio.h>
+#include "libebl.h"
#include <libasm.h>
#include "libdwelf.h"
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
index 52567be8..a342b7f6 100644
--- a/libcpu/ChangeLog
+++ b/libcpu/ChangeLog
@@ -1,3 +1,16 @@
+2020-05-09 Mark Wielaard <mark@klomp.org>
+
+ * i386_parse.y (new_bitfield): Call free newp on error.
+
+2020-04-16 Mark Wielaard <mark@klomp.org>
+
+ * i386_disasm.c (i386_disasm): Replace assert with goto invalid_op
+ for bad prefix.
+
+2019-12-11 Omar Sandoval <osandov@fb.com>
+
+ * Makefile.am (i386_lex_CFLAGS): Add -Wno-implicit-fallthrough.
+
2019-10-17 Mark Wielaard <mark@klomp.org>
* i386_data.h (FCT_sel): Check for param_start + 2 >= end instead
diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am
index 03c71ea3..59def7d1 100644
--- a/libcpu/Makefile.am
+++ b/libcpu/Makefile.am
@@ -81,7 +81,8 @@ i386_lex_no_Werror = yes
libeu = ../lib/libeu.a
-i386_lex_CFLAGS = -Wno-unused-label -Wno-unused-function -Wno-sign-compare
+i386_lex_CFLAGS = -Wno-unused-label -Wno-unused-function -Wno-sign-compare \
+ -Wno-implicit-fallthrough
i386_parse.o: i386_parse.c i386.mnemonics
i386_parse_CFLAGS = -DNMNES="`wc -l < i386.mnemonics`"
i386_lex.o: i386_parse.h
diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c
index 4422ffa2..32df8cd0 100644
--- a/libcpu/i386_disasm.c
+++ b/libcpu/i386_disasm.c
@@ -407,7 +407,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
++curr;
- assert (last_prefix_bit != 0);
+ if (last_prefix_bit == 0)
+ goto invalid_op;
correct_prefix = last_prefix_bit;
}
@@ -445,8 +446,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
the input data. */
goto do_ret;
- assert (correct_prefix == 0
- || (prefixes & correct_prefix) != 0);
+ if (correct_prefix != 0 && (prefixes & correct_prefix) == 0)
+ goto invalid_op;
prefixes ^= correct_prefix;
if (0)
@@ -473,7 +474,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
if (data == end)
{
- assert (prefixes != 0);
+ if (prefixes == 0)
+ goto invalid_op;
goto print_prefix;
}
@@ -1125,6 +1127,7 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
}
/* Invalid (or at least unhandled) opcode. */
+ invalid_op:
if (prefixes != 0)
goto print_prefix;
/* Make sure we get past the unrecognized opcode if we haven't yet. */
diff --git a/libcpu/i386_parse.y b/libcpu/i386_parse.y
index 910d5458..90c7bd93 100644
--- a/libcpu/i386_parse.y
+++ b/libcpu/i386_parse.y
@@ -579,6 +579,7 @@ new_bitfield (char *name, unsigned long int num)
error (0, 0, "%d: duplicated definition of bitfield '%s'",
i386_lineno, name);
free (name);
+ free (newp);
return;
}
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 59f33f9e..c75b0958 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,24 @@
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * libdw_visit_scopes.c (walk_children): Don't recurse into imported
+ DW_TAG_compile_units.
+
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_decl_file.c (dwarf_decl_file): Use attr CU instead of DIE
+ CU to resolve file name.
+ * dwarf_ranges.c(dwarf_ranges): Document which CU we use when.
+ * libdw.h (dwarf_attr_integrate): Extend documentation.
+
+2020-04-25 Mark Wielaard <mark@klomp.org>
+
+ * libdw_alloc.c (__libdw_alloc_tail): Call Dwarf oom_handler()
+ when malloc fails.
+
+2020-04-17 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_begin_elf.c (check_section): Handle .gnu.debuglto_ prefix.
+
2019-10-28 Aaron Merey <amerey@redhat.com>
* Makefile.am (libdw_so_LDLIBS): Add -ldl for libdebuginfod.so dlopen.
diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
index 85343088..474ed138 100644
--- a/libdw/dwarf_begin_elf.c
+++ b/libdw/dwarf_begin_elf.c
@@ -137,6 +137,10 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp)
gnu_compressed = true;
break;
}
+ else if (scnlen > 14 /* .gnu.debuglto_ prefix. */
+ && strncmp (scnname, ".gnu.debuglto_", 14) == 0
+ && strcmp (&scnname[14], dwarf_scnnames[cnt]) == 0)
+ break;
}
if (cnt >= ndwarf_scnnames)
diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c
index 5657132f..d4aa0a18 100644
--- a/libdw/dwarf_decl_file.c
+++ b/libdw/dwarf_decl_file.c
@@ -55,7 +55,7 @@ dwarf_decl_file (Dwarf_Die *die)
}
/* Get the array of source files for the CU. */
- struct Dwarf_CU *cu = die->cu;
+ struct Dwarf_CU *cu = attr_mem.cu;
if (cu->lines == NULL)
{
Dwarf_Lines *lines;
diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c
index f67d8a5a..520f9ffe 100644
--- a/libdw/dwarf_ranges.c
+++ b/libdw/dwarf_ranges.c
@@ -506,6 +506,11 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
Dwarf_Attribute attr_mem;
Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_ranges,
&attr_mem);
+ /* Note that above we use dwarf_attr, not dwarf_attr_integrate.
+ The only case where the ranges can come from another DIE
+ attribute are the split CU case. In that case we also have a
+ different CU to check against. But that is already set up
+ above using __libdw_find_split_unit. */
if (attr == NULL
&& is_cudie (die)
&& die->cu->unit_type == DW_UT_split_compile)
diff --git a/libdw/libdw.h b/libdw/libdw.h
index e20961be..1a4e15a1 100644
--- a/libdw/libdw.h
+++ b/libdw/libdw.h
@@ -474,7 +474,14 @@ extern Dwarf_Attribute *dwarf_attr (Dwarf_Die *die, unsigned int search_name,
extern int dwarf_hasattr (Dwarf_Die *die, unsigned int search_name);
/* These are the same as dwarf_attr and dwarf_hasattr, respectively,
- but they resolve an indirect attribute through DW_AT_abstract_origin. */
+ but they resolve an indirect attribute through
+ DW_AT_abstract_origin, DW_AT_specification or, if the DIE is a
+ top-level split CU, the skeleton DIE. Note that the attribute
+ might come from a DIE in a different CU (possibly from a different
+ Dwarf file). In that case all attribute information needs to be
+ resolved through the CU associated with the returned
+ Dwarf_Attribute. The dwarf_form functions already do this
+ automatically. */
extern Dwarf_Attribute *dwarf_attr_integrate (Dwarf_Die *die,
unsigned int search_name,
Dwarf_Attribute *result)
diff --git a/libdw/libdw_alloc.c b/libdw/libdw_alloc.c
index e0281a3d..b3e53343 100644
--- a/libdw/libdw_alloc.c
+++ b/libdw/libdw_alloc.c
@@ -87,6 +87,11 @@ __libdw_alloc_tail (Dwarf *dbg)
if (result == NULL)
{
result = malloc (dbg->mem_default_size);
+ if (result == NULL)
+ {
+ pthread_rwlock_unlock (&dbg->mem_rwl);
+ dbg->oom_handler();
+ }
result->size = dbg->mem_default_size
- offsetof (struct libdw_memblock, mem);
result->remaining = result->size;
diff --git a/libdw/libdw_visit_scopes.c b/libdw/libdw_visit_scopes.c
index eb892e10..7dfa5f6b 100644
--- a/libdw/libdw_visit_scopes.c
+++ b/libdw/libdw_visit_scopes.c
@@ -125,8 +125,12 @@ walk_children (struct walk_children_state *state)
Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&state->child.die,
DW_AT_import,
&attr_mem);
+ /* Some gcc -flto versions imported other top-level compile units,
+ skip those. */
if (INTUSE(dwarf_formref_die) (attr, &state->child.die) != NULL
- && INTUSE(dwarf_child) (&state->child.die, &state->child.die) == 0)
+ && INTUSE(dwarf_tag) (&state->child.die) != DW_TAG_compile_unit
+ && (INTUSE(dwarf_child) (&state->child.die, &state->child.die)
+ == 0))
{
/* Checks the given DIE hasn't been imported yet
to prevent cycles. */
diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog
index 5b48ed8f..008bdeb1 100644
--- a/libdwelf/ChangeLog
+++ b/libdwelf/ChangeLog
@@ -1,3 +1,8 @@
+2020-06-04 Mark Wielaard <mark@klomp.org>
+
+ * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string):
+ Rename EM_ARC_COMPACT2 to EM_ARCV2.
+
2019-08-12 Mark Wielaard <mark@klomp.org>
* libdwelf.h (dwelf_elf_begin): Update documentation.
diff --git a/libdwelf/dwelf_elf_e_machine_string.c b/libdwelf/dwelf_elf_e_machine_string.c
index de07b01e..86fa7523 100644
--- a/libdwelf/dwelf_elf_e_machine_string.c
+++ b/libdwelf/dwelf_elf_e_machine_string.c
@@ -340,8 +340,8 @@ dwelf_elf_e_machine_string (int machine)
return "KIPO-KAIST Core-A 1st gen";
case EM_COREA_2ND:
return "KIPO-KAIST Core-A 2nd gen";
- case EM_ARC_COMPACT2:
- return "Synopsys ARCompact V2";
+ case EM_ARCV2:
+ return "Synopsys ARCv2 ISA";
case EM_OPEN8:
return "Open8 RISC";
case EM_RL78:
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index b8222189..4f1ec9da 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,47 @@
+2020-05-09 Mark Wielaard <mark@klomp.org>
+
+ * find-debuginfo.c (dwfl_standard_find_debuginfo): Return failure
+ when mod is NULL.
+
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * libdwfl/core-file.c (dwfl_core_file_report): Keep track of
+ new bool cleanup_user_core and cleanup dwfl->user_core in error
+ case.
+
+2020-04-30 Mark Wielaard <mark@klomp.org>
+
+ * find-debuginfo.c (dwfl_standard_find_debuginfo): When mod->dw
+ is already set then try fetching debugaltlink.
+
+2020-04-25 Mark Wielaard <mark@klomp.org>
+
+ * gzip.c (open_stream): Return DWFL_E_NOMEM instead of calling
+ zlib_fail.
+
+2020-04-16 Mark Wielaard <mark@klomp.org>
+
+ * find-debuginfo.c (dwfl_standard_find_debuginfo): Initialize bits
+ to NULL.
+
+2020-01-24 Mark Wielaard <mark@klomp.org>
+
+ * linux-kernel-modules.c (find_kernel_elf): Check release isn't NULL.
+ (report_kernel): Check release and *release aren't NULL.
+ (report_kernel_archive): Likewise.
+
+2019-12-11 Omar Sandoval <osandov@fb.com>
+
+ * libdwflP.h (Dwfl_Module): Remove coalescing state.
+ Rename lookup_tail_ndx to next_segndx.
+ * segment.c (dwfl_report_segment): Remove coalescing logic.
+ * libdwfl.h (dwfl_report_segment): Document that IDENT is ignored.
+
+2019-12-05 Mark Wielaard <mark@klomp.org>
+
+ * linux-kernel-modules.c (find_kernel_elf): Also try to find
+ vmlinux image.
+
2019-10-28 Aaron Merey <amerey@redhat.com>
* dwfl_build_id_find_elf.c (dwfl_build_id_find_elf): Call debuginfod
diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c
index 01109f4b..a0ccc9b3 100644
--- a/libdwfl/core-file.c
+++ b/libdwfl/core-file.c
@@ -450,6 +450,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
return -1;
}
+ bool cleanup_user_core = false;
if (dwfl->user_core != NULL)
free (dwfl->user_core->executable_for_core);
if (executable == NULL)
@@ -461,6 +462,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
{
if (dwfl->user_core == NULL)
{
+ cleanup_user_core = true;
dwfl->user_core = calloc (1, sizeof (struct Dwfl_User_Core));
if (dwfl->user_core == NULL)
{
@@ -472,6 +474,11 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
dwfl->user_core->executable_for_core = strdup (executable);
if (dwfl->user_core->executable_for_core == NULL)
{
+ if (cleanup_user_core)
+ {
+ free (dwfl->user_core);
+ dwfl->user_core = NULL;
+ }
__libdwfl_seterrno (DWFL_E_NOMEM);
return -1;
}
@@ -481,7 +488,15 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
GElf_Phdr notes_phdr;
int ndx = dwfl_report_core_segments (dwfl, elf, phnum, &notes_phdr);
if (unlikely (ndx <= 0))
- return ndx;
+ {
+ if (cleanup_user_core)
+ {
+ free (dwfl->user_core->executable_for_core);
+ free (dwfl->user_core);
+ dwfl->user_core = NULL;
+ }
+ return ndx;
+ }
/* Next, we should follow the chain from DT_DEBUG. */
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
index 40857645..eb68d549 100644
--- a/libdwfl/find-debuginfo.c
+++ b/libdwfl/find-debuginfo.c
@@ -355,9 +355,12 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod,
GElf_Word debuglink_crc,
char **debuginfo_file_name)
{
+ if (mod == NULL)
+ return -1;
+
/* First try by build ID if we have one. If that succeeds or fails
other than just by finding nothing, that's all we do. */
- const unsigned char *bits;
+ const unsigned char *bits = NULL;
GElf_Addr vaddr;
int bits_len;
if ((bits_len = INTUSE(dwfl_module_build_id) (mod, &bits, &vaddr)) > 0)
@@ -398,8 +401,27 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod,
free (canon);
}
- if (fd < 0 && bits_len > 0)
- fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len);
+ /* Still nothing? Try if we can use the debuginfod client.
+ But note that we might be looking for the alt file.
+ We use the same trick as dwfl_build_id_find_debuginfo.
+ If the debug file (dw) is already set, then we must be
+ looking for the altfile. But we cannot use the actual
+ file/path name given as hint. We'll have to lookup the
+ alt file "build-id". Because the debuginfod client only
+ handles build-ids. */
+ if (fd < 0)
+ {
+ if (mod->dw != NULL)
+ {
+ const char *altname;
+ bits_len = INTUSE(dwelf_dwarf_gnu_debugaltlink) (mod->dw, &altname,
+ (const void **)
+ &bits);
+ }
+
+ if (bits_len > 0)
+ fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len);
+ }
return fd;
}
diff --git a/libdwfl/gzip.c b/libdwfl/gzip.c
index 043d0b6e..e9988cc2 100644
--- a/libdwfl/gzip.c
+++ b/libdwfl/gzip.c
@@ -153,7 +153,7 @@ open_stream (int fd, off_t start_offset, struct unzip_state *state)
if (unlikely (state->zf == NULL))
{
close (d);
- return zlib_fail (state, Z (MEM_ERROR));
+ return DWFL_E_NOMEM;
}
/* From here on, zlib will close D. */
diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h
index a0c1d357..d5fa06d4 100644
--- a/libdwfl/libdwfl.h
+++ b/libdwfl/libdwfl.h
@@ -111,7 +111,7 @@ extern void dwfl_report_begin (Dwfl *dwfl);
/* Report that segment NDX begins at PHDR->p_vaddr + BIAS.
If NDX is < 0, the value succeeding the last call's NDX
- is used instead (zero on the first call).
+ is used instead (zero on the first call). IDENT is ignored.
If nonzero, the smallest PHDR->p_align value seen sets the
effective page size for the address space DWFL describes.
@@ -120,21 +120,9 @@ extern void dwfl_report_begin (Dwfl *dwfl);
Returns -1 for errors, or NDX (or its assigned replacement) on success.
- When NDX is the value succeeding the last call's NDX (or is implicitly
- so as above), IDENT is nonnull and matches the value in the last call,
- and the PHDR and BIAS values reflect a segment that would be contiguous,
- in both memory and file, with the last segment reported, then this
- segment may be coalesced internally with preceding segments. When given
- an address inside this segment, dwfl_addrsegment may return the NDX of a
- preceding contiguous segment. To prevent coalesced segments, always
- pass a null pointer for IDENT.
-
- The values passed are not stored (except to track coalescence).
- The only information that can be extracted from DWFL later is the
- mapping of an address to a segment index that starts at or below
- it. Reporting segments at all is optional. Its only benefit to
- the caller is to offer this quick lookup via dwfl_addrsegment,
- or use other segment-based calls. */
+ Reporting segments at all is optional. Its only benefit to the caller is to
+ offer this quick lookup via dwfl_addrsegment, or use other segment-based
+ calls. */
extern int dwfl_report_segment (Dwfl *dwfl, int ndx,
const GElf_Phdr *phdr, GElf_Addr bias,
const void *ident);
diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h
index f631f946..25753de2 100644
--- a/libdwfl/libdwflP.h
+++ b/libdwfl/libdwflP.h
@@ -132,12 +132,7 @@ struct Dwfl
GElf_Addr *lookup_addr; /* Start address of segment. */
Dwfl_Module **lookup_module; /* Module associated with segment, or null. */
int *lookup_segndx; /* User segment index, or -1. */
-
- /* Cache from last dwfl_report_segment call. */
- const void *lookup_tail_ident;
- GElf_Off lookup_tail_vaddr;
- GElf_Off lookup_tail_offset;
- int lookup_tail_ndx;
+ int next_segndx;
struct Dwfl_User_Core *user_core;
};
diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
index d46ab5aa..0434f1e5 100644
--- a/libdwfl/linux-kernel-modules.c
+++ b/libdwfl/linux-kernel-modules.c
@@ -174,9 +174,12 @@ kernel_release (void)
static int
find_kernel_elf (Dwfl *dwfl, const char *release, char **fname)
{
- if ((release[0] == '/'
- ? asprintf (fname, "%s/vmlinux", release)
- : asprintf (fname, "/boot/vmlinux-%s", release)) < 0)
+ /* First try to find an uncompressed vmlinux image. Possibly
+ including debuginfo. */
+ if (release == NULL
+ || ((release[0] == '/'
+ ? asprintf (fname, "%s/vmlinux", release)
+ : asprintf (fname, "/boot/vmlinux-%s", release)) < 0))
return -1;
int fd = try_kernel_name (dwfl, fname, true);
@@ -188,6 +191,27 @@ find_kernel_elf (Dwfl *dwfl, const char *release, char **fname)
fd = try_kernel_name (dwfl, fname, true);
}
+ /* There might be a compressed vmlinuz image. Probably without
+ debuginfo, but try to find it under the debug path also, just in
+ case. */
+ if (fd < 0)
+ {
+ free (*fname);
+ if ((release[0] == '/'
+ ? asprintf (fname, "%s/vmlinuz", release)
+ : asprintf (fname, "/boot/vmlinuz-%s", release)) < 0)
+ return -1;
+
+ fd = try_kernel_name (dwfl, fname, true);
+ if (fd < 0 && release[0] != '/')
+ {
+ free (*fname);
+ if (asprintf (fname, MODULEDIRFMT "/vmlinuz", release) < 0)
+ return -1;
+ fd = try_kernel_name (dwfl, fname, true);
+ }
+ }
+
return fd;
}
@@ -218,6 +242,9 @@ report_kernel (Dwfl *dwfl, const char **release,
if (unlikely (result != 0))
return result;
+ if (release == NULL || *release == NULL)
+ return EINVAL;
+
char *fname;
int fd = find_kernel_elf (dwfl, *release, &fname);
@@ -273,6 +300,9 @@ report_kernel_archive (Dwfl *dwfl, const char **release,
if (unlikely (result != 0))
return result;
+ if (release == NULL || *release == NULL)
+ return EINVAL;
+
char *archive;
int res = (((*release)[0] == '/')
? asprintf (&archive, "%s/debug.a", *release)
diff --git a/libdwfl/segment.c b/libdwfl/segment.c
index d9599a7f..f6a3e84e 100644
--- a/libdwfl/segment.c
+++ b/libdwfl/segment.c
@@ -287,11 +287,15 @@ int
dwfl_report_segment (Dwfl *dwfl, int ndx, const GElf_Phdr *phdr, GElf_Addr bias,
const void *ident)
{
+ /* This was previously used for coalescing segments, but it was buggy since
+ day one. We don't use it anymore. */
+ (void)ident;
+
if (dwfl == NULL)
return -1;
if (ndx < 0)
- ndx = dwfl->lookup_tail_ndx;
+ ndx = dwfl->next_segndx;
if (phdr->p_align > 1 && (dwfl->segment_align <= 1 ||
phdr->p_align < dwfl->segment_align))
@@ -307,30 +311,19 @@ dwfl_report_segment (Dwfl *dwfl, int ndx, const GElf_Phdr *phdr, GElf_Addr bias,
GElf_Addr end = __libdwfl_segment_end (dwfl,
bias + phdr->p_vaddr + phdr->p_memsz);
- /* Coalesce into the last one if contiguous and matching. */
- if (ndx != dwfl->lookup_tail_ndx
- || ident == NULL
- || ident != dwfl->lookup_tail_ident
- || start != dwfl->lookup_tail_vaddr
- || phdr->p_offset != dwfl->lookup_tail_offset)
- {
- /* Normally just appending keeps us sorted. */
+ /* Normally just appending keeps us sorted. */
- size_t i = dwfl->lookup_elts;
- while (i > 0 && unlikely (start < dwfl->lookup_addr[i - 1]))
- --i;
+ size_t i = dwfl->lookup_elts;
+ while (i > 0 && unlikely (start < dwfl->lookup_addr[i - 1]))
+ --i;
- if (unlikely (insert (dwfl, i, start, end, ndx)))
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
+ if (unlikely (insert (dwfl, i, start, end, ndx)))
+ {
+ __libdwfl_seterrno (DWFL_E_NOMEM);
+ return -1;
}
- dwfl->lookup_tail_ident = ident;
- dwfl->lookup_tail_vaddr = end;
- dwfl->lookup_tail_offset = end - bias - phdr->p_vaddr + phdr->p_offset;
- dwfl->lookup_tail_ndx = ndx + 1;
+ dwfl->next_segndx = ndx + 1;
return ndx;
}
diff --git a/libebl/ChangeLog b/libebl/ChangeLog
index 4da7eeeb..fa6dd037 100644
--- a/libebl/ChangeLog
+++ b/libebl/ChangeLog
@@ -1,3 +1,27 @@
+2020-06-10 Mark Wielaard <mark@klomp.org>
+
+ * eblopenbackend.c (i386_init, sh_init, x86_64_init, ia64_init,
+ alpha_init, arm_init, aarch64_init, sparc_init, ppc_init,
+ ppc64_init, s390_init, tilegx_init, m68k_init, bpf_init,
+ riscv_init, csky_init): Adjust signature.
+ (openbackend): Call init without sizeof(Ebl).
+ * libeblP.h (ebl_bhinit_t): Adjust signature.
+
+2020-06-04 Mark Wielaard <mark@klomp.org>
+
+ * eblsegmenttypename.c (ebl_segment_type_name): Remove
+ PT_GNU_PROPERTY define.
+
+2020-04-17 Mark Wielaard <mark@klomp.org>
+
+ * eblopenbackend.c (default_debugscn_p): Handle .gnu.debuglto_
+ prefix.
+
+2020-02-08 Mark Wielaard <mark@klomp.org>
+
+ * eblsegmenttypename.c (ebl_segment_type_name): Handle
+ PT_GNU_PROPERTY.
+
2019-08-29 Mark Wielaard <mark@klomp.org>
* Makefile.am (noinst_LIBRARIES): Add libebl.a.
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
index db000632..6ce6c26f 100644
--- a/libebl/eblopenbackend.c
+++ b/libebl/eblopenbackend.c
@@ -41,14 +41,14 @@
#include <system.h>
#include <libeblP.h>
-const char *i386_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *x86_64_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *ppc_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *ppc64_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *ia64_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *s390_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *aarch64_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
-const char *bpf_init (Elf *, GElf_Half, Ebl *eh, size_t ehlen);
+Ebl *i386_init (Elf *, GElf_Half, Ebl *);
+Ebl *x86_64_init (Elf *, GElf_Half, Ebl *);
+Ebl *ia64_init (Elf *, GElf_Half, Ebl *);
+Ebl *aarch64_init (Elf *, GElf_Half, Ebl *);
+Ebl *ppc_init (Elf *, GElf_Half, Ebl *);
+Ebl *ppc64_init (Elf *, GElf_Half, Ebl *);
+Ebl *s390_init (Elf *, GElf_Half, Ebl *);
+Ebl *bpf_init (Elf *, GElf_Half, Ebl *);
/* This table should contain the complete list of architectures as far
as the ELF specification is concerned. */
@@ -322,7 +322,7 @@ openbackend (Elf *elf, const char *emulation, GElf_Half machine)
}
if (machines[cnt].init &&
- machines[cnt].init (elf, machine, result, sizeof(Ebl)))
+ machines[cnt].init (elf, machine, result))
{
result->elf = elf;
/* A few entries are mandatory. */
@@ -613,7 +613,9 @@ default_debugscn_p (const char *name)
for (size_t cnt = 0; cnt < ndwarf_scn_names; ++cnt)
if (strcmp (name, dwarf_scn_names[cnt]) == 0
|| (strncmp (name, ".zdebug", strlen (".zdebug")) == 0
- && strcmp (&name[2], &dwarf_scn_names[cnt][1]) == 0))
+ && strcmp (&name[2], &dwarf_scn_names[cnt][1]) == 0)
+ || (strncmp (name, ".gnu.debuglto_", strlen (".gnu.debuglto_")) == 0
+ && strcmp (&name[14], dwarf_scn_names[cnt]) == 0))
return true;
return false;
diff --git a/libebl/eblsegmenttypename.c b/libebl/eblsegmenttypename.c
index 14eda76e..23a85482 100644
--- a/libebl/eblsegmenttypename.c
+++ b/libebl/eblsegmenttypename.c
@@ -65,6 +65,8 @@ ebl_segment_type_name (Ebl *ebl, int segment, char *buf, size_t len)
res = "GNU_STACK";
else if (segment == PT_GNU_RELRO)
res = "GNU_RELRO";
+ else if (segment == PT_GNU_PROPERTY)
+ res = "GNU_PROPERTY";
else if (segment == PT_SUNWBSS)
res = "SUNWBSS";
else if (segment == PT_SUNWSTACK)
diff --git a/libebl/libeblP.h b/libebl/libeblP.h
index fd0fcc98..599f6378 100644
--- a/libebl/libeblP.h
+++ b/libebl/libeblP.h
@@ -80,8 +80,10 @@ struct ebl
};
-/* Type of the initialization functions in the backend modules. */
-typedef const char *(*ebl_bhinit_t) (Elf *, GElf_Half, Ebl *, size_t);
+/* Type of the initialization functions in the backend modules.
+ The init function returns the given Ebl * or NULL if it couldn't
+ initialize for the given Elf or machine. */
+typedef Ebl *(*ebl_bhinit_t) (Elf *, GElf_Half, Ebl *);
/* gettext helper macros. */
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index dde6c81d..8f6d2d2d 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,31 @@
+2020-06-04 Mark Wielaard <mark@klomp.org>
+
+ * elf.h: Update from glibc.
+
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * elf_strptr.c (elf_strptr): Check shdr is not NULL.
+
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * elf_getdata.c (__libelf_set_rawdata_wrlock): Check
+ __gelf_getehdr_rdlock return value.
+
+2020-04-25 Mark Wielaard <mark@klomp.org>
+
+ * elf_compress.c (__libelf_compress): Remove free (out_buf).
+
+2020-03-18 Omar Sandoval <osandov@fb.com>
+
+ * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Call
+ __elf{32,64}_getshdr_rdlock if the shdr is not cached.
+
+2019-03-20 Matthias Maennich <maennich@google.com>
+
+ * elf_compress.c (__libelf_compress): Always call deflate_cleanup
+ in failure path. Call deflateEnd only once.
+ (__libelf_decompress): Call inflateEnd only once.
+
2019-06-18 Mark Wielaard <mark@klomp.org>
* common.h (allocate_elf): Use int64_t instead of off_t for offset.
diff --git a/libelf/elf.h b/libelf/elf.h
index 01648bdb..197b557d 100644
--- a/libelf/elf.h
+++ b/libelf/elf.h
@@ -1,5 +1,5 @@
/* This file defines standard ELF types, structures, and macros.
- Copyright (C) 1995-2019 Free Software Foundation, Inc.
+ Copyright (C) 1995-2020 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -14,7 +14,7 @@
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
+ <https://www.gnu.org/licenses/>. */
#ifndef _ELF_H
#define _ELF_H 1
@@ -330,7 +330,7 @@ typedef struct
#define EM_CLOUDSHIELD 192 /* CloudShield */
#define EM_COREA_1ST 193 /* KIPO-KAIST Core-A 1st gen. */
#define EM_COREA_2ND 194 /* KIPO-KAIST Core-A 2nd gen. */
-#define EM_ARC_COMPACT2 195 /* Synopsys ARCompact V2 */
+#define EM_ARCV2 195 /* Synopsys ARCv2 ISA. */
#define EM_OPEN8 196 /* Open8 RISC */
#define EM_RL78 197 /* Renesas RL78 */
#define EM_VIDEOCORE5 198 /* Broadcom VideoCore V */
@@ -721,6 +721,7 @@ typedef struct
#define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
#define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
#define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
+#define PT_GNU_PROPERTY 0x6474e553 /* GNU property */
#define PT_LOSUNW 0x6ffffffa
#define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
#define PT_SUNWSTACK 0x6ffffffb /* Stack segment */
@@ -809,9 +810,16 @@ typedef struct
#define NT_ARM_SYSTEM_CALL 0x404 /* ARM system call number */
#define NT_ARM_SVE 0x405 /* ARM Scalable Vector Extension
registers */
+#define NT_ARM_PAC_MASK 0x406 /* ARM pointer authentication
+ code masks. */
+#define NT_ARM_PACA_KEYS 0x407 /* ARM pointer authentication
+ address keys. */
+#define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication
+ generic key. */
#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note. */
#define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers. */
#define NT_MIPS_FP_MODE 0x801 /* MIPS floating-point mode. */
+#define NT_MIPS_MSA 0x802 /* MIPS SIMD registers. */
/* Legal values for the note segment descriptor types for object files. */
@@ -987,6 +995,9 @@ typedef struct
#define DF_1_SINGLETON 0x02000000 /* Singleton symbols are used. */
#define DF_1_STUB 0x04000000
#define DF_1_PIE 0x08000000
+#define DF_1_KMOD 0x10000000
+#define DF_1_WEAKFILTER 0x20000000
+#define DF_1_NOCOMMON 0x40000000
/* Flags for the feature selection in DT_FEATURE_1. */
#define DTF_1_PARINIT 0x00000001
@@ -1308,6 +1319,12 @@ typedef struct
/* Application-specific semantics, hi */
#define GNU_PROPERTY_HIUSER 0xffffffff
+/* AArch64 specific GNU properties. */
+#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000
+
+#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0)
+#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1)
+
/* The x86 instruction sets indicated by the corresponding bits are
used in program. Their support in the hardware is optional. */
#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
@@ -1705,6 +1722,7 @@ typedef struct
#define SHT_MIPS_EH_REGION 0x70000027
#define SHT_MIPS_XLATE_OLD 0x70000028
#define SHT_MIPS_PDR_EXCEPTION 0x70000029
+#define SHT_MIPS_XHASH 0x7000002b
/* Legal values for sh_flags field of Elf32_Shdr. */
@@ -1952,7 +1970,9 @@ typedef struct
in a PIE as it stores a relative offset from the address of the tag
rather than an absolute address. */
#define DT_MIPS_RLD_MAP_REL 0x70000035
-#define DT_MIPS_NUM 0x36
+/* GNU-style hash table with xlat. */
+#define DT_MIPS_XHASH 0x70000036
+#define DT_MIPS_NUM 0x37
/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry. */
@@ -2854,6 +2874,13 @@ enum
#define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */
#define R_AARCH64_IRELATIVE 1032 /* STT_GNU_IFUNC relocation. */
+/* AArch64 specific values for the Dyn d_tag field. */
+#define DT_AARCH64_VARIANT_PCS (DT_LOPROC + 5)
+#define DT_AARCH64_NUM 6
+
+/* AArch64 specific values for the st_other field. */
+#define STO_AARCH64_VARIANT_PCS 0x80
+
/* ARM relocs. */
#define R_ARM_NONE 0 /* No reloc */
@@ -3926,8 +3953,9 @@ enum
#define R_RISCV_SET16 55
#define R_RISCV_SET32 56
#define R_RISCV_32_PCREL 57
+#define R_RISCV_IRELATIVE 58
-#define R_RISCV_NUM 58
+#define R_RISCV_NUM 59
/* BPF specific declarations. */
@@ -4007,6 +4035,74 @@ enum
#define R_NDS32_TLS_TPOFF 102
#define R_NDS32_TLS_DESC 119
+/* ARCompact/ARCv2 specific relocs. */
+#define R_ARC_NONE 0x0
+#define R_ARC_8 0x1
+#define R_ARC_16 0x2
+#define R_ARC_24 0x3
+#define R_ARC_32 0x4
+#define R_ARC_B26 0x5
+#define R_ARC_B22_PCREL 0x6
+#define R_ARC_H30 0x7
+#define R_ARC_N8 0x8
+#define R_ARC_N16 0x9
+#define R_ARC_N24 0xA
+#define R_ARC_N32 0xB
+#define R_ARC_SDA 0xC
+#define R_ARC_SECTOFF 0xD
+#define R_ARC_S21H_PCREL 0xE
+#define R_ARC_S21W_PCREL 0xF
+#define R_ARC_S25H_PCREL 0x10
+#define R_ARC_S25W_PCREL 0x11
+#define R_ARC_SDA32 0x12
+#define R_ARC_SDA_LDST 0x13
+#define R_ARC_SDA_LDST1 0x14
+#define R_ARC_SDA_LDST2 0x15
+#define R_ARC_SDA16_LD 0x16
+#define R_ARC_SDA16_LD1 0x17
+#define R_ARC_SDA16_LD2 0x18
+#define R_ARC_S13_PCREL 0x19
+#define R_ARC_W 0x1A
+#define R_ARC_32_ME 0x1B
+#define R_ARC_N32_ME 0x1C
+#define R_ARC_SECTOFF_ME 0x1D
+#define R_ARC_SDA32_ME 0x1E
+#define R_ARC_W_ME 0x1F
+#define R_ARC_H30_ME 0x20
+#define R_ARC_SECTOFF_U8 0x21
+#define R_ARC_SECTOFF_S9 0x22
+#define R_AC_SECTOFF_U8 0x23
+#define R_AC_SECTOFF_U8_1 0x24
+#define R_AC_SECTOFF_U8_2 0x25
+#define R_AC_SECTOFF_S9 0x26
+#define R_AC_SECTOFF_S9_1 0x27
+#define R_AC_SECTOFF_S9_2 0x28
+#define R_ARC_SECTOFF_ME_1 0x29
+#define R_ARC_SECTOFF_ME_2 0x2A
+#define R_ARC_SECTOFF_1 0x2B
+#define R_ARC_SECTOFF_2 0x2C
+#define R_ARC_PC32 0x32
+#define R_ARC_GOTPC32 0x33
+#define R_ARC_PLT32 0x34
+#define R_ARC_COPY 0x35
+#define R_ARC_GLOB_DAT 0x36
+#define R_ARC_JUMP_SLOT 0x37
+#define R_ARC_RELATIVE 0x38
+#define R_ARC_GOTOFF 0x39
+#define R_ARC_GOTPC 0x3A
+#define R_ARC_GOT32 0x3B
+
+#define R_ARC_TLS_DTPMOD 0x42
+#define R_ARC_TLS_DTPOFF 0x43
+#define R_ARC_TLS_TPOFF 0x44
+#define R_ARC_TLS_GD_GOT 0x45
+#define R_ARC_TLS_GD_LD 0x46
+#define R_ARC_TLS_GD_CALL 0x47
+#define R_ARC_TLS_IE_GOT 0x48
+#define R_ARC_TLS_DTPOFF_S9 0x4a
+#define R_ARC_TLS_LE_S9 0x4a
+#define R_ARC_TLS_LE_32 0x4b
+
__END_DECLS
#endif /* elf.h */
diff --git a/libelf/elf_compress.c b/libelf/elf_compress.c
index 244467b5..e5d3d2e0 100644
--- a/libelf/elf_compress.c
+++ b/libelf/elf_compress.c
@@ -113,9 +113,8 @@ __libelf_compress (Elf_Scn *scn, size_t hsize, int ei_data,
int zrc = deflateInit (&z, Z_BEST_COMPRESSION);
if (zrc != Z_OK)
{
- free (out_buf);
__libelf_seterrno (ELF_E_COMPRESS_ERROR);
- return NULL;
+ return deflate_cleanup(NULL, NULL);
}
Elf_Data cdata;
@@ -197,13 +196,13 @@ __libelf_compress (Elf_Scn *scn, size_t hsize, int ei_data,
}
while (flush != Z_FINISH); /* More data blocks. */
- zrc = deflateEnd (&z);
- if (zrc != Z_OK)
+ if (zrc != Z_STREAM_END)
{
__libelf_seterrno (ELF_E_COMPRESS_ERROR);
return deflate_cleanup (NULL, NULL);
}
+ deflateEnd (&z);
*new_size = used;
return out_buf;
}
@@ -251,16 +250,15 @@ __libelf_decompress (void *buf_in, size_t size_in, size_t size_out)
}
zrc = inflateReset (&z);
}
- if (likely (zrc == Z_OK))
- zrc = inflateEnd (&z);
if (unlikely (zrc != Z_OK) || unlikely (z.avail_out != 0))
{
free (buf_out);
+ buf_out = NULL;
__libelf_seterrno (ELF_E_DECOMPRESS_ERROR);
- return NULL;
}
+ inflateEnd(&z);
return buf_out;
}
diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c
index 40fe1694..0d8f8d2e 100644
--- a/libelf/elf_getdata.c
+++ b/libelf/elf_getdata.c
@@ -271,6 +271,8 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn)
{
GElf_Ehdr ehdr_mem;
GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (elf, &ehdr_mem);
+ if (unlikely (ehdr == NULL))
+ return 1;
entsize = SH_ENTSIZE_HASH (ehdr);
}
else
diff --git a/libelf/elf_getphdrnum.c b/libelf/elf_getphdrnum.c
index f91cba98..53617dfc 100644
--- a/libelf/elf_getphdrnum.c
+++ b/libelf/elf_getphdrnum.c
@@ -63,15 +63,23 @@ __elf_getphdrnum_rdlock (Elf *elf, size_t *dst)
if (elf->class == ELFCLASS32)
{
- if (likely (scns->cnt > 0
- && elf->state.elf32.scns.data[0].shdr.e32 != NULL))
- *dst = scns->data[0].shdr.e32->sh_info;
+ if (likely (scns->cnt > 0))
+ {
+ Elf_Scn *scn = &elf->state.elf32.scns.data[0];
+ Elf32_Shdr *shdr = scn->shdr.e32 ?: __elf32_getshdr_rdlock (scn);
+ if (shdr)
+ *dst = shdr->sh_info;
+ }
}
else
{
- if (likely (scns->cnt > 0
- && elf->state.elf64.scns.data[0].shdr.e64 != NULL))
- *dst = scns->data[0].shdr.e64->sh_info;
+ if (likely (scns->cnt > 0))
+ {
+ Elf_Scn *scn = &elf->state.elf64.scns.data[0];
+ Elf64_Shdr *shdr = scn->shdr.e64 ?: __elf64_getshdr_rdlock (scn);
+ if (shdr)
+ *dst = shdr->sh_info;
+ }
}
}
diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c
index e72a3a36..c7271707 100644
--- a/libelf/elf_strptr.c
+++ b/libelf/elf_strptr.c
@@ -145,7 +145,7 @@ elf_strptr (Elf *elf, size_t idx, size_t offset)
else
{
Elf64_Shdr *shdr = strscn->shdr.e64 ?: __elf64_getshdr_rdlock (strscn);
- if (unlikely (shdr->sh_type != SHT_STRTAB))
+ if (unlikely (shdr == NULL || shdr->sh_type != SHT_STRTAB))
{
/* This is no string section. */
__libelf_seterrno (ELF_E_INVALID_SECTION);
diff --git a/po/ChangeLog b/po/ChangeLog
index 884b1666..620931ee 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,11 @@
+2020-06-11 Mark Wielaard <mark@klomp.org>
+
+ * *.po: Update for 0.180.
+
+2020-03-30 Mark Wielaard <mark@klomp.org>
+
+ * *.po: Update for 0.179.
+
2019-11-26 Mark Wielaard <mark@klomp.org>
* *.po: Update for 0.178.
diff --git a/po/de.po b/po/de.po
index a9b6897a..d58a7342 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: 2019-11-26 09:48+0100\n"
+"POT-Creation-Date: 2020-06-11 15:50+0200\n"
"PO-Revision-Date: 2009-06-29 15:15+0200\n"
"Last-Translator: Michael Münch <micm@fedoraproject.org>\n"
"Language-Team: German\n"
@@ -55,7 +55,7 @@ msgstr ""
"auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n"
#: lib/xmalloc.c:52 lib/xmalloc.c:65 lib/xmalloc.c:77 src/readelf.c:3449
-#: src/readelf.c:11398 src/unstrip.c:2393 src/unstrip.c:2599
+#: src/readelf.c:11403 src/unstrip.c:2393 src/unstrip.c:2599
#, c-format
msgid "memory exhausted"
msgstr "Kein Speicher mehr verfügbar"
@@ -533,7 +533,7 @@ msgstr "Kein Backend"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77
#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
-#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:79
+#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
msgstr "<Unbekannt>"
@@ -1671,14 +1671,14 @@ msgid ""
"section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n"
msgstr ""
-#: src/elflint.c:610 src/elflint.c:1494 src/elflint.c:1545 src/elflint.c:1651
-#: src/elflint.c:1987 src/elflint.c:2313 src/elflint.c:2932 src/elflint.c:3095
-#: src/elflint.c:3243 src/elflint.c:3433 src/elflint.c:4431
+#: 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:2936 src/elflint.c:3099
+#: src/elflint.c:3247 src/elflint.c:3437 src/elflint.c:4440
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr ""
-#: src/elflint.c:623 src/elflint.c:1658
+#: src/elflint.c:623 src/elflint.c:1662
#, c-format
msgid ""
"section [%2d] '%s': referenced as string table for section [%2d] '%s' but "
@@ -1697,40 +1697,47 @@ msgstr ""
msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
msgstr ""
-#: src/elflint.c:667
+#: src/elflint.c:662
+#, c-format
+msgid ""
+"section [%2u] '%s': number of local entries in 'st_info' larger than table "
+"size\n"
+msgstr ""
+
+#: src/elflint.c:671
#, c-format
msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
msgstr ""
-#: src/elflint.c:672 src/elflint.c:675 src/elflint.c:678 src/elflint.c:681
-#: src/elflint.c:684 src/elflint.c:687
+#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685
+#: src/elflint.c:688 src/elflint.c:691
#, c-format
msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
msgstr ""
-#: src/elflint.c:690
+#: src/elflint.c:694
#, c-format
msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
msgstr ""
-#: src/elflint.c:700
+#: src/elflint.c:704
#, c-format
msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
msgstr ""
-#: src/elflint.c:709
+#: src/elflint.c:713
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
msgstr ""
-#: src/elflint.c:724
+#: src/elflint.c:728
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: too large section index but no extended "
"section index section\n"
msgstr ""
-#: src/elflint.c:730
+#: src/elflint.c:734
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in "
@@ -1738,116 +1745,116 @@ msgid ""
msgstr ""
#. || sym->st_shndx > SHN_HIRESERVE always false
-#: src/elflint.c:742
+#: src/elflint.c:746
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
msgstr ""
-#: src/elflint.c:750
+#: src/elflint.c:754
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown type\n"
msgstr ""
-#: src/elflint.c:756
+#: src/elflint.c:760
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
msgstr ""
-#: src/elflint.c:761
+#: src/elflint.c:765
#, c-format
msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n"
msgstr ""
-#: src/elflint.c:769
+#: src/elflint.c:773
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
msgstr ""
-#: src/elflint.c:773
+#: src/elflint.c:777
#, c-format
msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
msgstr ""
-#: src/elflint.c:777
+#: src/elflint.c:781
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
msgstr ""
-#: src/elflint.c:828
+#: src/elflint.c:832
#, c-format
msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
msgstr ""
-#: src/elflint.c:834 src/elflint.c:859 src/elflint.c:908
+#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu does not fit completely in referenced section "
"[%2d] '%s'\n"
msgstr ""
-#: src/elflint.c:843
+#: src/elflint.c:847
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have "
"SHF_TLS flag set\n"
msgstr ""
-#: src/elflint.c:853 src/elflint.c:901
+#: src/elflint.c:857 src/elflint.c:905
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section "
"[%2d] '%s'\n"
msgstr ""
-#: src/elflint.c:880
+#: src/elflint.c:884
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
msgstr ""
-#: src/elflint.c:886
+#: src/elflint.c:890
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but couldn't get TLS program "
"header entry\n"
msgstr ""
-#: src/elflint.c:894
+#: src/elflint.c:898
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] "
"'%s'\n"
msgstr ""
-#: src/elflint.c:921
+#: src/elflint.c:925
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: local symbol outside range described in "
"sh_info\n"
msgstr ""
-#: src/elflint.c:928
+#: src/elflint.c:932
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: non-local symbol outside range described in "
"sh_info\n"
msgstr ""
-#: src/elflint.c:935
+#: src/elflint.c:939
#, c-format
msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
msgstr ""
-#: src/elflint.c:985
+#: src/elflint.c:989
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section "
"[%2d]\n"
msgstr ""
-#: src/elflint.c:992
+#: src/elflint.c:996
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] "
@@ -1857,1367 +1864,1372 @@ msgstr ""
#. This test is more strict than the psABIs which
#. usually allow the symbol to be in the middle of
#. the .got section, allowing negative offsets.
-#: src/elflint.c:1008
+#: src/elflint.c:1012
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not "
"match %s section address %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:1015
+#: src/elflint.c:1019
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not "
"match %s section size %<PRIu64>\n"
msgstr ""
-#: src/elflint.c:1023
+#: src/elflint.c:1027
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got "
"section\n"
msgstr ""
-#: src/elflint.c:1039
+#: src/elflint.c:1043
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic "
"segment address %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:1046
+#: src/elflint.c:1050
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic "
"segment size %<PRIu64>\n"
msgstr ""
-#: src/elflint.c:1059
+#: src/elflint.c:1063
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-"
"default visibility\n"
msgstr ""
-#: src/elflint.c:1063
+#: src/elflint.c:1067
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"
msgstr ""
-#: src/elflint.c:1101
+#: src/elflint.c:1105
#, fuzzy, c-format
msgid "section [%2d] '%s': cannot get section data.\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elflint.c:1117
+#: src/elflint.c:1121
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
msgstr ""
-#: src/elflint.c:1128 src/elflint.c:1181
+#: src/elflint.c:1132 src/elflint.c:1185
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
msgstr ""
-#: src/elflint.c:1153 src/elflint.c:1206
+#: src/elflint.c:1157 src/elflint.c:1210
#, c-format
msgid ""
"section [%2d] '%s': relative relocations after index %d as specified by "
"DT_RELCOUNT\n"
msgstr ""
-#: src/elflint.c:1159 src/elflint.c:1212
+#: src/elflint.c:1163 src/elflint.c:1216
#, c-format
msgid ""
"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT "
"specified %d relative relocations\n"
msgstr ""
-#: src/elflint.c:1171
+#: src/elflint.c:1175
#, c-format
msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
msgstr ""
-#: src/elflint.c:1254
+#: src/elflint.c:1258
#, c-format
msgid "section [%2d] '%s': invalid destination section index\n"
msgstr ""
-#: src/elflint.c:1266
+#: src/elflint.c:1270
#, c-format
msgid "section [%2d] '%s': invalid destination section type\n"
msgstr ""
-#: src/elflint.c:1274
+#: src/elflint.c:1278
#, c-format
msgid "section [%2d] '%s': sh_info should be zero\n"
msgstr ""
-#: src/elflint.c:1282
+#: src/elflint.c:1286
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': no relocations for merge-able string sections possible\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elflint.c:1290
+#: src/elflint.c:1294
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
msgstr ""
-#: src/elflint.c:1350
+#: src/elflint.c:1354
#, c-format
msgid "text relocation flag set but there is no read-only segment\n"
msgstr ""
-#: src/elflint.c:1377
+#: src/elflint.c:1381
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid type\n"
msgstr ""
-#: src/elflint.c:1385
+#: src/elflint.c:1389
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: relocation type invalid for the file "
"type\n"
msgstr ""
-#: src/elflint.c:1393
+#: src/elflint.c:1397
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
msgstr ""
-#: src/elflint.c:1411
+#: src/elflint.c:1415
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can "
"be used with %s\n"
msgstr ""
-#: src/elflint.c:1428
+#: src/elflint.c:1432
#, c-format
msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
msgstr ""
-#: src/elflint.c:1443
+#: src/elflint.c:1447
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: copy relocation against symbol of type "
"%s\n"
msgstr ""
-#: src/elflint.c:1464
+#: src/elflint.c:1468
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: read-only section modified but text "
"relocation flag not set\n"
msgstr ""
-#: src/elflint.c:1479
+#: src/elflint.c:1483
#, c-format
msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
msgstr ""
-#: src/elflint.c:1519 src/elflint.c:1570
+#: src/elflint.c:1523 src/elflint.c:1574
#, c-format
msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
msgstr ""
-#: src/elflint.c:1646
+#: src/elflint.c:1650
#, c-format
msgid "more than one dynamic section present\n"
msgstr ""
-#: src/elflint.c:1664
+#: src/elflint.c:1668
#, c-format
msgid ""
"section [%2d]: referenced as string table for section [%2d] '%s' but section "
"link value is invalid\n"
msgstr ""
-#: src/elflint.c:1672
+#: src/elflint.c:1676
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
msgstr ""
-#: src/elflint.c:1677 src/elflint.c:1966
+#: src/elflint.c:1681 src/elflint.c:1970
#, c-format
msgid "section [%2d] '%s': sh_info not zero\n"
msgstr ""
-#: src/elflint.c:1687
+#: src/elflint.c:1691
#, c-format
msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
msgstr ""
-#: src/elflint.c:1695
+#: src/elflint.c:1699
#, c-format
msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
msgstr ""
-#: src/elflint.c:1702
+#: src/elflint.c:1706
#, c-format
msgid "section [%2d] '%s': entry %zu: unknown tag\n"
msgstr ""
-#: src/elflint.c:1713
+#: src/elflint.c:1717
#, c-format
msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
msgstr ""
-#: src/elflint.c:1723
+#: src/elflint.c:1727
#, c-format
msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
msgstr ""
-#: src/elflint.c:1741
+#: src/elflint.c:1745
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
msgstr ""
-#: src/elflint.c:1754
+#: src/elflint.c:1758
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: pointer does not match address of section "
"[%2d] '%s' referenced by sh_link\n"
msgstr ""
-#: src/elflint.c:1797
+#: src/elflint.c:1801
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
msgstr ""
-#: src/elflint.c:1812
+#: src/elflint.c:1816
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must be valid offset in section "
"[%2d] '%s'\n"
msgstr ""
-#: src/elflint.c:1832 src/elflint.c:1860
+#: src/elflint.c:1836 src/elflint.c:1864
#, c-format
msgid "section [%2d] '%s': contains %s entry but not %s\n"
msgstr ""
-#: src/elflint.c:1844
+#: src/elflint.c:1848
#, c-format
msgid "section [%2d] '%s': mandatory tag %s not present\n"
msgstr ""
-#: src/elflint.c:1853
+#: src/elflint.c:1857
#, c-format
msgid "section [%2d] '%s': no hash section present\n"
msgstr ""
-#: src/elflint.c:1868 src/elflint.c:1875
+#: src/elflint.c:1872 src/elflint.c:1879
#, c-format
msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
msgstr ""
-#: src/elflint.c:1885 src/elflint.c:1889
+#: src/elflint.c:1889 src/elflint.c:1893
#, c-format
msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
msgstr ""
-#: src/elflint.c:1895
+#: src/elflint.c:1899
#, c-format
msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
msgstr ""
-#: src/elflint.c:1906 src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918
+#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922
#, c-format
msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
msgstr ""
-#: src/elflint.c:1930
+#: src/elflint.c:1934
#, c-format
msgid ""
"section [%2d] '%s': only relocatable files can have extended section index\n"
msgstr ""
-#: src/elflint.c:1940
+#: src/elflint.c:1944
#, c-format
msgid ""
"section [%2d] '%s': extended section index section not for symbol table\n"
msgstr ""
-#: src/elflint.c:1944
+#: src/elflint.c:1948
#, c-format
msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n"
msgstr ""
-#: src/elflint.c:1949
+#: src/elflint.c:1953
#, c-format
msgid "cannot get data for symbol section\n"
msgstr ""
-#: src/elflint.c:1952
+#: src/elflint.c:1956
#, c-format
msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
msgstr ""
-#: src/elflint.c:1961
+#: src/elflint.c:1965
#, c-format
msgid "section [%2d] '%s': extended index table too small for symbol table\n"
msgstr ""
-#: src/elflint.c:1976
+#: src/elflint.c:1980
#, c-format
msgid ""
"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to "
"same symbol table\n"
msgstr ""
-#: src/elflint.c:1994
+#: src/elflint.c:1998
#, c-format
msgid "symbol 0 should have zero extended section index\n"
msgstr ""
-#: src/elflint.c:2006
+#: src/elflint.c:2010
#, c-format
msgid "cannot get data for symbol %zu\n"
msgstr ""
-#: src/elflint.c:2011
+#: src/elflint.c:2015
#, c-format
msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
msgstr ""
-#: src/elflint.c:2028 src/elflint.c:2085
+#: src/elflint.c:2032 src/elflint.c:2089
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
msgstr ""
-#: src/elflint.c:2042 src/elflint.c:2099
+#: src/elflint.c:2046 src/elflint.c:2103
#, c-format
msgid "section [%2d] '%s': chain array too large\n"
msgstr ""
-#: src/elflint.c:2056 src/elflint.c:2113
+#: src/elflint.c:2060 src/elflint.c:2117
#, c-format
msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2066
+#: src/elflint.c:2070
#, c-format
msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2123
+#: src/elflint.c:2127
#, c-format
msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
msgstr ""
-#: src/elflint.c:2136
+#: src/elflint.c:2140
#, c-format
msgid "section [%2d] '%s': not enough data\n"
msgstr ""
-#: src/elflint.c:2148
+#: src/elflint.c:2152
#, c-format
msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n"
msgstr ""
-#: src/elflint.c:2164
+#: src/elflint.c:2168
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected at "
"least %ld)\n"
msgstr ""
-#: src/elflint.c:2173
+#: src/elflint.c:2177
#, c-format
msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
msgstr ""
-#: src/elflint.c:2207
+#: src/elflint.c:2211
#, c-format
msgid ""
"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
msgstr ""
-#: src/elflint.c:2228
+#: src/elflint.c:2232
#, c-format
msgid ""
"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is "
"undefined\n"
msgstr ""
-#: src/elflint.c:2241
+#: src/elflint.c:2245
#, c-format
msgid ""
"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
msgstr ""
-#: src/elflint.c:2250
+#: src/elflint.c:2254
#, c-format
msgid ""
"section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n"
msgstr ""
-#: src/elflint.c:2280
+#: src/elflint.c:2284
#, c-format
msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2285
+#: src/elflint.c:2289
#, c-format
msgid ""
"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2291
+#: src/elflint.c:2295
#, c-format
msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
msgstr ""
-#: src/elflint.c:2304
+#: src/elflint.c:2308
#, c-format
msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
msgstr ""
-#: src/elflint.c:2322
+#: src/elflint.c:2326
#, c-format
msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
msgstr ""
-#: src/elflint.c:2326
+#: src/elflint.c:2330
#, c-format
msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n"
msgstr ""
-#: src/elflint.c:2336
+#: src/elflint.c:2340
#, c-format
msgid "section [%2d] '%s': hash table entry size incorrect\n"
msgstr ""
-#: src/elflint.c:2341
+#: src/elflint.c:2345
#, c-format
msgid "section [%2d] '%s': not marked to be allocated\n"
msgstr ""
-#: src/elflint.c:2346
+#: src/elflint.c:2350
#, c-format
msgid ""
"section [%2d] '%s': hash table has not even room for initial administrative "
"entries\n"
msgstr ""
-#: src/elflint.c:2395
+#: src/elflint.c:2399
#, c-format
msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
msgstr ""
-#: src/elflint.c:2419 src/elflint.c:2484 src/elflint.c:2519
+#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523
#, c-format
msgid "hash section [%2zu] '%s' does not contain enough data\n"
msgstr ""
-#: src/elflint.c:2440
+#: src/elflint.c:2444
#, c-format
msgid "hash section [%2zu] '%s' has zero bit mask words\n"
msgstr ""
-#: src/elflint.c:2451 src/elflint.c:2495 src/elflint.c:2532
+#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536
#, c-format
msgid "hash section [%2zu] '%s' uses too much data\n"
msgstr ""
-#: src/elflint.c:2466
+#: src/elflint.c:2470
#, c-format
msgid ""
"hash section [%2zu] '%s' invalid symbol index %<PRIu32> (max_nsyms: "
"%<PRIu32>, nentries: %<PRIu32>\n"
msgstr ""
-#: src/elflint.c:2553
+#: src/elflint.c:2557
#, c-format
msgid "hash section [%2zu] '%s' invalid sh_entsize\n"
msgstr ""
-#: src/elflint.c:2563 src/elflint.c:2567
+#: src/elflint.c:2567 src/elflint.c:2571
#, c-format
msgid "section [%2zu] '%s': reference to symbol index 0\n"
msgstr ""
-#: src/elflint.c:2574
+#: src/elflint.c:2578
#, c-format
msgid ""
"symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash "
"table in [%2zu] '%s'\n"
msgstr ""
-#: src/elflint.c:2586
+#: src/elflint.c:2590
#, c-format
msgid ""
"symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash "
"table in [%2zu] '%s'\n"
msgstr ""
-#: src/elflint.c:2602
+#: src/elflint.c:2606
#, c-format
msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
msgstr ""
-#: src/elflint.c:2622
+#: src/elflint.c:2626
#, c-format
msgid ""
"section [%2d] '%s': section groups only allowed in relocatable object files\n"
msgstr ""
-#: src/elflint.c:2633
+#: src/elflint.c:2637
#, c-format
msgid "section [%2d] '%s': cannot get symbol table: %s\n"
msgstr ""
-#: src/elflint.c:2638
+#: src/elflint.c:2642
#, c-format
msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
msgstr ""
-#: src/elflint.c:2644
+#: src/elflint.c:2648
#, c-format
msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
msgstr ""
-#: src/elflint.c:2649
+#: src/elflint.c:2653
#, c-format
msgid "section [%2d] '%s': sh_flags not zero\n"
msgstr ""
-#: src/elflint.c:2656
+#: src/elflint.c:2660
#, c-format
msgid "section [%2d] '%s': cannot get symbol for signature\n"
msgstr ""
-#: src/elflint.c:2660
+#: src/elflint.c:2664
#, c-format
msgid "section [%2d] '%s': cannot get symbol name for signature\n"
msgstr ""
-#: src/elflint.c:2665
+#: src/elflint.c:2669
#, c-format
msgid "section [%2d] '%s': signature symbol cannot be empty string\n"
msgstr ""
-#: src/elflint.c:2671
+#: src/elflint.c:2675
#, c-format
msgid "section [%2d] '%s': sh_flags not set correctly\n"
msgstr ""
-#: src/elflint.c:2677
+#: src/elflint.c:2681
#, c-format
msgid "section [%2d] '%s': cannot get data: %s\n"
msgstr ""
-#: src/elflint.c:2686
+#: src/elflint.c:2690
#, c-format
msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
msgstr ""
-#: src/elflint.c:2692
+#: src/elflint.c:2696
#, c-format
msgid "section [%2d] '%s': section group without flags word\n"
msgstr ""
-#: src/elflint.c:2700
+#: src/elflint.c:2704
#, c-format
msgid "section [%2d] '%s': section group without member\n"
msgstr ""
-#: src/elflint.c:2704
+#: src/elflint.c:2708
#, c-format
msgid "section [%2d] '%s': section group with only one member\n"
msgstr ""
-#: src/elflint.c:2715
+#: src/elflint.c:2719
#, c-format
msgid "section [%2d] '%s': unknown section group flags\n"
msgstr ""
-#: src/elflint.c:2727
+#: src/elflint.c:2731
#, fuzzy, c-format
msgid "section [%2d] '%s': section index %zu out of range\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elflint.c:2736
+#: src/elflint.c:2740
#, c-format
msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
msgstr ""
-#: src/elflint.c:2743
+#: src/elflint.c:2747
#, c-format
msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
msgstr ""
-#: src/elflint.c:2749
+#: src/elflint.c:2753
#, c-format
msgid ""
"section [%2d] '%s': element %zu references section [%2d] '%s' without "
"SHF_GROUP flag set\n"
msgstr ""
-#: src/elflint.c:2756
+#: src/elflint.c:2760
#, c-format
msgid "section [%2d] '%s' is contained in more than one section group\n"
msgstr ""
-#: src/elflint.c:2946
+#: src/elflint.c:2950
#, c-format
msgid ""
"section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no "
"dynamic symbol table\n"
msgstr ""
-#: src/elflint.c:2958
+#: src/elflint.c:2962
#, c-format
msgid ""
"section [%2d] '%s' has different number of entries than symbol table [%2d] "
"'%s'\n"
msgstr ""
-#: src/elflint.c:2974
+#: src/elflint.c:2978
#, c-format
msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
msgstr ""
-#: src/elflint.c:2990
+#: src/elflint.c:2994
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
msgstr ""
-#: src/elflint.c:2998
+#: src/elflint.c:3002
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
msgstr ""
-#: src/elflint.c:3012
+#: src/elflint.c:3016
#, c-format
msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
msgstr ""
-#: src/elflint.c:3017
+#: src/elflint.c:3021
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for defined version\n"
msgstr ""
-#: src/elflint.c:3027
+#: src/elflint.c:3031
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for requested version\n"
msgstr ""
-#: src/elflint.c:3080
+#: src/elflint.c:3084
#, c-format
msgid "more than one version reference section present\n"
msgstr ""
-#: src/elflint.c:3088 src/elflint.c:3235
+#: src/elflint.c:3092 src/elflint.c:3239
#, c-format
msgid "section [%2d] '%s': sh_link does not link to string table\n"
msgstr ""
-#: src/elflint.c:3113 src/elflint.c:3289
+#: src/elflint.c:3117 src/elflint.c:3293
#, c-format
msgid "section [%2d] '%s': entry %d has wrong version %d\n"
msgstr ""
-#: src/elflint.c:3120 src/elflint.c:3296
+#: src/elflint.c:3124 src/elflint.c:3300
#, c-format
msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
msgstr ""
-#: src/elflint.c:3130
+#: src/elflint.c:3134
#, c-format
msgid "section [%2d] '%s': entry %d has invalid file reference\n"
msgstr ""
-#: src/elflint.c:3138
+#: src/elflint.c:3142
#, c-format
msgid "section [%2d] '%s': entry %d references unknown dependency\n"
msgstr ""
-#: src/elflint.c:3150
+#: src/elflint.c:3154
#, c-format
msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
msgstr ""
-#: src/elflint.c:3158
+#: src/elflint.c:3162
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name "
"reference\n"
msgstr ""
-#: src/elflint.c:3167
+#: src/elflint.c:3171
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: "
"%#x, expected %#x\n"
msgstr ""
-#: src/elflint.c:3176
+#: src/elflint.c:3180
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version "
"name '%s'\n"
msgstr ""
-#: src/elflint.c:3187
+#: src/elflint.c:3191
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
msgstr ""
-#: src/elflint.c:3204 src/elflint.c:3380
+#: src/elflint.c:3208 src/elflint.c:3384
#, c-format
msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
msgstr ""
-#: src/elflint.c:3212 src/elflint.c:3388
+#: src/elflint.c:3216 src/elflint.c:3392
#, c-format
msgid ""
"section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says "
"there are more entries\n"
msgstr ""
-#: src/elflint.c:3227
+#: src/elflint.c:3231
#, c-format
msgid "more than one version definition section present\n"
msgstr ""
-#: src/elflint.c:3274
+#: src/elflint.c:3278
#, c-format
msgid "section [%2d] '%s': more than one BASE definition\n"
msgstr ""
-#: src/elflint.c:3278
+#: src/elflint.c:3282
#, c-format
msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
msgstr ""
-#: src/elflint.c:3284
+#: src/elflint.c:3288
#, c-format
msgid "section [%2d] '%s': entry %d has unknown flag\n"
msgstr ""
-#: src/elflint.c:3311
+#: src/elflint.c:3315
#, c-format
msgid "section [%2d] '%s': entry %d has invalid name reference\n"
msgstr ""
-#: src/elflint.c:3318
+#: src/elflint.c:3322
#, c-format
msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
msgstr ""
-#: src/elflint.c:3326
+#: src/elflint.c:3330
#, c-format
msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
msgstr ""
-#: src/elflint.c:3346
+#: src/elflint.c:3350
#, c-format
msgid ""
"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
msgstr ""
-#: src/elflint.c:3363
+#: src/elflint.c:3367
#, c-format
msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
msgstr ""
-#: src/elflint.c:3396
+#: src/elflint.c:3400
#, c-format
msgid "section [%2d] '%s': no BASE definition\n"
msgstr ""
-#: src/elflint.c:3412
+#: src/elflint.c:3416
#, c-format
msgid "section [%2d] '%s': unknown parent version '%s'\n"
msgstr ""
-#: src/elflint.c:3425
+#: src/elflint.c:3429
#, c-format
msgid "section [%2d] '%s': empty object attributes section\n"
msgstr ""
-#: src/elflint.c:3446
+#: src/elflint.c:3450
#, c-format
msgid "section [%2d] '%s': unrecognized attribute format\n"
msgstr ""
-#: src/elflint.c:3462
+#: src/elflint.c:3466
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute section\n"
msgstr ""
-#: src/elflint.c:3471
+#: src/elflint.c:3475
#, c-format
msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n"
msgstr ""
-#: src/elflint.c:3483
+#: src/elflint.c:3487
#, c-format
msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n"
msgstr ""
-#: src/elflint.c:3500
+#: src/elflint.c:3504
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
msgstr ""
-#: src/elflint.c:3509
+#: src/elflint.c:3513
#, c-format
msgid "section [%2d] '%s': offset %zu: truncated attribute section\n"
msgstr ""
-#: src/elflint.c:3518
+#: src/elflint.c:3522
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
msgstr ""
-#: src/elflint.c:3533
+#: src/elflint.c:3537
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
msgstr ""
#. Tag_File
-#: src/elflint.c:3544
+#: src/elflint.c:3548
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
msgstr ""
-#: src/elflint.c:3562
+#: src/elflint.c:3566
#, c-format
msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"
msgstr ""
-#: src/elflint.c:3573
+#: src/elflint.c:3577
#, c-format
msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n"
msgstr ""
-#: src/elflint.c:3586
+#: src/elflint.c:3590
#, c-format
msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"
msgstr ""
-#: src/elflint.c:3590
+#: src/elflint.c:3594
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
msgstr ""
-#: src/elflint.c:3600
+#: src/elflint.c:3604
#, c-format
msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n"
msgstr ""
-#: src/elflint.c:3606
+#: src/elflint.c:3610
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
msgstr ""
-#: src/elflint.c:3695
+#: src/elflint.c:3699
#, c-format
msgid "cannot get section header of zeroth section\n"
msgstr ""
-#: src/elflint.c:3699
+#: src/elflint.c:3703
#, c-format
msgid "zeroth section has nonzero name\n"
msgstr ""
-#: src/elflint.c:3701
+#: src/elflint.c:3705
#, c-format
msgid "zeroth section has nonzero type\n"
msgstr ""
-#: src/elflint.c:3703
+#: src/elflint.c:3707
#, c-format
msgid "zeroth section has nonzero flags\n"
msgstr ""
-#: src/elflint.c:3705
+#: src/elflint.c:3709
#, c-format
msgid "zeroth section has nonzero address\n"
msgstr ""
-#: src/elflint.c:3707
+#: src/elflint.c:3711
#, c-format
msgid "zeroth section has nonzero offset\n"
msgstr ""
-#: src/elflint.c:3709
+#: src/elflint.c:3713
#, c-format
msgid "zeroth section has nonzero align value\n"
msgstr ""
-#: src/elflint.c:3711
+#: src/elflint.c:3715
#, c-format
msgid "zeroth section has nonzero entry size value\n"
msgstr ""
-#: src/elflint.c:3714
+#: src/elflint.c:3718
#, c-format
msgid ""
"zeroth section has nonzero size value while ELF header has nonzero shnum "
"value\n"
msgstr ""
-#: src/elflint.c:3718
+#: src/elflint.c:3722
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
"overflow in shstrndx\n"
msgstr ""
-#: src/elflint.c:3722
+#: src/elflint.c:3726
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
"overflow in phnum\n"
msgstr ""
-#: src/elflint.c:3740
+#: src/elflint.c:3744
#, c-format
msgid "cannot get section header for section [%2zu] '%s': %s\n"
msgstr ""
-#: src/elflint.c:3749
+#: src/elflint.c:3753
#, c-format
msgid "section [%2zu]: invalid name\n"
msgstr ""
-#: src/elflint.c:3776
+#: src/elflint.c:3780
#, c-format
msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n"
msgstr ""
-#: src/elflint.c:3794
+#: src/elflint.c:3798
#, c-format
msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n"
msgstr ""
-#: src/elflint.c:3812
+#: src/elflint.c:3816
#, c-format
msgid ""
"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
msgstr ""
-#: src/elflint.c:3830
+#: src/elflint.c:3834
#, c-format
msgid "section [%2zu] '%s' present in object file\n"
msgstr ""
-#: src/elflint.c:3836 src/elflint.c:3868
+#: src/elflint.c:3840 src/elflint.c:3872
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
msgstr ""
-#: src/elflint.c:3841 src/elflint.c:3873
+#: src/elflint.c:3845 src/elflint.c:3877
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable "
"segments\n"
msgstr ""
-#: src/elflint.c:3849
+#: src/elflint.c:3853
#, c-format
msgid ""
"section [%2zu] '%s' is extension section index table in non-object file\n"
msgstr ""
-#: src/elflint.c:3892
+#: src/elflint.c:3896
#, c-format
msgid "section [%2zu] '%s': size not multiple of entry size\n"
msgstr ""
-#: src/elflint.c:3897
+#: src/elflint.c:3901
#, c-format
msgid "cannot get section header\n"
msgstr ""
-#: src/elflint.c:3907
+#: src/elflint.c:3911
#, c-format
msgid "section [%2zu] '%s' has unsupported type %d\n"
msgstr ""
-#: src/elflint.c:3922
+#: src/elflint.c:3931
#, c-format
msgid ""
"section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:3929
+#: src/elflint.c:3938
#, c-format
msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:3937
+#: src/elflint.c:3946
#, c-format
msgid "section [%2zu] '%s': thread-local data sections address not zero\n"
msgstr ""
-#: src/elflint.c:3947
+#: src/elflint.c:3956
#, fuzzy, c-format
msgid "section [%2zu] '%s': allocated section cannot be compressed\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elflint.c:3952
+#: src/elflint.c:3961
#, fuzzy, c-format
msgid "section [%2zu] '%s': nobits section cannot be compressed\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/elflint.c:3958
+#: src/elflint.c:3967
#, c-format
msgid ""
"section [%2zu] '%s': compressed section with no compression header: %s\n"
msgstr ""
-#: src/elflint.c:3964
+#: src/elflint.c:3973
#, c-format
msgid "section [%2zu] '%s': invalid section reference in link value\n"
msgstr ""
-#: src/elflint.c:3969
+#: src/elflint.c:3978
#, c-format
msgid "section [%2zu] '%s': invalid section reference in info value\n"
msgstr ""
-#: src/elflint.c:3976
+#: src/elflint.c:3985
#, c-format
msgid "section [%2zu] '%s': strings flag set without merge flag\n"
msgstr ""
-#: src/elflint.c:3981
+#: src/elflint.c:3990
#, c-format
msgid "section [%2zu] '%s': merge flag set but entry size is zero\n"
msgstr ""
-#: src/elflint.c:4000
+#: src/elflint.c:4009
#, c-format
msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n"
msgstr ""
-#: src/elflint.c:4009
+#: src/elflint.c:4018
#, c-format
msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n"
msgstr ""
-#: src/elflint.c:4016
+#: src/elflint.c:4025
#, c-format
msgid "section [%2zu] '%s' is both executable and writable\n"
msgstr ""
-#: src/elflint.c:4047
+#: src/elflint.c:4056
#, c-format
msgid ""
"section [%2zu] '%s' not fully contained in segment of program header entry "
"%d\n"
msgstr ""
-#: src/elflint.c:4057
+#: src/elflint.c:4066
#, 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:4083
+#: src/elflint.c:4092
#, 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:4094
+#: src/elflint.c:4103
#, 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:4105
+#: src/elflint.c:4114
#, c-format
msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n"
msgstr ""
-#: src/elflint.c:4115
+#: src/elflint.c:4124
#, c-format
msgid "section [%2zu] '%s' is writable in unwritable segment %d\n"
msgstr ""
-#: src/elflint.c:4125
+#: src/elflint.c:4134
#, c-format
msgid ""
"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
msgstr ""
-#: src/elflint.c:4131
+#: src/elflint.c:4140
#, 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:4139
+#: src/elflint.c:4148
#, c-format
msgid ""
"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
msgstr ""
-#: src/elflint.c:4190
+#: src/elflint.c:4199
#, c-format
msgid "more than one version symbol table present\n"
msgstr ""
-#: src/elflint.c:4213
+#: src/elflint.c:4222
#, c-format
msgid "INTERP program header entry but no .interp section\n"
msgstr ""
-#: src/elflint.c:4224
+#: src/elflint.c:4233
#, c-format
msgid ""
"loadable segment [%u] is executable but contains no executable sections\n"
msgstr ""
-#: src/elflint.c:4230
+#: src/elflint.c:4239
#, c-format
msgid "loadable segment [%u] is writable but contains no writable sections\n"
msgstr ""
-#: src/elflint.c:4241
+#: src/elflint.c:4250
#, c-format
msgid ""
"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section "
"exist\n"
msgstr ""
-#: src/elflint.c:4254
+#: src/elflint.c:4263
#, c-format
msgid "duplicate version index %d\n"
msgstr ""
-#: src/elflint.c:4268
+#: src/elflint.c:4277
#, c-format
msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n"
msgstr ""
-#: src/elflint.c:4317
+#: src/elflint.c:4326
#, c-format
msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n"
msgstr ""
-#: src/elflint.c:4321
+#: src/elflint.c:4330
#, c-format
msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
msgstr ""
-#: src/elflint.c:4370
+#: src/elflint.c:4379
#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
"offset %zu\n"
msgstr ""
-#: src/elflint.c:4375
+#: src/elflint.c:4384
#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
"'%s' at offset %zu\n"
msgstr ""
-#: src/elflint.c:4394
+#: src/elflint.c:4403
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4414
+#: src/elflint.c:4423
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr ""
-#: src/elflint.c:4417
+#: src/elflint.c:4426
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4438
+#: src/elflint.c:4447
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4445
+#: src/elflint.c:4454
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr ""
-#: src/elflint.c:4448
+#: src/elflint.c:4457
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4466
+#: src/elflint.c:4475
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
msgstr ""
-#: src/elflint.c:4481
+#: src/elflint.c:4490
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr ""
-#: src/elflint.c:4490
+#: src/elflint.c:4500
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:4501
+#: src/elflint.c:4511
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr ""
-#: src/elflint.c:4509
+#: src/elflint.c:4519
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr ""
-#: src/elflint.c:4516
+#: src/elflint.c:4526
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr ""
-#: src/elflint.c:4530
+#: src/elflint.c:4540
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4533
+#: src/elflint.c:4543
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4543
+#: src/elflint.c:4553
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr ""
-#: src/elflint.c:4564
+#: src/elflint.c:4574
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr ""
-#: src/elflint.c:4575
+#: src/elflint.c:4585
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
-#: src/elflint.c:4582
+#: src/elflint.c:4592
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
-#: src/elflint.c:4591 src/elflint.c:4614
+#: src/elflint.c:4601 src/elflint.c:4624
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr ""
-#: src/elflint.c:4620
+#: src/elflint.c:4630
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr ""
-#: src/elflint.c:4647
+#: src/elflint.c:4657
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4650
+#: src/elflint.c:4660
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4663
+#: src/elflint.c:4673
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr ""
-#: src/elflint.c:4671
+#: src/elflint.c:4681
#, c-format
msgid "call frame search table must be allocated\n"
msgstr ""
-#: src/elflint.c:4674
+#: src/elflint.c:4684
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr ""
-#: src/elflint.c:4678
+#: src/elflint.c:4688
#, c-format
msgid "call frame search table must not be writable\n"
msgstr ""
-#: src/elflint.c:4681
+#: src/elflint.c:4691
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr ""
-#: src/elflint.c:4686
+#: src/elflint.c:4696
#, c-format
msgid "call frame search table must not be executable\n"
msgstr ""
-#: src/elflint.c:4689
+#: src/elflint.c:4699
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr ""
-#: src/elflint.c:4700
+#: src/elflint.c:4710
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr ""
-#: src/elflint.c:4707
+#: src/elflint.c:4717
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr ""
-#: src/elflint.c:4710
+#: src/elflint.c:4720
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
"alignment\n"
msgstr ""
-#: src/elflint.c:4723
+#: src/elflint.c:4733
#, 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:4757
+#: src/elflint.c:4767
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr ""
-#: src/elflint.c:4783
+#: src/elflint.c:4779
+#, fuzzy, c-format
+msgid "cannot create backend for ELF file\n"
+msgstr "neue Datei konnte nicht angelegt werden"
+
+#: src/elflint.c:4800
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr ""
@@ -3474,12 +3486,12 @@ msgstr "%s%s%s: Dateiformat nicht erkannt"
msgid "cannot create search tree"
msgstr "Kann Suchbaum nicht erstellen"
-#: src/nm.c:746 src/nm.c:1205 src/objdump.c:779 src/readelf.c:635
+#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:635
#: src/readelf.c:1447 src/readelf.c:1598 src/readelf.c:1799 src/readelf.c:2005
#: src/readelf.c:2195 src/readelf.c:2373 src/readelf.c:2449 src/readelf.c:2707
#: src/readelf.c:2783 src/readelf.c:2870 src/readelf.c:3468 src/readelf.c:3518
-#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12415
-#: src/readelf.c:12626 src/readelf.c:12695 src/size.c:398 src/size.c:470
+#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12420
+#: src/readelf.c:12631 src/readelf.c:12700 src/size.c:398 src/size.c:470
#: src/strip.c:1038
#, c-format
msgid "cannot get section header string table index"
@@ -3507,28 +3519,28 @@ msgid ""
"\n"
msgstr ""
-#: src/nm.c:1216
+#: src/nm.c:1250
#, 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:1221
+#: src/nm.c:1255
#, 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:1300
+#: src/nm.c:1334
#, 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:1527
+#: src/nm.c:1570
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: Ungültige Operation"
-#: src/nm.c:1584
+#: src/nm.c:1620
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: keine Symbole"
@@ -3602,6 +3614,11 @@ msgstr "Inhalt des Abschnitts %s:\n"
msgid "cannot disassemble"
msgstr "Disassemblieren nicht möglich"
+#: src/objdump.c:760
+#, fuzzy, c-format
+msgid "cannot create backend for elf file"
+msgstr "neue Datei konnte nicht angelegt werden"
+
#. Short description of program.
#: src/ranlib.c:63
msgid "Generate an index to speed access to archives."
@@ -3791,7 +3808,7 @@ msgstr ""
msgid "cannot get section: %s"
msgstr ""
-#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12646
+#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12651
#: src/unstrip.c:395 src/unstrip.c:426 src/unstrip.c:485 src/unstrip.c:604
#: src/unstrip.c:625 src/unstrip.c:665 src/unstrip.c:881 src/unstrip.c:1212
#: src/unstrip.c:1339 src/unstrip.c:1363 src/unstrip.c:1419 src/unstrip.c:1483
@@ -4163,8 +4180,8 @@ msgstr ""
msgid "<INVALID SECTION>"
msgstr ""
-#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12517
-#: src/readelf.c:12524 src/readelf.c:12568 src/readelf.c:12575
+#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12522
+#: src/readelf.c:12529 src/readelf.c:12573 src/readelf.c:12580
msgid "Couldn't uncompress section"
msgstr ""
@@ -5442,67 +5459,67 @@ msgstr ""
msgid "cannot get debug context descriptor: %s"
msgstr ""
-#: src/readelf.c:11449 src/readelf.c:12071 src/readelf.c:12182
-#: src/readelf.c:12240
+#: src/readelf.c:11454 src/readelf.c:12076 src/readelf.c:12187
+#: src/readelf.c:12245
#, c-format
msgid "cannot convert core note data: %s"
msgstr ""
-#: src/readelf.c:11812
+#: src/readelf.c:11817
#, c-format
msgid ""
"\n"
"%*s... <repeats %u more times> ..."
msgstr ""
-#: src/readelf.c:12319
+#: src/readelf.c:12324
msgid " Owner Data size Type\n"
msgstr ""
-#: src/readelf.c:12348
+#: src/readelf.c:12353
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr ""
-#: src/readelf.c:12400
+#: src/readelf.c:12405
#, fuzzy, c-format
msgid "cannot get content of note: %s"
msgstr "Konnte Inhalt von %s: %s nicht lesen"
-#: src/readelf.c:12434
+#: src/readelf.c:12439
#, c-format
msgid ""
"\n"
"Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12457
+#: src/readelf.c:12462
#, c-format
msgid ""
"\n"
"Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12504
+#: src/readelf.c:12509
#, fuzzy, c-format
msgid ""
"\n"
"Section [%zu] '%s' has no data to dump.\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:12531 src/readelf.c:12582
+#: src/readelf.c:12536 src/readelf.c:12587
#, fuzzy, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:12536
+#: src/readelf.c:12541
#, c-format
msgid ""
"\n"
"Hex dump of section [%zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12541
+#: src/readelf.c:12546
#, c-format
msgid ""
"\n"
@@ -5510,21 +5527,21 @@ msgid ""
"%#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12555
+#: src/readelf.c:12560
#, fuzzy, c-format
msgid ""
"\n"
"Section [%zu] '%s' has no strings to dump.\n"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/readelf.c:12587
+#: src/readelf.c:12592
#, c-format
msgid ""
"\n"
"String section [%zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12592
+#: src/readelf.c:12597
#, c-format
msgid ""
"\n"
@@ -5532,45 +5549,45 @@ msgid ""
"offset %#0<PRIx64>:\n"
msgstr ""
-#: src/readelf.c:12641
+#: src/readelf.c:12646
#, c-format
msgid ""
"\n"
"section [%lu] does not exist"
msgstr ""
-#: src/readelf.c:12671
+#: src/readelf.c:12676
#, c-format
msgid ""
"\n"
"section '%s' does not exist"
msgstr ""
-#: src/readelf.c:12728
+#: src/readelf.c:12733
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr ""
-#: src/readelf.c:12731
+#: src/readelf.c:12736
#, c-format
msgid ""
"\n"
"Archive '%s' has no symbol index\n"
msgstr ""
-#: src/readelf.c:12735
+#: src/readelf.c:12740
#, c-format
msgid ""
"\n"
"Index of archive '%s' has %zu entries:\n"
msgstr ""
-#: src/readelf.c:12753
+#: src/readelf.c:12758
#, fuzzy, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "konnte Programm-Kopf nicht erstellen: %s"
-#: src/readelf.c:12758
+#: src/readelf.c:12763
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr ""
@@ -5633,7 +5650,7 @@ msgstr ""
msgid "%s: file format not recognized"
msgstr ""
-#: src/size.c:418 src/size.c:557
+#: src/size.c:418 src/size.c:560
#, c-format
msgid " (ex %s)"
msgstr ""
@@ -5643,7 +5660,7 @@ msgstr ""
msgid "cannot get section header"
msgstr "konnte Abschnittsdaten nicht holen: %s"
-#: src/size.c:582
+#: src/size.c:585
msgid "(TOTALS)\n"
msgstr ""
diff --git a/po/es.po b/po/es.po
index 0d32a5de..c3558bd7 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: 2019-11-26 09:48+0100\n"
+"POT-Creation-Date: 2020-06-11 15:50+0200\n"
"PO-Revision-Date: 2011-01-10 15:17-0300\n"
"Last-Translator: Claudio Rodrigo Pereyra Diaz <claudiorodrigo@pereyradiaz."
"com.ar>\n"
@@ -58,7 +58,7 @@ msgstr ""
"DETERMINADO.\n"
#: lib/xmalloc.c:52 lib/xmalloc.c:65 lib/xmalloc.c:77 src/readelf.c:3449
-#: src/readelf.c:11398 src/unstrip.c:2393 src/unstrip.c:2599
+#: src/readelf.c:11403 src/unstrip.c:2393 src/unstrip.c:2599
#, c-format
msgid "memory exhausted"
msgstr "memoria agotada"
@@ -531,7 +531,7 @@ msgstr "No hay segundo plano (Backend)"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77
#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
-#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:79
+#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
msgstr "<desconocido>"
@@ -1690,14 +1690,14 @@ msgstr ""
"sección [%2d] '%s': el grupo de sección [%2zu] '%s' no precede al miembro de "
"grupo\n"
-#: src/elflint.c:610 src/elflint.c:1494 src/elflint.c:1545 src/elflint.c:1651
-#: src/elflint.c:1987 src/elflint.c:2313 src/elflint.c:2932 src/elflint.c:3095
-#: src/elflint.c:3243 src/elflint.c:3433 src/elflint.c:4431
+#: 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:2936 src/elflint.c:3099
+#: src/elflint.c:3247 src/elflint.c:3437 src/elflint.c:4440
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n"
-#: src/elflint.c:623 src/elflint.c:1658
+#: src/elflint.c:623 src/elflint.c:1662
#, c-format
msgid ""
"section [%2d] '%s': referenced as string table for section [%2d] '%s' but "
@@ -1721,33 +1721,42 @@ msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
msgstr ""
"sección [%2u] '%s': el tamaño de la entrada no coincide con ElfXX_Sym\n"
-#: src/elflint.c:667
+#: src/elflint.c:662
+#, fuzzy, c-format
+msgid ""
+"section [%2u] '%s': number of local entries in 'st_info' larger than table "
+"size\n"
+msgstr ""
+"Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de "
+"archivo\n"
+
+#: src/elflint.c:671
#, c-format
msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
msgstr "Sección [%2d] '%s': no se puede obtener símbolo %d: %s\n"
-#: src/elflint.c:672 src/elflint.c:675 src/elflint.c:678 src/elflint.c:681
-#: src/elflint.c:684 src/elflint.c:687
+#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685
+#: src/elflint.c:688 src/elflint.c:691
#, c-format
msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
msgstr "Sección [%2d] '%s': '%s' en la entrada zeroth no es cero\n"
-#: src/elflint.c:690
+#: src/elflint.c:694
#, c-format
msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
msgstr "sección [%2d] '%s': XINDEX en la entrada zeroth no es cero\n"
-#: src/elflint.c:700
+#: src/elflint.c:704
#, c-format
msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
msgstr "sección [%2d] '%s': no es posible obtener el símbolo %zu: %s\n"
-#: src/elflint.c:709
+#: src/elflint.c:713
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
msgstr "sección [%2d] '%s': símbolo %zu: valor de nombre inválido\n"
-#: src/elflint.c:724
+#: src/elflint.c:728
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: too large section index but no extended "
@@ -1756,7 +1765,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: el índice de sección es demasiado extenso, "
"pero no la sección extendida de la sección de índice\n"
-#: src/elflint.c:730
+#: src/elflint.c:734
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in "
@@ -1766,27 +1775,27 @@ msgstr ""
"caber en st_shndx (%<PRIu32>)\n"
#. || sym->st_shndx > SHN_HIRESERVE always false
-#: src/elflint.c:742
+#: src/elflint.c:746
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
msgstr "sección [%2d] '%s': símbolo %zu: índice de sección inválido\n"
-#: src/elflint.c:750
+#: src/elflint.c:754
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown type\n"
msgstr "sección [%2d] '%s': símbolo %zu: tipo desconocido\n"
-#: src/elflint.c:756
+#: src/elflint.c:760
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
msgstr "sección [%2d] '%s': símbolo %zu: asociación de símbolo desconocida\n"
-#: src/elflint.c:761
+#: src/elflint.c:765
#, c-format
msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n"
msgstr "Sección [%2d] '%s': símbolo %zu: símbolo único no de tipo de objeto\n"
-#: src/elflint.c:769
+#: src/elflint.c:773
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
@@ -1794,25 +1803,25 @@ msgstr ""
"sección [%2d] '%s': símbolo %zu: COMMON solo es permitido en archivos "
"realojables\n"
-#: src/elflint.c:773
+#: src/elflint.c:777
#, c-format
msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
msgstr ""
"Sección [%2d] '%s': símbolo %zu: símbolos locales COMMON no tienen sentido\n"
-#: src/elflint.c:777
+#: src/elflint.c:781
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
msgstr ""
"Sección [%2d] '%s': símbolo %zu: función en sección COMMON no tiene sentido\n"
-#: src/elflint.c:828
+#: src/elflint.c:832
#, c-format
msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
msgstr "sección [%2d] '%s': símbolo %zu: st_value fuera de límites\n"
-#: src/elflint.c:834 src/elflint.c:859 src/elflint.c:908
+#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu does not fit completely in referenced section "
@@ -1821,7 +1830,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu no se ajusta totalmente en la sección [%2d] "
"'%s'\n"
-#: src/elflint.c:843
+#: src/elflint.c:847
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have "
@@ -1830,7 +1839,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: sección de referencia [%2d] '%s' no tiene "
"establecida bandera SHF_TLS\n"
-#: src/elflint.c:853 src/elflint.c:901
+#: src/elflint.c:857 src/elflint.c:905
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section "
@@ -1839,7 +1848,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: st_value fuera de límites de sección de "
"referencia [%2d] '%s'\n"
-#: src/elflint.c:880
+#: src/elflint.c:884
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
@@ -1847,7 +1856,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de "
"programa TLS\n"
-#: src/elflint.c:886
+#: src/elflint.c:890
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but couldn't get TLS program "
@@ -1856,7 +1865,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de "
"programa TLS\n"
-#: src/elflint.c:894
+#: src/elflint.c:898
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] "
@@ -1865,7 +1874,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: st_value falta sección de referencia [%2d] "
"'%s'\n"
-#: src/elflint.c:921
+#: src/elflint.c:925
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: local symbol outside range described in "
@@ -1874,7 +1883,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: símbolo local fuera del rango descrito en "
"sh_info\n"
-#: src/elflint.c:928
+#: src/elflint.c:932
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: non-local symbol outside range described in "
@@ -1883,12 +1892,12 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: símbolo non-local fuera del rango descrito "
"en sh_info\n"
-#: src/elflint.c:935
+#: src/elflint.c:939
#, c-format
msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
msgstr "Sección [%2d] '%s': símbolo %zu: símbolo de sección non-local\n"
-#: src/elflint.c:985
+#: src/elflint.c:989
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section "
@@ -1897,7 +1906,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección "
"errada [%2d]\n"
-#: src/elflint.c:992
+#: src/elflint.c:996
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] "
@@ -1909,7 +1918,7 @@ msgstr ""
#. This test is more strict than the psABIs which
#. usually allow the symbol to be in the middle of
#. the .got section, allowing negative offsets.
-#: src/elflint.c:1008
+#: src/elflint.c:1012
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not "
@@ -1918,7 +1927,7 @@ msgstr ""
"Sección [%2d] '%s': valor del símbolo _GLOBAL_OFFSET_TABLE_ %#<PRIx64> no "
"coincide con dirección de sección %s %#<PRIx64>\n"
-#: src/elflint.c:1015
+#: src/elflint.c:1019
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not "
@@ -1927,7 +1936,7 @@ msgstr ""
"Sección [%2d] '%s': tamaño de símbolo _GLOBAL_OFFSET_TABLE_ %<PRIu64> no "
"coincide con tamaño de sección %s %<PRIu64>\n"
-#: src/elflint.c:1023
+#: src/elflint.c:1027
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got "
@@ -1936,7 +1945,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ presente, pero no. sección "
"got\n"
-#: src/elflint.c:1039
+#: src/elflint.c:1043
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic "
@@ -1945,7 +1954,7 @@ msgstr ""
"sección [%2d] '%s': Valor de símbolo _DYNAMIC_ %#<PRIx64> no coincide con la "
"dirección de segmento%#<PRIx64>\n"
-#: src/elflint.c:1046
+#: src/elflint.c:1050
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic "
@@ -1954,7 +1963,7 @@ msgstr ""
"Sección [%2d] '%s': tamaño de símbolo _DYNAMIC %<PRIu64> no coincide con "
"tamaño de segmento %<PRIu64>\n"
-#: src/elflint.c:1059
+#: src/elflint.c:1063
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-"
@@ -1963,29 +1972,29 @@ msgstr ""
"Sección [%2d] '%s': símbolo %zu: símbolo en tabla de símbolos dinámicos sin "
"visibilidad predeterminada\n"
-#: src/elflint.c:1063
+#: src/elflint.c:1067
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"
msgstr ""
"Sección [%2d] '%s': símbolo %zu: bit desconocido establecido en st_other\n"
-#: src/elflint.c:1101
+#: src/elflint.c:1105
#, fuzzy, c-format
msgid "section [%2d] '%s': cannot get section data.\n"
msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n"
-#: src/elflint.c:1117
+#: src/elflint.c:1121
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
msgstr "Sección [%2d] '%s': DT_RELCOUNT utilizada para esta sección RELA\n"
-#: src/elflint.c:1128 src/elflint.c:1181
+#: src/elflint.c:1132 src/elflint.c:1185
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
msgstr ""
"Sección [%2d] '%s': valor DT_RELCOUNT %d demasiado alto para esta sección\n"
-#: src/elflint.c:1153 src/elflint.c:1206
+#: src/elflint.c:1157 src/elflint.c:1210
#, c-format
msgid ""
"section [%2d] '%s': relative relocations after index %d as specified by "
@@ -1994,7 +2003,7 @@ msgstr ""
"Sección [%2d] '%s': reubicaciones relativas después de que el %d de índice "
"haya sido especificado por DT_RELCOUNT\n"
-#: src/elflint.c:1159 src/elflint.c:1212
+#: src/elflint.c:1163 src/elflint.c:1216
#, c-format
msgid ""
"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT "
@@ -2003,50 +2012,50 @@ msgstr ""
"Sección [%2d] '%s': reubicación no-relativa en %zu de índice; DT_RELCOUNT "
"especificado %d reubicaciones relativas\n"
-#: src/elflint.c:1171
+#: src/elflint.c:1175
#, c-format
msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
msgstr "sección [%2d] '%s': DT_RELACOUNT utilizado para esta sección REL\n"
-#: src/elflint.c:1254
+#: src/elflint.c:1258
#, c-format
msgid "section [%2d] '%s': invalid destination section index\n"
msgstr "Sección [%2d] '%s': índice de sección de destino inválido\n"
-#: src/elflint.c:1266
+#: src/elflint.c:1270
#, c-format
msgid "section [%2d] '%s': invalid destination section type\n"
msgstr "Sección [%2d] '%s': tipo de sección de destino inválido\n"
-#: src/elflint.c:1274
+#: src/elflint.c:1278
#, c-format
msgid "section [%2d] '%s': sh_info should be zero\n"
msgstr "Sección [%2d] '%s': sh_info debe ser cero\n"
-#: src/elflint.c:1282
+#: src/elflint.c:1286
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': no relocations for merge-able string sections possible\n"
msgstr ""
"Sección [%2d] '%s': no reubicaciones para secciones de fusión posibles\n"
-#: src/elflint.c:1290
+#: src/elflint.c:1294
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
msgstr ""
"Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Rela\n"
-#: src/elflint.c:1350
+#: src/elflint.c:1354
#, c-format
msgid "text relocation flag set but there is no read-only segment\n"
msgstr "Reubicación de bandera pero no hay segmento de sólo lectura\n"
-#: src/elflint.c:1377
+#: src/elflint.c:1381
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid type\n"
msgstr "Sección [%2d] '%s': reubicación %zu: tipo inválido\n"
-#: src/elflint.c:1385
+#: src/elflint.c:1389
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: relocation type invalid for the file "
@@ -2055,12 +2064,12 @@ msgstr ""
"Sección [%2d] '%s': reubicación %zu: tipo de reubicación inválido para el "
"tipo de archivo\n"
-#: src/elflint.c:1393
+#: src/elflint.c:1397
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
msgstr "Sección [%2d] '%s': reubicación %zu: índice de símbolo inválido\n"
-#: src/elflint.c:1411
+#: src/elflint.c:1415
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can "
@@ -2069,12 +2078,12 @@ msgstr ""
"Sección [%2d] '%s': reubicación %zu: sólo el símbolo '_GLOBAL_OFFSET_TABLE_' "
"puede utilizarse con %s\n"
-#: src/elflint.c:1428
+#: src/elflint.c:1432
#, c-format
msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
msgstr "Sección [%2d] '%s': reubicación %zu: compensación fuera de límites\n"
-#: src/elflint.c:1443
+#: src/elflint.c:1447
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: copy relocation against symbol of type "
@@ -2083,7 +2092,7 @@ msgstr ""
"Sección [%2d] '%s': reubicación %zu: reubicación de copia con símbolo de "
"tipo %s\n"
-#: src/elflint.c:1464
+#: src/elflint.c:1468
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: read-only section modified but text "
@@ -2092,24 +2101,24 @@ msgstr ""
"Sección [%2d] '%s': reubicación %zu: sección de sólo-lectura modificada, "
"pero no se estableció bandera de reubicación\n"
-#: src/elflint.c:1479
+#: src/elflint.c:1483
#, c-format
msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
msgstr ""
"Sección [%2d] '%s': las reubicaciones se hacen con datos cargados y "
"descargados\n"
-#: src/elflint.c:1519 src/elflint.c:1570
+#: src/elflint.c:1523 src/elflint.c:1574
#, c-format
msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
msgstr "Sección [%2d] '%s': no puede obtener reubicación %zu: %s\n"
-#: src/elflint.c:1646
+#: src/elflint.c:1650
#, c-format
msgid "more than one dynamic section present\n"
msgstr "más de una sección dinámica presente\n"
-#: src/elflint.c:1664
+#: src/elflint.c:1668
#, fuzzy, c-format
msgid ""
"section [%2d]: referenced as string table for section [%2d] '%s' but section "
@@ -2118,44 +2127,44 @@ msgstr ""
"sección [%2d] '%s': nombrado como una tabla de cadena para la sección [%2d] "
"'%s' pero el tipo no es SHT_STRTAB\n"
-#: src/elflint.c:1672
+#: src/elflint.c:1676
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
msgstr ""
"Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Dyn\n"
-#: src/elflint.c:1677 src/elflint.c:1966
+#: src/elflint.c:1681 src/elflint.c:1970
#, c-format
msgid "section [%2d] '%s': sh_info not zero\n"
msgstr "Sección [%2d] '%s': sh_info no es cero\n"
-#: src/elflint.c:1687
+#: src/elflint.c:1691
#, c-format
msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
msgstr ""
"Sección [%2d] '%s': no puede obtener entrada de sección dinámica %zu: %s\n"
-#: src/elflint.c:1695
+#: src/elflint.c:1699
#, c-format
msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
msgstr "Sección [%2d] '%s': entradas non-DT_NULL siguen a la entrada DT_NULL\n"
-#: src/elflint.c:1702
+#: src/elflint.c:1706
#, c-format
msgid "section [%2d] '%s': entry %zu: unknown tag\n"
msgstr "Sección [%2d] '%s': entrada %zu: etiqueta desconocida\n"
-#: src/elflint.c:1713
+#: src/elflint.c:1717
#, c-format
msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
msgstr "Sección [%2d] '%s': entrada %zu: más de una entrada con etiqueta %s\n"
-#: src/elflint.c:1723
+#: src/elflint.c:1727
#, c-format
msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
msgstr "Sección [%2d] '%s': entrada %zu: nivel 2 etiqueta %s utilizada\n"
-#: src/elflint.c:1741
+#: src/elflint.c:1745
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
@@ -2163,7 +2172,7 @@ msgstr ""
"Sección [%2d] '%s': entrada %zu: el valor DT_PLTREL debe ser DT_REL or "
"DT_RELA\n"
-#: src/elflint.c:1754
+#: src/elflint.c:1758
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: pointer does not match address of section "
@@ -2172,14 +2181,14 @@ msgstr ""
"Sección [%2d] '%s': entrada %zu: puntero no coincide con dirección de "
"sección [%2d] '%s' al que hace referencia sh_link\n"
-#: src/elflint.c:1797
+#: src/elflint.c:1801
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
msgstr ""
"Sección [%2d] '%s': entrada %zu: valor %s debe apuntar en segmento cargado\n"
-#: src/elflint.c:1812
+#: src/elflint.c:1816
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must be valid offset in section "
@@ -2188,46 +2197,46 @@ msgstr ""
"sección [%2d] '%s': entrada %zu: valor %s debe ser compensación válida en "
"sección [%2d] '%s'\n"
-#: src/elflint.c:1832 src/elflint.c:1860
+#: src/elflint.c:1836 src/elflint.c:1864
#, c-format
msgid "section [%2d] '%s': contains %s entry but not %s\n"
msgstr "Sección [%2d] '%s': contiene entrada %s pero no %s\n"
-#: src/elflint.c:1844
+#: src/elflint.c:1848
#, c-format
msgid "section [%2d] '%s': mandatory tag %s not present\n"
msgstr "Sección [%2d] '%s': etiqueta obligatoria %s no está presente\n"
-#: src/elflint.c:1853
+#: src/elflint.c:1857
#, c-format
msgid "section [%2d] '%s': no hash section present\n"
msgstr "Sección [%2d] '%s': no hay sección de dispersión presente\n"
-#: src/elflint.c:1868 src/elflint.c:1875
+#: src/elflint.c:1872 src/elflint.c:1879
#, c-format
msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
msgstr "Sección [%2d] '%s': no todas las %s, %s, y %s están presentes\n"
-#: src/elflint.c:1885 src/elflint.c:1889
+#: src/elflint.c:1889 src/elflint.c:1893
#, c-format
msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
msgstr ""
"Sección [%2d] '%s': etiqueta %s faltante en DSO marcada durante el pre-"
"enlace\n"
-#: src/elflint.c:1895
+#: src/elflint.c:1899
#, c-format
msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
msgstr ""
"Sección [%2d] '%s': archivo no-DSO marcado como dependencia durante el pre-"
"enlace\n"
-#: src/elflint.c:1906 src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918
+#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922
#, c-format
msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
msgstr "Sección [%2d] '%s': etiqueta %s faltante en pre-enlace ejecutable\n"
-#: src/elflint.c:1930
+#: src/elflint.c:1934
#, c-format
msgid ""
"section [%2d] '%s': only relocatable files can have extended section index\n"
@@ -2235,37 +2244,37 @@ msgstr ""
"Sección [%2d] '%s': sólo los archivos reubicables pueden tener índice de "
"sección extendido\n"
-#: src/elflint.c:1940
+#: src/elflint.c:1944
#, c-format
msgid ""
"section [%2d] '%s': extended section index section not for symbol table\n"
msgstr ""
"Sección [%2d] '%s': índice de sección extendido no para tabla de símbolos\n"
-#: src/elflint.c:1944
+#: src/elflint.c:1948
#, fuzzy, c-format
msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n"
msgstr ""
"Sección [%2d] '%s': índice de sección extendido no para tabla de símbolos\n"
-#: src/elflint.c:1949
+#: src/elflint.c:1953
#, c-format
msgid "cannot get data for symbol section\n"
msgstr "no se puede obtener sección para símbolos\n"
-#: src/elflint.c:1952
+#: src/elflint.c:1956
#, c-format
msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
msgstr "Sección [%2d] '%s': tamaño de entrada no coincide con Elf32_Word\n"
-#: src/elflint.c:1961
+#: src/elflint.c:1965
#, c-format
msgid "section [%2d] '%s': extended index table too small for symbol table\n"
msgstr ""
"Sección [%2d] '%s': tabla de índice extendida demasiado pequeña para tabla "
"de símbolos\n"
-#: src/elflint.c:1976
+#: src/elflint.c:1980
#, c-format
msgid ""
"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to "
@@ -2274,24 +2283,24 @@ msgstr ""
"Sección [%2d] '%s': índice de sección extendida en sección [%2zu] '%s' se "
"refiere a la misma tabla de símbolos\n"
-#: src/elflint.c:1994
+#: src/elflint.c:1998
#, c-format
msgid "symbol 0 should have zero extended section index\n"
msgstr "símbolo 0 debe tener índice de sección extendida cero\n"
-#: src/elflint.c:2006
+#: src/elflint.c:2010
#, c-format
msgid "cannot get data for symbol %zu\n"
msgstr "no puede obtener datos para símbolo %zu\n"
-#: src/elflint.c:2011
+#: src/elflint.c:2015
#, c-format
msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
msgstr ""
"índice de sección extendida es %<PRIu32> pero índice de símbolo no es "
"XINDEX\n"
-#: src/elflint.c:2028 src/elflint.c:2085
+#: src/elflint.c:2032 src/elflint.c:2089
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
@@ -2299,42 +2308,42 @@ msgstr ""
"Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es "
"%ld, se espera %ld)\n"
-#: src/elflint.c:2042 src/elflint.c:2099
+#: src/elflint.c:2046 src/elflint.c:2103
#, c-format
msgid "section [%2d] '%s': chain array too large\n"
msgstr "Sección [%2d] '%s': índice de la cadena es demasiado grande\n"
-#: src/elflint.c:2056 src/elflint.c:2113
+#: src/elflint.c:2060 src/elflint.c:2117
#, c-format
msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
msgstr ""
"Sección [%2d] '%s': referencia de cubetas de dispersión %zu fuera de "
"límites\n"
-#: src/elflint.c:2066
+#: src/elflint.c:2070
#, c-format
msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
msgstr ""
"Sección [%2d] '%s': referencia de cadena de dispersión %zu fuera de límites\n"
-#: src/elflint.c:2123
+#: src/elflint.c:2127
#, c-format
msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
msgstr ""
"Sección [%2d] '%s': referencia de cadena de dispersión %<PRIu64> fuera de "
"límites\n"
-#: src/elflint.c:2136
+#: src/elflint.c:2140
#, fuzzy, c-format
msgid "section [%2d] '%s': not enough data\n"
msgstr "Sección [%2d] '%s': no puede obtener datos: %s\n"
-#: src/elflint.c:2148
+#: src/elflint.c:2152
#, fuzzy, c-format
msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n"
msgstr "Sección [%2d] '%s': tamaño de bitmask no es potencia de 2: %u\n"
-#: src/elflint.c:2164
+#: src/elflint.c:2168
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected at "
@@ -2343,14 +2352,14 @@ msgstr ""
"Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es "
"%ld, se espera al menos least%ld)\n"
-#: src/elflint.c:2173
+#: src/elflint.c:2177
#, c-format
msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
msgstr ""
"Sección [%2d] '%s': segundo cambio de función de dispersión demasiado "
"grande: %u\n"
-#: src/elflint.c:2207
+#: src/elflint.c:2211
#, c-format
msgid ""
"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
@@ -2358,7 +2367,7 @@ msgstr ""
"Sección [%2d] '%s': cadena de dispersión para cubetas %zu inferior a "
"polarización de índice de símbolo\n"
-#: src/elflint.c:2228
+#: src/elflint.c:2232
#, c-format
msgid ""
"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is "
@@ -2367,7 +2376,7 @@ msgstr ""
"Sección [%2d] '%s': el símbolo %u al que se hace referencia en cadena para "
"cubeta %zu es indefinido\n"
-#: src/elflint.c:2241
+#: src/elflint.c:2245
#, c-format
msgid ""
"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
@@ -2375,7 +2384,7 @@ msgstr ""
"Sección [%2d] '%s': valor de dispersión para símbolo %u en cadena para "
"cubeta %zu está errado\n"
-#: src/elflint.c:2250
+#: src/elflint.c:2254
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n"
@@ -2383,13 +2392,13 @@ msgstr ""
"Sección [%2d] '%s': valor de dispersión para símbolo %u en cadena para "
"cubeta %zu está errado\n"
-#: src/elflint.c:2280
+#: src/elflint.c:2284
#, c-format
msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
msgstr ""
"Sección [%2d] '%s': cadena de dispersión para cubeta %zu fuera de limites\n"
-#: src/elflint.c:2285
+#: src/elflint.c:2289
#, c-format
msgid ""
"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
@@ -2397,43 +2406,43 @@ msgstr ""
"Sección [%2d] '%s': referencia de símbolo en cadena para cubeta %zu fuera de "
"límites\n"
-#: src/elflint.c:2291
+#: src/elflint.c:2295
#, c-format
msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
msgstr ""
"Sección [%2d] '%s': bitmask no coincide con nombres en la tabla de "
"dispersión\n"
-#: src/elflint.c:2304
+#: src/elflint.c:2308
#, c-format
msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
msgstr ""
"Sección [%2d] '%s': archivos reubicables no pueden tener tablas de "
"dispersión\n"
-#: src/elflint.c:2322
+#: src/elflint.c:2326
#, c-format
msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
msgstr ""
"Sección [%2d] '%s': tabla de dispersión no para tabla de símbolos dinámicos\n"
-#: src/elflint.c:2326
+#: src/elflint.c:2330
#, fuzzy, c-format
msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n"
msgstr "Sección [%2d] '%s': índice de sección de destino inválido\n"
-#: src/elflint.c:2336
+#: src/elflint.c:2340
#, c-format
msgid "section [%2d] '%s': hash table entry size incorrect\n"
msgstr ""
"Sección [%2d] '%s': tamaño incorrecto de entrada de tabla de dispersión\n"
-#: src/elflint.c:2341
+#: src/elflint.c:2345
#, c-format
msgid "section [%2d] '%s': not marked to be allocated\n"
msgstr "Sección [%2d] '%s': no marcada para ser asignada\n"
-#: src/elflint.c:2346
+#: src/elflint.c:2350
#, c-format
msgid ""
"section [%2d] '%s': hash table has not even room for initial administrative "
@@ -2442,46 +2451,46 @@ msgstr ""
"Sección [%2d] '%s': tabla de dispersión no tiene ni siquiera espacio para "
"entradas administrativas iniciales\n"
-#: src/elflint.c:2395
+#: src/elflint.c:2399
#, c-format
msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
msgstr ""
"sh_link en secciones de dispersión [%2zu] '%s' y [%2zu] '%s' no son "
"idénticas\n"
-#: src/elflint.c:2419 src/elflint.c:2484 src/elflint.c:2519
+#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' does not contain enough data\n"
msgstr "sección [%2zu] '%s' no debe ser ejecutable\n"
-#: src/elflint.c:2440
+#: src/elflint.c:2444
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' has zero bit mask words\n"
msgstr "Sección [%2d] '%s': grupo de sección sin palabra de banderas\n"
-#: src/elflint.c:2451 src/elflint.c:2495 src/elflint.c:2532
+#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' uses too much data\n"
msgstr "sección [%2zu] '%s' debe ser asignada\n"
-#: src/elflint.c:2466
+#: src/elflint.c:2470
#, c-format
msgid ""
"hash section [%2zu] '%s' invalid symbol index %<PRIu32> (max_nsyms: "
"%<PRIu32>, nentries: %<PRIu32>\n"
msgstr ""
-#: src/elflint.c:2553
+#: src/elflint.c:2557
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' invalid sh_entsize\n"
msgstr "Sección [%2zu]: nombre inválido\n"
-#: src/elflint.c:2563 src/elflint.c:2567
+#: src/elflint.c:2567 src/elflint.c:2571
#, c-format
msgid "section [%2zu] '%s': reference to symbol index 0\n"
msgstr "Sección [%2zu] '%s': referencia al índice de símbolo 0\n"
-#: src/elflint.c:2574
+#: src/elflint.c:2578
#, c-format
msgid ""
"symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash "
@@ -2490,7 +2499,7 @@ msgstr ""
"Símbolo %d nombrado en nueva tabla de dispersión en [%2zu] '%s' pero no en "
"la tabla de dispersión anterior en [%2zu] '%s'\n"
-#: src/elflint.c:2586
+#: src/elflint.c:2590
#, c-format
msgid ""
"symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash "
@@ -2499,12 +2508,12 @@ msgstr ""
"Símbolo %d nombrado en la tabla de dispersión anterior en [%2zu] '%s' pero "
"no en la nueva tabla de dispersión en [%2zu] '%s'\n"
-#: src/elflint.c:2602
+#: src/elflint.c:2606
#, c-format
msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
msgstr "Sección [%2d] '%s': nonzero sh_%s para sección NULL\n"
-#: src/elflint.c:2622
+#: src/elflint.c:2626
#, c-format
msgid ""
"section [%2d] '%s': section groups only allowed in relocatable object files\n"
@@ -2512,99 +2521,99 @@ msgstr ""
"Sección [%2d] '%s': grupos de sección sólo permitidos en archivos de objeto "
"reubicables\n"
-#: src/elflint.c:2633
+#: src/elflint.c:2637
#, c-format
msgid "section [%2d] '%s': cannot get symbol table: %s\n"
msgstr "Sección [%2d] '%s': no puede obtener tabla de símbolos: %s\n"
-#: src/elflint.c:2638
+#: src/elflint.c:2642
#, c-format
msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
msgstr ""
"Sección [%2d] '%s': referencia de sección en sh_link no es una tabla de "
"símbolos\n"
-#: src/elflint.c:2644
+#: src/elflint.c:2648
#, c-format
msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
msgstr "Sección [%2d] '%s': índice de símbolo inválido en sh_info\n"
-#: src/elflint.c:2649
+#: src/elflint.c:2653
#, c-format
msgid "section [%2d] '%s': sh_flags not zero\n"
msgstr "Sección [%2d] '%s': sh_flags no cero\n"
-#: src/elflint.c:2656
+#: src/elflint.c:2660
#, c-format
msgid "section [%2d] '%s': cannot get symbol for signature\n"
msgstr "Sección [%2d] '%s': no puede obtener símbolo para firma\n"
-#: src/elflint.c:2660
+#: src/elflint.c:2664
#, fuzzy, c-format
msgid "section [%2d] '%s': cannot get symbol name for signature\n"
msgstr "Sección [%2d] '%s': no puede obtener símbolo para firma\n"
-#: src/elflint.c:2665
+#: src/elflint.c:2669
#, c-format
msgid "section [%2d] '%s': signature symbol cannot be empty string\n"
msgstr ""
"sección [%2d] '%s': el símbolo de firma no puede ser una cadena vacía\n"
-#: src/elflint.c:2671
+#: src/elflint.c:2675
#, c-format
msgid "section [%2d] '%s': sh_flags not set correctly\n"
msgstr "Sección [%2d] '%s': sh_flags no establecida correctamente\n"
-#: src/elflint.c:2677
+#: src/elflint.c:2681
#, c-format
msgid "section [%2d] '%s': cannot get data: %s\n"
msgstr "Sección [%2d] '%s': no puede obtener datos: %s\n"
-#: src/elflint.c:2686
+#: src/elflint.c:2690
#, c-format
msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
msgstr ""
"Sección [%2d] '%s': tamaño de sección no es múltiplo de tamaño de "
"(Elf32_Word)\n"
-#: src/elflint.c:2692
+#: src/elflint.c:2696
#, c-format
msgid "section [%2d] '%s': section group without flags word\n"
msgstr "Sección [%2d] '%s': grupo de sección sin palabra de banderas\n"
-#: src/elflint.c:2700
+#: src/elflint.c:2704
#, c-format
msgid "section [%2d] '%s': section group without member\n"
msgstr "Sección [%2d] '%s': grupo de sección sin miembro\n"
-#: src/elflint.c:2704
+#: src/elflint.c:2708
#, c-format
msgid "section [%2d] '%s': section group with only one member\n"
msgstr "Sección [%2d] '%s': grupo de sección con sólo un miembro\n"
-#: src/elflint.c:2715
+#: src/elflint.c:2719
#, c-format
msgid "section [%2d] '%s': unknown section group flags\n"
msgstr "Sección [%2d] '%s': banderas de grupo de sección desconocido\n"
-#: src/elflint.c:2727
+#: src/elflint.c:2731
#, fuzzy, c-format
msgid "section [%2d] '%s': section index %zu out of range\n"
msgstr "Sección [%2d] '%s': índice de sección %Zu fuera de rango\n"
-#: src/elflint.c:2736
+#: src/elflint.c:2740
#, c-format
msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
msgstr ""
"Sección [%2d] '%s': no se puede obtener encabezamiento de sección para "
"elemento %zu: %s\n"
-#: src/elflint.c:2743
+#: src/elflint.c:2747
#, c-format
msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
msgstr "Sección [%2d] '%s': grupo de sección contiene otro grupo [%2d] '%s'\n"
-#: src/elflint.c:2749
+#: src/elflint.c:2753
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': element %zu references section [%2d] '%s' without "
@@ -2613,12 +2622,12 @@ msgstr ""
"Sección [%2d] '%s': elemento %Zu hace referencia a sección [%2d] '%s' sin "
"establecer bandera SHF_GROUP\n"
-#: src/elflint.c:2756
+#: src/elflint.c:2760
#, c-format
msgid "section [%2d] '%s' is contained in more than one section group\n"
msgstr "Sección [%2d] '%s' está contenida en más de un grupo de sección\n"
-#: src/elflint.c:2946
+#: src/elflint.c:2950
#, c-format
msgid ""
"section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no "
@@ -2627,7 +2636,7 @@ msgstr ""
"Sección [%2d] '%s' se refiere en sh_link a la sección [%2d] '%s' la cual no "
"es una tabla de símbolos dinámicos\n"
-#: src/elflint.c:2958
+#: src/elflint.c:2962
#, c-format
msgid ""
"section [%2d] '%s' has different number of entries than symbol table [%2d] "
@@ -2636,29 +2645,29 @@ msgstr ""
"Sección [%2d] '%s' tiene un número diferente de entradas a la de la tabla de "
"símbolos [%2d] '%s'\n"
-#: src/elflint.c:2974
+#: src/elflint.c:2978
#, c-format
msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
msgstr ""
"Sección [%2d] '%s': el símbolo %d: no se pueden leer datos de versión\n"
-#: src/elflint.c:2990
+#: src/elflint.c:2994
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
msgstr ""
"Sección [%2d] '%s': el símbolo %d: el símbolo local con alcance mundial\n"
-#: src/elflint.c:2998
+#: src/elflint.c:3002
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
msgstr "Sección [%2d] '%s': símbolo %d: símbolo local con versión\n"
-#: src/elflint.c:3012
+#: src/elflint.c:3016
#, c-format
msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
msgstr "Sección [%2d] '%s': símbolo %d: índice de versión inválida %d\n"
-#: src/elflint.c:3017
+#: src/elflint.c:3021
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for defined version\n"
@@ -2666,7 +2675,7 @@ msgstr ""
"Sección [%2d] '%s': símbolo %d: índice de versión %d es para versión "
"definida\n"
-#: src/elflint.c:3027
+#: src/elflint.c:3031
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for requested version\n"
@@ -2674,46 +2683,46 @@ msgstr ""
"Sección [%2d] '%s': símbolo %d: índice de versión %d es para la versión "
"solicitada\n"
-#: src/elflint.c:3080
+#: src/elflint.c:3084
#, c-format
msgid "more than one version reference section present\n"
msgstr "Más de una sección de referencia de versión presente\n"
-#: src/elflint.c:3088 src/elflint.c:3235
+#: src/elflint.c:3092 src/elflint.c:3239
#, c-format
msgid "section [%2d] '%s': sh_link does not link to string table\n"
msgstr "Sección [%2d] '%s': sh_link no se enlaza a la tabla de cadenas\n"
-#: src/elflint.c:3113 src/elflint.c:3289
+#: src/elflint.c:3117 src/elflint.c:3293
#, c-format
msgid "section [%2d] '%s': entry %d has wrong version %d\n"
msgstr "Sección [%2d] '%s': entrada %d tiene versión %d errada\n"
-#: src/elflint.c:3120 src/elflint.c:3296
+#: src/elflint.c:3124 src/elflint.c:3300
#, c-format
msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
msgstr ""
"Sección [%2d] '%s': entrada %d tiene compensación errada de datos "
"auxiliares\n"
-#: src/elflint.c:3130
+#: src/elflint.c:3134
#, c-format
msgid "section [%2d] '%s': entry %d has invalid file reference\n"
msgstr "Sección [%2d] '%s': entrada %d tiene referencia de archivo inválida\n"
-#: src/elflint.c:3138
+#: src/elflint.c:3142
#, c-format
msgid "section [%2d] '%s': entry %d references unknown dependency\n"
msgstr "Sección [%2d] '%s': %d hace referencia a dependencia desconocida\n"
-#: src/elflint.c:3150
+#: src/elflint.c:3154
#, c-format
msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
msgstr ""
"sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene bandera "
"desconocida\n"
-#: src/elflint.c:3158
+#: src/elflint.c:3162
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name "
@@ -2722,7 +2731,7 @@ msgstr ""
"Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene referencia de "
"nombre inválida\n"
-#: src/elflint.c:3167
+#: src/elflint.c:3171
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: "
@@ -2731,7 +2740,7 @@ msgstr ""
"Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene valor de "
"dispersión: %#x, esperado %#x\n"
-#: src/elflint.c:3176
+#: src/elflint.c:3180
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version "
@@ -2740,7 +2749,7 @@ msgstr ""
"sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene nombre duplicado "
"'%s'\n"
-#: src/elflint.c:3187
+#: src/elflint.c:3191
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
@@ -2748,14 +2757,14 @@ msgstr ""
"sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene próximo campo "
"errado\n"
-#: src/elflint.c:3204 src/elflint.c:3380
+#: src/elflint.c:3208 src/elflint.c:3384
#, c-format
msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
msgstr ""
"sección [%2d] '%s': entrada %d tiene compensación inválida para próxima "
"entrada\n"
-#: src/elflint.c:3212 src/elflint.c:3388
+#: src/elflint.c:3216 src/elflint.c:3392
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says "
@@ -2764,46 +2773,46 @@ msgstr ""
"sección [%2d] '%s': entrada %d tiene compensación inválida para próxima "
"entrada\n"
-#: src/elflint.c:3227
+#: src/elflint.c:3231
#, c-format
msgid "more than one version definition section present\n"
msgstr "más de una definición de versión presente de sección\n"
-#: src/elflint.c:3274
+#: src/elflint.c:3278
#, c-format
msgid "section [%2d] '%s': more than one BASE definition\n"
msgstr "Sección [%2d] '%s': más de una definición de BASE\n"
-#: src/elflint.c:3278
+#: src/elflint.c:3282
#, c-format
msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
msgstr ""
"Sección [%2d] '%s': definición de BASE debe tener índice VER_NDX_GLOBAL\n"
-#: src/elflint.c:3284
+#: src/elflint.c:3288
#, c-format
msgid "section [%2d] '%s': entry %d has unknown flag\n"
msgstr "Sección [%2d] '%s': entrada %d tiene bandera desconocida\n"
-#: src/elflint.c:3311
+#: src/elflint.c:3315
#, c-format
msgid "section [%2d] '%s': entry %d has invalid name reference\n"
msgstr "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida\n"
-#: src/elflint.c:3318
+#: src/elflint.c:3322
#, c-format
msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
msgstr ""
"Sección [%2d] '%s': entrada %d tiene valor de dispersión errado: %#x, "
"esperado %#x\n"
-#: src/elflint.c:3326
+#: src/elflint.c:3330
#, c-format
msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
msgstr ""
"Sección [%2d] '%s': entrada %d tiene nombre de versión duplicado '%s'\n"
-#: src/elflint.c:3346
+#: src/elflint.c:3350
#, c-format
msgid ""
"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
@@ -2811,34 +2820,34 @@ msgstr ""
"Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida en datos "
"auxiliares\n"
-#: src/elflint.c:3363
+#: src/elflint.c:3367
#, c-format
msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
msgstr ""
"Sección [%2d] '%s': entrada %d tiene próximo campo errado en datos "
"auxiliares\n"
-#: src/elflint.c:3396
+#: src/elflint.c:3400
#, c-format
msgid "section [%2d] '%s': no BASE definition\n"
msgstr "Sección [%2d] '%s': no hay definición de BASE\n"
-#: src/elflint.c:3412
+#: src/elflint.c:3416
#, c-format
msgid "section [%2d] '%s': unknown parent version '%s'\n"
msgstr "Sección [%2d] '%s': desconocida versión principal '%s'\n"
-#: src/elflint.c:3425
+#: src/elflint.c:3429
#, 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:3446
+#: src/elflint.c:3450
#, c-format
msgid "section [%2d] '%s': unrecognized attribute format\n"
msgstr "Sección[%2d] '%s': formato de atributo no reconocido\n"
-#: src/elflint.c:3462
+#: src/elflint.c:3466
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute section\n"
@@ -2846,21 +2855,21 @@ msgstr ""
"Sección[%2d] '%s': compensación %zu: campo de longitud cero en sección de "
"atributo\n"
-#: src/elflint.c:3471
+#: src/elflint.c:3475
#, 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:3483
+#: src/elflint.c:3487
#, 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:3500
+#: src/elflint.c:3504
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
@@ -2868,12 +2877,12 @@ msgstr ""
"Sección [%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de sub-"
"sección de atributo\n"
-#: src/elflint.c:3509
+#: src/elflint.c:3513
#, 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:3518
+#: src/elflint.c:3522
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
@@ -2881,7 +2890,7 @@ msgstr ""
"Sección [%2d] '%s': compensación %zu: campo de longitud cero length en sub-"
"sección de atributo\n"
-#: src/elflint.c:3533
+#: src/elflint.c:3537
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
@@ -2890,7 +2899,7 @@ msgstr ""
"atributo\n"
#. Tag_File
-#: src/elflint.c:3544
+#: src/elflint.c:3548
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
@@ -2898,26 +2907,26 @@ msgstr ""
"Sección[%2d] '%s': compensación %zu: sub-sección de atributo tiene etiqueta "
"inesperada %u\n"
-#: src/elflint.c:3562
+#: src/elflint.c:3566
#, 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:3573
+#: src/elflint.c:3577
#, 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:3586
+#: src/elflint.c:3590
#, 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:3590
+#: src/elflint.c:3594
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
@@ -2925,12 +2934,12 @@ msgstr ""
"Sección [%2d] '%s': compensación %zu: no reconocido %s valor de atributo "
"%<PRIu64>\n"
-#: src/elflint.c:3600
+#: src/elflint.c:3604
#, 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:3606
+#: src/elflint.c:3610
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
@@ -2938,47 +2947,47 @@ msgstr ""
"Sección [%2d] '%s': compensación %zu: extra bytes después de la última "
"sección de atributo\n"
-#: src/elflint.c:3695
+#: src/elflint.c:3699
#, 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:3699
+#: src/elflint.c:3703
#, c-format
msgid "zeroth section has nonzero name\n"
msgstr "Sección zeroth tiene nombre nonzero\n"
-#: src/elflint.c:3701
+#: src/elflint.c:3705
#, c-format
msgid "zeroth section has nonzero type\n"
msgstr "Sección zeroth tiene tipo nonzero\n"
-#: src/elflint.c:3703
+#: src/elflint.c:3707
#, c-format
msgid "zeroth section has nonzero flags\n"
msgstr "Sección zeroth tiene banderas nonzero\n"
-#: src/elflint.c:3705
+#: src/elflint.c:3709
#, c-format
msgid "zeroth section has nonzero address\n"
msgstr "Sección zeroth tiene dirección nonzero\n"
-#: src/elflint.c:3707
+#: src/elflint.c:3711
#, c-format
msgid "zeroth section has nonzero offset\n"
msgstr "Sección zeroth tiene compensación nonzero\n"
-#: src/elflint.c:3709
+#: src/elflint.c:3713
#, c-format
msgid "zeroth section has nonzero align value\n"
msgstr "Sección zeroth tiene valor de alineación nonzero\n"
-#: src/elflint.c:3711
+#: src/elflint.c:3715
#, 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:3714
+#: src/elflint.c:3718
#, c-format
msgid ""
"zeroth section has nonzero size value while ELF header has nonzero shnum "
@@ -2987,7 +2996,7 @@ msgstr ""
"Sección zeroth tiene valor de tamaño nonzero mientras que el encabezamiento "
"ELF tiene valor shnum nonzero\n"
-#: src/elflint.c:3718
+#: src/elflint.c:3722
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
@@ -2996,7 +3005,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:3722
+#: src/elflint.c:3726
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
@@ -3005,27 +3014,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:3740
+#: src/elflint.c:3744
#, 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:3749
+#: src/elflint.c:3753
#, c-format
msgid "section [%2zu]: invalid name\n"
msgstr "Sección [%2zu]: nombre inválido\n"
-#: src/elflint.c:3776
+#: src/elflint.c:3780
#, 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:3794
+#: src/elflint.c:3798
#, 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:3812
+#: src/elflint.c:3816
#, c-format
msgid ""
"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
@@ -3033,12 +3042,12 @@ msgstr ""
"Sección [%2zu] '%s' tiene banderas erradas: %s esperado y posiblemente %s, "
"es %s\n"
-#: src/elflint.c:3830
+#: src/elflint.c:3834
#, c-format
msgid "section [%2zu] '%s' present in object file\n"
msgstr "Sección [%2zu] '%s' presente en archivo objeto\n"
-#: src/elflint.c:3836 src/elflint.c:3868
+#: src/elflint.c:3840 src/elflint.c:3872
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
@@ -3046,7 +3055,7 @@ msgstr ""
"Sección [%2zu] '%s' tiene bandera SHF_ALLOC establecida pero no es un "
"segmento cargable\n"
-#: src/elflint.c:3841 src/elflint.c:3873
+#: src/elflint.c:3845 src/elflint.c:3877
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable "
@@ -3055,7 +3064,7 @@ msgstr ""
"Sección [%2zu] '%s' no tiene bandera SHF_ALLOC establecida pero hay "
"segmentos cargables\n"
-#: src/elflint.c:3849
+#: src/elflint.c:3853
#, c-format
msgid ""
"section [%2zu] '%s' is extension section index table in non-object file\n"
@@ -3063,22 +3072,22 @@ msgstr ""
"Sección [%2zu] '%s' es tabla de índice de sección de extensión en archivo no-"
"objeto\n"
-#: src/elflint.c:3892
+#: src/elflint.c:3896
#, 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:3897
+#: src/elflint.c:3901
#, c-format
msgid "cannot get section header\n"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/elflint.c:3907
+#: src/elflint.c:3911
#, c-format
msgid "section [%2zu] '%s' has unsupported type %d\n"
msgstr "sección [%2zu] '%s' tiene tipo %d incompatible \n"
-#: src/elflint.c:3922
+#: src/elflint.c:3931
#, c-format
msgid ""
"section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
@@ -3086,76 +3095,76 @@ msgstr ""
"Sección [%2zu] '%s' contiene bandera(s) de procesador-específico inválidas "
"%#<PRIx64>\n"
-#: src/elflint.c:3929
+#: src/elflint.c:3938
#, 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:3937
+#: src/elflint.c:3946
#, 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:3947
+#: src/elflint.c:3956
#, 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:3952
+#: src/elflint.c:3961
#, 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:3958
+#: src/elflint.c:3967
#, 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:3964
+#: src/elflint.c:3973
#, 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:3969
+#: src/elflint.c:3978
#, 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:3976
+#: src/elflint.c:3985
#, 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:3981
+#: src/elflint.c:3990
#, 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:4000
+#: src/elflint.c:4009
#, 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:4009
+#: src/elflint.c:4018
#, 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:4016
+#: src/elflint.c:4025
#, 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:4047
+#: src/elflint.c:4056
#, c-format
msgid ""
"section [%2zu] '%s' not fully contained in segment of program header entry "
@@ -3164,7 +3173,7 @@ msgstr ""
"Sección [%2zu] '%s' no contenida totalmente en segmento de entrada de "
"encabezamiento de programa %d\n"
-#: src/elflint.c:4057
+#: src/elflint.c:4066
#, c-format
msgid ""
"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
@@ -3173,7 +3182,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:4083
+#: src/elflint.c:4092
#, fuzzy, c-format
msgid ""
"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
@@ -3182,7 +3191,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:4094
+#: src/elflint.c:4103
#, c-format
msgid ""
"section [%2zu] '%s' has not type NOBITS but is not read from the file in "
@@ -3191,18 +3200,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:4105
+#: src/elflint.c:4114
#, 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:4115
+#: src/elflint.c:4124
#, 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:4125
+#: src/elflint.c:4134
#, c-format
msgid ""
"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
@@ -3210,7 +3219,7 @@ msgstr ""
"Sección [%2zu] '%s': asignación de bandera establecida pero sección no en "
"ningún segmento cargado\n"
-#: src/elflint.c:4131
+#: src/elflint.c:4140
#, c-format
msgid ""
"section [%2zu] '%s': ELF header says this is the section header string table "
@@ -3219,7 +3228,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:4139
+#: src/elflint.c:4148
#, c-format
msgid ""
"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
@@ -3227,32 +3236,32 @@ msgstr ""
"sección [%2zu] '%s': ficheros reubicables no pueden tener tablas de símbolos "
"dinámicos\n"
-#: src/elflint.c:4190
+#: src/elflint.c:4199
#, 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:4213
+#: src/elflint.c:4222
#, 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:4224
+#: src/elflint.c:4233
#, 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:4230
+#: src/elflint.c:4239
#, 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:4241
+#: src/elflint.c:4250
#, c-format
msgid ""
"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section "
@@ -3261,26 +3270,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:4254
+#: src/elflint.c:4263
#, c-format
msgid "duplicate version index %d\n"
msgstr "Duplicar índice de versión %d\n"
-#: src/elflint.c:4268
+#: src/elflint.c:4277
#, 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:4317
+#: src/elflint.c:4326
#, 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:4321
+#: src/elflint.c:4330
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
@@ -3288,7 +3297,7 @@ msgstr ""
"Sección [%2d] '%s': tipo de nota de fichero core desconocido %<PRIu32> en "
"compensación %Zu\n"
-#: src/elflint.c:4370
+#: src/elflint.c:4379
#, fuzzy, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
@@ -3297,7 +3306,7 @@ msgstr ""
"phdr[%d]: tipo de nota de fichero objeto desconocido %<PRIu32> en "
"compensación %Zu\n"
-#: src/elflint.c:4375
+#: src/elflint.c:4384
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
@@ -3306,40 +3315,40 @@ msgstr ""
"Sección [%2d] '%s': tipo de nota de fichero objeto desconocido %<PRIu32> en "
"compensación %Zu\n"
-#: src/elflint.c:4394
+#: src/elflint.c:4403
#, 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:4414
+#: src/elflint.c:4423
#, 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:4417
+#: src/elflint.c:4426
#, 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:4438
+#: src/elflint.c:4447
#, 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:4445
+#: src/elflint.c:4454
#, 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:4448
+#: src/elflint.c:4457
#, 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:4466
+#: src/elflint.c:4475
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
@@ -3347,145 +3356,145 @@ msgstr ""
"Sólo ejecutables, objetos compartidos y ficheros core pueden tener "
"encabezamientos de programas\n"
-#: src/elflint.c:4481
+#: src/elflint.c:4490
#, 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:4490
+#: src/elflint.c:4500
#, 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:4501
+#: src/elflint.c:4511
#, 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:4509
+#: src/elflint.c:4519
#, 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:4516
+#: src/elflint.c:4526
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr "ejecutable estático no puede tener secciones dinámicas\n"
-#: src/elflint.c:4530
+#: src/elflint.c:4540
#, 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:4533
+#: src/elflint.c:4543
#, 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:4543
+#: src/elflint.c:4553
#, 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:4564
+#: src/elflint.c:4574
#, 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:4575
+#: src/elflint.c:4585
#, 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:4582
+#: src/elflint.c:4592
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
-#: src/elflint.c:4591 src/elflint.c:4614
+#: src/elflint.c:4601 src/elflint.c:4624
#, 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:4620
+#: src/elflint.c:4630
#, 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:4647
+#: src/elflint.c:4657
#, 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:4650
+#: src/elflint.c:4660
#, 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:4663
+#: src/elflint.c:4673
#, 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:4671
+#: src/elflint.c:4681
#, 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:4674
+#: src/elflint.c:4684
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr "sección [%2zu] '%s' debe ser asignada\n"
-#: src/elflint.c:4678
+#: src/elflint.c:4688
#, 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:4681
+#: src/elflint.c:4691
#, 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:4686
+#: src/elflint.c:4696
#, 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:4689
+#: src/elflint.c:4699
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr "sección [%2zu] '%s' no debe ser ejecutable\n"
-#: src/elflint.c:4700
+#: src/elflint.c:4710
#, 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:4707
+#: src/elflint.c:4717
#, 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:4710
+#: src/elflint.c:4720
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
@@ -3494,7 +3503,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:4723
+#: src/elflint.c:4733
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
@@ -3503,12 +3512,17 @@ msgstr ""
"ejecutable/DSO con sección .eh_frame_hdr no tiene una entrada de "
"encabezamiento de programa PT_GNU_EH_FRAME"
-#: src/elflint.c:4757
+#: src/elflint.c:4767
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr "No se puede leer encabezamiento ELF: %s\n"
-#: src/elflint.c:4783
+#: src/elflint.c:4779
+#, fuzzy, c-format
+msgid "cannot create backend for ELF file\n"
+msgstr "no sepuede crear fichero nuevo"
+
+#: src/elflint.c:4800
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr "Bandera de reubicación de texto establecida pero no necesaria\n"
@@ -3774,12 +3788,12 @@ msgstr "%s%s%s: no se reconoció el formato de fichero"
msgid "cannot create search tree"
msgstr "No se puede crear el árbol de búsqueda"
-#: src/nm.c:746 src/nm.c:1205 src/objdump.c:779 src/readelf.c:635
+#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:635
#: src/readelf.c:1447 src/readelf.c:1598 src/readelf.c:1799 src/readelf.c:2005
#: src/readelf.c:2195 src/readelf.c:2373 src/readelf.c:2449 src/readelf.c:2707
#: src/readelf.c:2783 src/readelf.c:2870 src/readelf.c:3468 src/readelf.c:3518
-#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12415
-#: src/readelf.c:12626 src/readelf.c:12695 src/size.c:398 src/size.c:470
+#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12420
+#: src/readelf.c:12631 src/readelf.c:12700 src/size.c:398 src/size.c:470
#: src/strip.c:1038
#, c-format
msgid "cannot get section header string table index"
@@ -3809,30 +3823,30 @@ msgstr ""
"%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n"
"\n"
-#: src/nm.c:1216
+#: src/nm.c:1250
#, 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:1221
+#: src/nm.c:1255
#, 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:1300
+#: src/nm.c:1334
#, 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:1527
+#: src/nm.c:1570
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: Operación inválida"
-#: src/nm.c:1584
+#: src/nm.c:1620
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: No hay símbolos"
@@ -3909,6 +3923,11 @@ msgstr "Contenido de la sección %s:\n"
msgid "cannot disassemble"
msgstr "No se puede desensamblar"
+#: src/objdump.c:760
+#, fuzzy, c-format
+msgid "cannot create backend for elf file"
+msgstr "no sepuede crear fichero nuevo"
+
#. Short description of program.
#: src/ranlib.c:63
msgid "Generate an index to speed access to archives."
@@ -4102,7 +4121,7 @@ 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:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12646
+#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12651
#: src/unstrip.c:395 src/unstrip.c:426 src/unstrip.c:485 src/unstrip.c:604
#: src/unstrip.c:625 src/unstrip.c:665 src/unstrip.c:881 src/unstrip.c:1212
#: src/unstrip.c:1339 src/unstrip.c:1363 src/unstrip.c:1419 src/unstrip.c:1483
@@ -4503,8 +4522,8 @@ msgstr "<SÃMBOLO INVÃLIDO>"
msgid "<INVALID SECTION>"
msgstr "<SECCIÓN INVÃLIDA>"
-#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12517
-#: src/readelf.c:12524 src/readelf.c:12568 src/readelf.c:12575
+#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12522
+#: src/readelf.c:12529 src/readelf.c:12573 src/readelf.c:12580
msgid "Couldn't uncompress section"
msgstr ""
@@ -5949,13 +5968,13 @@ msgstr ""
msgid "cannot get debug context descriptor: %s"
msgstr "no se puede depurar descriptor de contexto: %s"
-#: src/readelf.c:11449 src/readelf.c:12071 src/readelf.c:12182
-#: src/readelf.c:12240
+#: src/readelf.c:11454 src/readelf.c:12076 src/readelf.c:12187
+#: src/readelf.c:12245
#, c-format
msgid "cannot convert core note data: %s"
msgstr "no es posible convertir datos de la nota principal: %s"
-#: src/readelf.c:11812
+#: src/readelf.c:11817
#, c-format
msgid ""
"\n"
@@ -5964,21 +5983,21 @@ msgstr ""
"\n"
"%*s... <repeats %u more times> ..."
-#: src/readelf.c:12319
+#: src/readelf.c:12324
msgid " Owner Data size Type\n"
msgstr " Owner Data size Type\n"
-#: src/readelf.c:12348
+#: src/readelf.c:12353
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12400
+#: src/readelf.c:12405
#, 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:12434
+#: src/readelf.c:12439
#, c-format
msgid ""
"\n"
@@ -5987,7 +6006,7 @@ msgstr ""
"\n"
"Sección de nota [%2zu] '%s' de %<PRIu64> bytes en compensación %#0<PRIx64>:\n"
-#: src/readelf.c:12457
+#: src/readelf.c:12462
#, c-format
msgid ""
"\n"
@@ -5996,7 +6015,7 @@ msgstr ""
"\n"
"Segmento de nota de %<PRIu64> bytes en compensación %#0<PRIx64>:\n"
-#: src/readelf.c:12504
+#: src/readelf.c:12509
#, fuzzy, c-format
msgid ""
"\n"
@@ -6005,12 +6024,12 @@ msgstr ""
"\n"
"Sección [%Zu] '%s' no tiene datos para volcar.\n"
-#: src/readelf.c:12531 src/readelf.c:12582
+#: src/readelf.c:12536 src/readelf.c:12587
#, 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:12536
+#: src/readelf.c:12541
#, fuzzy, c-format
msgid ""
"\n"
@@ -6020,7 +6039,7 @@ msgstr ""
"Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12541
+#: src/readelf.c:12546
#, fuzzy, c-format
msgid ""
"\n"
@@ -6031,7 +6050,7 @@ msgstr ""
"Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12555
+#: src/readelf.c:12560
#, fuzzy, c-format
msgid ""
"\n"
@@ -6040,7 +6059,7 @@ msgstr ""
"\n"
"Sección [%Zu] '%s' no tiene datos para volcar.\n"
-#: src/readelf.c:12587
+#: src/readelf.c:12592
#, fuzzy, c-format
msgid ""
"\n"
@@ -6050,7 +6069,7 @@ msgstr ""
"Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12592
+#: src/readelf.c:12597
#, fuzzy, c-format
msgid ""
"\n"
@@ -6061,7 +6080,7 @@ msgstr ""
"Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12641
+#: src/readelf.c:12646
#, c-format
msgid ""
"\n"
@@ -6070,7 +6089,7 @@ msgstr ""
"\n"
"sección [%lu] no existe"
-#: src/readelf.c:12671
+#: src/readelf.c:12676
#, c-format
msgid ""
"\n"
@@ -6079,12 +6098,12 @@ msgstr ""
"\n"
"sección '%s' no existe"
-#: src/readelf.c:12728
+#: src/readelf.c:12733
#, 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:12731
+#: src/readelf.c:12736
#, c-format
msgid ""
"\n"
@@ -6093,7 +6112,7 @@ msgstr ""
"\n"
"Archivo '%s' no tiene índice de símbolo\n"
-#: src/readelf.c:12735
+#: src/readelf.c:12740
#, fuzzy, c-format
msgid ""
"\n"
@@ -6102,12 +6121,12 @@ msgstr ""
"\n"
"Ãndice de archivo '%s' tiene %Zu entradas:\n"
-#: src/readelf.c:12753
+#: src/readelf.c:12758
#, 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:12758
+#: src/readelf.c:12763
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "Miembro de archivo contiene '%s':\n"
@@ -6174,7 +6193,7 @@ msgstr "Radical inválido: %s"
msgid "%s: file format not recognized"
msgstr "%s: No se reconoce el formato del fichero"
-#: src/size.c:418 src/size.c:557
+#: src/size.c:418 src/size.c:560
#, c-format
msgid " (ex %s)"
msgstr " (ex %s)"
@@ -6184,7 +6203,7 @@ msgstr " (ex %s)"
msgid "cannot get section header"
msgstr "no se puede obtener encabezamiento de sección\n"
-#: src/size.c:582
+#: src/size.c:585
msgid "(TOTALS)\n"
msgstr "(TOTALES)\n"
diff --git a/po/ja.po b/po/ja.po
index cd53f220..85c5683d 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: 2019-11-26 09:48+0100\n"
+"POT-Creation-Date: 2020-06-11 15:50+0200\n"
"PO-Revision-Date: 2009-09-20 15:32+0900\n"
"Last-Translator: Hyu_gabaru Ryu_ichi <hyu_gabaru@yahoo.co.jp>\n"
"Language-Team: Japanese <jp@li.org>\n"
@@ -51,7 +51,7 @@ msgstr ""
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
#: lib/xmalloc.c:52 lib/xmalloc.c:65 lib/xmalloc.c:77 src/readelf.c:3449
-#: src/readelf.c:11398 src/unstrip.c:2393 src/unstrip.c:2599
+#: src/readelf.c:11403 src/unstrip.c:2393 src/unstrip.c:2599
#, c-format
msgid "memory exhausted"
msgstr "メモリー消費済ã¿"
@@ -530,7 +530,7 @@ msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77
#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
-#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:79
+#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
msgstr "<ä¸æ˜Ž>"
@@ -1677,14 +1677,14 @@ msgstr ""
"セクション [%2d] '%s': セクショングループ [%2zu] '%s' ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’継"
"続ã—ã¦ã„ã¾ã›ã‚“\n"
-#: src/elflint.c:610 src/elflint.c:1494 src/elflint.c:1545 src/elflint.c:1651
-#: src/elflint.c:1987 src/elflint.c:2313 src/elflint.c:2932 src/elflint.c:3095
-#: src/elflint.c:3243 src/elflint.c:3433 src/elflint.c:4431
+#: 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:2936 src/elflint.c:3099
+#: src/elflint.c:3247 src/elflint.c:3437 src/elflint.c:4440
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:623 src/elflint.c:1658
+#: src/elflint.c:623 src/elflint.c:1662
#, c-format
msgid ""
"section [%2d] '%s': referenced as string table for section [%2d] '%s' but "
@@ -1707,33 +1707,40 @@ msgstr ""
msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
msgstr "セクション [%2u] '%s': 項目サイズ㌠ElfXX_Sym ã¨ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:667
+#: src/elflint.c:662
+#, c-format
+msgid ""
+"section [%2u] '%s': number of local entries in 'st_info' larger than table "
+"size\n"
+msgstr ""
+
+#: src/elflint.c:671
#, c-format
msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
msgstr "セクション [%2d] '%s': シンボル %d を得られã¾ã›ã‚“: %s\n"
-#: src/elflint.c:672 src/elflint.c:675 src/elflint.c:678 src/elflint.c:681
-#: src/elflint.c:684 src/elflint.c:687
+#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685
+#: src/elflint.c:688 src/elflint.c:691
#, c-format
msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
msgstr "セクション [%2d] '%s': 0番目ã®é …ç›®ã«ã‚ã‚‹ '%s' ゼロã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:690
+#: src/elflint.c:694
#, c-format
msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
msgstr "セクション [%2d] '%s': 0番目ã®é …目用㮠XINDEX ãŒã‚¼ãƒ­ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:700
+#: src/elflint.c:704
#, c-format
msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
msgstr "セクション [%2d] '%s': シンボル %zu を得られã¾ã›ã‚“: %s\n"
-#: src/elflint.c:709
+#: src/elflint.c:713
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
msgstr "セクション [%2d] '%s': シンボル %zu: ä¸å½“ãªåå‰ã®å€¤\n"
-#: src/elflint.c:724
+#: src/elflint.c:728
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: too large section index but no extended "
@@ -1742,7 +1749,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: 大ãã™ãŽã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã ãŒã€æ‹¡"
"張セクションインデックスセクションãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:730
+#: src/elflint.c:734
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in "
@@ -1752,29 +1759,29 @@ msgstr ""
"クス用ã«ä½¿ã‚れる XINDEX\n"
#. || sym->st_shndx > SHN_HIRESERVE always false
-#: src/elflint.c:742
+#: src/elflint.c:746
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
msgstr "セクション [%2d] '%s': シンボル %zu: ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹\n"
-#: src/elflint.c:750
+#: src/elflint.c:754
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown type\n"
msgstr "セクション [%2d] '%s': シンボル %zu: ä¸æ˜Žãªã‚¿ã‚¤ãƒ—\n"
-#: src/elflint.c:756
+#: src/elflint.c:760
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
msgstr "セクション [%2d] '%s': シンボル %zu: ä¸æ˜Žãªã‚·ãƒ³ãƒœãƒ«ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°\n"
-#: src/elflint.c:761
+#: src/elflint.c:765
#, c-format
msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n"
msgstr ""
"セクション [%2d] '%s': シンボル %zu: オブジェクトタイプã¨ç•°ãªã‚‹å›ºæœ‰ã®ã‚·ãƒ³ãƒœ"
"ル\n"
-#: src/elflint.c:769
+#: src/elflint.c:773
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
@@ -1782,14 +1789,14 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: COMMON ã¯ãƒªãƒ­ã‚±ãƒ¼ã‚¿ãƒ–ルファイル内ã®ã¿ã§"
"許ã•ã‚Œã¾ã™\n"
-#: src/elflint.c:773
+#: src/elflint.c:777
#, c-format
msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
msgstr ""
"セクション [%2d] '%s': シンボル %zu: ローカル㪠COMMON シンボルã¯æ„味ãŒã‚ã‚Šã¾"
"ã›ã‚“\n"
-#: src/elflint.c:777
+#: src/elflint.c:781
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
@@ -1797,12 +1804,12 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: COMMON セクションã®æ©Ÿèƒ½ã¯æ„味ãŒã‚ã‚Šã¾ã›"
"ã‚“\n"
-#: src/elflint.c:828
+#: src/elflint.c:832
#, c-format
msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
msgstr "セクション [%2d] '%s': シンボル %zu: st_value 境界外\n"
-#: src/elflint.c:834 src/elflint.c:859 src/elflint.c:908
+#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu does not fit completely in referenced section "
@@ -1811,7 +1818,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu ã¯å‚ç…§ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%2d] '%s' ã¨ã¯å®Œ"
"å…¨ã«ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:843
+#: src/elflint.c:847
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have "
@@ -1820,7 +1827,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: å‚ç…§ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%2d] '%s' 㯠"
"SHF_TLS フラグãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: src/elflint.c:853 src/elflint.c:901
+#: src/elflint.c:857 src/elflint.c:905
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section "
@@ -1829,7 +1836,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: st_value å‚ç…§ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%2d] "
"'%s' ã®å¢ƒç•Œå¤–\n"
-#: src/elflint.c:880
+#: src/elflint.c:884
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
@@ -1837,7 +1844,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目ãŒãªã„ TLS ã‚·"
"ンボル\n"
-#: src/elflint.c:886
+#: src/elflint.c:890
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but couldn't get TLS program "
@@ -1846,7 +1853,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目ãŒãªã„ TLS ã‚·"
"ンボル\n"
-#: src/elflint.c:894
+#: src/elflint.c:898
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] "
@@ -1855,7 +1862,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: å‚ç…§ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%2d] '%s' ã®"
"st_value ä¸è¶³\n"
-#: src/elflint.c:921
+#: src/elflint.c:925
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: local symbol outside range described in "
@@ -1864,7 +1871,7 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: sh_info ã«è¨˜è¿°ã•ã‚ŒãŸç¯„囲外ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚·ãƒ³"
"ボル\n"
-#: src/elflint.c:928
+#: src/elflint.c:932
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: non-local symbol outside range described in "
@@ -1873,12 +1880,12 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: sh_info ã«è¨˜è¿°ã•ã‚ŒãŸç¯„囲外ã®éžãƒ­ãƒ¼ã‚«ãƒ«ã‚·"
"ンボル\n"
-#: src/elflint.c:935
+#: src/elflint.c:939
#, c-format
msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
msgstr "セクション [%2d] '%s': シンボル %zu: éžãƒ­ãƒ¼ã‚«ãƒ«ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚·ãƒ³ãƒœãƒ«\n"
-#: src/elflint.c:985
+#: src/elflint.c:989
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section "
@@ -1887,7 +1894,7 @@ msgstr ""
"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルãŒé–“é•ã£ãŸã‚»ã‚¯ã‚·ãƒ§ãƒ³ "
"[%2d] ã‚’å‚ç…§ã—ã¦ã„ã¾ã™\n"
-#: src/elflint.c:992
+#: src/elflint.c:996
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] "
@@ -1899,7 +1906,7 @@ msgstr ""
#. This test is more strict than the psABIs which
#. usually allow the symbol to be in the middle of
#. the .got section, allowing negative offsets.
-#: src/elflint.c:1008
+#: src/elflint.c:1012
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not "
@@ -1908,7 +1915,7 @@ msgstr ""
"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボル値 %#<PRIx64> 㯠%s ã®ã‚»"
"クションアドレス %#<PRIx64> ã¨ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:1015
+#: src/elflint.c:1019
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not "
@@ -1917,7 +1924,7 @@ msgstr ""
"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルサイズ %<PRIu64> 㯠%s "
"ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚µã‚¤ã‚º %<PRIu64> ã¨ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:1023
+#: src/elflint.c:1027
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got "
@@ -1926,7 +1933,7 @@ msgstr ""
"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルã¯ã‚ã‚Šã¾ã™ãŒã€.got セク"
"ションãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:1039
+#: src/elflint.c:1043
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic "
@@ -1935,7 +1942,7 @@ msgstr ""
"セクション [%2d] '%s': _DYNAMIC_ シンボル値 %#<PRIx64> ã¯å‹•çš„セグメントアドレ"
"ス %#<PRIx64> ã¨ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:1046
+#: src/elflint.c:1050
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic "
@@ -1944,7 +1951,7 @@ msgstr ""
"セクション [%2d] '%s': _DYNAMIC シンボルサイズ %<PRIu64> ã¯å‹•çš„セグメントサイ"
"ズ %<PRIu64> ã¨ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:1059
+#: src/elflint.c:1063
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-"
@@ -1953,29 +1960,29 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: çœç•¥ä»¥å¤–ã®å¯è¦–性をæŒã£ãŸå‹•çš„シンボルテー"
"ブル中ã®ã‚·ãƒ³ãƒœãƒ«\n"
-#: src/elflint.c:1063
+#: src/elflint.c:1067
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"
msgstr ""
"セクション [%2d] '%s': シンボル %zu: st_other 中ã«è¨­å®šã•ã‚ŒãŸä¸æ˜Žãªãƒ“ット\n"
-#: src/elflint.c:1101
+#: src/elflint.c:1105
#, fuzzy, c-format
msgid "section [%2d] '%s': cannot get section data.\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:1117
+#: src/elflint.c:1121
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
msgstr "セクション [%2d] '%s': ã“ã® RELA セクション用ã«ä½¿ã‚れる DT_RELCOUNT\n"
-#: src/elflint.c:1128 src/elflint.c:1181
+#: src/elflint.c:1132 src/elflint.c:1185
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
msgstr ""
"セクション [%2d] '%s': ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã«ã¯é«˜ã™ãŽã‚‹ DT_RELCOUNT 値 %d\n"
-#: src/elflint.c:1153 src/elflint.c:1206
+#: src/elflint.c:1157 src/elflint.c:1210
#, c-format
msgid ""
"section [%2d] '%s': relative relocations after index %d as specified by "
@@ -1984,7 +1991,7 @@ msgstr ""
"セクション [%2d] '%s': UT_RELOCOUNT ã§æŒ‡å®šã•ã‚ŒãŸã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ %d 後ã®ç›¸å¯¾ãƒªãƒ­"
"ケーション\n"
-#: src/elflint.c:1159 src/elflint.c:1212
+#: src/elflint.c:1163 src/elflint.c:1216
#, c-format
msgid ""
"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT "
@@ -1993,52 +2000,52 @@ msgstr ""
"セクション [%2d] '%s': インデックス %zu ã§ã®éžç›¸å¯¾ãƒªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³; %d 相対リ"
"ロケーションã§æŒ‡å®šã•ã‚ŒãŸ DT_RELCOUNT\n"
-#: src/elflint.c:1171
+#: src/elflint.c:1175
#, c-format
msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
msgstr "セクション [%2d] '%s': ã“ã® REL セクション用ã«ä½¿ã‚れる DT_RELACOUNT\n"
-#: src/elflint.c:1254
+#: src/elflint.c:1258
#, c-format
msgid "section [%2d] '%s': invalid destination section index\n"
msgstr "セクション [%2d] '%s': ä¸å½“ãªå®›å…ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹\n"
-#: src/elflint.c:1266
+#: src/elflint.c:1270
#, c-format
msgid "section [%2d] '%s': invalid destination section type\n"
msgstr "セクション [%2d] '%s': ä¸å½“ãªå®›å…ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—\n"
-#: src/elflint.c:1274
+#: src/elflint.c:1278
#, c-format
msgid "section [%2d] '%s': sh_info should be zero\n"
msgstr "セクション [%2d] '%s': sh_info ã¯ã‚¼ãƒ­ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:1282
+#: src/elflint.c:1286
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': no relocations for merge-able string sections possible\n"
msgstr ""
"セクション [%2d] '%s': マージã§ãるセクションã®ãƒªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ä¸å¯èƒ½ã§ã™\n"
-#: src/elflint.c:1290
+#: src/elflint.c:1294
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
msgstr ""
"セクション [%2d] '%s': セクション項目サイズ㌠ElfXX_Rela ã¨ä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: src/elflint.c:1350
+#: src/elflint.c:1354
#, c-format
msgid "text relocation flag set but there is no read-only segment\n"
msgstr ""
"テキストリロケーションフラグãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã™ãŒã€èª­è¾¼ã¿å°‚用セグメントãŒã‚ã‚Š"
"ã¾ã›ã‚“\n"
-#: src/elflint.c:1377
+#: src/elflint.c:1381
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid type\n"
msgstr "セクション [%2d] '%s': リロケーション %zu: ä¸å½“ãªã‚¿ã‚¤ãƒ—\n"
-#: src/elflint.c:1385
+#: src/elflint.c:1389
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: relocation type invalid for the file "
@@ -2047,13 +2054,13 @@ msgstr ""
"セクション [%2d] '%s': リロケーション %zu: ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ç”¨ã®ãƒªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚¿ã‚¤"
"プã¯ä¸å½“ã§ã™\n"
-#: src/elflint.c:1393
+#: src/elflint.c:1397
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
msgstr ""
"セクション [%2d] '%s': リロケーション %zu: ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹\n"
-#: src/elflint.c:1411
+#: src/elflint.c:1415
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can "
@@ -2062,12 +2069,12 @@ msgstr ""
"セクション [%2d] '%s': リロケーション %zu: シンボル '_GLOBAL_OFFSET_TABLE_' "
"ã®ã¿ãŒ %s ã¨ä¸€ç·’ã«ä½¿ç”¨ã§ãã¾ã™\n"
-#: src/elflint.c:1428
+#: src/elflint.c:1432
#, c-format
msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
msgstr "セクション [%2d] '%s': リロケーション %zu: オフセット境界外\n"
-#: src/elflint.c:1443
+#: src/elflint.c:1447
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: copy relocation against symbol of type "
@@ -2076,7 +2083,7 @@ msgstr ""
"セクション [%2d] '%s': リロケーション %zu: タイプ %s ã®ã‚·ãƒ³ãƒœãƒ«ã«å¯¾ã™ã‚‹ã‚³ãƒ”ー"
"リロケーション\n"
-#: src/elflint.c:1464
+#: src/elflint.c:1468
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: read-only section modified but text "
@@ -2085,24 +2092,24 @@ msgstr ""
"セクション [%2d] '%s': リロケーション %zu: 読込ã¿å°‚用セクションãŒå¤‰æ›´ã•ã‚Œã¾ã—"
"ãŸãŒã€ãƒ†ã‚­ã‚¹ãƒˆãƒªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ãƒ©ã‚°ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: src/elflint.c:1479
+#: src/elflint.c:1483
#, c-format
msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
msgstr ""
"セクション [%2d] '%s': リロケーションãŒãƒ­ãƒ¼ãƒ‰ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ã¨ãƒ­ãƒ¼ãƒ‰ã•ã‚Œãªã‹ã£ãŸ"
"データã«å¯¾ã—ã¦ã§ã™\n"
-#: src/elflint.c:1519 src/elflint.c:1570
+#: src/elflint.c:1523 src/elflint.c:1574
#, c-format
msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
msgstr ""
-#: src/elflint.c:1646
+#: src/elflint.c:1650
#, c-format
msgid "more than one dynamic section present\n"
msgstr ""
-#: src/elflint.c:1664
+#: src/elflint.c:1668
#, fuzzy, c-format
msgid ""
"section [%2d]: referenced as string table for section [%2d] '%s' but section "
@@ -2111,427 +2118,427 @@ msgstr ""
"セクション [%2d] '%s': セクション [%2d] '%s' 用ã®æ–‡å­—列テーブルã¨ã—ã¦å‚ç…§ã•ã‚Œ"
"ã¦ã„ã¾ã™ãŒã€ã‚¿ã‚¤ãƒ—㌠SHT_STRTAB ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:1672
+#: src/elflint.c:1676
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
msgstr ""
-#: src/elflint.c:1677 src/elflint.c:1966
+#: src/elflint.c:1681 src/elflint.c:1970
#, c-format
msgid "section [%2d] '%s': sh_info not zero\n"
msgstr ""
-#: src/elflint.c:1687
+#: src/elflint.c:1691
#, c-format
msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
msgstr ""
-#: src/elflint.c:1695
+#: src/elflint.c:1699
#, c-format
msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
msgstr ""
-#: src/elflint.c:1702
+#: src/elflint.c:1706
#, c-format
msgid "section [%2d] '%s': entry %zu: unknown tag\n"
msgstr ""
-#: src/elflint.c:1713
+#: src/elflint.c:1717
#, c-format
msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
msgstr ""
-#: src/elflint.c:1723
+#: src/elflint.c:1727
#, c-format
msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
msgstr ""
-#: src/elflint.c:1741
+#: src/elflint.c:1745
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
msgstr ""
-#: src/elflint.c:1754
+#: src/elflint.c:1758
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: pointer does not match address of section "
"[%2d] '%s' referenced by sh_link\n"
msgstr ""
-#: src/elflint.c:1797
+#: src/elflint.c:1801
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
msgstr ""
-#: src/elflint.c:1812
+#: src/elflint.c:1816
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must be valid offset in section "
"[%2d] '%s'\n"
msgstr ""
-#: src/elflint.c:1832 src/elflint.c:1860
+#: src/elflint.c:1836 src/elflint.c:1864
#, c-format
msgid "section [%2d] '%s': contains %s entry but not %s\n"
msgstr ""
-#: src/elflint.c:1844
+#: src/elflint.c:1848
#, c-format
msgid "section [%2d] '%s': mandatory tag %s not present\n"
msgstr ""
-#: src/elflint.c:1853
+#: src/elflint.c:1857
#, c-format
msgid "section [%2d] '%s': no hash section present\n"
msgstr ""
-#: src/elflint.c:1868 src/elflint.c:1875
+#: src/elflint.c:1872 src/elflint.c:1879
#, c-format
msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
msgstr ""
-#: src/elflint.c:1885 src/elflint.c:1889
+#: src/elflint.c:1889 src/elflint.c:1893
#, c-format
msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
msgstr ""
-#: src/elflint.c:1895
+#: src/elflint.c:1899
#, c-format
msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
msgstr ""
-#: src/elflint.c:1906 src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918
+#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922
#, c-format
msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
msgstr ""
-#: src/elflint.c:1930
+#: src/elflint.c:1934
#, c-format
msgid ""
"section [%2d] '%s': only relocatable files can have extended section index\n"
msgstr ""
-#: src/elflint.c:1940
+#: src/elflint.c:1944
#, c-format
msgid ""
"section [%2d] '%s': extended section index section not for symbol table\n"
msgstr ""
-#: src/elflint.c:1944
+#: src/elflint.c:1948
#, fuzzy, c-format
msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n"
msgstr "セクション [%2d] '%s': ä¸å½“ãªå®›å…ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹\n"
-#: src/elflint.c:1949
+#: src/elflint.c:1953
#, c-format
msgid "cannot get data for symbol section\n"
msgstr ""
-#: src/elflint.c:1952
+#: src/elflint.c:1956
#, c-format
msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
msgstr ""
-#: src/elflint.c:1961
+#: src/elflint.c:1965
#, c-format
msgid "section [%2d] '%s': extended index table too small for symbol table\n"
msgstr ""
-#: src/elflint.c:1976
+#: src/elflint.c:1980
#, c-format
msgid ""
"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to "
"same symbol table\n"
msgstr ""
-#: src/elflint.c:1994
+#: src/elflint.c:1998
#, c-format
msgid "symbol 0 should have zero extended section index\n"
msgstr ""
-#: src/elflint.c:2006
+#: src/elflint.c:2010
#, c-format
msgid "cannot get data for symbol %zu\n"
msgstr ""
-#: src/elflint.c:2011
+#: src/elflint.c:2015
#, c-format
msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
msgstr ""
-#: src/elflint.c:2028 src/elflint.c:2085
+#: src/elflint.c:2032 src/elflint.c:2089
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
msgstr ""
-#: src/elflint.c:2042 src/elflint.c:2099
+#: src/elflint.c:2046 src/elflint.c:2103
#, c-format
msgid "section [%2d] '%s': chain array too large\n"
msgstr ""
-#: src/elflint.c:2056 src/elflint.c:2113
+#: src/elflint.c:2060 src/elflint.c:2117
#, c-format
msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2066
+#: src/elflint.c:2070
#, c-format
msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2123
+#: src/elflint.c:2127
#, c-format
msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
msgstr ""
-#: src/elflint.c:2136
+#: src/elflint.c:2140
#, fuzzy, c-format
msgid "section [%2d] '%s': not enough data\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:2148
+#: src/elflint.c:2152
#, fuzzy, c-format
msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n"
msgstr "セクション [%2d] '%s': 0番目ã®é …ç›®ã«ã‚ã‚‹ '%s' ゼロã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: src/elflint.c:2164
+#: src/elflint.c:2168
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected at "
"least %ld)\n"
msgstr ""
-#: src/elflint.c:2173
+#: src/elflint.c:2177
#, c-format
msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
msgstr ""
-#: src/elflint.c:2207
+#: src/elflint.c:2211
#, c-format
msgid ""
"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
msgstr ""
-#: src/elflint.c:2228
+#: src/elflint.c:2232
#, c-format
msgid ""
"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is "
"undefined\n"
msgstr ""
-#: src/elflint.c:2241
+#: src/elflint.c:2245
#, c-format
msgid ""
"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
msgstr ""
-#: src/elflint.c:2250
+#: src/elflint.c:2254
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:2280
+#: src/elflint.c:2284
#, c-format
msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2285
+#: src/elflint.c:2289
#, c-format
msgid ""
"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
msgstr ""
-#: src/elflint.c:2291
+#: src/elflint.c:2295
#, c-format
msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
msgstr ""
-#: src/elflint.c:2304
+#: src/elflint.c:2308
#, c-format
msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
msgstr ""
-#: src/elflint.c:2322
+#: src/elflint.c:2326
#, c-format
msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
msgstr ""
-#: src/elflint.c:2326
+#: src/elflint.c:2330
#, fuzzy, c-format
msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n"
msgstr "セクション [%2d] '%s': ä¸å½“ãªå®›å…ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹\n"
-#: src/elflint.c:2336
+#: src/elflint.c:2340
#, c-format
msgid "section [%2d] '%s': hash table entry size incorrect\n"
msgstr ""
-#: src/elflint.c:2341
+#: src/elflint.c:2345
#, c-format
msgid "section [%2d] '%s': not marked to be allocated\n"
msgstr ""
-#: src/elflint.c:2346
+#: src/elflint.c:2350
#, c-format
msgid ""
"section [%2d] '%s': hash table has not even room for initial administrative "
"entries\n"
msgstr ""
-#: src/elflint.c:2395
+#: src/elflint.c:2399
#, c-format
msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
msgstr ""
-#: src/elflint.c:2419 src/elflint.c:2484 src/elflint.c:2519
+#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' does not contain enough data\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:2440
+#: src/elflint.c:2444
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' has zero bit mask words\n"
msgstr ""
"\n"
"セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n"
-#: src/elflint.c:2451 src/elflint.c:2495 src/elflint.c:2532
+#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' uses too much data\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:2466
+#: src/elflint.c:2470
#, c-format
msgid ""
"hash section [%2zu] '%s' invalid symbol index %<PRIu32> (max_nsyms: "
"%<PRIu32>, nentries: %<PRIu32>\n"
msgstr ""
-#: src/elflint.c:2553
+#: src/elflint.c:2557
#, fuzzy, c-format
msgid "hash section [%2zu] '%s' invalid sh_entsize\n"
msgstr "セクション [%2d] '%s': ä¸å½“ãªå®›å…ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—\n"
-#: src/elflint.c:2563 src/elflint.c:2567
+#: src/elflint.c:2567 src/elflint.c:2571
#, c-format
msgid "section [%2zu] '%s': reference to symbol index 0\n"
msgstr ""
-#: src/elflint.c:2574
+#: src/elflint.c:2578
#, c-format
msgid ""
"symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash "
"table in [%2zu] '%s'\n"
msgstr ""
-#: src/elflint.c:2586
+#: src/elflint.c:2590
#, c-format
msgid ""
"symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash "
"table in [%2zu] '%s'\n"
msgstr ""
-#: src/elflint.c:2602
+#: src/elflint.c:2606
#, c-format
msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
msgstr ""
-#: src/elflint.c:2622
+#: src/elflint.c:2626
#, c-format
msgid ""
"section [%2d] '%s': section groups only allowed in relocatable object files\n"
msgstr ""
-#: src/elflint.c:2633
+#: src/elflint.c:2637
#, c-format
msgid "section [%2d] '%s': cannot get symbol table: %s\n"
msgstr ""
-#: src/elflint.c:2638
+#: src/elflint.c:2642
#, c-format
msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
msgstr ""
-#: src/elflint.c:2644
+#: src/elflint.c:2648
#, c-format
msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
msgstr ""
-#: src/elflint.c:2649
+#: src/elflint.c:2653
#, c-format
msgid "section [%2d] '%s': sh_flags not zero\n"
msgstr ""
-#: src/elflint.c:2656
+#: src/elflint.c:2660
#, c-format
msgid "section [%2d] '%s': cannot get symbol for signature\n"
msgstr ""
-#: src/elflint.c:2660
+#: src/elflint.c:2664
#, fuzzy, c-format
msgid "section [%2d] '%s': cannot get symbol name for signature\n"
msgstr "セクション [%2d] '%s': シンボル %d を得られã¾ã›ã‚“: %s\n"
-#: src/elflint.c:2665
+#: src/elflint.c:2669
#, fuzzy, c-format
msgid "section [%2d] '%s': signature symbol cannot be empty string\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:2671
+#: src/elflint.c:2675
#, c-format
msgid "section [%2d] '%s': sh_flags not set correctly\n"
msgstr ""
-#: src/elflint.c:2677
+#: src/elflint.c:2681
#, c-format
msgid "section [%2d] '%s': cannot get data: %s\n"
msgstr ""
-#: src/elflint.c:2686
+#: src/elflint.c:2690
#, c-format
msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
msgstr ""
-#: src/elflint.c:2692
+#: src/elflint.c:2696
#, c-format
msgid "section [%2d] '%s': section group without flags word\n"
msgstr ""
-#: src/elflint.c:2700
+#: src/elflint.c:2704
#, c-format
msgid "section [%2d] '%s': section group without member\n"
msgstr ""
-#: src/elflint.c:2704
+#: src/elflint.c:2708
#, c-format
msgid "section [%2d] '%s': section group with only one member\n"
msgstr ""
-#: src/elflint.c:2715
+#: src/elflint.c:2719
#, c-format
msgid "section [%2d] '%s': unknown section group flags\n"
msgstr ""
-#: src/elflint.c:2727
+#: src/elflint.c:2731
#, fuzzy, c-format
msgid "section [%2d] '%s': section index %zu out of range\n"
msgstr "セクション [%2d] '%s': リロケーション %zu: オフセット境界外\n"
-#: src/elflint.c:2736
+#: src/elflint.c:2740
#, c-format
msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
msgstr ""
-#: src/elflint.c:2743
+#: src/elflint.c:2747
#, c-format
msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
msgstr ""
-#: src/elflint.c:2749
+#: src/elflint.c:2753
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': element %zu references section [%2d] '%s' without "
@@ -2540,765 +2547,770 @@ msgstr ""
"セクション [%2d] '%s': シンボル %zu: å‚ç…§ã•ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%2d] '%s' 㯠"
"SHF_TLS フラグãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: src/elflint.c:2756
+#: src/elflint.c:2760
#, c-format
msgid "section [%2d] '%s' is contained in more than one section group\n"
msgstr ""
-#: src/elflint.c:2946
+#: src/elflint.c:2950
#, c-format
msgid ""
"section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no "
"dynamic symbol table\n"
msgstr ""
-#: src/elflint.c:2958
+#: src/elflint.c:2962
#, c-format
msgid ""
"section [%2d] '%s' has different number of entries than symbol table [%2d] "
"'%s'\n"
msgstr ""
-#: src/elflint.c:2974
+#: src/elflint.c:2978
#, c-format
msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
msgstr ""
-#: src/elflint.c:2990
+#: src/elflint.c:2994
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
msgstr ""
-#: src/elflint.c:2998
+#: src/elflint.c:3002
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
msgstr ""
-#: src/elflint.c:3012
+#: src/elflint.c:3016
#, c-format
msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
msgstr ""
-#: src/elflint.c:3017
+#: src/elflint.c:3021
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for defined version\n"
msgstr ""
-#: src/elflint.c:3027
+#: src/elflint.c:3031
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for requested version\n"
msgstr ""
-#: src/elflint.c:3080
+#: src/elflint.c:3084
#, c-format
msgid "more than one version reference section present\n"
msgstr ""
-#: src/elflint.c:3088 src/elflint.c:3235
+#: src/elflint.c:3092 src/elflint.c:3239
#, c-format
msgid "section [%2d] '%s': sh_link does not link to string table\n"
msgstr ""
-#: src/elflint.c:3113 src/elflint.c:3289
+#: src/elflint.c:3117 src/elflint.c:3293
#, c-format
msgid "section [%2d] '%s': entry %d has wrong version %d\n"
msgstr ""
-#: src/elflint.c:3120 src/elflint.c:3296
+#: src/elflint.c:3124 src/elflint.c:3300
#, c-format
msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
msgstr ""
-#: src/elflint.c:3130
+#: src/elflint.c:3134
#, c-format
msgid "section [%2d] '%s': entry %d has invalid file reference\n"
msgstr ""
-#: src/elflint.c:3138
+#: src/elflint.c:3142
#, c-format
msgid "section [%2d] '%s': entry %d references unknown dependency\n"
msgstr ""
-#: src/elflint.c:3150
+#: src/elflint.c:3154
#, c-format
msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
msgstr ""
-#: src/elflint.c:3158
+#: src/elflint.c:3162
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name "
"reference\n"
msgstr ""
-#: src/elflint.c:3167
+#: src/elflint.c:3171
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: "
"%#x, expected %#x\n"
msgstr ""
-#: src/elflint.c:3176
+#: src/elflint.c:3180
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version "
"name '%s'\n"
msgstr ""
-#: src/elflint.c:3187
+#: src/elflint.c:3191
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
msgstr ""
-#: src/elflint.c:3204 src/elflint.c:3380
+#: src/elflint.c:3208 src/elflint.c:3384
#, c-format
msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
msgstr ""
-#: src/elflint.c:3212 src/elflint.c:3388
+#: src/elflint.c:3216 src/elflint.c:3392
#, c-format
msgid ""
"section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says "
"there are more entries\n"
msgstr ""
-#: src/elflint.c:3227
+#: src/elflint.c:3231
#, c-format
msgid "more than one version definition section present\n"
msgstr ""
-#: src/elflint.c:3274
+#: src/elflint.c:3278
#, c-format
msgid "section [%2d] '%s': more than one BASE definition\n"
msgstr ""
-#: src/elflint.c:3278
+#: src/elflint.c:3282
#, c-format
msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
msgstr ""
-#: src/elflint.c:3284
+#: src/elflint.c:3288
#, c-format
msgid "section [%2d] '%s': entry %d has unknown flag\n"
msgstr ""
-#: src/elflint.c:3311
+#: src/elflint.c:3315
#, c-format
msgid "section [%2d] '%s': entry %d has invalid name reference\n"
msgstr ""
-#: src/elflint.c:3318
+#: src/elflint.c:3322
#, c-format
msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
msgstr ""
-#: src/elflint.c:3326
+#: src/elflint.c:3330
#, c-format
msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
msgstr ""
-#: src/elflint.c:3346
+#: src/elflint.c:3350
#, c-format
msgid ""
"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
msgstr ""
-#: src/elflint.c:3363
+#: src/elflint.c:3367
#, c-format
msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
msgstr ""
-#: src/elflint.c:3396
+#: src/elflint.c:3400
#, c-format
msgid "section [%2d] '%s': no BASE definition\n"
msgstr ""
-#: src/elflint.c:3412
+#: src/elflint.c:3416
#, c-format
msgid "section [%2d] '%s': unknown parent version '%s'\n"
msgstr ""
-#: src/elflint.c:3425
+#: src/elflint.c:3429
#, c-format
msgid "section [%2d] '%s': empty object attributes section\n"
msgstr ""
-#: src/elflint.c:3446
+#: src/elflint.c:3450
#, c-format
msgid "section [%2d] '%s': unrecognized attribute format\n"
msgstr ""
-#: src/elflint.c:3462
+#: src/elflint.c:3466
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute section\n"
msgstr ""
-#: src/elflint.c:3471
+#: src/elflint.c:3475
#, c-format
msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n"
msgstr ""
-#: src/elflint.c:3483
+#: src/elflint.c:3487
#, c-format
msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n"
msgstr ""
-#: src/elflint.c:3500
+#: src/elflint.c:3504
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
msgstr ""
-#: src/elflint.c:3509
+#: src/elflint.c:3513
#, c-format
msgid "section [%2d] '%s': offset %zu: truncated attribute section\n"
msgstr ""
-#: src/elflint.c:3518
+#: src/elflint.c:3522
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
msgstr ""
-#: src/elflint.c:3533
+#: src/elflint.c:3537
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
msgstr ""
#. Tag_File
-#: src/elflint.c:3544
+#: src/elflint.c:3548
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
msgstr ""
-#: src/elflint.c:3562
+#: src/elflint.c:3566
#, c-format
msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"
msgstr ""
-#: src/elflint.c:3573
+#: src/elflint.c:3577
#, c-format
msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n"
msgstr ""
-#: src/elflint.c:3586
+#: src/elflint.c:3590
#, c-format
msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"
msgstr ""
-#: src/elflint.c:3590
+#: src/elflint.c:3594
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
msgstr ""
-#: src/elflint.c:3600
+#: src/elflint.c:3604
#, c-format
msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n"
msgstr ""
-#: src/elflint.c:3606
+#: src/elflint.c:3610
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
msgstr ""
-#: src/elflint.c:3695
+#: src/elflint.c:3699
#, c-format
msgid "cannot get section header of zeroth section\n"
msgstr ""
-#: src/elflint.c:3699
+#: src/elflint.c:3703
#, c-format
msgid "zeroth section has nonzero name\n"
msgstr ""
-#: src/elflint.c:3701
+#: src/elflint.c:3705
#, c-format
msgid "zeroth section has nonzero type\n"
msgstr ""
-#: src/elflint.c:3703
+#: src/elflint.c:3707
#, c-format
msgid "zeroth section has nonzero flags\n"
msgstr ""
-#: src/elflint.c:3705
+#: src/elflint.c:3709
#, c-format
msgid "zeroth section has nonzero address\n"
msgstr ""
-#: src/elflint.c:3707
+#: src/elflint.c:3711
#, c-format
msgid "zeroth section has nonzero offset\n"
msgstr ""
-#: src/elflint.c:3709
+#: src/elflint.c:3713
#, c-format
msgid "zeroth section has nonzero align value\n"
msgstr ""
-#: src/elflint.c:3711
+#: src/elflint.c:3715
#, c-format
msgid "zeroth section has nonzero entry size value\n"
msgstr ""
-#: src/elflint.c:3714
+#: src/elflint.c:3718
#, c-format
msgid ""
"zeroth section has nonzero size value while ELF header has nonzero shnum "
"value\n"
msgstr ""
-#: src/elflint.c:3718
+#: src/elflint.c:3722
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
"overflow in shstrndx\n"
msgstr ""
-#: src/elflint.c:3722
+#: src/elflint.c:3726
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
"overflow in phnum\n"
msgstr ""
-#: src/elflint.c:3740
+#: src/elflint.c:3744
#, c-format
msgid "cannot get section header for section [%2zu] '%s': %s\n"
msgstr ""
-#: src/elflint.c:3749
+#: src/elflint.c:3753
#, c-format
msgid "section [%2zu]: invalid name\n"
msgstr ""
-#: src/elflint.c:3776
+#: src/elflint.c:3780
#, c-format
msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n"
msgstr ""
-#: src/elflint.c:3794
+#: src/elflint.c:3798
#, c-format
msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n"
msgstr ""
-#: src/elflint.c:3812
+#: src/elflint.c:3816
#, c-format
msgid ""
"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
msgstr ""
-#: src/elflint.c:3830
+#: src/elflint.c:3834
#, c-format
msgid "section [%2zu] '%s' present in object file\n"
msgstr ""
-#: src/elflint.c:3836 src/elflint.c:3868
+#: src/elflint.c:3840 src/elflint.c:3872
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
msgstr ""
-#: src/elflint.c:3841 src/elflint.c:3873
+#: src/elflint.c:3845 src/elflint.c:3877
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable "
"segments\n"
msgstr ""
-#: src/elflint.c:3849
+#: src/elflint.c:3853
#, c-format
msgid ""
"section [%2zu] '%s' is extension section index table in non-object file\n"
msgstr ""
-#: src/elflint.c:3892
+#: src/elflint.c:3896
#, c-format
msgid "section [%2zu] '%s': size not multiple of entry size\n"
msgstr ""
-#: src/elflint.c:3897
+#: src/elflint.c:3901
#, c-format
msgid "cannot get section header\n"
msgstr ""
-#: src/elflint.c:3907
+#: src/elflint.c:3911
#, c-format
msgid "section [%2zu] '%s' has unsupported type %d\n"
msgstr ""
-#: src/elflint.c:3922
+#: src/elflint.c:3931
#, c-format
msgid ""
"section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:3929
+#: src/elflint.c:3938
#, c-format
msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:3937
+#: src/elflint.c:3946
#, c-format
msgid "section [%2zu] '%s': thread-local data sections address not zero\n"
msgstr ""
-#: src/elflint.c:3947
+#: src/elflint.c:3956
#, fuzzy, c-format
msgid "section [%2zu] '%s': allocated section cannot be compressed\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:3952
+#: src/elflint.c:3961
#, fuzzy, c-format
msgid "section [%2zu] '%s': nobits section cannot be compressed\n"
msgstr "セクション [%2d] '%s': セクションデータを得られã¾ã›ã‚“\n"
-#: src/elflint.c:3958
+#: src/elflint.c:3967
#, c-format
msgid ""
"section [%2zu] '%s': compressed section with no compression header: %s\n"
msgstr ""
-#: src/elflint.c:3964
+#: src/elflint.c:3973
#, c-format
msgid "section [%2zu] '%s': invalid section reference in link value\n"
msgstr ""
-#: src/elflint.c:3969
+#: src/elflint.c:3978
#, c-format
msgid "section [%2zu] '%s': invalid section reference in info value\n"
msgstr ""
-#: src/elflint.c:3976
+#: src/elflint.c:3985
#, c-format
msgid "section [%2zu] '%s': strings flag set without merge flag\n"
msgstr ""
-#: src/elflint.c:3981
+#: src/elflint.c:3990
#, c-format
msgid "section [%2zu] '%s': merge flag set but entry size is zero\n"
msgstr ""
-#: src/elflint.c:4000
+#: src/elflint.c:4009
#, c-format
msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n"
msgstr ""
-#: src/elflint.c:4009
+#: src/elflint.c:4018
#, c-format
msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n"
msgstr ""
-#: src/elflint.c:4016
+#: src/elflint.c:4025
#, c-format
msgid "section [%2zu] '%s' is both executable and writable\n"
msgstr ""
-#: src/elflint.c:4047
+#: src/elflint.c:4056
#, c-format
msgid ""
"section [%2zu] '%s' not fully contained in segment of program header entry "
"%d\n"
msgstr ""
-#: src/elflint.c:4057
+#: src/elflint.c:4066
#, 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:4083
+#: src/elflint.c:4092
#, 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:4094
+#: src/elflint.c:4103
#, 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:4105
+#: src/elflint.c:4114
#, c-format
msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n"
msgstr ""
-#: src/elflint.c:4115
+#: src/elflint.c:4124
#, c-format
msgid "section [%2zu] '%s' is writable in unwritable segment %d\n"
msgstr ""
-#: src/elflint.c:4125
+#: src/elflint.c:4134
#, c-format
msgid ""
"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
msgstr ""
-#: src/elflint.c:4131
+#: src/elflint.c:4140
#, 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:4139
+#: src/elflint.c:4148
#, c-format
msgid ""
"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
msgstr ""
-#: src/elflint.c:4190
+#: src/elflint.c:4199
#, c-format
msgid "more than one version symbol table present\n"
msgstr ""
-#: src/elflint.c:4213
+#: src/elflint.c:4222
#, c-format
msgid "INTERP program header entry but no .interp section\n"
msgstr ""
-#: src/elflint.c:4224
+#: src/elflint.c:4233
#, c-format
msgid ""
"loadable segment [%u] is executable but contains no executable sections\n"
msgstr ""
-#: src/elflint.c:4230
+#: src/elflint.c:4239
#, c-format
msgid "loadable segment [%u] is writable but contains no writable sections\n"
msgstr ""
-#: src/elflint.c:4241
+#: src/elflint.c:4250
#, c-format
msgid ""
"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section "
"exist\n"
msgstr ""
-#: src/elflint.c:4254
+#: src/elflint.c:4263
#, c-format
msgid "duplicate version index %d\n"
msgstr ""
-#: src/elflint.c:4268
+#: src/elflint.c:4277
#, c-format
msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n"
msgstr ""
-#: src/elflint.c:4317
+#: src/elflint.c:4326
#, c-format
msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n"
msgstr ""
-#: src/elflint.c:4321
+#: src/elflint.c:4330
#, c-format
msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
msgstr ""
-#: src/elflint.c:4370
+#: src/elflint.c:4379
#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
"offset %zu\n"
msgstr ""
-#: src/elflint.c:4375
+#: src/elflint.c:4384
#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
"'%s' at offset %zu\n"
msgstr ""
-#: src/elflint.c:4394
+#: src/elflint.c:4403
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4414
+#: src/elflint.c:4423
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr ""
-#: src/elflint.c:4417
+#: src/elflint.c:4426
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4438
+#: src/elflint.c:4447
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
-#: src/elflint.c:4445
+#: src/elflint.c:4454
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr ""
-#: src/elflint.c:4448
+#: src/elflint.c:4457
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr ""
-#: src/elflint.c:4466
+#: src/elflint.c:4475
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
msgstr ""
-#: src/elflint.c:4481
+#: src/elflint.c:4490
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr ""
-#: src/elflint.c:4490
+#: src/elflint.c:4500
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
-#: src/elflint.c:4501
+#: src/elflint.c:4511
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr ""
-#: src/elflint.c:4509
+#: src/elflint.c:4519
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr ""
-#: src/elflint.c:4516
+#: src/elflint.c:4526
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr ""
-#: src/elflint.c:4530
+#: src/elflint.c:4540
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4533
+#: src/elflint.c:4543
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4543
+#: src/elflint.c:4553
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr ""
-#: src/elflint.c:4564
+#: src/elflint.c:4574
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr ""
-#: src/elflint.c:4575
+#: src/elflint.c:4585
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
-#: src/elflint.c:4582
+#: src/elflint.c:4592
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
-#: src/elflint.c:4591 src/elflint.c:4614
+#: src/elflint.c:4601 src/elflint.c:4624
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr ""
-#: src/elflint.c:4620
+#: src/elflint.c:4630
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr ""
-#: src/elflint.c:4647
+#: src/elflint.c:4657
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
-#: src/elflint.c:4650
+#: src/elflint.c:4660
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
-#: src/elflint.c:4663
+#: src/elflint.c:4673
#, c-format
msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
msgstr ""
-#: src/elflint.c:4671
+#: src/elflint.c:4681
#, c-format
msgid "call frame search table must be allocated\n"
msgstr ""
-#: src/elflint.c:4674
+#: src/elflint.c:4684
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr ""
-#: src/elflint.c:4678
+#: src/elflint.c:4688
#, c-format
msgid "call frame search table must not be writable\n"
msgstr ""
-#: src/elflint.c:4681
+#: src/elflint.c:4691
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr ""
-#: src/elflint.c:4686
+#: src/elflint.c:4696
#, c-format
msgid "call frame search table must not be executable\n"
msgstr ""
-#: src/elflint.c:4689
+#: src/elflint.c:4699
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr ""
-#: src/elflint.c:4700
+#: src/elflint.c:4710
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr ""
-#: src/elflint.c:4707
+#: src/elflint.c:4717
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr ""
-#: src/elflint.c:4710
+#: src/elflint.c:4720
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
"alignment\n"
msgstr ""
-#: src/elflint.c:4723
+#: src/elflint.c:4733
#, 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:4757
+#: src/elflint.c:4767
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr ""
-#: src/elflint.c:4783
+#: src/elflint.c:4779
+#, fuzzy, c-format
+msgid "cannot create backend for ELF file\n"
+msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“"
+
+#: src/elflint.c:4800
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr ""
@@ -3553,12 +3565,12 @@ msgstr "%s%s%s: ファイル形å¼ã‚’èªè­˜ã§ãã¾ã›ã‚“"
msgid "cannot create search tree"
msgstr "検索ツリーを生æˆã§ãã¾ã›ã‚“"
-#: src/nm.c:746 src/nm.c:1205 src/objdump.c:779 src/readelf.c:635
+#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:635
#: src/readelf.c:1447 src/readelf.c:1598 src/readelf.c:1799 src/readelf.c:2005
#: src/readelf.c:2195 src/readelf.c:2373 src/readelf.c:2449 src/readelf.c:2707
#: src/readelf.c:2783 src/readelf.c:2870 src/readelf.c:3468 src/readelf.c:3518
-#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12415
-#: src/readelf.c:12626 src/readelf.c:12695 src/size.c:398 src/size.c:470
+#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12420
+#: src/readelf.c:12631 src/readelf.c:12700 src/size.c:398 src/size.c:470
#: src/strip.c:1038
#, c-format
msgid "cannot get section header string table index"
@@ -3588,28 +3600,28 @@ msgstr ""
"%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n"
"\n"
-#: src/nm.c:1216
+#: src/nm.c:1250
#, fuzzy, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr "%s: セクションã®é …ç›®ã®å¤§ãã• `%s' ã¯äºˆæœŸã—ãŸã‚‚ã®ã¨ã¯ç•°ãªã‚Šã¾ã™"
-#: src/nm.c:1221
+#: src/nm.c:1255
#, fuzzy, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: セクション `%s' ã®å¤§ãã•ã¯é …ç›®ã®å¤§ãã•ã®æ•´æ•°å€ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/nm.c:1300
+#: src/nm.c:1334
#, 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:1527
+#: src/nm.c:1570
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: ä¸å½“ãªæ“作"
-#: src/nm.c:1584
+#: src/nm.c:1620
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: シンボルãŒã‚ã‚Šã¾ã›ã‚“"
@@ -3683,6 +3695,11 @@ msgstr ""
msgid "cannot disassemble"
msgstr ""
+#: src/objdump.c:760
+#, fuzzy, c-format
+msgid "cannot create backend for elf file"
+msgstr "æ–°ã—ã„ファイルを生æˆã§ãã¾ã›ã‚“"
+
#. Short description of program.
#: src/ranlib.c:63
msgid "Generate an index to speed access to archives."
@@ -3876,7 +3893,7 @@ msgstr "セクション数を決定ã§ãã¾ã›ã‚“: %s"
msgid "cannot get section: %s"
msgstr "セクションを得られã¾ã›ã‚“: %s"
-#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12646
+#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12651
#: src/unstrip.c:395 src/unstrip.c:426 src/unstrip.c:485 src/unstrip.c:604
#: src/unstrip.c:625 src/unstrip.c:665 src/unstrip.c:881 src/unstrip.c:1212
#: src/unstrip.c:1339 src/unstrip.c:1363 src/unstrip.c:1419 src/unstrip.c:1483
@@ -4272,8 +4289,8 @@ msgstr "<ä¸å½“ãªã‚·ãƒ³ãƒœãƒ«>"
msgid "<INVALID SECTION>"
msgstr "<ä¸å½“ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³>"
-#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12517
-#: src/readelf.c:12524 src/readelf.c:12568 src/readelf.c:12575
+#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12522
+#: src/readelf.c:12529 src/readelf.c:12573 src/readelf.c:12580
msgid "Couldn't uncompress section"
msgstr ""
@@ -5672,13 +5689,13 @@ msgstr ""
msgid "cannot get debug context descriptor: %s"
msgstr "デãƒãƒƒã‚°å†…容記述å­ã‚’得られã¾ã›ã‚“: %s"
-#: src/readelf.c:11449 src/readelf.c:12071 src/readelf.c:12182
-#: src/readelf.c:12240
+#: src/readelf.c:11454 src/readelf.c:12076 src/readelf.c:12187
+#: src/readelf.c:12245
#, c-format
msgid "cannot convert core note data: %s"
msgstr "コアノートデータã®å¤‰æ›ãŒã§ãã¾ã›ã‚“: %s"
-#: src/readelf.c:11812
+#: src/readelf.c:11817
#, c-format
msgid ""
"\n"
@@ -5687,21 +5704,21 @@ msgstr ""
"\n"
"%*s... < %u 回ã®ç¹°è¿”ã—> ..."
-#: src/readelf.c:12319
+#: src/readelf.c:12324
msgid " Owner Data size Type\n"
msgstr " 所有者 データ大ãã•ã‚¿ã‚¤ãƒ—\n"
-#: src/readelf.c:12348
+#: src/readelf.c:12353
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12400
+#: src/readelf.c:12405
#, fuzzy, c-format
msgid "cannot get content of note: %s"
msgstr "ノートセクションã®å†…容を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:12434
+#: src/readelf.c:12439
#, c-format
msgid ""
"\n"
@@ -5711,7 +5728,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã® %3$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$2zu] "
"'%2$s':\n"
-#: src/readelf.c:12457
+#: src/readelf.c:12462
#, c-format
msgid ""
"\n"
@@ -5720,7 +5737,7 @@ msgstr ""
"\n"
"オフセット %2$#0<PRIx64> ã® %1$<PRIu64> ãƒã‚¤ãƒˆã®ãƒŽãƒ¼ãƒˆã‚»ã‚°ãƒ¡ãƒ³ãƒˆ:\n"
-#: src/readelf.c:12504
+#: src/readelf.c:12509
#, fuzzy, c-format
msgid ""
"\n"
@@ -5729,12 +5746,12 @@ msgstr ""
"\n"
"セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n"
-#: src/readelf.c:12531 src/readelf.c:12582
+#: src/readelf.c:12536 src/readelf.c:12587
#, fuzzy, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "セクション [%Zu] '%s' ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãŒå¾—られã¾ã›ã‚“: %s"
-#: src/readelf.c:12536
+#: src/readelf.c:12541
#, fuzzy, c-format
msgid ""
"\n"
@@ -5744,7 +5761,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン"
"プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n"
-#: src/readelf.c:12541
+#: src/readelf.c:12546
#, fuzzy, c-format
msgid ""
"\n"
@@ -5755,7 +5772,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ [%1$Zu] '%2$s' ã®16進ダン"
"プã€%3$<PRIu64> ãƒã‚¤ãƒˆ:\n"
-#: src/readelf.c:12555
+#: src/readelf.c:12560
#, fuzzy, c-format
msgid ""
"\n"
@@ -5764,7 +5781,7 @@ msgstr ""
"\n"
"セクション [%Zu] '%s' ã«ã¯ãƒ€ãƒ³ãƒ—ã™ã¹ãデータãŒã‚ã‚Šã¾ã›ã‚“。\n"
-#: src/readelf.c:12587
+#: src/readelf.c:12592
#, fuzzy, c-format
msgid ""
"\n"
@@ -5774,7 +5791,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> 文字列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ"
"イトã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:12592
+#: src/readelf.c:12597
#, fuzzy, c-format
msgid ""
"\n"
@@ -5785,7 +5802,7 @@ msgstr ""
"オフセット %4$#0<PRIx64> 文字列セクション [%1$Zu] '%2$s' ã«ã¯ %3$<PRIu64> ãƒ"
"イトã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:12641
+#: src/readelf.c:12646
#, c-format
msgid ""
"\n"
@@ -5794,7 +5811,7 @@ msgstr ""
"\n"
"セクション [%lu] ãŒã‚ã‚Šã¾ã›ã‚“"
-#: src/readelf.c:12671
+#: src/readelf.c:12676
#, c-format
msgid ""
"\n"
@@ -5803,12 +5820,12 @@ msgstr ""
"\n"
"セクション '%s' ãŒã‚ã‚Šã¾ã›ã‚“"
-#: src/readelf.c:12728
+#: src/readelf.c:12733
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "アーカイブã®ã‚·ãƒ³ãƒœãƒ«ç´¢å¼• '%s' を得られã¾ã›ã‚“: %s"
-#: src/readelf.c:12731
+#: src/readelf.c:12736
#, c-format
msgid ""
"\n"
@@ -5817,7 +5834,7 @@ msgstr ""
"\n"
"アーカイブ '%s' ã«ã¯ã‚·ãƒ³ãƒœãƒ«ç´¢å¼•ãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: src/readelf.c:12735
+#: src/readelf.c:12740
#, fuzzy, c-format
msgid ""
"\n"
@@ -5826,12 +5843,12 @@ msgstr ""
"\n"
"アーカイブ '%s' ã®ç´¢å¼•ã«ã¯ %Zu é …ç›®ã‚ã‚Šã¾ã™:\n"
-#: src/readelf.c:12753
+#: src/readelf.c:12758
#, fuzzy, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "'%2$s' 㮠オフセット %1$Zu ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’抽出ã§ãã¾ã›ã‚“: %3$s"
-#: src/readelf.c:12758
+#: src/readelf.c:12763
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "アーカイブメンãƒãƒ¼ '%s' ã«ã¯ä»¥ä¸‹ãŒã‚ã‚Šã¾ã™:\n"
@@ -5896,7 +5913,7 @@ msgstr "ä¸å½“ãªåŸºæ•°: %s"
msgid "%s: file format not recognized"
msgstr "%s: ファイル形å¼ã‚’èªè­˜ã§ãã¾ã›ã‚“"
-#: src/size.c:418 src/size.c:557
+#: src/size.c:418 src/size.c:560
#, c-format
msgid " (ex %s)"
msgstr " (ex %s)"
@@ -5906,7 +5923,7 @@ msgstr " (ex %s)"
msgid "cannot get section header"
msgstr "セクションヘッダーを得られã¾ã›ã‚“: %s"
-#: src/size.c:582
+#: src/size.c:585
msgid "(TOTALS)\n"
msgstr "(åˆè¨ˆ)\n"
diff --git a/po/pl.po b/po/pl.po
index 54a01641..5d47add8 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: elfutils\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2019-11-26 09:48+0100\n"
+"POT-Creation-Date: 2020-06-11 15:50+0200\n"
"PO-Revision-Date: 2016-12-29 17:48+0100\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n"
@@ -60,7 +60,7 @@ msgstr ""
"HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n"
#: lib/xmalloc.c:52 lib/xmalloc.c:65 lib/xmalloc.c:77 src/readelf.c:3449
-#: src/readelf.c:11398 src/unstrip.c:2393 src/unstrip.c:2599
+#: src/readelf.c:11403 src/unstrip.c:2393 src/unstrip.c:2599
#, c-format
msgid "memory exhausted"
msgstr "pamięć wyczerpana"
@@ -526,7 +526,7 @@ msgstr "Brak zaplecza"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77
#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
-#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:79
+#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
msgstr "<nieznany>"
@@ -1673,14 +1673,14 @@ msgid ""
msgstr ""
"sekcja [%2d] „%sâ€: grupa sekcji [%2zu] „%s†nie poprzedza elementu grupy\n"
-#: src/elflint.c:610 src/elflint.c:1494 src/elflint.c:1545 src/elflint.c:1651
-#: src/elflint.c:1987 src/elflint.c:2313 src/elflint.c:2932 src/elflint.c:3095
-#: src/elflint.c:3243 src/elflint.c:3433 src/elflint.c:4431
+#: 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:2936 src/elflint.c:3099
+#: src/elflint.c:3247 src/elflint.c:3437 src/elflint.c:4440
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać danych sekcji\n"
-#: src/elflint.c:623 src/elflint.c:1658
+#: src/elflint.c:623 src/elflint.c:1662
#, c-format
msgid ""
"section [%2d] '%s': referenced as string table for section [%2d] '%s' but "
@@ -1703,33 +1703,40 @@ msgstr ""
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:667
+#: src/elflint.c:662
+#, fuzzy, 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"
+
+#: src/elflint.c:671
#, c-format
msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać symbolu %d: %s\n"
-#: src/elflint.c:672 src/elflint.c:675 src/elflint.c:678 src/elflint.c:681
-#: src/elflint.c:684 src/elflint.c:687
+#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685
+#: src/elflint.c:688 src/elflint.c:691
#, c-format
msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
msgstr "sekcja [%2d] „%sâ€: „%s†w zerowym wpisie nie jest zerem\n"
-#: src/elflint.c:690
+#: src/elflint.c:694
#, c-format
msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
msgstr "sekcja [%2d] „%sâ€: XINDEX dla zerowego wpisu nie jest zerem\n"
-#: src/elflint.c:700
+#: src/elflint.c:704
#, c-format
msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać symbolu %zu: %s\n"
-#: src/elflint.c:709
+#: src/elflint.c:713
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieprawidÅ‚owa wartość nazwy\n"
-#: src/elflint.c:724
+#: src/elflint.c:728
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: too large section index but no extended "
@@ -1738,7 +1745,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: za duży indeks sekcji, ale nie ma sekcji "
"rozszerzonych indeksów sekcji\n"
-#: src/elflint.c:730
+#: src/elflint.c:734
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in "
@@ -1748,28 +1755,28 @@ msgstr ""
"się w st_shndx (%<PRIu32>)\n"
#. || sym->st_shndx > SHN_HIRESERVE always false
-#: src/elflint.c:742
+#: src/elflint.c:746
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieprawidÅ‚owy indeks sekcji\n"
-#: src/elflint.c:750
+#: src/elflint.c:754
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown type\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieznany typ\n"
-#: src/elflint.c:756
+#: src/elflint.c:760
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: nieznane dowiÄ…zanie symbolu\n"
-#: src/elflint.c:761
+#: src/elflint.c:765
#, c-format
msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n"
msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: unikalny symbol nie jest typem obiektu\n"
-#: src/elflint.c:769
+#: src/elflint.c:773
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
@@ -1777,23 +1784,23 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: COMMON jest dozwolone tylko w plikach "
"relokowalnych\n"
-#: src/elflint.c:773
+#: src/elflint.c:777
#, c-format
msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: lokalne symbole COMMON to nonsens\n"
-#: src/elflint.c:777
+#: src/elflint.c:781
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: funkcja w sekcji COMMON to nonsens\n"
-#: src/elflint.c:828
+#: src/elflint.c:832
#, c-format
msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: st_value spoza zakresu\n"
-#: src/elflint.c:834 src/elflint.c:859 src/elflint.c:908
+#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu does not fit completely in referenced section "
@@ -1802,7 +1809,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu nie mieÅ›ci siÄ™ w caÅ‚oÅ›ci we wskazywanej sekcji "
"[%2d] „%sâ€\n"
-#: src/elflint.c:843
+#: src/elflint.c:847
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have "
@@ -1811,7 +1818,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: wskazywana sekcja [%2d] „%s†nie ma "
"ustawionej flagi SHF_TLS\n"
-#: src/elflint.c:853 src/elflint.c:901
+#: src/elflint.c:857 src/elflint.c:905
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section "
@@ -1820,7 +1827,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: st_value spoza zakresu wskazywanej sekcji "
"[%2d] „%sâ€\n"
-#: src/elflint.c:880
+#: src/elflint.c:884
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
@@ -1828,7 +1835,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: symbol TLS, ale brak wpisu TLS nagłówka "
"programu\n"
-#: src/elflint.c:886
+#: src/elflint.c:890
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but couldn't get TLS program "
@@ -1837,7 +1844,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: symbol TLS, ale nie można uzyskać wpisu TLS "
"nagłówka programu\n"
-#: src/elflint.c:894
+#: src/elflint.c:898
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] "
@@ -1845,7 +1852,7 @@ msgid ""
msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: st_value pomija wskazywanÄ… sekcjÄ™ [%2d] „%sâ€\n"
-#: src/elflint.c:921
+#: src/elflint.c:925
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: local symbol outside range described in "
@@ -1854,7 +1861,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: lokalny symbol spoza zakresu okreÅ›lonego "
"w sh_info\n"
-#: src/elflint.c:928
+#: src/elflint.c:932
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: non-local symbol outside range described in "
@@ -1863,12 +1870,12 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: nielokalny symbol spoza zakresu okreÅ›lonego "
"w sh_info\n"
-#: src/elflint.c:935
+#: src/elflint.c:939
#, c-format
msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: nielokalny symbol sekcji\n"
-#: src/elflint.c:985
+#: src/elflint.c:989
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section "
@@ -1877,7 +1884,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol _GLOBAL_OFFSET_TABLE_ odnosi siÄ™ do bÅ‚Ä™dnej sekcji "
"[%2d]\n"
-#: src/elflint.c:992
+#: src/elflint.c:996
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] "
@@ -1889,7 +1896,7 @@ msgstr ""
#. This test is more strict than the psABIs which
#. usually allow the symbol to be in the middle of
#. the .got section, allowing negative offsets.
-#: src/elflint.c:1008
+#: src/elflint.c:1012
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not "
@@ -1898,7 +1905,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: wartość symbolu _GLOBAL_OFFSET_TABLE_ %#<PRIx64> nie "
"pasuje do adresu sekcji %s %#<PRIx64>\n"
-#: src/elflint.c:1015
+#: src/elflint.c:1019
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not "
@@ -1907,7 +1914,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: rozmiar symbolu _GLOBAL_OFFSET_TABLE_ %<PRIu64> nie "
"pasuje do rozmiaru sekcji %s %<PRIu64>\n"
-#: src/elflint.c:1023
+#: src/elflint.c:1027
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got "
@@ -1916,7 +1923,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol _GLOBAL_OFFSET_TABLE_ istnieje, ale brak sekcji ."
"got\n"
-#: src/elflint.c:1039
+#: src/elflint.c:1043
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic "
@@ -1925,7 +1932,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: wartość symbolu _DYNAMIC_ %#<PRIx64> nie pasuje do adresu "
"segmentu dynamicznego %#<PRIx64>\n"
-#: src/elflint.c:1046
+#: src/elflint.c:1050
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic "
@@ -1934,7 +1941,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: rozmiar symbolu _DYNAMIC_ %<PRIu64> nie pasuje do "
"rozmiaru segmentu dynamicznego %<PRIu64>\n"
-#: src/elflint.c:1059
+#: src/elflint.c:1063
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-"
@@ -1943,27 +1950,27 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %zu: symbol w dynamicznej tabeli symboli "
"z niedomyślną widocznością\n"
-#: src/elflint.c:1063
+#: src/elflint.c:1067
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"
msgstr "sekcja [%2d] „%sâ€: symbol %zu: ustawiono nieznany bit w st_other\n"
-#: src/elflint.c:1101
+#: src/elflint.c:1105
#, c-format
msgid "section [%2d] '%s': cannot get section data.\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać danych sekcji.\n"
-#: src/elflint.c:1117
+#: src/elflint.c:1121
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
msgstr "sekcja [%2d] „%sâ€: DT_RELCOUNT użyte dla tej sekcji RELA\n"
-#: src/elflint.c:1128 src/elflint.c:1181
+#: src/elflint.c:1132 src/elflint.c:1185
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
msgstr "sekcja [%2d] „%sâ€: DT_RELCOUNT %d za duże dla tej sekcji\n"
-#: src/elflint.c:1153 src/elflint.c:1206
+#: src/elflint.c:1157 src/elflint.c:1210
#, c-format
msgid ""
"section [%2d] '%s': relative relocations after index %d as specified by "
@@ -1972,7 +1979,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: relokacje wzglÄ™dne po indeksie %d podanym przez "
"DT_RELCOUNT\n"
-#: src/elflint.c:1159 src/elflint.c:1212
+#: src/elflint.c:1163 src/elflint.c:1216
#, c-format
msgid ""
"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT "
@@ -1981,50 +1988,50 @@ msgstr ""
"sekcja [%2d] „%sâ€: relokacja bezwzglÄ™dna pod indeksem %zu; DT_RELCOUNT podaÅ‚ "
"%d relokacji względnych\n"
-#: src/elflint.c:1171
+#: src/elflint.c:1175
#, c-format
msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
msgstr "sekcja [%2d] „%sâ€: DT_RELACOUNT użyte dla tej sekcji REL\n"
-#: src/elflint.c:1254
+#: src/elflint.c:1258
#, c-format
msgid "section [%2d] '%s': invalid destination section index\n"
msgstr "sekcja [%2d] „%sâ€: nieprawidÅ‚owy indeks sekcji docelowej\n"
-#: src/elflint.c:1266
+#: src/elflint.c:1270
#, c-format
msgid "section [%2d] '%s': invalid destination section type\n"
msgstr "sekcja [%2d] „%sâ€: nieprawidÅ‚owy typ sekcji docelowej\n"
-#: src/elflint.c:1274
+#: 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"
-#: src/elflint.c:1282
+#: src/elflint.c:1286
#, c-format
msgid ""
"section [%2d] '%s': no relocations for merge-able string sections possible\n"
msgstr ""
"sekcja [%2d] „%sâ€: relokacje dla sekcji zÅ‚Ä…czalnych ciÄ…gów sÄ… niemożliwe\n"
-#: src/elflint.c:1290
+#: src/elflint.c:1294
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
msgstr "sekcja [%2d] „%sâ€: rozmiar wpisu sekcji nie zgadza siÄ™ z ElfXX_Rela\n"
-#: src/elflint.c:1350
+#: src/elflint.c:1354
#, c-format
msgid "text relocation flag set but there is no read-only segment\n"
msgstr ""
"flaga relokacji tekstu jest ustawiona, ale nie ma segmentu tylko do odczytu\n"
-#: src/elflint.c:1377
+#: src/elflint.c:1381
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid type\n"
msgstr "sekcja [%2d] „%sâ€: relokacja %zu: nieprawidÅ‚owy typ\n"
-#: src/elflint.c:1385
+#: src/elflint.c:1389
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: relocation type invalid for the file "
@@ -2033,12 +2040,12 @@ msgstr ""
"sekcja [%2d] „%sâ€: relokacja %zu: typ relokacji nieprawidÅ‚owy dla tego typu "
"pliku\n"
-#: src/elflint.c:1393
+#: src/elflint.c:1397
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
msgstr "sekcja [%2d] „%sâ€: relokacja %zu: nieprawidÅ‚owy indeks symbolu\n"
-#: src/elflint.c:1411
+#: src/elflint.c:1415
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can "
@@ -2047,12 +2054,12 @@ msgstr ""
"sekcja [%2d] „%sâ€: relokacja %zu: z %s można użyć tylko symbolu "
"„_GLOBAL_OFFSET_TABLE_â€\n"
-#: src/elflint.c:1428
+#: src/elflint.c:1432
#, c-format
msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
msgstr "sekcja [%2d] „%sâ€: relokacja %zu: offset spoza zakresu\n"
-#: src/elflint.c:1443
+#: src/elflint.c:1447
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: copy relocation against symbol of type "
@@ -2060,7 +2067,7 @@ msgid ""
msgstr ""
"sekcja [%2d] „%sâ€: relokacja %zu: relokacja kopii wzglÄ™dem symbolu typu %s\n"
-#: src/elflint.c:1464
+#: src/elflint.c:1468
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: read-only section modified but text "
@@ -2069,23 +2076,23 @@ msgstr ""
"sekcja [%2d] „%sâ€: relokacja %zu: sekcja tylko do odczytu zostaÅ‚a "
"zmodyfikowana, ale nie ustawiono flagi relokacji tekstu\n"
-#: src/elflint.c:1479
+#: src/elflint.c:1483
#, c-format
msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
msgstr ""
"sekcja [%2d] „%sâ€: relokacje wzglÄ™dem wczytanych i niewczytanych danych\n"
-#: src/elflint.c:1519 src/elflint.c:1570
+#: src/elflint.c:1523 src/elflint.c:1574
#, c-format
msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać relokacji %zu: %s\n"
-#: src/elflint.c:1646
+#: src/elflint.c:1650
#, c-format
msgid "more than one dynamic section present\n"
msgstr "obecna jest więcej niż jedna sekcja dynamiczna\n"
-#: src/elflint.c:1664
+#: src/elflint.c:1668
#, c-format
msgid ""
"section [%2d]: referenced as string table for section [%2d] '%s' but section "
@@ -2094,43 +2101,43 @@ msgstr ""
"sekcja [%2d]: wskazane jako tabela ciÄ…gów dla sekcji [%2d] „%sâ€, ale wartość "
"dowiązania sekcji jest nieprawidłowa\n"
-#: src/elflint.c:1672
+#: src/elflint.c:1676
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
msgstr "sekcja [%2d] „%sâ€: rozmiar wpisu sekcji nie zgadza siÄ™ z ElfXX_Dyn\n"
-#: src/elflint.c:1677 src/elflint.c:1966
+#: src/elflint.c:1681 src/elflint.c:1970
#, c-format
msgid "section [%2d] '%s': sh_info not zero\n"
msgstr "sekcja [%2d] „%sâ€: sh_info nie wynosi zero\n"
-#: src/elflint.c:1687
+#: src/elflint.c:1691
#, c-format
msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
msgstr ""
"sekcja [%2d] „%sâ€: nie można uzyskać wpisu %zu sekcji dynamicznej: %s\n"
-#: src/elflint.c:1695
+#: src/elflint.c:1699
#, c-format
msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
msgstr "sekcja [%2d] „%sâ€: wpisy nie-DT_NULL wystÄ™pujÄ… po wpisie DT_NULL\n"
-#: src/elflint.c:1702
+#: src/elflint.c:1706
#, c-format
msgid "section [%2d] '%s': entry %zu: unknown tag\n"
msgstr "sekcja [%2d] „%sâ€: wpis %zu: nieznany znacznik\n"
-#: src/elflint.c:1713
+#: src/elflint.c:1717
#, c-format
msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
msgstr "sekcja [%2d] „%sâ€: wpis %zu: wiÄ™cej niż jeden wpis ze znacznikiem %s\n"
-#: src/elflint.c:1723
+#: src/elflint.c:1727
#, c-format
msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
msgstr "sekcja [%2d] „%sâ€: wpis %zu: użyto znacznika %s poziomu 2\n"
-#: src/elflint.c:1741
+#: src/elflint.c:1745
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
@@ -2138,7 +2145,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis %zu: wartość DT_PLTREL musi wynosić DT_REL lub "
"DT_RELA\n"
-#: src/elflint.c:1754
+#: src/elflint.c:1758
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: pointer does not match address of section "
@@ -2147,14 +2154,14 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis %zu: wskaźnik nie pasuje do adresu sekcji [%2d] „%s†"
"wskazywanej przez sh_link\n"
-#: src/elflint.c:1797
+#: src/elflint.c:1801
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
msgstr ""
"sekcja [%2d] „%sâ€: wpis %zu: wartość %s musi wskazywać na wczytany segment\n"
-#: src/elflint.c:1812
+#: src/elflint.c:1816
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must be valid offset in section "
@@ -2163,48 +2170,48 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis %zu: wartość %s musi być prawidÅ‚owym offsetem "
"w sekcji [%2d] „%sâ€\n"
-#: src/elflint.c:1832 src/elflint.c:1860
+#: src/elflint.c:1836 src/elflint.c:1864
#, c-format
msgid "section [%2d] '%s': contains %s entry but not %s\n"
msgstr "sekcja [%2d] „%sâ€: zawiera wpis %s, ale nie %s\n"
-#: src/elflint.c:1844
+#: src/elflint.c:1848
#, c-format
msgid "section [%2d] '%s': mandatory tag %s not present\n"
msgstr "sekcja [%2d] „%sâ€: brak obowiÄ…zkowego znacznika %s\n"
-#: src/elflint.c:1853
+#: src/elflint.c:1857
#, c-format
msgid "section [%2d] '%s': no hash section present\n"
msgstr "sekcja [%2d] „%sâ€: brak sekcji skrótów\n"
-#: src/elflint.c:1868 src/elflint.c:1875
+#: src/elflint.c:1872 src/elflint.c:1879
#, c-format
msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
msgstr "sekcja [%2d] „%sâ€: nie wszystkie z %s, %s i %s sÄ… obecne\n"
-#: src/elflint.c:1885 src/elflint.c:1889
+#: src/elflint.c:1889 src/elflint.c:1893
#, c-format
msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
msgstr ""
"sekcja [%2d] „%sâ€: brak znacznika %s w DSO oznaczonym podczas wstÄ™pnej "
"konsolidacji\n"
-#: src/elflint.c:1895
+#: src/elflint.c:1899
#, c-format
msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
msgstr ""
"sekcja [%2d] „%sâ€: plik nie-DSO oznaczony jako zależność podczas wstÄ™pnej "
"konsolidacji\n"
-#: src/elflint.c:1906 src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918
+#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922
#, c-format
msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
msgstr ""
"sekcja [%2d] „%sâ€: brak znacznika %s we wstÄ™pnie konsolidowanym pliku "
"wykonywalnym\n"
-#: src/elflint.c:1930
+#: src/elflint.c:1934
#, c-format
msgid ""
"section [%2d] '%s': only relocatable files can have extended section index\n"
@@ -2212,7 +2219,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: tylko pliki relokowalne mogÄ… mieć rozszerzonÄ… sekcjÄ™ "
"indeksów\n"
-#: src/elflint.c:1940
+#: src/elflint.c:1944
#, c-format
msgid ""
"section [%2d] '%s': extended section index section not for symbol table\n"
@@ -2220,31 +2227,31 @@ msgstr ""
"sekcja [%2d] „%sâ€: sekcja rozszerzonych indeksów sekcji nie dla tabeli "
"symboli\n"
-#: src/elflint.c:1944
+#: src/elflint.c:1948
#, c-format
msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n"
msgstr ""
"sekcja [%2d] „%sâ€: rozszerzony indeks sekcji sh_link [%2d] jest "
"nieprawidłowy\n"
-#: src/elflint.c:1949
+#: src/elflint.c:1953
#, c-format
msgid "cannot get data for symbol section\n"
msgstr "nie można uzyskać danych dla sekcji symboli\n"
-#: src/elflint.c:1952
+#: src/elflint.c:1956
#, c-format
msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
msgstr "sekcja [%2d] „%sâ€: rozmiar wpisu nie zgadza siÄ™ z Elf32_Word\n"
-#: src/elflint.c:1961
+#: src/elflint.c:1965
#, c-format
msgid "section [%2d] '%s': extended index table too small for symbol table\n"
msgstr ""
"sekcja [%2d] „%sâ€: tabela rozszerzonych indeksów jest za maÅ‚a dla tabeli "
"symboli\n"
-#: src/elflint.c:1976
+#: src/elflint.c:1980
#, c-format
msgid ""
"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to "
@@ -2253,24 +2260,24 @@ msgstr ""
"sekcja [%2d] „%sâ€: rozszerzony indeks sekcji w sekcji [%2zu] „%s†odwoÅ‚uje "
"siÄ™ do tej samej tabeli symboli\n"
-#: src/elflint.c:1994
+#: 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"
-#: src/elflint.c:2006
+#: src/elflint.c:2010
#, c-format
msgid "cannot get data for symbol %zu\n"
msgstr "nie można uzyskać danych dla symbolu %zu\n"
-#: src/elflint.c:2011
+#: src/elflint.c:2015
#, c-format
msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
msgstr ""
"rozszerzony indeks sekcji wynosi %<PRIu32>, ale indeks symbolu nie wynosi "
"XINDEX\n"
-#: src/elflint.c:2028 src/elflint.c:2085
+#: src/elflint.c:2032 src/elflint.c:2089
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
@@ -2278,43 +2285,43 @@ msgstr ""
"sekcja [%2d] „%sâ€: sekcja tabeli mieszajÄ…cej jest za maÅ‚a (%ld, oczekiwano "
"%ld)\n"
-#: src/elflint.c:2042 src/elflint.c:2099
+#: src/elflint.c:2046 src/elflint.c:2103
#, c-format
msgid "section [%2d] '%s': chain array too large\n"
msgstr "sekcja [%2d] „%sâ€: tabela Å‚aÅ„cuchowa jest za duża\n"
-#: src/elflint.c:2056 src/elflint.c:2113
+#: src/elflint.c:2060 src/elflint.c:2117
#, c-format
msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
msgstr ""
"sekcja [%2d] „%sâ€: odwoÅ‚anie do kubeÅ‚ka skrótu %zu jest spoza zakresu\n"
-#: src/elflint.c:2066
+#: src/elflint.c:2070
#, c-format
msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
msgstr ""
"sekcja [%2d] „%sâ€: odwoÅ‚anie do Å‚aÅ„cucha skrótu %zu jest spoza zakresu\n"
-#: src/elflint.c:2123
+#: src/elflint.c:2127
#, c-format
msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
msgstr ""
"sekcja [%2d] „%sâ€: odwoÅ‚anie do Å‚aÅ„cucha skrótu %<PRIu64> jest spoza "
"zakresu\n"
-#: src/elflint.c:2136
+#: src/elflint.c:2140
#, c-format
msgid "section [%2d] '%s': not enough data\n"
msgstr "sekcja [%2d] „%sâ€: brak wystarczajÄ…cej iloÅ›ci danych\n"
-#: src/elflint.c:2148
+#: src/elflint.c:2152
#, c-format
msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n"
msgstr ""
"sekcja [%2d] „%sâ€: rozmiar maski bitowej wynosi zero lub nie jest potÄ™gÄ… 2: "
"%u\n"
-#: src/elflint.c:2164
+#: src/elflint.c:2168
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected at "
@@ -2323,13 +2330,13 @@ msgstr ""
"sekcja [%2d] „%sâ€: sekcja tabeli mieszajÄ…cej jest za maÅ‚a (wynosi %ld, "
"oczekiwano co najmniej %ld)\n"
-#: src/elflint.c:2173
+#: src/elflint.c:2177
#, c-format
msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
msgstr ""
"sekcja [%2d] „%sâ€: drugie przesuniÄ™cie funkcji mieszajÄ…cej jest za duże: %u\n"
-#: src/elflint.c:2207
+#: src/elflint.c:2211
#, c-format
msgid ""
"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
@@ -2337,7 +2344,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: Å‚aÅ„cuch mieszajÄ…cy dla kubeÅ‚ka %zu jest mniejszy niż "
"przesunięcie indeksu symboli\n"
-#: src/elflint.c:2228
+#: src/elflint.c:2232
#, c-format
msgid ""
"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is "
@@ -2346,7 +2353,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: symbol %u wskazywany w łaÅ„cuchu dla kubeÅ‚ka %zu jest "
"nieokreślony\n"
-#: src/elflint.c:2241
+#: src/elflint.c:2245
#, c-format
msgid ""
"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
@@ -2354,7 +2361,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: wartość skrótu dla symbolu %u w łaÅ„cuchu dla kubeÅ‚ka %zu "
"jest błędna\n"
-#: src/elflint.c:2250
+#: src/elflint.c:2254
#, c-format
msgid ""
"section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n"
@@ -2362,12 +2369,12 @@ msgstr ""
"sekcja [%2d] „%sâ€: indeks maski dla symbolu %u w łaÅ„cuchu dla kubeÅ‚ka %zu "
"jest błędny\n"
-#: src/elflint.c:2280
+#: src/elflint.c:2284
#, c-format
msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
msgstr "sekcja [%2d] „%sâ€: Å‚aÅ„cuch skrótu dla kubeÅ‚ka %zu jest spoza zakresu\n"
-#: src/elflint.c:2285
+#: src/elflint.c:2289
#, c-format
msgid ""
"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
@@ -2375,41 +2382,41 @@ msgstr ""
"sekcja [%2d] „%sâ€: odwoÅ‚anie do symbolu w łaÅ„cuchu dla kubeÅ‚ka %zu jest "
"spoza zakresu\n"
-#: src/elflint.c:2291
+#: src/elflint.c:2295
#, c-format
msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
msgstr ""
"sekcja [%2d] „%sâ€: maska bitowa nie pasuje do nazw w tabeli mieszajÄ…cej\n"
-#: src/elflint.c:2304
+#: src/elflint.c:2308
#, c-format
msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
msgstr ""
"sekcja [%2d] „%sâ€: pliki relokowalne nie mogÄ… mieć tabeli mieszajÄ…cych\n"
-#: src/elflint.c:2322
+#: src/elflint.c:2326
#, c-format
msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
msgstr ""
"sekcja [%2d] „%sâ€: tabela mieszajÄ…ca nie dla tabeli dynamicznych symboli\n"
-#: src/elflint.c:2326
+#: src/elflint.c:2330
#, c-format
msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n"
msgstr ""
"sekcja [%2d] „%sâ€: nieprawidÅ‚owy indeks sekcji tabeli symboli sh_link [%2d]\n"
-#: src/elflint.c:2336
+#: src/elflint.c:2340
#, c-format
msgid "section [%2d] '%s': hash table entry size incorrect\n"
msgstr "sekcja [%2d] „%sâ€: niepoprawny rozmiar wpisu tabeli mieszajÄ…cej\n"
-#: src/elflint.c:2341
+#: src/elflint.c:2345
#, c-format
msgid "section [%2d] '%s': not marked to be allocated\n"
msgstr "sekcja [%2d] „%sâ€: nieoznaczona do przydzielenia\n"
-#: src/elflint.c:2346
+#: src/elflint.c:2350
#, c-format
msgid ""
"section [%2d] '%s': hash table has not even room for initial administrative "
@@ -2418,29 +2425,29 @@ msgstr ""
"sekcja [%2d] „%sâ€: tabela mieszajÄ…ca nie ma miejsca nawet na poczÄ…tkowe "
"wpisy administracyjne\n"
-#: src/elflint.c:2395
+#: src/elflint.c:2399
#, c-format
msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
msgstr ""
"sh_link w sekcjach skrótu [%2zu] „%s†i [%2zu] „%s†nie są identyczne\n"
-#: src/elflint.c:2419 src/elflint.c:2484 src/elflint.c:2519
+#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523
#, c-format
msgid "hash section [%2zu] '%s' does not contain enough data\n"
msgstr ""
"sekcja mieszania [%2zu] „%s†nie zawiera wystarczającej ilości danych\n"
-#: src/elflint.c:2440
+#: src/elflint.c:2444
#, c-format
msgid "hash section [%2zu] '%s' has zero bit mask words\n"
msgstr "sekcja mieszania [%2zu] „%s†ma zerowe słowa maski bitów\n"
-#: src/elflint.c:2451 src/elflint.c:2495 src/elflint.c:2532
+#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536
#, c-format
msgid "hash section [%2zu] '%s' uses too much data\n"
msgstr "sekcja mieszania [%2zu] „%s†używa za dużo danych\n"
-#: src/elflint.c:2466
+#: src/elflint.c:2470
#, c-format
msgid ""
"hash section [%2zu] '%s' invalid symbol index %<PRIu32> (max_nsyms: "
@@ -2449,17 +2456,17 @@ msgstr ""
"sekcja mieszająca [%2zu] „%s†nieprawidłowy indeks symboli %<PRIu32> "
"(max_nsyms: %<PRIu32>, nentries: %<PRIu32>\n"
-#: src/elflint.c:2553
+#: src/elflint.c:2557
#, c-format
msgid "hash section [%2zu] '%s' invalid sh_entsize\n"
msgstr "sekcja mieszania [%2zu] „%s†nieprawidłowe sh_entsize\n"
-#: src/elflint.c:2563 src/elflint.c:2567
+#: src/elflint.c:2567 src/elflint.c:2571
#, c-format
msgid "section [%2zu] '%s': reference to symbol index 0\n"
msgstr "sekcja [%2zu] „%sâ€: odwoÅ‚anie do symbolu o indeksie 0\n"
-#: src/elflint.c:2574
+#: src/elflint.c:2578
#, c-format
msgid ""
"symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash "
@@ -2468,7 +2475,7 @@ msgstr ""
"symbol %d wymieniony w nowej tabeli mieszajÄ…cej w [%2zu] „%sâ€, ale nie "
"w poprzedniej tabeli mieszajÄ…cej [%2zu] „%sâ€\n"
-#: src/elflint.c:2586
+#: src/elflint.c:2590
#, c-format
msgid ""
"symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash "
@@ -2477,12 +2484,12 @@ msgstr ""
"symbol %d wymieniony w poprzedniej tabeli mieszajÄ…cej w [%2zu] „%sâ€, ale nie "
"w nowej tabeli mieszajÄ…cej w [%2zu] „%sâ€\n"
-#: src/elflint.c:2602
+#: src/elflint.c:2606
#, c-format
msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
msgstr "sekcja [%2d] „%sâ€: niezerowe sh_%s dla sekcji NULL\n"
-#: src/elflint.c:2622
+#: src/elflint.c:2626
#, c-format
msgid ""
"section [%2d] '%s': section groups only allowed in relocatable object files\n"
@@ -2490,96 +2497,96 @@ msgstr ""
"sekcja [%2d] „%sâ€: w plikach obiektów relokowalnych dozwolone sÄ… tylko grupy "
"sekcji\n"
-#: src/elflint.c:2633
+#: src/elflint.c:2637
#, c-format
msgid "section [%2d] '%s': cannot get symbol table: %s\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać tabeli symboli: %s\n"
-#: src/elflint.c:2638
+#: src/elflint.c:2642
#, c-format
msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
msgstr ""
"sekcja [%2d] „%sâ€: odwoÅ‚anie do sekcji w sh_link nie ma tabeli symboli\n"
-#: src/elflint.c:2644
+#: src/elflint.c:2648
#, c-format
msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
msgstr "sekcja [%2d] „%sâ€: nieprawidÅ‚owy indeks symbolu w sh_info\n"
-#: src/elflint.c:2649
+#: src/elflint.c:2653
#, c-format
msgid "section [%2d] '%s': sh_flags not zero\n"
msgstr "sekcja [%2d] „%sâ€: niezerowe sh_flags\n"
-#: src/elflint.c:2656
+#: src/elflint.c:2660
#, c-format
msgid "section [%2d] '%s': cannot get symbol for signature\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać symbolu dla podpisu\n"
-#: src/elflint.c:2660
+#: src/elflint.c:2664
#, c-format
msgid "section [%2d] '%s': cannot get symbol name for signature\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać nazwy symbolu dla podpisu\n"
-#: src/elflint.c:2665
+#: src/elflint.c:2669
#, c-format
msgid "section [%2d] '%s': signature symbol cannot be empty string\n"
msgstr "sekcja [%2d] „%sâ€: symbol podpisu nie można być pustym ciÄ…giem\n"
-#: src/elflint.c:2671
+#: src/elflint.c:2675
#, c-format
msgid "section [%2d] '%s': sh_flags not set correctly\n"
msgstr "sekcja [%2d] „%sâ€: sh_flags nie ustawione poprawnie\n"
-#: src/elflint.c:2677
+#: src/elflint.c:2681
#, c-format
msgid "section [%2d] '%s': cannot get data: %s\n"
msgstr "sekcja [%2d] „%sâ€: nie można uzyskać danych: %s\n"
-#: src/elflint.c:2686
+#: src/elflint.c:2690
#, c-format
msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
msgstr ""
"sekcja [%2d] „%sâ€: rozmiar sekcji nie jest wielokrotnoÅ›ciÄ… "
"sizeof(Elf32_Word)\n"
-#: src/elflint.c:2692
+#: src/elflint.c:2696
#, c-format
msgid "section [%2d] '%s': section group without flags word\n"
msgstr "sekcja [%2d] „%sâ€: grupa sekcji bez sÅ‚owa flag\n"
-#: src/elflint.c:2700
+#: src/elflint.c:2704
#, c-format
msgid "section [%2d] '%s': section group without member\n"
msgstr "sekcja [%2d] „%sâ€: grupa sekcji bez elementów\n"
-#: src/elflint.c:2704
+#: src/elflint.c:2708
#, c-format
msgid "section [%2d] '%s': section group with only one member\n"
msgstr "sekcja [%2d] „%sâ€: grupa sekcji z tylko jednym elementem\n"
-#: src/elflint.c:2715
+#: src/elflint.c:2719
#, c-format
msgid "section [%2d] '%s': unknown section group flags\n"
msgstr "sekcja [%2d] „%sâ€: nieznane flagi grupy sekcji\n"
-#: src/elflint.c:2727
+#: src/elflint.c:2731
#, c-format
msgid "section [%2d] '%s': section index %zu out of range\n"
msgstr "sekcja [%2d] „%sâ€: indeks sekcji %zu jest spoza zakresu\n"
-#: src/elflint.c:2736
+#: src/elflint.c:2740
#, c-format
msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
msgstr ""
"sekcja [%2d] „%sâ€: nie można uzyskać nagłówka sekcji dla elementu %zu: %s\n"
-#: src/elflint.c:2743
+#: src/elflint.c:2747
#, c-format
msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
msgstr "sekcja [%2d] „%sâ€: grupa sekcji zawiera innÄ… grupÄ™ [%2d] „%sâ€\n"
-#: src/elflint.c:2749
+#: src/elflint.c:2753
#, c-format
msgid ""
"section [%2d] '%s': element %zu references section [%2d] '%s' without "
@@ -2588,12 +2595,12 @@ msgstr ""
"sekcja [%2d] „%sâ€: element %zu odwoÅ‚uje siÄ™ do sekcji [%2d] „%s†bez flagi "
"SHF_GROUP\n"
-#: src/elflint.c:2756
+#: src/elflint.c:2760
#, c-format
msgid "section [%2d] '%s' is contained in more than one section group\n"
msgstr "sekcja [%2d] „%s†jest zawarta w więcej niż jednej grupie sekcji\n"
-#: src/elflint.c:2946
+#: src/elflint.c:2950
#, c-format
msgid ""
"section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no "
@@ -2602,7 +2609,7 @@ msgstr ""
"sekcja [%2d] „%s†odwoÅ‚uje siÄ™ w sh_link do sekcji [%2d] „%sâ€, która nie "
"jest tabelÄ… symboli dynamicznych\n"
-#: src/elflint.c:2958
+#: src/elflint.c:2962
#, c-format
msgid ""
"section [%2d] '%s' has different number of entries than symbol table [%2d] "
@@ -2610,76 +2617,76 @@ msgid ""
msgstr ""
"sekcja [%2d] „%s†ma innÄ… liczbÄ™ wpisów niż tabela symboli [%2d] „%sâ€\n"
-#: src/elflint.c:2974
+#: src/elflint.c:2978
#, c-format
msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
msgstr "sekcja [%2d] „%sâ€: symbol %d: nie można odczytać danych wersji\n"
-#: src/elflint.c:2990
+#: src/elflint.c:2994
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
msgstr "sekcja [%2d] „%sâ€: symbol %d: symbol lokalny z zakresem globalnym\n"
-#: src/elflint.c:2998
+#: src/elflint.c:3002
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
msgstr "sekcja [%2d] „%sâ€: symbol %d: symbol lokalny z wersjÄ…\n"
-#: src/elflint.c:3012
+#: src/elflint.c:3016
#, c-format
msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
msgstr "sekcja [%2d] „%sâ€: symbol %d: nieprawidÅ‚owy indeks wersji %d\n"
-#: src/elflint.c:3017
+#: src/elflint.c:3021
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for defined version\n"
msgstr ""
"sekcja [%2d] „%sâ€: symbol %d: indeks wersji %d jest dla wersji okreÅ›lonej\n"
-#: src/elflint.c:3027
+#: src/elflint.c:3031
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for requested version\n"
msgstr ""
"sekcja [%2d] „%sâ€: symbol %d: indeks wersji %d jest dla wersji żądanej\n"
-#: src/elflint.c:3080
+#: src/elflint.c:3084
#, c-format
msgid "more than one version reference section present\n"
msgstr "obecna jest więcej niż jedna sekcja odniesienia wersji\n"
-#: src/elflint.c:3088 src/elflint.c:3235
+#: src/elflint.c:3092 src/elflint.c:3239
#, c-format
msgid "section [%2d] '%s': sh_link does not link to string table\n"
msgstr "sekcja [%2d] „%sâ€: sh_link nie Å‚Ä…czy siÄ™ z tabelÄ… ciÄ…gów\n"
-#: src/elflint.c:3113 src/elflint.c:3289
+#: src/elflint.c:3117 src/elflint.c:3293
#, c-format
msgid "section [%2d] '%s': entry %d has wrong version %d\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d ma bÅ‚Ä™dnÄ… wersjÄ™ %d\n"
-#: src/elflint.c:3120 src/elflint.c:3296
+#: src/elflint.c:3124 src/elflint.c:3300
#, c-format
msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d ma bÅ‚Ä™dny offset dla danych dodatkowych\n"
-#: src/elflint.c:3130
+#: src/elflint.c:3134
#, c-format
msgid "section [%2d] '%s': entry %d has invalid file reference\n"
msgstr "sekcja [%2d] „%sâ€: symbol %d ma bÅ‚Ä™dne odniesienie do pliku\n"
-#: src/elflint.c:3138
+#: src/elflint.c:3142
#, c-format
msgid "section [%2d] '%s': entry %d references unknown dependency\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d odnosi siÄ™ do nieznanej zależnoÅ›ci\n"
-#: src/elflint.c:3150
+#: src/elflint.c:3154
#, c-format
msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
msgstr "sekcja [%2d] „%sâ€: wpis dodatkowy %d do wpisu %d ma nieznanÄ… flagÄ™\n"
-#: src/elflint.c:3158
+#: src/elflint.c:3162
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name "
@@ -2688,7 +2695,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis dodatkowy %d do wpisu %d ma nieprawidÅ‚owe "
"odniesienie do nazwy\n"
-#: src/elflint.c:3167
+#: src/elflint.c:3171
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: "
@@ -2697,7 +2704,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis dodatkowy %d do wpisu %d ma bÅ‚Ä™dnÄ… wartość skrótu: "
"%#x, oczekiwano %#x\n"
-#: src/elflint.c:3176
+#: src/elflint.c:3180
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version "
@@ -2706,19 +2713,19 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis dodatkowy %d do wpisu %d ma powtórzonÄ… nazwÄ™ wersji "
"„%sâ€\n"
-#: src/elflint.c:3187
+#: src/elflint.c:3191
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
msgstr ""
"sekcja [%2d] „%sâ€: wpis dodatkowy %d do wpisu %d ma bÅ‚Ä™dne nastÄ™pne pole\n"
-#: src/elflint.c:3204 src/elflint.c:3380
+#: src/elflint.c:3208 src/elflint.c:3384
#, c-format
msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d ma bÅ‚Ä™dny offset do nastÄ™pnego wpisu\n"
-#: src/elflint.c:3212 src/elflint.c:3388
+#: src/elflint.c:3216 src/elflint.c:3392
#, c-format
msgid ""
"section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says "
@@ -2727,43 +2734,43 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis %d ma zerowy offset do nastÄ™pnego wpisu, ale sh_info "
"zawiera informacje o większej liczbie wpisów\n"
-#: src/elflint.c:3227
+#: src/elflint.c:3231
#, c-format
msgid "more than one version definition section present\n"
msgstr "obecna jest więcej niż jedna sekcja definicji wersji\n"
-#: src/elflint.c:3274
+#: src/elflint.c:3278
#, c-format
msgid "section [%2d] '%s': more than one BASE definition\n"
msgstr "sekcja [%2d] „%sâ€: jest wiÄ™cej niż jedna definicja BASE\n"
-#: src/elflint.c:3278
+#: src/elflint.c:3282
#, c-format
msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
msgstr "sekcja [%2d] „%sâ€: definicja BASE musi mieć indeks VER_NDX_GLOBAL\n"
-#: src/elflint.c:3284
+#: src/elflint.c:3288
#, c-format
msgid "section [%2d] '%s': entry %d has unknown flag\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d ma nieznanÄ… flagÄ™\n"
-#: src/elflint.c:3311
+#: src/elflint.c:3315
#, c-format
msgid "section [%2d] '%s': entry %d has invalid name reference\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d ma nieprawidÅ‚owe odniesienie do nazwy\n"
-#: src/elflint.c:3318
+#: src/elflint.c:3322
#, c-format
msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
msgstr ""
"sekcja [%2d] „%sâ€: wpis %d ma bÅ‚Ä™dnÄ… wartość skrótu: %#x, oczekiwano %#x\n"
-#: src/elflint.c:3326
+#: src/elflint.c:3330
#, c-format
msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
msgstr "sekcja [%2d] „%sâ€: wpis %d ma powtórzonÄ… nazwÄ™ wersji „%sâ€\n"
-#: src/elflint.c:3346
+#: src/elflint.c:3350
#, c-format
msgid ""
"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
@@ -2771,51 +2778,51 @@ msgstr ""
"sekcja [%2d] „%sâ€: wpis %d ma nieprawidÅ‚owe odniesienie do nazwy w danych "
"dodatkowych\n"
-#: src/elflint.c:3363
+#: src/elflint.c:3367
#, c-format
msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
msgstr ""
"sekcja [%2d] „%sâ€: wpis %d ma bÅ‚Ä™dne nastÄ™pne pole w danych dodatkowych\n"
-#: src/elflint.c:3396
+#: src/elflint.c:3400
#, c-format
msgid "section [%2d] '%s': no BASE definition\n"
msgstr "sekcja [%2d] „%sâ€: brak definicji BASE\n"
-#: src/elflint.c:3412
+#: src/elflint.c:3416
#, c-format
msgid "section [%2d] '%s': unknown parent version '%s'\n"
msgstr "sekcja [%2d] „%sâ€: nieznana wersja rodzica „%sâ€\n"
-#: src/elflint.c:3425
+#: src/elflint.c:3429
#, c-format
msgid "section [%2d] '%s': empty object attributes section\n"
msgstr "sekcja [%2d] „%sâ€: pusta sekcja atrybutów obiektu\n"
-#: src/elflint.c:3446
+#: src/elflint.c:3450
#, c-format
msgid "section [%2d] '%s': unrecognized attribute format\n"
msgstr "sekcja [%2d] „%sâ€: nierozpoznany format atrybutu\n"
-#: src/elflint.c:3462
+#: src/elflint.c:3466
#, 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:3471
+#: src/elflint.c:3475
#, 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:3483
+#: src/elflint.c:3487
#, 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:3500
+#: src/elflint.c:3504
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
@@ -2823,19 +2830,19 @@ msgstr ""
"sekcja [%2d] „%sâ€: offset %zu: niekoÅ„czÄ…ce siÄ™ ULEB128 w znaczniku podsekcji "
"atrybutów\n"
-#: src/elflint.c:3509
+#: src/elflint.c:3513
#, 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:3518
+#: src/elflint.c:3522
#, 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:3533
+#: src/elflint.c:3537
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
@@ -2843,7 +2850,7 @@ msgstr ""
"sekcja [%2d] „%sâ€: offset %zu: nieprawidÅ‚owa dÅ‚ugość w podsekcji atrybutów\n"
#. Tag_File
-#: src/elflint.c:3544
+#: src/elflint.c:3548
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
@@ -2851,23 +2858,23 @@ msgstr ""
"sekcja [%2d] „%sâ€: offset %zu: podsekcja atrybutów ma nieoczekiwany znacznik "
"%u\n"
-#: src/elflint.c:3562
+#: src/elflint.c:3566
#, 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:3573
+#: src/elflint.c:3577
#, 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:3586
+#: src/elflint.c:3590
#, 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:3590
+#: src/elflint.c:3594
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
@@ -2875,12 +2882,12 @@ msgstr ""
"sekcja [%2d] „%sâ€: offset %zu: atrybut %s ma nierozpoznanÄ… wartość "
"%<PRIu64>\n"
-#: src/elflint.c:3600
+#: src/elflint.c:3604
#, 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:3606
+#: src/elflint.c:3610
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
@@ -2888,47 +2895,47 @@ msgstr ""
"sekcja [%2d] „%sâ€: offset %zu: dodatkowe bajty po ostatniej sekcji "
"atrybutów\n"
-#: src/elflint.c:3695
+#: src/elflint.c:3699
#, c-format
msgid "cannot get section header of zeroth section\n"
msgstr "nie można uzyskać nagłówka sekcji zerowej\n"
-#: src/elflint.c:3699
+#: src/elflint.c:3703
#, c-format
msgid "zeroth section has nonzero name\n"
msgstr "sekcja zerowa ma niezerowÄ… nazwÄ™\n"
-#: src/elflint.c:3701
+#: src/elflint.c:3705
#, c-format
msgid "zeroth section has nonzero type\n"
msgstr "sekcja zerowa ma niezerowy typ\n"
-#: src/elflint.c:3703
+#: src/elflint.c:3707
#, c-format
msgid "zeroth section has nonzero flags\n"
msgstr "sekcja zerowa ma niezerowe flagi\n"
-#: src/elflint.c:3705
+#: src/elflint.c:3709
#, c-format
msgid "zeroth section has nonzero address\n"
msgstr "sekcja zerowa ma niezerowy adres\n"
-#: src/elflint.c:3707
+#: src/elflint.c:3711
#, c-format
msgid "zeroth section has nonzero offset\n"
msgstr "sekcja zerowa ma niezerowy offset\n"
-#: src/elflint.c:3709
+#: src/elflint.c:3713
#, c-format
msgid "zeroth section has nonzero align value\n"
msgstr "sekcja zerowa ma niezerową wartość wyrównania\n"
-#: src/elflint.c:3711
+#: src/elflint.c:3715
#, c-format
msgid "zeroth section has nonzero entry size value\n"
msgstr "sekcja zerowa ma niezerową wartość rozmiaru wpisu\n"
-#: src/elflint.c:3714
+#: src/elflint.c:3718
#, c-format
msgid ""
"zeroth section has nonzero size value while ELF header has nonzero shnum "
@@ -2937,7 +2944,7 @@ msgstr ""
"sekcja zerowa ma niezerową wartość rozmiaru, a nagłówek ELF ma niezerową "
"wartość shnum\n"
-#: src/elflint.c:3718
+#: src/elflint.c:3722
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
@@ -2946,7 +2953,7 @@ msgstr ""
"sekcja zerowa ma niezerową wartość dowiązań, a nagłówek ELF nie wskazuje "
"przepełnienia w shstrndx\n"
-#: src/elflint.c:3722
+#: src/elflint.c:3726
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
@@ -2955,46 +2962,46 @@ msgstr ""
"sekcja zerowa ma niezerową wartość dowiązań, a nagłówek ELF nie wskazuje "
"przepełnienia w phnum\n"
-#: src/elflint.c:3740
+#: src/elflint.c:3744
#, 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:3749
+#: src/elflint.c:3753
#, c-format
msgid "section [%2zu]: invalid name\n"
msgstr "sekcja [%2zu]: nieprawidłowa nazwa\n"
-#: src/elflint.c:3776
+#: src/elflint.c:3780
#, 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:3794
+#: src/elflint.c:3798
#, 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:3812
+#: src/elflint.c:3816
#, 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:3830
+#: src/elflint.c:3834
#, c-format
msgid "section [%2zu] '%s' present in object file\n"
msgstr "sekcja [%2zu] „%s†jest obecna w pliku obiektu\n"
-#: src/elflint.c:3836 src/elflint.c:3868
+#: src/elflint.c:3840 src/elflint.c:3872
#, 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:3841 src/elflint.c:3873
+#: src/elflint.c:3845 src/elflint.c:3877
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable "
@@ -3002,7 +3009,7 @@ msgid ""
msgstr ""
"sekcja [%2zu] „%s†nie ma flagi SHF_ALLOC, ale są segmenty wczytywalne\n"
-#: src/elflint.c:3849
+#: src/elflint.c:3853
#, c-format
msgid ""
"section [%2zu] '%s' is extension section index table in non-object file\n"
@@ -3010,22 +3017,22 @@ msgstr ""
"sekcja [%2zu] „%s†jest tabelą indeksów sekcji rozszerzeń w pliku "
"nieobiektowym\n"
-#: src/elflint.c:3892
+#: src/elflint.c:3896
#, 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:3897
+#: src/elflint.c:3901
#, c-format
msgid "cannot get section header\n"
msgstr "nie można uzyskać nagłówka sekcji\n"
-#: src/elflint.c:3907
+#: src/elflint.c:3911
#, c-format
msgid "section [%2zu] '%s' has unsupported type %d\n"
msgstr "sekcja [%2zu] „%s†ma nieobsługiwany typ %d\n"
-#: src/elflint.c:3922
+#: src/elflint.c:3931
#, c-format
msgid ""
"section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
@@ -3033,74 +3040,74 @@ msgstr ""
"sekcja [%2zu] „%s†zawiera nieprawidłowe flagi dla konkretnego procesora "
"%#<PRIx64>\n"
-#: src/elflint.c:3929
+#: src/elflint.c:3938
#, c-format
msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
msgstr "sekcja [%2zu] „%s†zawiera nieznane flagi %#<PRIx64>\n"
-#: src/elflint.c:3937
+#: src/elflint.c:3946
#, 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:3947
+#: src/elflint.c:3956
#, 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:3952
+#: src/elflint.c:3961
#, 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:3958
+#: src/elflint.c:3967
#, 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:3964
+#: src/elflint.c:3973
#, 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:3969
+#: src/elflint.c:3978
#, 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:3976
+#: src/elflint.c:3985
#, 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:3981
+#: src/elflint.c:3990
#, 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:4000
+#: src/elflint.c:4009
#, 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:4009
+#: src/elflint.c:4018
#, 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:4016
+#: src/elflint.c:4025
#, c-format
msgid "section [%2zu] '%s' is both executable and writable\n"
msgstr "sekcja [%2zu] „%s†jest wykonywalne i zapisywalne\n"
-#: src/elflint.c:4047
+#: src/elflint.c:4056
#, c-format
msgid ""
"section [%2zu] '%s' not fully contained in segment of program header entry "
@@ -3109,7 +3116,7 @@ msgstr ""
"sekcja [%2zu] „%s†nie jest w całości zawarta w segmencie wpisu %d nagłówka "
"programu\n"
-#: src/elflint.c:4057
+#: src/elflint.c:4066
#, c-format
msgid ""
"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
@@ -3118,7 +3125,7 @@ msgstr ""
"sekcja [%2zu] „%s†ma typ NOBITS, a jest odczytywana z pliku w segmencie "
"wpisu %d nagłówka programu\n"
-#: src/elflint.c:4083
+#: src/elflint.c:4092
#, c-format
msgid ""
"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
@@ -3127,7 +3134,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:4094
+#: src/elflint.c:4103
#, c-format
msgid ""
"section [%2zu] '%s' has not type NOBITS but is not read from the file in "
@@ -3136,17 +3143,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:4105
+#: src/elflint.c:4114
#, 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:4115
+#: src/elflint.c:4124
#, 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:4125
+#: src/elflint.c:4134
#, c-format
msgid ""
"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
@@ -3154,7 +3161,7 @@ msgstr ""
"sekcja [%2zu] „%sâ€: ma flagÄ™ alloc, ale sekcja nie jest w żadnym segmencie "
"wczytywalnym\n"
-#: src/elflint.c:4131
+#: src/elflint.c:4140
#, c-format
msgid ""
"section [%2zu] '%s': ELF header says this is the section header string table "
@@ -3163,7 +3170,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:4139
+#: src/elflint.c:4148
#, c-format
msgid ""
"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
@@ -3171,17 +3178,17 @@ msgstr ""
"sekcja [%2zu] „%sâ€: pliki relokowalne nie mogÄ… mieć tabeli symboli "
"dynamicznych\n"
-#: src/elflint.c:4190
+#: src/elflint.c:4199
#, 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:4213
+#: src/elflint.c:4222
#, 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:4224
+#: src/elflint.c:4233
#, c-format
msgid ""
"loadable segment [%u] is executable but contains no executable sections\n"
@@ -3189,14 +3196,14 @@ msgstr ""
"wczytywalny segment [%u] jest wykonywalny, ale nie zawiera wykonywalnych "
"sekcji\n"
-#: src/elflint.c:4230
+#: src/elflint.c:4239
#, 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:4241
+#: src/elflint.c:4250
#, c-format
msgid ""
"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section "
@@ -3205,23 +3212,23 @@ msgstr ""
"brak sekcji .gnu.versym, ale istnieje sekcja .gnu.versym_d lub .gnu."
"versym_r\n"
-#: src/elflint.c:4254
+#: src/elflint.c:4263
#, c-format
msgid "duplicate version index %d\n"
msgstr "powtórzony indeks wersji %d\n"
-#: src/elflint.c:4268
+#: src/elflint.c:4277
#, 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:4317
+#: src/elflint.c:4326
#, 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:4321
+#: src/elflint.c:4330
#, c-format
msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
@@ -3229,7 +3236,7 @@ msgstr ""
"sekcja [%2d]: „%sâ€: nieznany typ notatki pliku core %<PRIu32> pod offsetem "
"%zu\n"
-#: src/elflint.c:4370
+#: src/elflint.c:4379
#, fuzzy, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
@@ -3237,7 +3244,7 @@ msgid ""
msgstr ""
"phdr[%d]: nieznany typ notatki pliku obiektu %<PRIu32> pod offsetem %zu\n"
-#: src/elflint.c:4375
+#: src/elflint.c:4384
#, fuzzy, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
@@ -3246,37 +3253,37 @@ msgstr ""
"sekcja [%2d] „%sâ€: nieznany typ notatki pliku obiektu %<PRIu32> pod offsetem "
"%zu\n"
-#: src/elflint.c:4394
+#: src/elflint.c:4403
#, 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:4414
+#: src/elflint.c:4423
#, 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:4417
+#: src/elflint.c:4426
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr "phdr[%d]: dodatkowe %<PRIu64> bajtów po ostatniej notatce\n"
-#: src/elflint.c:4438
+#: src/elflint.c:4447
#, 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:4445
+#: src/elflint.c:4454
#, 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:4448
+#: src/elflint.c:4457
#, 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"
-#: src/elflint.c:4466
+#: src/elflint.c:4475
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
@@ -3284,135 +3291,135 @@ msgstr ""
"tylko pliki wykonywalne, obiekty współdzielone i pliki core mogą mieć "
"nagłówki programu\n"
-#: src/elflint.c:4481
+#: src/elflint.c:4490
#, 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:4490
+#: src/elflint.c:4500
#, 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:4501
+#: src/elflint.c:4511
#, 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:4509
+#: src/elflint.c:4519
#, 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:4516
+#: src/elflint.c:4526
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr "statyczny plik wykonywalny nie może mieć sekcji dynamicznych\n"
-#: src/elflint.c:4530
+#: src/elflint.c:4540
#, 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:4533
+#: src/elflint.c:4543
#, 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:4543
+#: src/elflint.c:4553
#, 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:4564
+#: src/elflint.c:4574
#, 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:4575
+#: src/elflint.c:4585
#, 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:4582
+#: src/elflint.c:4592
#, 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:4591 src/elflint.c:4614
+#: src/elflint.c:4601 src/elflint.c:4624
#, 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:4620
+#: src/elflint.c:4630
#, 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:4647
+#: src/elflint.c:4657
#, 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:4650
+#: src/elflint.c:4660
#, 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:4663
+#: src/elflint.c:4673
#, 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:4671
+#: src/elflint.c:4681
#, c-format
msgid "call frame search table must be allocated\n"
msgstr "tabela wyszukiwania ramki wywołania musi być przydzielona\n"
-#: src/elflint.c:4674
+#: src/elflint.c:4684
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr "sekcja [%2zu] „%sâ€: musi być przydzielona\n"
-#: src/elflint.c:4678
+#: src/elflint.c:4688
#, 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:4681
+#: src/elflint.c:4691
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr "sekcja [%2zu] „%s†nie może być zapisywalna\n"
-#: src/elflint.c:4686
+#: src/elflint.c:4696
#, 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:4689
+#: src/elflint.c:4699
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr "sekcja [%2zu] „%s†nie może być wykonywalna\n"
-#: src/elflint.c:4700
+#: src/elflint.c:4710
#, 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:4707
+#: src/elflint.c:4717
#, 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:4710
+#: src/elflint.c:4720
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
@@ -3421,7 +3428,7 @@ msgstr ""
"wpis nagłówka programu %d: offset w pliku i adres wirtualny nie są "
"wielokrotnością wyrównania\n"
-#: src/elflint.c:4723
+#: src/elflint.c:4733
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
@@ -3430,12 +3437,17 @@ msgstr ""
"plik wykonywalny/DSO z sekcją .eh_frame_hdr nie ma wpisu nagłówka programu "
"PT_GNU_EH_FRAME"
-#: src/elflint.c:4757
+#: src/elflint.c:4767
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr "nie można odczytać nagłówka ELF: %s\n"
-#: src/elflint.c:4783
+#: src/elflint.c:4779
+#, fuzzy, c-format
+msgid "cannot create backend for ELF file\n"
+msgstr "nie można utworzyć nowego pliku"
+
+#: src/elflint.c:4800
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n"
@@ -3692,12 +3704,12 @@ msgstr "%s%s%s: nie rozpoznano formatu pliku"
msgid "cannot create search tree"
msgstr "nie można utworzyć drzewa wyszukiwania"
-#: src/nm.c:746 src/nm.c:1205 src/objdump.c:779 src/readelf.c:635
+#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:635
#: src/readelf.c:1447 src/readelf.c:1598 src/readelf.c:1799 src/readelf.c:2005
#: src/readelf.c:2195 src/readelf.c:2373 src/readelf.c:2449 src/readelf.c:2707
#: src/readelf.c:2783 src/readelf.c:2870 src/readelf.c:3468 src/readelf.c:3518
-#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12415
-#: src/readelf.c:12626 src/readelf.c:12695 src/size.c:398 src/size.c:470
+#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12420
+#: src/readelf.c:12631 src/readelf.c:12700 src/size.c:398 src/size.c:470
#: src/strip.c:1038
#, c-format
msgid "cannot get section header string table index"
@@ -3727,28 +3739,28 @@ msgstr ""
"%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n"
"\n"
-#: src/nm.c:1216
+#: src/nm.c:1250
#, 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:1221
+#: src/nm.c:1255
#, 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:1300
+#: src/nm.c:1334
#, 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:1527
+#: src/nm.c:1570
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: nieprawidłowe działanie"
-#: src/nm.c:1584
+#: src/nm.c:1620
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: brak symboli"
@@ -3824,6 +3836,11 @@ msgstr "Zawartość sekcji %s:\n"
msgid "cannot disassemble"
msgstr "nie można deasemblować"
+#: src/objdump.c:760
+#, fuzzy, c-format
+msgid "cannot create backend for elf file"
+msgstr "nie można utworzyć nowego pliku"
+
#. Short description of program.
#: src/ranlib.c:63
msgid "Generate an index to speed access to archives."
@@ -4017,7 +4034,7 @@ msgstr "nie można określić liczby sekcji: %s"
msgid "cannot get section: %s"
msgstr "nie można uzyskać sekcji: %s"
-#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12646
+#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12651
#: src/unstrip.c:395 src/unstrip.c:426 src/unstrip.c:485 src/unstrip.c:604
#: src/unstrip.c:625 src/unstrip.c:665 src/unstrip.c:881 src/unstrip.c:1212
#: src/unstrip.c:1339 src/unstrip.c:1363 src/unstrip.c:1419 src/unstrip.c:1483
@@ -4424,8 +4441,8 @@ msgstr "<NIEPRAWIDÅOWY SYMBOL>"
msgid "<INVALID SECTION>"
msgstr "<NIEPRAWIDÅOWY SEKCJA>"
-#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12517
-#: src/readelf.c:12524 src/readelf.c:12568 src/readelf.c:12575
+#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12522
+#: src/readelf.c:12529 src/readelf.c:12573 src/readelf.c:12580
msgid "Couldn't uncompress section"
msgstr "Nie można dekompresować sekcji"
@@ -5918,13 +5935,13 @@ msgstr ""
msgid "cannot get debug context descriptor: %s"
msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s"
-#: src/readelf.c:11449 src/readelf.c:12071 src/readelf.c:12182
-#: src/readelf.c:12240
+#: src/readelf.c:11454 src/readelf.c:12076 src/readelf.c:12187
+#: src/readelf.c:12245
#, c-format
msgid "cannot convert core note data: %s"
msgstr "nie można konwertować danych notatki core: %s"
-#: src/readelf.c:11812
+#: src/readelf.c:11817
#, c-format
msgid ""
"\n"
@@ -5933,21 +5950,21 @@ msgstr ""
"\n"
"%*s… <powtarza się jeszcze %u razy>…"
-#: src/readelf.c:12319
+#: src/readelf.c:12324
msgid " Owner Data size Type\n"
msgstr " Właściciel Rozmiar danych Typ\n"
-#: src/readelf.c:12348
+#: src/readelf.c:12353
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12400
+#: src/readelf.c:12405
#, fuzzy, c-format
msgid "cannot get content of note: %s"
msgstr "nie można uzyskać zawartości sekcji notatki: %s"
-#: src/readelf.c:12434
+#: src/readelf.c:12439
#, c-format
msgid ""
"\n"
@@ -5957,7 +5974,7 @@ msgstr ""
"Segment notatki [%2zu] „%s†o długości %<PRIu64> bajtów pod offsetem "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12457
+#: src/readelf.c:12462
#, c-format
msgid ""
"\n"
@@ -5966,7 +5983,7 @@ msgstr ""
"\n"
"Segment notatki o długości %<PRIu64> bajtów pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12504
+#: src/readelf.c:12509
#, c-format
msgid ""
"\n"
@@ -5975,12 +5992,12 @@ msgstr ""
"\n"
"Sekcja [%zu] „%s†nie ma danych do zrzucenia.\n"
-#: src/readelf.c:12531 src/readelf.c:12582
+#: src/readelf.c:12536 src/readelf.c:12587
#, 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:12536
+#: src/readelf.c:12541
#, c-format
msgid ""
"\n"
@@ -5990,7 +6007,7 @@ msgstr ""
"Segment zrzutu szesnastkowego [%zu] „%sâ€, %<PRIu64> bajtów pod offsetem "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12541
+#: src/readelf.c:12546
#, c-format
msgid ""
"\n"
@@ -6001,7 +6018,7 @@ msgstr ""
"Zrzut szesnastkowy sekcji [%zu] „%sâ€, %<PRIu64> bajtów (%zd "
"nieskompresowanych) pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12555
+#: src/readelf.c:12560
#, c-format
msgid ""
"\n"
@@ -6010,7 +6027,7 @@ msgstr ""
"\n"
"Sekcja [%zu] „%s†nie ma ciągów do zrzucenia.\n"
-#: src/readelf.c:12587
+#: src/readelf.c:12592
#, c-format
msgid ""
"\n"
@@ -6019,7 +6036,7 @@ msgstr ""
"\n"
"Sekcja ciągów [%zu] „%s†zawiera %<PRIu64> bajtów pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12592
+#: src/readelf.c:12597
#, c-format
msgid ""
"\n"
@@ -6030,7 +6047,7 @@ msgstr ""
"Sekcja ciągów [%zu] „%s†zawiera %<PRIu64> bajtów (%zd nieskompresowanych) "
"pod offsetem %#0<PRIx64>:\n"
-#: src/readelf.c:12641
+#: src/readelf.c:12646
#, c-format
msgid ""
"\n"
@@ -6039,7 +6056,7 @@ msgstr ""
"\n"
"sekcja [%lu] nie istnieje"
-#: src/readelf.c:12671
+#: src/readelf.c:12676
#, c-format
msgid ""
"\n"
@@ -6048,12 +6065,12 @@ msgstr ""
"\n"
"sekcja „%s†nie istnieje"
-#: src/readelf.c:12728
+#: src/readelf.c:12733
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "nie można uzyskać indeksu symboli archiwum „%sâ€: %s"
-#: src/readelf.c:12731
+#: src/readelf.c:12736
#, c-format
msgid ""
"\n"
@@ -6062,7 +6079,7 @@ msgstr ""
"\n"
"Archiwum „%s†nie ma indeksu symboli\n"
-#: src/readelf.c:12735
+#: src/readelf.c:12740
#, c-format
msgid ""
"\n"
@@ -6071,12 +6088,12 @@ msgstr ""
"\n"
"Indeks archiwum „%s†ma %zu wpisów:\n"
-#: src/readelf.c:12753
+#: src/readelf.c:12758
#, 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:12758
+#: src/readelf.c:12763
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "Element archiwum „%s†zawiera:\n"
@@ -6140,7 +6157,7 @@ msgstr "Nieprawidłowa baza: %s"
msgid "%s: file format not recognized"
msgstr "%s: nie rozpoznano formatu pliku"
-#: src/size.c:418 src/size.c:557
+#: src/size.c:418 src/size.c:560
#, c-format
msgid " (ex %s)"
msgstr " (ex %s)"
@@ -6150,7 +6167,7 @@ msgstr " (ex %s)"
msgid "cannot get section header"
msgstr "nie można uzyskać nagłówka sekcji\n"
-#: src/size.c:582
+#: src/size.c:585
msgid "(TOTALS)\n"
msgstr "(CAÅKOWITE)\n"
diff --git a/po/uk.po b/po/uk.po
index 0ca049e7..a7125507 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -2,13 +2,13 @@
# Copyright (C) 2010 Free Software Foundation, Inc.
# This file is distributed under the same license as the elfutils package.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2010, 2011, 2012, 2013, 2014, 2015.
+# Yuri Chornoivan <yurchor@ukr.net>, 2010, 2011, 2012, 2013, 2014, 2015, 2020.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2019-11-26 09:48+0100\n"
-"PO-Revision-Date: 2015-09-26 16:41+0300\n"
+"POT-Creation-Date: 2020-06-11 15:50+0200\n"
+"PO-Revision-Date: 2020-03-28 14:59+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Generator: Lokalize 20.03.70\n"
#: lib/color.c:53
msgid ""
@@ -47,19 +47,19 @@ msgid "cannot allocate memory"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ пам’ÑÑ‚ÑŒ"
#: 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 ""
-"© Red Hat, Inc., %s\n"
+"© Розробники elfutils, %s <%s>.\n"
"Це програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ñ” вільним, умови ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у його "
"початкових кодах. Умовами Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐЕ передбачено жодних "
"гарантій, зокрема гарантій працездатноÑÑ‚Ñ– або придатноÑÑ‚Ñ– Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ— мети.\n"
#: lib/xmalloc.c:52 lib/xmalloc.c:65 lib/xmalloc.c:77 src/readelf.c:3449
-#: src/readelf.c:11398 src/unstrip.c:2393 src/unstrip.c:2599
+#: src/readelf.c:11403 src/unstrip.c:2393 src/unstrip.c:2599
#, c-format
msgid "memory exhausted"
msgstr "пам’ÑÑ‚ÑŒ вичерпано"
@@ -172,19 +172,16 @@ msgid "no string data"
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"
@@ -227,19 +224,16 @@ 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 "немає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑпиÑку адреÑ"
+msgstr "не Ñ” значеннÑм ÑпиÑку адреÑ"
#: libdw/dwarf_error.c:91
msgid "no block data"
@@ -270,9 +264,8 @@ msgid ".debug_ranges section missing"
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"
@@ -291,14 +284,12 @@ msgid "not a CU (unit) DIE"
msgstr "не Ñ” DIE CU (модулÑ)"
#: 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:50 src/stack.c:638 src/unstrip.c:2540
msgid "Input selection options:"
@@ -360,9 +351,8 @@ msgid "cannot read ELF core file: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл core ELF: %s"
#: libdwfl/argp-std.c:320
-#, fuzzy
msgid "Not enough memory"
-msgstr "неÑтача пам'ÑÑ‚Ñ–"
+msgstr "Бракує пам'ÑÑ‚Ñ–"
#: libdwfl/argp-std.c:330
msgid "No modules recognized in core file"
@@ -527,7 +517,7 @@ msgstr "Ðемає Ñервера"
#: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:77
#: libebl/eblobjnotetypename.c:109 libebl/eblobjnotetypename.c:130
#: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83
-#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:79
+#: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81
msgid "<unknown>"
msgstr "<невідомо>"
@@ -631,9 +621,8 @@ msgid "invalid file descriptor"
msgstr "некоректний деÑкриптор файла"
#: libelf/elf_error.c:99
-#, fuzzy
msgid "invalid ELF file data"
-msgstr "некоректний файл ELF"
+msgstr "некоректні дані щодо файла ELF"
#: libelf/elf_error.c:103
msgid "invalid operation"
@@ -753,38 +742,32 @@ 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 "розділ хешу [%2zu] «%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 "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ DWARF"
+msgstr "неможливо ÑтиÑнути дані"
#: libelf/elf_error.c:271
-#, fuzzy
msgid "cannot decompress data"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ DWARF"
+msgstr "неможливо розпакувати дані"
#: src/addr2line.c:57
msgid "Input format options:"
@@ -1131,29 +1114,29 @@ msgid "cannot read %s: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s: %s"
#: src/ar.c:1476
-#, fuzzy, c-format
+#, c-format
msgid "cannot represent ar_date"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ DWARF"
+msgstr "неможливо предÑтавити ar_date"
#: src/ar.c:1482
-#, fuzzy, c-format
+#, c-format
msgid "cannot represent ar_uid"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ DWARF"
+msgstr "неможливо предÑтавити ar_uid"
#: src/ar.c:1488
-#, fuzzy, c-format
+#, c-format
msgid "cannot represent ar_gid"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ DWARF"
+msgstr "неможливо предÑтавити ar_gid"
#: src/ar.c:1494
-#, fuzzy, c-format
+#, c-format
msgid "cannot represent ar_mode"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву розділу"
+msgstr "неможливо предÑтавити ar_mode"
#: src/ar.c:1500
-#, 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."
@@ -1255,14 +1238,14 @@ msgid "%s %s diff: program header count"
msgstr "%s %s diff: кількіÑÑ‚ÑŒ заголовків програми"
#: src/elfcmp.c:241 src/elfcmp.c:244
-#, fuzzy, c-format
+#, c-format
msgid "cannot get hdrstrndx of '%s': %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF «%s»: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ hdrstrndx «%s»: %s"
#: src/elfcmp.c:249
-#, fuzzy, c-format
+#, c-format
msgid "%s %s diff: shdr string index"
-msgstr "%s %s diff: кількіÑÑ‚ÑŒ розділів"
+msgstr "Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð¼Ñ–Ð¶ %s Ñ– %s: Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ñдків shdr"
#: src/elfcmp.c:307
#, c-format
@@ -1412,31 +1395,29 @@ msgid "-o option specified twice"
msgstr "параметр -o вказано двічі"
#: src/elfcompress.c:122
-#, fuzzy, c-format
+#, c-format
msgid "-t option specified twice"
-msgstr "параметр -f вказано двічі"
+msgstr "параметр -t вказано двічі"
#: src/elfcompress.c:131
-#, fuzzy, c-format
+#, 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
+#, c-format
msgid "No input file given"
-msgstr "вхідний файл є порожнім"
+msgstr "Ðе надано файла вхідних даних"
#: src/elfcompress.c:149 src/elfcompress.c:1352
-#, fuzzy, c-format
+#, c-format
msgid "Only one input file allowed together with '-o'"
-msgstr ""
-"Разом з «-o» або «-f» можна викориÑтовувати лише один файл вхідних даних"
+msgstr "З параметром «-o» можна викориÑтовувати лише один файл вхідних даних"
#: src/elfcompress.c:1309
-#, fuzzy
msgid "Place (de)compressed output into FILE"
-msgstr "ВивеÑти дані піÑÐ»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ ФÐЙЛа"
+msgstr "ПоміÑтити результати Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ ÑтиÑÐºÐ°Ð½Ð½Ñ Ð´Ð¾ ФÐЙЛа"
#: src/elfcompress.c:1312
msgid ""
@@ -1444,22 +1425,31 @@ msgid ""
"'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-"
"gnu' (.zdebug GNU style compression, 'gnu' is an alias)"
msgstr ""
+"Визначає тип ÑтиÑканнÑ, Ñкий Ñлід заÑтоÑувати. ТИПом може бути "
+"«none» (розпакувати), «zlib» (ÑтиÑÐºÐ°Ð½Ð½Ñ ELF ZLIB, типовий варіант, інша "
+"назва — «zlib-gabi») або «zlib-gnu» (ÑтиÑÐºÐ°Ð½Ð½Ñ Ñƒ Ñтилі GNU .zdebug, інша "
+"назва — «gnu»)"
#: src/elfcompress.c:1315
msgid ""
"SECTION name to (de)compress, SECTION is an extended wildcard pattern "
"(defaults to '.?(z)debug*')"
msgstr ""
+"назва РОЗДІЛу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ ÑтиÑканнÑ, РОЗДІЛ Ñ” розширеним взірцем із "
+"замінниками (типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ -- «.?(z)debug*»)"
#: src/elfcompress.c:1318
msgid "Print a message for each section being (de)compressed"
msgstr ""
+"ВивеÑти Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ розділу, Ñкий розпаковуєтьÑÑ Ñ‡Ð¸ ÑтиÑкаєтьÑÑ"
#: src/elfcompress.c:1321
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
msgid "Relax a few rules to handle slightly broken ELF files"
@@ -1467,10 +1457,8 @@ msgstr ""
"Знехтувати декількома правилами Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ трохи пошкоджених файлів ELF"
#: src/elfcompress.c:1327
-#, fuzzy
msgid "Be silent when a section cannot be compressed"
-msgstr ""
-"розділ [%2zu] «%s»: адреÑа розділів локальних даних потоків не Ñ” нульовою\n"
+msgstr "Ðе Ñповіщати, Ñкщо розділ неможливо ÑтиÑнути"
#. Strings for arguments in help texts.
#: src/elfcompress.c:1336 src/elflint.c:77 src/readelf.c:158
@@ -1479,7 +1467,7 @@ msgstr "ФÐЙЛ..."
#: src/elfcompress.c:1337
msgid "Compress or decompress sections in an ELF file."
-msgstr ""
+msgstr "СтиÑнути або розпакувати розділи у файлі ELF."
#: src/elflint.c:63
msgid "Be extremely strict, flag level 2 features."
@@ -1508,14 +1496,14 @@ 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 "не вдалоÑÑ Ñтворити деÑкриптор Elf Ð´Ð»Ñ Â«%s»: %s\n"
#: src/elflint.c:180
#, c-format
@@ -1562,7 +1550,7 @@ msgid "unsupported OS ABI e_ident[%d] == '%s'\n"
msgstr "непідтримуване 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"
@@ -1626,7 +1614,7 @@ msgstr "некоректний Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу\n"
#: src/elflint.c:473
#, c-format
msgid "Can only check %u headers, shnum was %u\n"
-msgstr ""
+msgstr "Можна перевірити лише %u заголовків, значеннÑм же shnum було %u\n"
#: src/elflint.c:487
#, c-format
@@ -1636,7 +1624,7 @@ msgstr "некоректна кількіÑÑ‚ÑŒ запиÑів таблиці з
#: src/elflint.c:504
#, c-format
msgid "Can only check %u headers, phnum was %u\n"
-msgstr ""
+msgstr "Можна перевірити лише %u заголовків, значеннÑм же phnum було %u\n"
#: src/elflint.c:509
#, c-format
@@ -1685,14 +1673,14 @@ msgstr ""
"розділ [%2d] «%s»: групу розділів [%2zu] «%s» мало бути визначено до розділу-"
"елемента цієї групи\n"
-#: src/elflint.c:610 src/elflint.c:1494 src/elflint.c:1545 src/elflint.c:1651
-#: src/elflint.c:1987 src/elflint.c:2313 src/elflint.c:2932 src/elflint.c:3095
-#: src/elflint.c:3243 src/elflint.c:3433 src/elflint.c:4431
+#: 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:2936 src/elflint.c:3099
+#: src/elflint.c:3247 src/elflint.c:3437 src/elflint.c:4440
#, c-format
msgid "section [%2d] '%s': cannot get section data\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу\n"
-#: src/elflint.c:623 src/elflint.c:1658
+#: src/elflint.c:623 src/elflint.c:1662
#, c-format
msgid ""
"section [%2d] '%s': referenced as string table for section [%2d] '%s' but "
@@ -1715,33 +1703,42 @@ msgstr ""
msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
msgstr "розділ [%2u] «%s»: розмірніÑÑ‚ÑŒ запиÑу не відповідає ElfXX_Sym\n"
-#: src/elflint.c:667
+#: src/elflint.c:662
+#, c-format
+msgid ""
+"section [%2u] '%s': number of local entries in 'st_info' larger than table "
+"size\n"
+msgstr ""
+"розділ [%2u] «%s»: кількіÑÑ‚ÑŒ локальних запиÑів у «st_info» перевищує розмір "
+"таблиці\n"
+
+#: src/elflint.c:671
#, c-format
msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол %d: %s\n"
-#: src/elflint.c:672 src/elflint.c:675 src/elflint.c:678 src/elflint.c:681
-#: src/elflint.c:684 src/elflint.c:687
+#: src/elflint.c:676 src/elflint.c:679 src/elflint.c:682 src/elflint.c:685
+#: src/elflint.c:688 src/elflint.c:691
#, c-format
msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
msgstr "розділ [%2d] «%s»: «%s» у нульовому запиÑÑ– не Ñ” нулем\n"
-#: src/elflint.c:690
+#: src/elflint.c:694
#, c-format
msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
msgstr "розділ [%2d] «%s»: XINDEX Ð´Ð»Ñ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ запиÑу не Ñ” нулем\n"
-#: src/elflint.c:700
+#: src/elflint.c:704
#, c-format
msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол %zu: %s\n"
-#: src/elflint.c:709
+#: src/elflint.c:713
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
msgstr "розділ [%2d] «%s»: Ñимвол %zu: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸\n"
-#: src/elflint.c:724
+#: src/elflint.c:728
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: too large section index but no extended "
@@ -1750,7 +1747,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: занадто великий покажчик розділу за умови, що "
"не визначено розділу розширеного покажчика розділів\n"
-#: src/elflint.c:730
+#: src/elflint.c:734
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in "
@@ -1760,29 +1757,29 @@ msgstr ""
"відповідає st_shndx (%<PRIu32>)\n"
#. || sym->st_shndx > SHN_HIRESERVE always false
-#: src/elflint.c:742
+#: src/elflint.c:746
#, c-format
msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
msgstr "розділ [%2d] «%s»: Ñимвол %zu: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ\n"
-#: src/elflint.c:750
+#: src/elflint.c:754
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown type\n"
msgstr "розділ [%2d] «%s»: Ñимвол %zu: невідомий тип\n"
-#: src/elflint.c:756
+#: src/elflint.c:760
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
msgstr "розділ [%2d] «%s»: Ñимвол %zu: невідома прив’Ñзка Ñимволу\n"
-#: src/elflint.c:761
+#: src/elflint.c:765
#, c-format
msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n"
msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: унікальний Ñимвол, що не належить до типу "
"об’єктів\n"
-#: src/elflint.c:769
+#: src/elflint.c:773
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
@@ -1790,14 +1787,14 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: COMMON можна викориÑтовувати лише у файлах, "
"придатних до переÑуваннÑ\n"
-#: src/elflint.c:773
+#: src/elflint.c:777
#, c-format
msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: викориÑÑ‚Ð°Ð½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів COMMON "
"позбавлене ÑенÑу\n"
-#: src/elflint.c:777
+#: src/elflint.c:781
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
@@ -1805,13 +1802,13 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: викориÑÑ‚Ð°Ð½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— у розділі COMMON "
"позбавлене ÑенÑу\n"
-#: src/elflint.c:828
+#: src/elflint.c:832
#, c-format
msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ st_value поза можливим діапазоном\n"
-#: src/elflint.c:834 src/elflint.c:859 src/elflint.c:908
+#: src/elflint.c:838 src/elflint.c:863 src/elflint.c:912
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu does not fit completely in referenced section "
@@ -1820,7 +1817,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu не повніÑÑ‚ÑŽ відповідає розділу, на Ñкий "
"поÑилаєтьÑÑ, [%2d] «%s»\n"
-#: src/elflint.c:843
+#: src/elflint.c:847
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have "
@@ -1829,7 +1826,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ поÑÐ¸Ð»Ð°Ð½Ð½Ñ [%2d] «%s» не "
"вÑтановлено прапорець SHF_TLS\n"
-#: src/elflint.c:853 src/elflint.c:901
+#: src/elflint.c:857 src/elflint.c:905
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section "
@@ -1838,14 +1835,14 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ st_value поза межами розділу "
"поÑиланнÑ, [%2d] «%s»\n"
-#: src/elflint.c:880
+#: src/elflint.c:884
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: Ñимвол TLS без запиÑу заголовка програми TLS\n"
-#: src/elflint.c:886
+#: src/elflint.c:890
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: TLS symbol but couldn't get TLS program "
@@ -1854,7 +1851,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: маємо Ñимвол TLS, але не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ "
"Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми TLS\n"
-#: src/elflint.c:894
+#: src/elflint.c:898
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] "
@@ -1863,7 +1860,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ st_value перед розділом поÑиланнÑ, "
"[%2d] «%s»\n"
-#: src/elflint.c:921
+#: src/elflint.c:925
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: local symbol outside range described in "
@@ -1872,7 +1869,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: у sh_info опиÑано локальний Ñимвол поза "
"діапазоном\n"
-#: src/elflint.c:928
+#: src/elflint.c:932
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: non-local symbol outside range described in "
@@ -1881,12 +1878,12 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: у sh_info опиÑано нелокальний Ñимвол поза "
"діапазоном\n"
-#: src/elflint.c:935
+#: src/elflint.c:939
#, c-format
msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
msgstr "розділ [%2d] «%s»: Ñимвол %zu: нелокальний Ñимвол розділу\n"
-#: src/elflint.c:985
+#: src/elflint.c:989
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section "
@@ -1895,7 +1892,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол _GLOBAL_OFFSET_TABLE_ поÑилаєтьÑÑ Ð½Ð° помилковий "
"розділ, [%2d]\n"
-#: src/elflint.c:992
+#: src/elflint.c:996
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] "
@@ -1907,7 +1904,7 @@ msgstr ""
#. This test is more strict than the psABIs which
#. usually allow the symbol to be in the middle of
#. the .got section, allowing negative offsets.
-#: src/elflint.c:1008
+#: src/elflint.c:1012
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not "
@@ -1916,7 +1913,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу _GLOBAL_OFFSET_TABLE_ %#<PRIx64> не "
"відповідає адреÑÑ– розділу %s %#<PRIx64>\n"
-#: src/elflint.c:1015
+#: src/elflint.c:1019
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not "
@@ -1925,7 +1922,7 @@ msgstr ""
"розділ [%2d] «%s»: розмір Ñимволу _GLOBAL_OFFSET_TABLE_ %<PRIu64> не "
"відповідає розміру розділу %s %<PRIu64>\n"
-#: src/elflint.c:1023
+#: src/elflint.c:1027
#, c-format
msgid ""
"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got "
@@ -1934,7 +1931,7 @@ msgstr ""
"розділ [%2d] «%s»: виÑвлено Ñимвол _GLOBAL_OFFSET_TABLE_, але не виÑвлено "
"розділу .got\n"
-#: src/elflint.c:1039
+#: src/elflint.c:1043
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic "
@@ -1943,7 +1940,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу _DYNAMIC_ %#<PRIx64> не відповідає "
"адреÑÑ– динамічного Ñегмента %#<PRIx64>\n"
-#: src/elflint.c:1046
+#: src/elflint.c:1050
#, c-format
msgid ""
"section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic "
@@ -1952,7 +1949,7 @@ msgstr ""
"розділ [%2d] «%s»: розмір Ñимволу _DYNAMIC %<PRIu64> не відповідає розміру "
"динамічного Ñегмента %<PRIu64>\n"
-#: src/elflint.c:1059
+#: src/elflint.c:1063
#, c-format
msgid ""
"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-"
@@ -1961,29 +1958,29 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %zu: Ñимвол у динамічній таблиці Ñимволів з "
"нетиповою видиміÑÑ‚ÑŽ\n"
-#: src/elflint.c:1063
+#: src/elflint.c:1067
#, c-format
msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"
msgstr "розділ [%2d] «%s»: Ñимвол %zu: невідомий набір бітів у st_other\n"
-#: src/elflint.c:1101
+#: src/elflint.c:1105
#, c-format
msgid "section [%2d] '%s': cannot get section data.\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу.\n"
-#: src/elflint.c:1117
+#: src/elflint.c:1121
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
msgstr "розділ [%2d] «%s»: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ розділу RELA викориÑтано DT_RELCOUNT\n"
-#: src/elflint.c:1128 src/elflint.c:1181
+#: src/elflint.c:1132 src/elflint.c:1185
#, c-format
msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ DT_RELCOUNT %d Ñ” занадто виÑоким Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ "
"розділу\n"
-#: src/elflint.c:1153 src/elflint.c:1206
+#: src/elflint.c:1157 src/elflint.c:1210
#, c-format
msgid ""
"section [%2d] '%s': relative relocations after index %d as specified by "
@@ -1992,7 +1989,7 @@ msgstr ""
"розділ [%2d] «%s»: відноÑні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ— %d, вказаної за "
"допомогою DT_RELCOUNT\n"
-#: src/elflint.c:1159 src/elflint.c:1212
+#: src/elflint.c:1163 src/elflint.c:1216
#, c-format
msgid ""
"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT "
@@ -2001,52 +1998,53 @@ msgstr ""
"розділ [%2d] «%s»: безвідноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° позиції %zu; DT_RELCOUNT "
"визначено %d відноÑних переÑуваннÑ\n"
-#: src/elflint.c:1171
+#: src/elflint.c:1175
#, c-format
msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
msgstr "розділ [%2d] «%s»: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ розділу REL викориÑтано DT_RELACOUNT\n"
-#: src/elflint.c:1254
+#: src/elflint.c:1258
#, c-format
msgid "section [%2d] '%s': invalid destination section index\n"
msgstr "розділ [%2d] «%s»: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ призначеннÑ\n"
-#: src/elflint.c:1266
+#: src/elflint.c:1270
#, c-format
msgid "section [%2d] '%s': invalid destination section type\n"
msgstr "розділ [%2d] «%s»: некоректний тип розділу призначеннÑ\n"
-#: src/elflint.c:1274
+#: src/elflint.c:1278
#, c-format
msgid "section [%2d] '%s': sh_info should be zero\n"
msgstr "розділ [%2d] «%s»: sh_info має бути нульовим\n"
-#: src/elflint.c:1282
-#, fuzzy, c-format
+#: src/elflint.c:1286
+#, c-format
msgid ""
"section [%2d] '%s': no relocations for merge-able string sections possible\n"
msgstr ""
-"розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ придатних до Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ… неможливе\n"
+"розділ [%2d] «%s»: неможливі переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñ€Ñдків, Ñкі непридатні "
+"до об'єднаннÑ\n"
-#: src/elflint.c:1290
+#: src/elflint.c:1294
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
msgstr ""
"розділ [%2d] «%s»: розмірніÑÑ‚ÑŒ запиÑу розділу не відповідає ElfXX_Rela\n"
-#: src/elflint.c:1350
+#: src/elflint.c:1354
#, c-format
msgid "text relocation flag set but there is no read-only segment\n"
msgstr ""
"вÑтановлено прапорець переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту, але Ñегмент придатний лише до "
"читаннÑ\n"
-#: src/elflint.c:1377
+#: src/elflint.c:1381
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid type\n"
msgstr "розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: некоректний тип\n"
-#: src/elflint.c:1385
+#: src/elflint.c:1389
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: relocation type invalid for the file "
@@ -2055,12 +2053,12 @@ msgstr ""
"розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: некоректний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ñƒ "
"файла\n"
-#: src/elflint.c:1393
+#: src/elflint.c:1397
#, c-format
msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
msgstr "розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу\n"
-#: src/elflint.c:1411
+#: src/elflint.c:1415
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can "
@@ -2069,12 +2067,12 @@ msgstr ""
"розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: з %s можна викориÑтовувати лише Ñимвол "
"«_GLOBAL_OFFSET_TABLE_»\n"
-#: src/elflint.c:1428
+#: src/elflint.c:1432
#, c-format
msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
msgstr "розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ð° межі діапазону\n"
-#: src/elflint.c:1443
+#: src/elflint.c:1447
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: copy relocation against symbol of type "
@@ -2083,7 +2081,7 @@ msgstr ""
"розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: переÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñимволу типу "
"%s\n"
-#: src/elflint.c:1464
+#: src/elflint.c:1468
#, c-format
msgid ""
"section [%2d] '%s': relocation %zu: read-only section modified but text "
@@ -2092,22 +2090,22 @@ msgstr ""
"розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %zu: змінено придатний лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ "
"розділ, але не вÑтановлено прапорець переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту\n"
-#: src/elflint.c:1479
+#: src/elflint.c:1483
#, c-format
msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
msgstr "розділ [%2d] «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð¸Ñ… Ñ– незавантажених даних\n"
-#: src/elflint.c:1519 src/elflint.c:1570
+#: src/elflint.c:1523 src/elflint.c:1574
#, c-format
msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: %s\n"
-#: src/elflint.c:1646
+#: src/elflint.c:1650
#, c-format
msgid "more than one dynamic section present\n"
msgstr "вказано більше одного динамічного розділу\n"
-#: src/elflint.c:1664
+#: src/elflint.c:1668
#, c-format
msgid ""
"section [%2d]: referenced as string table for section [%2d] '%s' but section "
@@ -2116,46 +2114,46 @@ msgstr ""
"розділ [%2d]: надано поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° таблицю Ñ€Ñдків розділу [%2d] «%s», але "
"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ Ñ” некоректним\n"
-#: src/elflint.c:1672
+#: src/elflint.c:1676
#, c-format
msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
msgstr ""
"розділ [%2d] «%s»: розмірніÑÑ‚ÑŒ запиÑу розділу не відповідає ElfXX_Dyn\n"
-#: src/elflint.c:1677 src/elflint.c:1966
+#: src/elflint.c:1681 src/elflint.c:1970
#, c-format
msgid "section [%2d] '%s': sh_info not zero\n"
msgstr "розділ [%2d] «%s»: sh_info не є нульовим\n"
-#: src/elflint.c:1687
+#: src/elflint.c:1691
#, c-format
msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
msgstr ""
"розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ розділу %zu: %s\n"
-#: src/elflint.c:1695
+#: src/elflint.c:1699
#, c-format
msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
msgstr ""
"розділ [%2d] «%s»: за запиÑом DT_NULL вказано запиÑи, що не належать до "
"DT_NULL\n"
-#: src/elflint.c:1702
+#: src/elflint.c:1706
#, c-format
msgid "section [%2d] '%s': entry %zu: unknown tag\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %zu: невідома мітка\n"
-#: src/elflint.c:1713
+#: src/elflint.c:1717
#, c-format
msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %zu: декілька запиÑів з міткою %s\n"
-#: src/elflint.c:1723
+#: src/elflint.c:1727
#, c-format
msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %zu: викориÑтано мітку Ñ€Ñ–Ð²Ð½Ñ 2 %s\n"
-#: src/elflint.c:1741
+#: src/elflint.c:1745
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
@@ -2163,7 +2161,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %zu: значеннÑм DT_PLTREL має бути DT_REL або "
"DT_RELA\n"
-#: src/elflint.c:1754
+#: src/elflint.c:1758
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: pointer does not match address of section "
@@ -2172,7 +2170,7 @@ msgstr ""
"розділ [%2d] «%s»: розділ %zu: вказівник не відповідає адреÑÑ– розділу [%2d] "
"«%s», на Ñку поÑилаєтьÑÑ sh_link\n"
-#: src/elflint.c:1797
+#: src/elflint.c:1801
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
@@ -2180,7 +2178,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %zu: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s має вказувати на завантажений "
"Ñегмент\n"
-#: src/elflint.c:1812
+#: src/elflint.c:1816
#, c-format
msgid ""
"section [%2d] '%s': entry %zu: %s value must be valid offset in section "
@@ -2189,48 +2187,48 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %zu: значеннÑм %s має бути коректне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ "
"розділі [%2d] «%s»\n"
-#: src/elflint.c:1832 src/elflint.c:1860
+#: src/elflint.c:1836 src/elflint.c:1864
#, c-format
msgid "section [%2d] '%s': contains %s entry but not %s\n"
msgstr "розділ [%2d] «%s»: міÑтить Ð·Ð°Ð¿Ð¸Ñ %s, але не %s\n"
-#: src/elflint.c:1844
+#: src/elflint.c:1848
#, c-format
msgid "section [%2d] '%s': mandatory tag %s not present\n"
msgstr "розділ [%2d] «%s»: немає обов’Ñзкової мітки %s\n"
-#: src/elflint.c:1853
+#: src/elflint.c:1857
#, c-format
msgid "section [%2d] '%s': no hash section present\n"
msgstr "розділ [%2d] «%s»: не виÑвлено розділу хешів\n"
-#: src/elflint.c:1868 src/elflint.c:1875
+#: src/elflint.c:1872 src/elflint.c:1879
#, c-format
msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
msgstr "розділ [%2d] «%s»: вказано не вÑÑ– зі значень %s, %s Ñ– %s\n"
-#: src/elflint.c:1885 src/elflint.c:1889
+#: src/elflint.c:1889 src/elflint.c:1893
#, c-format
msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
msgstr ""
"розділ [%2d] «%s»: у DSO, позначеному на кроці попереднього компонуваннÑ, "
"немає мітки %s\n"
-#: src/elflint.c:1895
+#: src/elflint.c:1899
#, c-format
msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
msgstr ""
"розділ [%2d] «%s»: під Ñ‡Ð°Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñк залежніÑÑ‚ÑŒ позначено "
"файл, Ñкий не Ñ” файлом DSO\n"
-#: src/elflint.c:1906 src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918
+#: src/elflint.c:1910 src/elflint.c:1914 src/elflint.c:1918 src/elflint.c:1922
#, c-format
msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
msgstr ""
"розділ [%2d] «%s»: у попередньо Ñкомпонованому виконуваному файлі не "
"міÑтитьÑÑ Ð¼Ñ–Ñ‚ÐºÐ¸ %s\n"
-#: src/elflint.c:1930
+#: src/elflint.c:1934
#, c-format
msgid ""
"section [%2d] '%s': only relocatable files can have extended section index\n"
@@ -2238,7 +2236,7 @@ msgstr ""
"розділ [%2d] «%s»: розширений розділ покажчика можуть мати лише файли, "
"придатні до переÑуваннÑ\n"
-#: src/elflint.c:1940
+#: src/elflint.c:1944
#, c-format
msgid ""
"section [%2d] '%s': extended section index section not for symbol table\n"
@@ -2246,29 +2244,29 @@ msgstr ""
"розділ [%2d] «%s»: розділ розширеного покажчика розділів не призначено Ð´Ð»Ñ "
"таблиць Ñимволів\n"
-#: src/elflint.c:1944
+#: src/elflint.c:1948
#, c-format
msgid "section [%2d] '%s': sh_link extended section index [%2d] is invalid\n"
msgstr ""
"розділ [%2d] «%s»: Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³Ð¾ розділу sh_link [%2d] Ñ” некоректним\n"
-#: src/elflint.c:1949
+#: src/elflint.c:1953
#, c-format
msgid "cannot get data for symbol section\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñимволів\n"
-#: src/elflint.c:1952
+#: src/elflint.c:1956
#, c-format
msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
msgstr "розділ [%2d] «%s»: розмірніÑÑ‚ÑŒ запиÑу не відповідає Elf32_Word\n"
-#: src/elflint.c:1961
+#: src/elflint.c:1965
#, c-format
msgid "section [%2d] '%s': extended index table too small for symbol table\n"
msgstr ""
"розділ [%2d] «%s»: розширена Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ° замала Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñимволів\n"
-#: src/elflint.c:1976
+#: src/elflint.c:1980
#, c-format
msgid ""
"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to "
@@ -2277,24 +2275,24 @@ msgstr ""
"розділ [%2d] «%s»: розширений покажчик розділів у розділі [%2zu] «%s» "
"поÑилаєтьÑÑ Ð½Ð° ту Ñаму таблицю розділів\n"
-#: src/elflint.c:1994
+#: src/elflint.c:1998
#, c-format
msgid "symbol 0 should have zero extended section index\n"
msgstr "Ñимволу 0 має відповідати нульовий Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³Ð¾ розділу\n"
-#: src/elflint.c:2006
+#: src/elflint.c:2010
#, c-format
msgid "cannot get data for symbol %zu\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñимволу %zu\n"
-#: src/elflint.c:2011
+#: src/elflint.c:2015
#, c-format
msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
msgstr ""
"Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³Ð¾ розділу дорівнює %<PRIu32>, але Ñ–Ð½Ð´ÐµÐºÑ Ñимволу не Ñ” "
"XINDEX\n"
-#: src/elflint.c:2028 src/elflint.c:2085
+#: src/elflint.c:2032 src/elflint.c:2089
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
@@ -2302,43 +2300,43 @@ msgstr ""
"розділ [%2d] «%s»: розділ таблиці хешів занадто малий (розмір %ld, мало бути "
"— %ld)\n"
-#: src/elflint.c:2042 src/elflint.c:2099
+#: src/elflint.c:2046 src/elflint.c:2103
#, c-format
msgid "section [%2d] '%s': chain array too large\n"
msgstr "розділ [%2d] «%s»: маÑив ланцюжка занадто великий\n"
-#: src/elflint.c:2056 src/elflint.c:2113
+#: src/elflint.c:2060 src/elflint.c:2117
#, c-format
msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
msgstr ""
"розділ [%2d] «%s»: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° хеш блоку %zu лежить поза межами діапазону\n"
-#: src/elflint.c:2066
+#: src/elflint.c:2070
#, c-format
msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
msgstr ""
"розділ [%2d] «%s»: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð»Ð°Ð½Ñ†ÑŽÐ¶ÐºÐ° хешів %zu лежить поза межами "
"діапазону\n"
-#: src/elflint.c:2123
+#: src/elflint.c:2127
#, c-format
msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
msgstr ""
"розділ [%2d] «%s»: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð»Ð°Ð½Ñ†ÑŽÐ¶ÐºÐ° хешів %<PRIu64> лежить поза межами "
"діапазону\n"
-#: src/elflint.c:2136
+#: src/elflint.c:2140
#, c-format
msgid "section [%2d] '%s': not enough data\n"
msgstr "розділ [%2d] «%s»: недоÑтатньо даних\n"
-#: src/elflint.c:2148
+#: src/elflint.c:2152
#, c-format
msgid "section [%2d] '%s': bitmask size zero or not power of 2: %u\n"
msgstr ""
"розділ [%2d] «%s»: розмір бітової маÑки Ñ” нульовим або не Ñ” Ñтепенем 2: %u\n"
-#: src/elflint.c:2164
+#: src/elflint.c:2168
#, c-format
msgid ""
"section [%2d] '%s': hash table section is too small (is %ld, expected at "
@@ -2347,12 +2345,12 @@ msgstr ""
"розділ [%2d] «%s»: розділ таблиці хешів є надто малим (маємо %ld, мало бути "
"принаймні %ld)\n"
-#: src/elflint.c:2173
+#: src/elflint.c:2177
#, c-format
msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
msgstr "розділ [%2d] «%s»: зÑув 2-ої функції Ñ…ÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ великий: %u\n"
-#: src/elflint.c:2207
+#: src/elflint.c:2211
#, c-format
msgid ""
"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
@@ -2360,7 +2358,7 @@ msgstr ""
"розділ [%2d] '%s': ланцюжок хешів Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑƒ %zu розташовано нижче за позицію "
"Ð²Ñ–Ð´Ñ…Ð¸Ð»ÐµÐ½Ð½Ñ Ñ–Ð½Ð´ÐµÐºÑу Ñимволу\n"
-#: src/elflint.c:2228
+#: src/elflint.c:2232
#, c-format
msgid ""
"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is "
@@ -2369,7 +2367,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %u, на Ñкий поÑилаєтьÑÑ Ð»Ð°Ð½Ñ†ÑŽÐ¶Ð¾Ðº у блоці %zu не "
"визначено\n"
-#: src/elflint.c:2241
+#: src/elflint.c:2245
#, c-format
msgid ""
"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
@@ -2377,7 +2375,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ…ÐµÑˆÑƒ Ð´Ð»Ñ Ñимволу %u у ланцюжку Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑƒ %zu Ñ” "
"помилковим\n"
-#: src/elflint.c:2250
+#: src/elflint.c:2254
#, c-format
msgid ""
"section [%2d] '%s': mask index for symbol %u in chain for bucket %zu wrong\n"
@@ -2385,14 +2383,14 @@ msgstr ""
"розділ [%2d] «%s»: Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ð°Ñки Ð´Ð»Ñ Ñимволу %u у ланцюжку Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑƒ %zu Ñ” "
"помилковим\n"
-#: src/elflint.c:2280
+#: src/elflint.c:2284
#, c-format
msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
msgstr ""
"розділ [%2d] «%s»: ланцюжок хешів Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑƒ %zu лежить поза межами "
"діапазону\n"
-#: src/elflint.c:2285
+#: src/elflint.c:2289
#, c-format
msgid ""
"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
@@ -2400,43 +2398,43 @@ msgstr ""
"розділ [%2d] «%s»: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол у ланцюжку Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑƒ %zu лежить поза "
"межами діапазону\n"
-#: src/elflint.c:2291
+#: src/elflint.c:2295
#, c-format
msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
msgstr "розділ [%2d] «%s»: бітова маÑка не відповідає назвам у таблиці хешів\n"
-#: src/elflint.c:2304
+#: src/elflint.c:2308
#, c-format
msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
msgstr ""
"розділ [%2d] «%s»: придатні до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¸ не можуть міÑтити таблиць "
"хешів\n"
-#: src/elflint.c:2322
+#: src/elflint.c:2326
#, c-format
msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
msgstr ""
"розділ [%2d] «%s»: таблицю хешів не призначено Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– "
"динамічних Ñимволів\n"
-#: src/elflint.c:2326
+#: src/elflint.c:2330
#, c-format
msgid "section [%2d] '%s': invalid sh_link symbol table section index [%2d]\n"
msgstr ""
"розділ [%2d] «%s»: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ таблиці Ñимволів sh_link "
"[%2d]\n"
-#: src/elflint.c:2336
+#: src/elflint.c:2340
#, c-format
msgid "section [%2d] '%s': hash table entry size incorrect\n"
msgstr "розділ [%2d] «%s»: розмірніÑÑ‚ÑŒ запиÑу таблиці хешів Ñ” некоректною\n"
-#: src/elflint.c:2341
+#: src/elflint.c:2345
#, c-format
msgid "section [%2d] '%s': not marked to be allocated\n"
msgstr "розділ [%2d] «%s»: не позначено Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑуваннÑ\n"
-#: src/elflint.c:2346
+#: src/elflint.c:2350
#, c-format
msgid ""
"section [%2d] '%s': hash table has not even room for initial administrative "
@@ -2445,27 +2443,27 @@ msgstr ""
"розділ [%2d] «%s»: у таблиці хешів виÑвлено незвичайне Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ "
"початкових адмініÑтративних запиÑів\n"
-#: src/elflint.c:2395
+#: src/elflint.c:2399
#, c-format
msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
msgstr "sh_link у розділах хешів [%2zu] «%s» Ñ– [%2zu] «%s» не збігаютьÑÑ\n"
-#: src/elflint.c:2419 src/elflint.c:2484 src/elflint.c:2519
+#: src/elflint.c:2423 src/elflint.c:2488 src/elflint.c:2523
#, c-format
msgid "hash section [%2zu] '%s' does not contain enough data\n"
msgstr "розділ хешу [%2zu] «%s» міÑтить недоÑтатньо даних\n"
-#: src/elflint.c:2440
+#: src/elflint.c:2444
#, c-format
msgid "hash section [%2zu] '%s' has zero bit mask words\n"
msgstr "розділ хешу [%2zu] «%s» міÑтить нульові Ñлова бітової маÑки\n"
-#: src/elflint.c:2451 src/elflint.c:2495 src/elflint.c:2532
+#: src/elflint.c:2455 src/elflint.c:2499 src/elflint.c:2536
#, c-format
msgid "hash section [%2zu] '%s' uses too much data\n"
msgstr "розділ хешу [%2zu] «%s» викориÑтовує надто багато даних\n"
-#: src/elflint.c:2466
+#: src/elflint.c:2470
#, c-format
msgid ""
"hash section [%2zu] '%s' invalid symbol index %<PRIu32> (max_nsyms: "
@@ -2474,17 +2472,17 @@ msgstr ""
"розділ хешу [%2zu] «%s» некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %<PRIu32> (макÑ. к-Ñ‚ÑŒ "
"Ñимволів: %<PRIu32>, кількіÑÑ‚ÑŒ запиÑів: %<PRIu32>\n"
-#: src/elflint.c:2553
+#: src/elflint.c:2557
#, c-format
msgid "hash section [%2zu] '%s' invalid sh_entsize\n"
msgstr "розділ хешу [%2zu] «%s» некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_entsize\n"
-#: src/elflint.c:2563 src/elflint.c:2567
+#: src/elflint.c:2567 src/elflint.c:2571
#, c-format
msgid "section [%2zu] '%s': reference to symbol index 0\n"
msgstr "розділ [%2zu] «%s»: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñ–Ð½Ð´ÐµÐºÑ Ñимволів 0\n"
-#: src/elflint.c:2574
+#: src/elflint.c:2578
#, c-format
msgid ""
"symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash "
@@ -2493,7 +2491,7 @@ msgstr ""
"виÑвлено поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол %d у новій таблиці хешів у [%2zu] «%s», але "
"його немає у Ñтарій таблиці хешів у [%2zu] «%s»\n"
-#: src/elflint.c:2586
+#: src/elflint.c:2590
#, c-format
msgid ""
"symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash "
@@ -2502,12 +2500,12 @@ msgstr ""
"виÑвлено поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол %d у Ñтарій таблиці хешів у [%2zu] «%s», але "
"його немає у новій таблиці хешів у [%2zu] «%s»\n"
-#: src/elflint.c:2602
+#: src/elflint.c:2606
#, c-format
msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
msgstr "розділ [%2d] «%s»: ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_%s Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ NULL\n"
-#: src/elflint.c:2622
+#: src/elflint.c:2626
#, c-format
msgid ""
"section [%2d] '%s': section groups only allowed in relocatable object files\n"
@@ -2515,95 +2513,95 @@ msgstr ""
"розділ [%2d] «%s»: групи розділів передбачено лише Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… до "
"переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… файлах\n"
-#: src/elflint.c:2633
+#: src/elflint.c:2637
#, c-format
msgid "section [%2d] '%s': cannot get symbol table: %s\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ таблицю Ñимволів: %s\n"
-#: src/elflint.c:2638
+#: src/elflint.c:2642
#, c-format
msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
msgstr ""
"розділ [%2d] «%s»: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ у sh_link не має таблиці Ñимволів\n"
-#: src/elflint.c:2644
+#: src/elflint.c:2648
#, c-format
msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
msgstr "розділ [%2d] «%s»: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу у sh_info\n"
-#: src/elflint.c:2649
+#: src/elflint.c:2653
#, c-format
msgid "section [%2d] '%s': sh_flags not zero\n"
msgstr "розділ [%2d] «%s»: sh_flags не є нульовим\n"
-#: src/elflint.c:2656
+#: src/elflint.c:2660
#, c-format
msgid "section [%2d] '%s': cannot get symbol for signature\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñу\n"
-#: src/elflint.c:2660
+#: src/elflint.c:2664
#, c-format
msgid "section [%2d] '%s': cannot get symbol name for signature\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ назву Ñимволу Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñу\n"
-#: src/elflint.c:2665
+#: src/elflint.c:2669
#, c-format
msgid "section [%2d] '%s': signature symbol cannot be empty string\n"
msgstr "розділ [%2d] «%s»: Ñимвол підпиÑу не може бути порожнім Ñ€Ñдком\n"
-#: src/elflint.c:2671
+#: src/elflint.c:2675
#, c-format
msgid "section [%2d] '%s': sh_flags not set correctly\n"
msgstr "розділ [%2d] «%s»: Ð´Ð»Ñ sh_flags вÑтановлено помилкове значеннÑ\n"
-#: src/elflint.c:2677
+#: src/elflint.c:2681
#, c-format
msgid "section [%2d] '%s': cannot get data: %s\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані: %s\n"
-#: src/elflint.c:2686
+#: src/elflint.c:2690
#, c-format
msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
msgstr "розділ [%2d] «%s»: розмір розділу не є кратним до sizeof(Elf32_Word)\n"
-#: src/elflint.c:2692
+#: src/elflint.c:2696
#, c-format
msgid "section [%2d] '%s': section group without flags word\n"
msgstr "розділ [%2d] «%s»: група розділів без Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ word прапорців\n"
-#: src/elflint.c:2700
+#: src/elflint.c:2704
#, c-format
msgid "section [%2d] '%s': section group without member\n"
msgstr "розділ [%2d] «%s»: група розділів без елементів\n"
-#: src/elflint.c:2704
+#: src/elflint.c:2708
#, c-format
msgid "section [%2d] '%s': section group with only one member\n"
msgstr "розділ [%2d] «%s»: група розділів, що міÑтить лише один елемент\n"
-#: src/elflint.c:2715
+#: src/elflint.c:2719
#, c-format
msgid "section [%2d] '%s': unknown section group flags\n"
msgstr "розділ [%2d] «%s»: невідомі прапорці групи розділів\n"
-#: src/elflint.c:2727
+#: src/elflint.c:2731
#, c-format
msgid "section [%2d] '%s': section index %zu out of range\n"
msgstr "розділ [%2d] «%s»: Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zu поза межами діапазону\n"
-#: src/elflint.c:2736
+#: src/elflint.c:2740
#, c-format
msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
msgstr ""
"розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу Ð´Ð»Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° %zu: "
"%s\n"
-#: src/elflint.c:2743
+#: src/elflint.c:2747
#, c-format
msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
msgstr "розділ [%2d] «%s»: група розділів міÑтить іншу групу [%2d] «%s»\n"
-#: src/elflint.c:2749
+#: src/elflint.c:2753
#, c-format
msgid ""
"section [%2d] '%s': element %zu references section [%2d] '%s' without "
@@ -2612,12 +2610,12 @@ msgstr ""
"розділ [%2d] «%s»: елемент %zu поÑилаєтьÑÑ Ð½Ð° розділ [%2d] «%s» без "
"вÑтановленого Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ SHF_GROUP\n"
-#: src/elflint.c:2756
+#: src/elflint.c:2760
#, c-format
msgid "section [%2d] '%s' is contained in more than one section group\n"
msgstr "розділ [%2d] «%s» міÑтитьÑÑ Ñƒ більше ніж одній групі розділів\n"
-#: src/elflint.c:2946
+#: src/elflint.c:2950
#, c-format
msgid ""
"section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no "
@@ -2626,7 +2624,7 @@ msgstr ""
"розділ [%2d] «%s» поÑилаєтьÑÑ Ñƒ sh_link на розділ [%2d] «%s», Ñкий не має "
"динамічної таблиці Ñимволів\n"
-#: src/elflint.c:2958
+#: src/elflint.c:2962
#, c-format
msgid ""
"section [%2d] '%s' has different number of entries than symbol table [%2d] "
@@ -2635,28 +2633,28 @@ msgstr ""
"кількіÑÑ‚ÑŒ запиÑів у розділі [%2d] «%s» відрізнÑєтьÑÑ Ð²Ñ–Ð´ кількоÑÑ‚Ñ– у таблиці "
"Ñимволів [%2d] «%s»\n"
-#: src/elflint.c:2974
+#: src/elflint.c:2978
#, c-format
msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
msgstr "розділ [%2d] «%s»: Ñимвол %d: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані щодо верÑÑ–Ñ—\n"
-#: src/elflint.c:2990
+#: src/elflint.c:2994
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
msgstr ""
"розділ [%2d] «%s»: Ñимвол %d: локальний Ñимвол у загальному контекÑÑ‚Ñ–\n"
-#: src/elflint.c:2998
+#: src/elflint.c:3002
#, c-format
msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
msgstr "розділ [%2d] «%s»: Ñимвол %d: локальний Ñимвол з верÑією\n"
-#: src/elflint.c:3012
+#: src/elflint.c:3016
#, c-format
msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
msgstr "розділ [%2d] «%s»: Ñимвол %d: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ð²ÐµÑ€ÑÑ–Ñ— %d\n"
-#: src/elflint.c:3017
+#: src/elflint.c:3021
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for defined version\n"
@@ -2664,7 +2662,7 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %d: індекÑи верÑÑ–Ñ— %d призначено до визначеної "
"верÑÑ–Ñ—\n"
-#: src/elflint.c:3027
+#: src/elflint.c:3031
#, c-format
msgid ""
"section [%2d] '%s': symbol %d: version index %d is for requested version\n"
@@ -2672,45 +2670,45 @@ msgstr ""
"розділ [%2d] «%s»: Ñимвол %d: Ñ–Ð½Ð´ÐµÐºÑ Ð²ÐµÑ€ÑÑ–Ñ— %d призначено Ð´Ð»Ñ Ð²ÐµÑ€ÑÑ–Ñ—, на Ñку "
"надійшов запит\n"
-#: src/elflint.c:3080
+#: src/elflint.c:3084
#, c-format
msgid "more than one version reference section present\n"
msgstr "виÑвлено більше за один розділ поÑилань на верÑÑ–Ñ—\n"
-#: src/elflint.c:3088 src/elflint.c:3235
+#: src/elflint.c:3092 src/elflint.c:3239
#, c-format
msgid "section [%2d] '%s': sh_link does not link to string table\n"
msgstr "розділ [%2d] «%s»: sh_link не поÑилаєтьÑÑ Ð½Ð° таблицю Ñ€Ñдків\n"
-#: src/elflint.c:3113 src/elflint.c:3289
+#: src/elflint.c:3117 src/elflint.c:3293
#, c-format
msgid "section [%2d] '%s': entry %d has wrong version %d\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d має помилкову верÑÑ–ÑŽ %d\n"
-#: src/elflint.c:3120 src/elflint.c:3296
+#: src/elflint.c:3124 src/elflint.c:3300
#, c-format
msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d міÑтить помилкове Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ допоміжних даних\n"
-#: src/elflint.c:3130
+#: src/elflint.c:3134
#, c-format
msgid "section [%2d] '%s': entry %d has invalid file reference\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d міÑтить некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° файл\n"
-#: src/elflint.c:3138
+#: src/elflint.c:3142
#, c-format
msgid "section [%2d] '%s': entry %d references unknown dependency\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d поÑилаєтьÑÑ Ð½Ð° невідому залежніÑÑ‚ÑŒ\n"
-#: src/elflint.c:3150
+#: src/elflint.c:3154
#, c-format
msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
msgstr ""
"розділ [%2d] «%s»: допоміжний Ð·Ð°Ð¿Ð¸Ñ %d запиÑу %d позначено невідомим "
"прапорцем\n"
-#: src/elflint.c:3158
+#: src/elflint.c:3162
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name "
@@ -2719,7 +2717,7 @@ msgstr ""
"розділ [%2d] «%s»: допоміжний Ð·Ð°Ð¿Ð¸Ñ %d запиÑу %d міÑтить некоректне "
"поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° назву\n"
-#: src/elflint.c:3167
+#: src/elflint.c:3171
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: "
@@ -2728,7 +2726,7 @@ msgstr ""
"розділ [%2d] «%s»: допоміжний Ð·Ð°Ð¿Ð¸Ñ %d запиÑу %d має помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
"хешу: %#x, мало бути %#x\n"
-#: src/elflint.c:3176
+#: src/elflint.c:3180
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version "
@@ -2737,7 +2735,7 @@ msgstr ""
"розділ [%2d] «%s»: допоміжний Ð·Ð°Ð¿Ð¸Ñ %d запиÑу %d міÑтить дублікати назви "
"верÑÑ–Ñ— «%s»\n"
-#: src/elflint.c:3187
+#: src/elflint.c:3191
#, c-format
msgid ""
"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
@@ -2745,13 +2743,13 @@ msgstr ""
"розділ [%2d] «%s»: допоміжний Ð·Ð°Ð¿Ð¸Ñ %d запиÑу %d має помилкове наÑтупне "
"поле\n"
-#: src/elflint.c:3204 src/elflint.c:3380
+#: src/elflint.c:3208 src/elflint.c:3384
#, c-format
msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d має некоректне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ наÑтупного запиÑу\n"
-#: src/elflint.c:3212 src/elflint.c:3388
+#: src/elflint.c:3216 src/elflint.c:3392
#, c-format
msgid ""
"section [%2d] '%s': entry %d has zero offset to next entry, but sh_info says "
@@ -2760,44 +2758,44 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d має нульове Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ наÑтупного запиÑу, але "
"за sh_info можна зрозуміти, що запиÑів більше\n"
-#: src/elflint.c:3227
+#: src/elflint.c:3231
#, c-format
msgid "more than one version definition section present\n"
msgstr "виÑвлено більше за один розділ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€Ñій\n"
-#: src/elflint.c:3274
+#: src/elflint.c:3278
#, c-format
msgid "section [%2d] '%s': more than one BASE definition\n"
msgstr "розділ [%2d] «%s»: повторне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BASE\n"
-#: src/elflint.c:3278
+#: src/elflint.c:3282
#, c-format
msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
msgstr ""
"розділ [%2d] «%s»: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BASE повинно мати Ñ–Ð½Ð´ÐµÐºÑ VER_NDX_GLOBAL\n"
-#: src/elflint.c:3284
+#: src/elflint.c:3288
#, c-format
msgid "section [%2d] '%s': entry %d has unknown flag\n"
msgstr "розділ [%2d] «%s»: невідомий прапорець запиÑу %d\n"
-#: src/elflint.c:3311
+#: src/elflint.c:3315
#, c-format
msgid "section [%2d] '%s': entry %d has invalid name reference\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d міÑтить некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° назву\n"
-#: src/elflint.c:3318
+#: src/elflint.c:3322
#, c-format
msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d має помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ…ÐµÑˆÑƒ: %#x, мало бути %#x\n"
-#: src/elflint.c:3326
+#: src/elflint.c:3330
#, c-format
msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
msgstr "розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d міÑтить дублікати назви верÑÑ–Ñ— «%s»\n"
-#: src/elflint.c:3346
+#: src/elflint.c:3350
#, c-format
msgid ""
"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
@@ -2805,53 +2803,53 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð°Ð¿Ð¸Ñ %d міÑтить некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° назву у "
"допоміжних даних\n"
-#: src/elflint.c:3363
+#: src/elflint.c:3367
#, c-format
msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
msgstr ""
"розділ [%2d] «%s»: у допоміжних даних запиÑу %d міÑтитьÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ поле "
"наÑтупного запиÑу\n"
-#: src/elflint.c:3396
+#: src/elflint.c:3400
#, c-format
msgid "section [%2d] '%s': no BASE definition\n"
msgstr "розділ [%2d] «%s»: немає Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BASE\n"
-#: src/elflint.c:3412
+#: src/elflint.c:3416
#, c-format
msgid "section [%2d] '%s': unknown parent version '%s'\n"
msgstr "розділ [%2d] «%s»: невідома оÑновна верÑÑ–Ñ Â«%s»\n"
-#: src/elflint.c:3425
+#: src/elflint.c:3429
#, c-format
msgid "section [%2d] '%s': empty object attributes section\n"
msgstr "розділ [%2d] «%s»: порожній розділ атрибутів об’єкта\n"
-#: src/elflint.c:3446
+#: src/elflint.c:3450
#, c-format
msgid "section [%2d] '%s': unrecognized attribute format\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ формат атрибутів\n"
-#: src/elflint.c:3462
+#: src/elflint.c:3466
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute section\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: поле нульового розміру у розділі атрибутів\n"
-#: src/elflint.c:3471
+#: src/elflint.c:3475
#, c-format
msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: некоректна довжина у розділі атрибутів\n"
-#: src/elflint.c:3483
+#: src/elflint.c:3487
#, c-format
msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершений Ñ€Ñдок назви поÑтачальника\n"
-#: src/elflint.c:3500
+#: src/elflint.c:3504
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
@@ -2859,12 +2857,12 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершене поле ULEB128 у тезі підрозділу "
"атрибутів\n"
-#: src/elflint.c:3509
+#: src/elflint.c:3513
#, c-format
msgid "section [%2d] '%s': offset %zu: truncated attribute section\n"
msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: обрізаний розділ атрибутів\n"
-#: src/elflint.c:3518
+#: src/elflint.c:3522
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
@@ -2872,7 +2870,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: поле нульового розміру у підрозділі "
"атрибутів\n"
-#: src/elflint.c:3533
+#: src/elflint.c:3537
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
@@ -2880,7 +2878,7 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: некоректна довжина у підрозділі атрибутів\n"
#. Tag_File
-#: src/elflint.c:3544
+#: src/elflint.c:3548
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
@@ -2888,35 +2886,35 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: підрозділ атрибутів міÑтить неочікуваний "
"теґ %u\n"
-#: src/elflint.c:3562
+#: src/elflint.c:3566
#, c-format
msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершене поле ULEB128 у тезі атрибуту\n"
-#: src/elflint.c:3573
+#: src/elflint.c:3577
#, c-format
msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n"
msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершений Ñ€Ñдок у атрибуті\n"
-#: src/elflint.c:3586
+#: src/elflint.c:3590
#, c-format
msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"
msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: незавершений теґ атрибуту %u\n"
-#: src/elflint.c:3590
+#: src/elflint.c:3594
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s атрибуту %<PRIu64>\n"
-#: src/elflint.c:3600
+#: src/elflint.c:3604
#, c-format
msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n"
msgstr "розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: невідомий поÑтачальник «%s»\n"
-#: src/elflint.c:3606
+#: src/elflint.c:3610
#, c-format
msgid ""
"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
@@ -2924,47 +2922,47 @@ msgstr ""
"розділ [%2d] «%s»: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %zu: зайві байти піÑÐ»Ñ Ð¾Ñтаннього розділу "
"атрибутів\n"
-#: src/elflint.c:3695
+#: src/elflint.c:3699
#, c-format
msgid "cannot get section header of zeroth section\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок нульового розділу\n"
-#: src/elflint.c:3699
+#: src/elflint.c:3703
#, c-format
msgid "zeroth section has nonzero name\n"
msgstr "нульовий розділ має ненульову назву\n"
-#: src/elflint.c:3701
+#: src/elflint.c:3705
#, c-format
msgid "zeroth section has nonzero type\n"
msgstr "нульовий розділ має ненульовий тип\n"
-#: src/elflint.c:3703
+#: src/elflint.c:3707
#, c-format
msgid "zeroth section has nonzero flags\n"
msgstr "нульовий розділ має ненульові прапорці\n"
-#: src/elflint.c:3705
+#: src/elflint.c:3709
#, c-format
msgid "zeroth section has nonzero address\n"
msgstr "нульовий розділ має ненульову адреÑу\n"
-#: src/elflint.c:3707
+#: src/elflint.c:3711
#, c-format
msgid "zeroth section has nonzero offset\n"
msgstr "нульовий розділ має ненульове зміщеннÑ\n"
-#: src/elflint.c:3709
+#: src/elflint.c:3713
#, c-format
msgid "zeroth section has nonzero align value\n"
msgstr "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ\n"
-#: src/elflint.c:3711
+#: src/elflint.c:3715
#, c-format
msgid "zeroth section has nonzero entry size value\n"
msgstr "нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ запиÑу\n"
-#: src/elflint.c:3714
+#: src/elflint.c:3718
#, c-format
msgid ""
"zeroth section has nonzero size value while ELF header has nonzero shnum "
@@ -2973,7 +2971,7 @@ msgstr ""
"нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ, хоча заголовок ELF ман "
"ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ shnum\n"
-#: src/elflint.c:3718
+#: src/elflint.c:3722
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
@@ -2982,7 +2980,7 @@ msgstr ""
"нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ, хоча у заголовку ELF "
"немає Ñигналу Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñƒ shstrndx\n"
-#: src/elflint.c:3722
+#: src/elflint.c:3726
#, c-format
msgid ""
"zeroth section has nonzero link value while ELF header does not signal "
@@ -2991,28 +2989,28 @@ msgstr ""
"нульовий розділ має ненульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ, хоча у заголовку ELF "
"немає Ñигналу Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñƒ phnum\n"
-#: src/elflint.c:3740
+#: src/elflint.c:3744
#, c-format
msgid "cannot get section header for section [%2zu] '%s': %s\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу [%2zu] «%s»: %s\n"
-#: src/elflint.c:3749
+#: src/elflint.c:3753
#, c-format
msgid "section [%2zu]: invalid name\n"
msgstr "розділ [%2zu]: некоректна назва\n"
-#: src/elflint.c:3776
+#: src/elflint.c:3780
#, c-format
msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n"
msgstr ""
"розділ [%2d] «%s» належить до помилкового типу: мав бути %s, маємо %s\n"
-#: src/elflint.c:3794
+#: src/elflint.c:3798
#, c-format
msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n"
msgstr "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, маємо %s\n"
-#: src/elflint.c:3812
+#: src/elflint.c:3816
#, c-format
msgid ""
"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
@@ -3020,12 +3018,12 @@ msgstr ""
"розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, можливо, %s, але "
"маємо %s\n"
-#: src/elflint.c:3830
+#: src/elflint.c:3834
#, c-format
msgid "section [%2zu] '%s' present in object file\n"
msgstr "у об’єктному файлі виÑвлено розділ [%2zu] «%s»\n"
-#: src/elflint.c:3836 src/elflint.c:3868
+#: src/elflint.c:3840 src/elflint.c:3872
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
@@ -3033,7 +3031,7 @@ msgstr ""
"у розділ [%2zu] «%s» вÑтановлено прапорець SHF_ALLOC, але немає придатного "
"до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмента\n"
-#: src/elflint.c:3841 src/elflint.c:3873
+#: src/elflint.c:3845 src/elflint.c:3877
#, c-format
msgid ""
"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable "
@@ -3042,7 +3040,7 @@ msgstr ""
"у розділі [%2zu] «%s» не вÑтановлено прапорець SHF_ALLOC, але Ñ” придатні до "
"Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегменти\n"
-#: src/elflint.c:3849
+#: src/elflint.c:3853
#, c-format
msgid ""
"section [%2zu] '%s' is extension section index table in non-object file\n"
@@ -3050,22 +3048,22 @@ msgstr ""
"розділ [%2zu] «%s» Ñ” таблицею-покажчиком розділу розширень у файлі, Ñкий не "
"є об’єктним\n"
-#: src/elflint.c:3892
+#: src/elflint.c:3896
#, c-format
msgid "section [%2zu] '%s': size not multiple of entry size\n"
msgstr "розділ [%2zu] «%s»: розмір не Ñ” кратним до розміру запиÑу\n"
-#: src/elflint.c:3897
+#: src/elflint.c:3901
#, c-format
msgid "cannot get section header\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу\n"
-#: src/elflint.c:3907
+#: src/elflint.c:3911
#, c-format
msgid "section [%2zu] '%s' has unsupported type %d\n"
msgstr "розділ [%2zu] «%s» належить до непідтримуваного типу %d\n"
-#: src/elflint.c:3922
+#: src/elflint.c:3931
#, c-format
msgid ""
"section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
@@ -3073,74 +3071,74 @@ msgstr ""
"розділ [%2zu] «%s» міÑтить некоректні Ñпецифічні Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора прапорці "
"%#<PRIx64>\n"
-#: src/elflint.c:3929
+#: src/elflint.c:3938
#, c-format
msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
msgstr "розділ [%2zu] «%s» міÑтить невідомі прапорці %#<PRIx64>\n"
-#: src/elflint.c:3937
+#: src/elflint.c:3946
#, c-format
msgid "section [%2zu] '%s': thread-local data sections address not zero\n"
msgstr ""
"розділ [%2zu] «%s»: адреÑа розділів локальних даних потоків не Ñ” нульовою\n"
-#: src/elflint.c:3947
-#, fuzzy, c-format
+#: src/elflint.c:3956
+#, c-format
msgid "section [%2zu] '%s': allocated section cannot be compressed\n"
msgstr ""
-"розділ [%2zu] «%s»: адреÑа розділів локальних даних потоків не Ñ” нульовою\n"
+"розділ [%2zu] «%s»: розміщений у пам'ÑÑ‚Ñ– розділ не може бути ÑтиÑнений\n"
-#: src/elflint.c:3952
-#, fuzzy, c-format
+#: src/elflint.c:3961
+#, c-format
msgid "section [%2zu] '%s': nobits section cannot be compressed\n"
-msgstr "розділ [%2d] «%s»: не виÑвлено розділу хешів\n"
+msgstr "розділ [%2zu] «%s»: розділ nobits не може бути ÑтиÑнений\n"
-#: src/elflint.c:3958
-#, fuzzy, c-format
+#: src/elflint.c:3967
+#, c-format
msgid ""
"section [%2zu] '%s': compressed section with no compression header: %s\n"
-msgstr "розділ [%2d] «%s»: група розділів, що міÑтить лише один елемент\n"
+msgstr "розділ [%2zu] «%s»: ÑтиÑнений розділ без заголовка ÑтиÑненнÑ: %s\n"
-#: src/elflint.c:3964
+#: src/elflint.c:3973
#, c-format
msgid "section [%2zu] '%s': invalid section reference in link value\n"
msgstr ""
"розділ [%2zu] «%s»: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ у значенні компонуваннÑ\n"
-#: src/elflint.c:3969
+#: src/elflint.c:3978
#, c-format
msgid "section [%2zu] '%s': invalid section reference in info value\n"
msgstr ""
"розділ [%2zu] «%s»: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° розділ у значенні відомоÑтей\n"
-#: src/elflint.c:3976
+#: src/elflint.c:3985
#, c-format
msgid "section [%2zu] '%s': strings flag set without merge flag\n"
msgstr "розділ [%2zu] «%s»: вÑтановлено прапорець strings без Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ merge\n"
-#: src/elflint.c:3981
+#: src/elflint.c:3990
#, c-format
msgid "section [%2zu] '%s': merge flag set but entry size is zero\n"
msgstr ""
"розділ [%2zu] «%s»: вÑтановлено прапорець merge, але розмір запиÑу Ñ” "
"нульовим\n"
-#: src/elflint.c:4000
+#: src/elflint.c:4009
#, c-format
msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n"
msgstr "розділ [%2zu] «%s» має неочікуваний тип %d Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ розділу\n"
-#: src/elflint.c:4009
-#, fuzzy, c-format
+#: src/elflint.c:4018
+#, c-format
msgid "section [%2zu] '%s' must be of type NOBITS in debuginfo files\n"
-msgstr "розділ [%2zu] «%s» не повинен бути придатним до запиÑу\n"
+msgstr "розділ [%2zu] «%s» у файлах debuginfo має належати до типу NOBITS\n"
-#: src/elflint.c:4016
+#: src/elflint.c:4025
#, c-format
msgid "section [%2zu] '%s' is both executable and writable\n"
msgstr "розділ [%2zu] «%s» Ñ” одночаÑно виконуваним Ñ– придатним до запиÑу\n"
-#: src/elflint.c:4047
+#: src/elflint.c:4056
#, c-format
msgid ""
"section [%2zu] '%s' not fully contained in segment of program header entry "
@@ -3149,7 +3147,7 @@ msgstr ""
"розділ [%2zu] «%s» не повніÑÑ‚ÑŽ міÑтитьÑÑ Ñƒ Ñегменті запиÑу заголовка "
"програми %d\n"
-#: src/elflint.c:4057
+#: src/elflint.c:4066
#, c-format
msgid ""
"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
@@ -3158,7 +3156,7 @@ msgstr ""
"розділ [%2zu] «%s» належить до типу NOBITS, але його Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ Ð· "
"файла у Ñегментів запиÑу заголовка програми %d\n"
-#: src/elflint.c:4083
+#: src/elflint.c:4092
#, c-format
msgid ""
"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
@@ -3167,7 +3165,7 @@ msgstr ""
"розділ [%2zu] «%s» належить до типу NOBITS, але його Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ Ð· "
"файла у Ñегментів запиÑу заголовка програми %d, а вміÑÑ‚ файла Ñ” ненульовим\n"
-#: src/elflint.c:4094
+#: src/elflint.c:4103
#, c-format
msgid ""
"section [%2zu] '%s' has not type NOBITS but is not read from the file in "
@@ -3176,19 +3174,19 @@ msgstr ""
"розділ [%2zu] «%s» не належить до типу NOBITS, але його Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ "
"виконуєтьÑÑ Ð· файла у Ñегментів запиÑу заголовка програми %d\n"
-#: src/elflint.c:4105
+#: src/elflint.c:4114
#, c-format
msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n"
msgstr "розділ [%2zu] «%s» Ñ” виконуваним у невиконуваному Ñегменті %d\n"
-#: src/elflint.c:4115
+#: src/elflint.c:4124
#, c-format
msgid "section [%2zu] '%s' is writable in unwritable segment %d\n"
msgstr ""
"розділ [%2zu] «%s» Ñ” придатним до запиÑу у непридатному до запиÑу Ñегменті "
"%d\n"
-#: src/elflint.c:4125
+#: src/elflint.c:4134
#, c-format
msgid ""
"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
@@ -3196,7 +3194,7 @@ msgstr ""
"розділ [%2zu] «%s»: вÑтановлено прапорець alloc, але розділ не перебуває у "
"жодному завантаженому Ñегменті\n"
-#: src/elflint.c:4131
+#: src/elflint.c:4140
#, c-format
msgid ""
"section [%2zu] '%s': ELF header says this is the section header string table "
@@ -3205,7 +3203,7 @@ msgstr ""
"розділ [%2zu] «%s»: заголовок ELF повідомлÑÑ” про те, що це Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків "
"заголовка розділу, але Ñ†Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ðµ належить до типу SHT_TYPE\n"
-#: src/elflint.c:4139
+#: src/elflint.c:4148
#, c-format
msgid ""
"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
@@ -3213,17 +3211,17 @@ msgstr ""
"розділ [%2zu] «%s»: придатні до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¸ не можуть міÑтити "
"динамічних таблиць Ñимволів\n"
-#: src/elflint.c:4190
+#: src/elflint.c:4199
#, c-format
msgid "more than one version symbol table present\n"
msgstr "виÑвлено більше за одну таблицю Ñимволів верÑій\n"
-#: src/elflint.c:4213
+#: src/elflint.c:4222
#, c-format
msgid "INTERP program header entry but no .interp section\n"
msgstr "Ñ–Ñнує Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми INTERP, але не розділ .interp\n"
-#: src/elflint.c:4224
+#: src/elflint.c:4233
#, c-format
msgid ""
"loadable segment [%u] is executable but contains no executable sections\n"
@@ -3231,14 +3229,14 @@ msgstr ""
"придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмент [%u] Ñ” виконуваним, але не міÑтить "
"виконуваних розділів\n"
-#: src/elflint.c:4230
+#: src/elflint.c:4239
#, c-format
msgid "loadable segment [%u] is writable but contains no writable sections\n"
msgstr ""
"придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð» [%u] Ñ” придатним до запиÑу, але не міÑтить "
"придатних до запиÑу розділів\n"
-#: src/elflint.c:4241
+#: src/elflint.c:4250
#, c-format
msgid ""
"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section "
@@ -3247,24 +3245,24 @@ msgstr ""
"немає розділу .gnu.versym, хоча Ñ–Ñнує розділ .gnu.versym_d або .gnu."
"versym_r\n"
-#: src/elflint.c:4254
+#: src/elflint.c:4263
#, c-format
msgid "duplicate version index %d\n"
msgstr "дублікат індекÑу верÑÑ–Ñ— %d\n"
-#: src/elflint.c:4268
+#: src/elflint.c:4277
#, 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:4317
+#: src/elflint.c:4326
#, 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:4321
+#: src/elflint.c:4330
#, c-format
msgid ""
"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %zu\n"
@@ -3272,56 +3270,57 @@ msgstr ""
"розділ [%2d] «%s»: невідомий тип нотатки файла core %<PRIu32> за зміщеннÑм "
"%zu\n"
-#: src/elflint.c:4370
-#, fuzzy, c-format
+#: src/elflint.c:4379
+#, c-format
msgid ""
"phdr[%d]: unknown object file note type %<PRIu32> with owner name '%s' at "
"offset %zu\n"
msgstr ""
-"phdr[%d]: невідомий тип нотатки об’єктного файла %<PRIu32> за зміщеннÑм %zu\n"
+"phdr[%d]: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із іменем "
+"влаÑника «%s» за зміщеннÑм %zu\n"
-#: src/elflint.c:4375
-#, fuzzy, c-format
+#: src/elflint.c:4384
+#, c-format
msgid ""
"section [%2d] '%s': unknown object file note type %<PRIu32> with owner name "
"'%s' at offset %zu\n"
msgstr ""
-"розділ [%2d] «%s»: невідомий тип нотатки об’єктного файла %<PRIu32> за "
-"зміщеннÑм %zu\n"
+"розділ [%2d] «%s»: невідомий тип нотатки у файлі об'єктів, %<PRIu32>, із "
+"іменем влаÑника «%s» за зміщеннÑм %zu\n"
-#: src/elflint.c:4394
+#: src/elflint.c:4403
#, c-format
msgid "phdr[%d]: no note entries defined for the type of file\n"
msgstr "phdr[%d]: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n"
-#: src/elflint.c:4414
+#: src/elflint.c:4423
#, c-format
msgid "phdr[%d]: cannot get content of note section: %s\n"
msgstr "phdr[%d]: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток: %s\n"
-#: src/elflint.c:4417
+#: src/elflint.c:4426
#, c-format
msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
msgstr "phdr[%d]: зайві %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтаннього запиÑу нотатки\n"
-#: src/elflint.c:4438
+#: src/elflint.c:4447
#, c-format
msgid "section [%2d] '%s': no note entries defined for the type of file\n"
msgstr ""
"розділ [%2d] «%s»: Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів не визначено запиÑів нотаток\n"
-#: src/elflint.c:4445
+#: src/elflint.c:4454
#, c-format
msgid "section [%2d] '%s': cannot get content of note section\n"
msgstr "розділ [%2d] «%s»: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу нотаток\n"
-#: src/elflint.c:4448
+#: src/elflint.c:4457
#, c-format
msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
msgstr ""
"розділ [%2d] «%s»: додаткові %<PRIu64> байтів піÑÐ»Ñ Ð¾Ñтанньої нотатки\n"
-#: src/elflint.c:4466
+#: src/elflint.c:4475
#, c-format
msgid ""
"only executables, shared objects, and core files can have program headers\n"
@@ -3329,141 +3328,143 @@ msgstr ""
"заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів "
"Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ файлів core\n"
-#: src/elflint.c:4481
+#: src/elflint.c:4490
#, c-format
msgid "cannot get program header entry %d: %s\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: %s\n"
-#: src/elflint.c:4490
+#: src/elflint.c:4500
#, c-format
msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
msgstr ""
"Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: невідомий тип запиÑу заголовка програми "
"%#<PRIx64>\n"
-#: src/elflint.c:4501
+#: src/elflint.c:4511
#, c-format
msgid "more than one INTERP entry in program header\n"
msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ INTERP у заголовку програми\n"
-#: src/elflint.c:4509
+#: src/elflint.c:4519
#, c-format
msgid "more than one TLS entry in program header\n"
msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ TLS у заголовку програми\n"
-#: src/elflint.c:4516
+#: src/elflint.c:4526
#, c-format
msgid "static executable cannot have dynamic sections\n"
msgstr "у Ñтатичному виконуваному файлі не може бути динамічних розділів\n"
-#: src/elflint.c:4530
+#: src/elflint.c:4540
#, c-format
msgid "dynamic section reference in program header has wrong offset\n"
msgstr ""
"поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° динамічний розділ у заголовку програми має помилкове зміщеннÑ\n"
-#: src/elflint.c:4533
+#: src/elflint.c:4543
#, c-format
msgid "dynamic section size mismatch in program and section header\n"
msgstr ""
"розміри динамічного розділу у заголовку програми та у заголовку розділу не "
"збігаютьÑÑ\n"
-#: src/elflint.c:4543
+#: src/elflint.c:4553
#, c-format
msgid "more than one GNU_RELRO entry in program header\n"
msgstr "більше за один Ð·Ð°Ð¿Ð¸Ñ GNU_RELRO у заголовку програми\n"
-#: src/elflint.c:4564
+#: src/elflint.c:4574
#, c-format
msgid "loadable segment GNU_RELRO applies to is not writable\n"
msgstr ""
"придатний до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмент, до Ñкого звертаєтьÑÑ GNU_RELRO, "
"непридатний до запиÑу\n"
-#: src/elflint.c:4575
+#: src/elflint.c:4585
#, c-format
msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
msgstr ""
"прапорці придатного до Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñегмента [%u] не відповідають прапорцÑм "
"GNU_RELRO [%u]\n"
-#: src/elflint.c:4582
+#: src/elflint.c:4592
#, c-format
msgid ""
"GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n"
msgstr ""
+"прапорці GNU_RELRO [%u] не Ñ” підмножиною прапорців завантажуваного Ñегмента "
+"[%u]\n"
-#: src/elflint.c:4591 src/elflint.c:4614
+#: src/elflint.c:4601 src/elflint.c:4624
#, c-format
msgid "%s segment not contained in a loaded segment\n"
msgstr "Ñегмент %s не міÑтитьÑÑ Ñƒ завантаженому Ñегменті\n"
-#: src/elflint.c:4620
+#: src/elflint.c:4630
#, c-format
msgid "program header offset in ELF header and PHDR entry do not match"
msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми у заголовку ELF Ñ– Ð·Ð°Ð¿Ð¸Ñ PHDR не збігаютьÑÑ"
-#: src/elflint.c:4647
+#: src/elflint.c:4657
#, c-format
msgid "call frame search table reference in program header has wrong offset\n"
msgstr ""
"поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° таблицю вікон викликів у заголовку програми має помилкове "
"зміщеннÑ\n"
-#: src/elflint.c:4650
+#: src/elflint.c:4660
#, c-format
msgid "call frame search table size mismatch in program and section header\n"
msgstr ""
"розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку "
"розділу не збігаютьÑÑ\n"
-#: src/elflint.c:4663
+#: src/elflint.c:4673
#, 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:4671
+#: src/elflint.c:4681
#, c-format
msgid "call frame search table must be allocated\n"
msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’ÑÑ‚Ñ–\n"
-#: src/elflint.c:4674
+#: src/elflint.c:4684
#, c-format
msgid "section [%2zu] '%s' must be allocated\n"
msgstr "розділ [%2zu] «%s» має бути розміщено у пам’ÑÑ‚Ñ–\n"
-#: src/elflint.c:4678
+#: src/elflint.c:4688
#, c-format
msgid "call frame search table must not be writable\n"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до запиÑу\n"
-#: src/elflint.c:4681
+#: src/elflint.c:4691
#, c-format
msgid "section [%2zu] '%s' must not be writable\n"
msgstr "розділ [%2zu] «%s» не повинен бути придатним до запиÑу\n"
-#: src/elflint.c:4686
+#: src/elflint.c:4696
#, c-format
msgid "call frame search table must not be executable\n"
msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ вікон викликів не повинна бути придатною до виконаннÑ\n"
-#: src/elflint.c:4689
+#: src/elflint.c:4699
#, c-format
msgid "section [%2zu] '%s' must not be executable\n"
msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконаннÑ\n"
-#: src/elflint.c:4700
+#: src/elflint.c:4710
#, c-format
msgid "program header entry %d: file size greater than memory size\n"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: розмір файла перевищує об’єм пам’ÑÑ‚Ñ–\n"
-#: src/elflint.c:4707
+#: src/elflint.c:4717
#, c-format
msgid "program header entry %d: alignment not a power of 2\n"
msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” Ñтепенем 2\n"
-#: src/elflint.c:4710
+#: src/elflint.c:4720
#, c-format
msgid ""
"program header entry %d: file offset and virtual address not module of "
@@ -3472,7 +3473,7 @@ msgstr ""
"Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° програми %d: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñƒ файлі Ñ– віртуальна адреÑа не "
"ÑпіввідноÑÑÑ‚ÑŒÑÑ Ð· вирівнюваннÑм\n"
-#: src/elflint.c:4723
+#: src/elflint.c:4733
#, c-format
msgid ""
"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME "
@@ -3481,12 +3482,17 @@ msgstr ""
"виконуваний модуль/DSO з розділом .eh_frame_hdr не міÑтить запиÑу заголовка "
"програми PT_GNU_EH_FRAME"
-#: src/elflint.c:4757
+#: src/elflint.c:4767
#, c-format
msgid "cannot read ELF header: %s\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок ELF: %s\n"
-#: src/elflint.c:4783
+#: src/elflint.c:4779
+#, fuzzy, c-format
+msgid "cannot create backend for ELF file\n"
+msgstr "не вдалоÑÑ Ñтворити файл"
+
+#: src/elflint.c:4800
#, c-format
msgid "text relocation flag set but not needed\n"
msgstr ""
@@ -3747,12 +3753,12 @@ msgstr "%s%s%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла
msgid "cannot create search tree"
msgstr "не вдалоÑÑ Ñтворити дерево пошуку"
-#: src/nm.c:746 src/nm.c:1205 src/objdump.c:779 src/readelf.c:635
+#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:635
#: src/readelf.c:1447 src/readelf.c:1598 src/readelf.c:1799 src/readelf.c:2005
#: src/readelf.c:2195 src/readelf.c:2373 src/readelf.c:2449 src/readelf.c:2707
#: src/readelf.c:2783 src/readelf.c:2870 src/readelf.c:3468 src/readelf.c:3518
-#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12415
-#: src/readelf.c:12626 src/readelf.c:12695 src/size.c:398 src/size.c:470
+#: src/readelf.c:3581 src/readelf.c:11230 src/readelf.c:12420
+#: src/readelf.c:12631 src/readelf.c:12700 src/size.c:398 src/size.c:470
#: src/strip.c:1038
#, c-format
msgid "cannot get section header string table index"
@@ -3782,28 +3788,28 @@ msgstr ""
"%*s%-*s %-*s ÐšÐ»Ð°Ñ Ð¢Ð¸Ð¿ %-*s %*s Розділ\n"
"\n"
-#: src/nm.c:1216
+#: src/nm.c:1250
#, c-format
msgid "%s: entry size in section %zd `%s' is not what we expect"
msgstr "%s: розмір запиÑу у розділі %zd «%s» не Ñ” очікуваним"
-#: src/nm.c:1221
+#: src/nm.c:1255
#, c-format
msgid "%s: size of section %zd `%s' is not multiple of entry size"
msgstr "%s: розмір розділу %zd «%s» не Ñ” кратним до розміру запиÑу"
-#: src/nm.c:1300
-#, fuzzy, c-format
+#: src/nm.c:1334
+#, c-format
msgid "%s: entries (%zd) in section %zd `%s' is too large"
-msgstr "%s: розмір запиÑу у розділі %zd «%s» не Ñ” очікуваним"
+msgstr "%s: запиÑи (%zd) у розділі %zd, «%s» Ñ” завеликим"
#. XXX Add machine specific object file types.
-#: src/nm.c:1527
+#: src/nm.c:1570
#, c-format
msgid "%s%s%s%s: Invalid operation"
msgstr "%s%s%s%s: некоректна діÑ"
-#: src/nm.c:1584
+#: src/nm.c:1620
#, c-format
msgid "%s%s%s: no symbols"
msgstr "%s%s%s: немає Ñимволів"
@@ -3879,6 +3885,11 @@ msgstr "ВміÑÑ‚ розділу %s:\n"
msgid "cannot disassemble"
msgstr "не вдалоÑÑ Ð´Ð¸Ð·Ð°Ñемблювати"
+#: src/objdump.c:760
+#, fuzzy, c-format
+msgid "cannot create backend for elf file"
+msgstr "не вдалоÑÑ Ñтворити файл"
+
#. Short description of program.
#: src/ranlib.c:63
msgid "Generate an index to speed access to archives."
@@ -3920,6 +3931,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 ""
+"ВикориÑтовуєтьÑÑ Ð· -w Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ оÑнови компільованих модулів у ФÐЙЛі, "
+"пов'Ñзаному із модулÑми розділеної компілÑції у вхідному файлі .dwo"
#: src/readelf.c:104
msgid "ELF output selection:"
@@ -3950,23 +3963,20 @@ msgid "Display relocations"
msgstr "Показувати переÑуваннÑ"
#: src/readelf.c:114
-#, fuzzy
msgid "Display the section groups"
-msgstr "Показувати заголовки розділів"
+msgstr "Показувати групи розділів"
#: src/readelf.c:115
msgid "Display the sections' headers"
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"
@@ -3989,15 +3999,14 @@ msgid "Additional output selection:"
msgstr "Додатковий вибір виводу:"
#: 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 ""
-"Показати вміÑÑ‚ розділу DWARF. ЗначеннÑм РОЗДІЛ може бути abbrev, aranges, "
-"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, "
-"pubnames, str, macinfo, macro або exception"
+"Показати вміÑÑ‚ розділу DWARF. ЗначеннÑм РОЗДІЛ може бути abbrev, addr, "
+"aranges, decodedaranges, frame, gdb_index, info, info+, loc, line, "
+"decodedline, ranges, pubnames, str, macinfo, macro або exception"
#: src/readelf.c:134
msgid "Dump the uninterpreted contents of SECTION, by number or name"
@@ -4035,6 +4044,8 @@ msgid ""
"Show compression information for compressed sections (when used with -S); "
"decompress section before dumping data (when used with -p or -x)"
msgstr ""
+"Показати дані щодо ÑтиÑÐºÐ°Ð½Ð½Ñ Ð´Ð»Ñ ÑтиÑнених розділів (Ñкщо викориÑтано з -S); "
+"розпакувати розділ до ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ даних (Ñкщо викориÑтано з -p або -x)"
#. Short description of program.
#: src/readelf.c:154
@@ -4070,7 +4081,7 @@ msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділі
msgid "cannot get section: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s"
-#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12646
+#: src/readelf.c:653 src/readelf.c:1270 src/readelf.c:1479 src/readelf.c:12651
#: src/unstrip.c:395 src/unstrip.c:426 src/unstrip.c:485 src/unstrip.c:604
#: src/unstrip.c:625 src/unstrip.c:665 src/unstrip.c:881 src/unstrip.c:1212
#: src/unstrip.c:1339 src/unstrip.c:1363 src/unstrip.c:1419 src/unstrip.c:1483
@@ -4151,9 +4162,9 @@ msgid "cannot determine number of program headers: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ заголовків програми: %s"
#: src/readelf.c:991
-#, fuzzy, c-format
+#, c-format
msgid "cannot read ELF: %s"
-msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s: %s"
+msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ ELF: %s"
#: src/readelf.c:1052
msgid "NONE (None)"
@@ -4237,9 +4248,9 @@ msgid " Machine: %s\n"
msgstr " Ðрхітектура: %s\n"
#: src/readelf.c:1107
-#, fuzzy, c-format
+#, c-format
msgid " Machine: <unknown>: 0x%x\n"
-msgstr " Ðрхітектура: %s\n"
+msgstr " Ðрхітектура: <невідома>: 0x%x\n"
#: src/readelf.c:1110
#, c-format
@@ -4338,23 +4349,23 @@ msgstr ""
"\n"
#: src/readelf.c:1228 src/readelf.c:1436
-#, fuzzy, c-format
+#, c-format
msgid "cannot get number of sections: %s"
-msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ розділів: %s"
#: src/readelf.c:1231
-#, fuzzy, c-format
+#, c-format
msgid ""
"There are %zd section headers, starting at offset %#<PRIx64>:\n"
"\n"
msgstr ""
-"ВиÑвлено %d заголовків розділів, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ — %#<PRIx64>:\n"
+"ВиÑвлено %zd заголовків розділів, Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ — %#<PRIx64>:\n"
"\n"
#: src/readelf.c:1240
-#, fuzzy, c-format
+#, c-format
msgid "cannot get section header string table index: %s"
-msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків"
+msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° розділу у таблиці Ñ€Ñдків: %s"
#: src/readelf.c:1243
msgid "Section Headers:"
@@ -4378,21 +4389,21 @@ msgstr ""
#: src/readelf.c:1253
msgid " [Compression Size Al]"
-msgstr ""
+msgstr " [СтиÑÐºÐ°Ð½Ð½Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðл]"
#: src/readelf.c:1255
msgid " [Compression Size Al]"
-msgstr ""
+msgstr " [СтиÑÐºÐ°Ð½Ð½Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðл]"
#: src/readelf.c:1331
-#, fuzzy, c-format
+#, c-format
msgid "bad compression header for section %zd: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу %zu: %s"
+msgstr "помилковий заголовок ÑтиÑÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zd: %s"
#: src/readelf.c:1342
-#, fuzzy, c-format
+#, c-format
msgid "bad gnu compressed size for section %zd: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d: %s"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑтиÑненого розміру gnu Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %zd: %s"
#: src/readelf.c:1360
msgid "Program Headers:"
@@ -4476,15 +4487,15 @@ msgstr "<ÐЕКОРЕКТÐИЙ СИМВОЛ>"
msgid "<INVALID SECTION>"
msgstr "<ÐЕКОРЕКТÐИЙ РОЗДІЛ>"
-#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12517
-#: src/readelf.c:12524 src/readelf.c:12568 src/readelf.c:12575
+#: src/readelf.c:1656 src/readelf.c:2383 src/readelf.c:3484 src/readelf.c:12522
+#: src/readelf.c:12529 src/readelf.c:12573 src/readelf.c:12580
msgid "Couldn't uncompress section"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ розділ"
#: src/readelf.c:1661 src/readelf.c:2388 src/readelf.c:3489
-#, fuzzy, c-format
+#, c-format
msgid "cannot get section [%zd] header: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу [%zd]: %s"
#: src/readelf.c:1805 src/readelf.c:2455 src/readelf.c:2713 src/readelf.c:2789
#: src/readelf.c:3093 src/readelf.c:3167 src/readelf.c:5364
@@ -4836,9 +4847,9 @@ msgid "invalid data in sysv.hash section %d"
msgstr "некоректні дані у розділі sysv.hash %d"
#: src/readelf.c:3271
-#, fuzzy, c-format
+#, c-format
msgid "invalid chain in sysv.hash section %d"
-msgstr "некоректні дані у розділі sysv.hash %d"
+msgstr "некоректний ланцюжок у розділі sysv.hash %d"
#: src/readelf.c:3306
#, c-format
@@ -4846,9 +4857,9 @@ msgid "invalid data in sysv.hash64 section %d"
msgstr "некоректні дані у розділі sysv.hash64 %d"
#: src/readelf.c:3337
-#, fuzzy, c-format
+#, c-format
msgid "invalid chain in sysv.hash64 section %d"
-msgstr "некоректні дані у розділі sysv.hash64 %d"
+msgstr "некоректний ланцюжок у розділі sysv.hash64 %d"
#: src/readelf.c:3373
#, c-format
@@ -4952,9 +4963,9 @@ msgid " %u: %s\n"
msgstr " %u: %s\n"
#: src/readelf.c:3823
-#, fuzzy, c-format
+#, c-format
msgid "sprintf failure"
-msgstr "помилка mprotect"
+msgstr "помилка sprintf"
#: src/readelf.c:4305
msgid "empty block"
@@ -4966,9 +4977,9 @@ msgid "%zu byte block:"
msgstr "%zu-байтовий блок:"
#: src/readelf.c:4786
-#, fuzzy, c-format
+#, c-format
msgid "%*s[%2<PRIuMAX>] %s <TRUNCATED>\n"
-msgstr "%*s[%4<PRIuMAX>] %s <ОБРІЗÐÐО>\n"
+msgstr "%*s[%2<PRIuMAX>] %s <ОБРІЗÐÐО>\n"
#: src/readelf.c:4850
#, c-format
@@ -4986,9 +4997,9 @@ msgid "%s %#<PRIx64> used with different base addresses"
msgstr "%s %#<PRIx64> викориÑтано з різними базовими адреÑами"
#: src/readelf.c:4871
-#, fuzzy, c-format
+#, c-format
msgid "%s %#<PRIx64> used with different attribute %s and %s"
-msgstr "%s %#<PRIx64> викориÑтано з різними розмірами адреÑ"
+msgstr "%s %#<PRIx64> викориÑтано з різними атрибутами, %s Ñ– %s"
#: src/readelf.c:4968
#, c-format
@@ -5043,38 +5054,36 @@ msgstr ""
"Розділ DWARF [%2zu] «%s» зі зміщеннÑм %#<PRIx64>:\n"
#: src/readelf.c:5137
-#, fuzzy, c-format
+#, c-format
msgid "cannot get .debug_addr section data: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_addr: %s"
#: src/readelf.c:5237 src/readelf.c:5261 src/readelf.c:5645 src/readelf.c:9054
-#, fuzzy, c-format
+#, c-format
msgid " Length: %8<PRIu64>\n"
-msgstr ""
-"\n"
-" Довжина: %6<PRIu64>\n"
+msgstr " Довжина: %8<PRIu64>\n"
#: src/readelf.c:5239 src/readelf.c:5276 src/readelf.c:5658 src/readelf.c:9067
-#, fuzzy, c-format
+#, c-format
msgid " DWARF version: %8<PRIu16>\n"
-msgstr " верÑÑ–Ñ DWARF: %6<PRIuFAST16>\n"
+msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n"
#: src/readelf.c:5240 src/readelf.c:5285 src/readelf.c:5667 src/readelf.c:9076
-#, fuzzy, c-format
+#, c-format
msgid " Address size: %8<PRIu64>\n"
-msgstr " Розмір адреÑи: %6<PRIu64>\n"
+msgstr " Розмір адреÑи: %8<PRIu64>\n"
#: src/readelf.c:5242 src/readelf.c:5295 src/readelf.c:5677 src/readelf.c:9086
-#, fuzzy, c-format
+#, c-format
msgid " Segment size: %8<PRIu64>\n"
msgstr ""
-" Розмір Ñегмента: %6<PRIu64>\n"
+" Розмір Ñегмента: %8<PRIu64>\n"
"\n"
#: src/readelf.c:5280 src/readelf.c:5662 src/readelf.c:9071 src/readelf.c:10435
-#, fuzzy, c-format
+#, c-format
msgid "Unknown version"
-msgstr "невідома верÑÑ–Ñ"
+msgstr "Ðевідома верÑÑ–Ñ"
#: src/readelf.c:5290 src/readelf.c:5503 src/readelf.c:5672 src/readelf.c:9081
#, c-format
@@ -5181,58 +5190,62 @@ msgid " %zu padding bytes\n"
msgstr " %zu байтів доповненнÑ\n"
#: src/readelf.c:5609
-#, fuzzy, c-format
+#, c-format
msgid "cannot get .debug_rnglists content: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані .debug_ranges: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_rnglists: %s"
#: src/readelf.c:5632 src/readelf.c:9041
-#, fuzzy, c-format
+#, c-format
msgid ""
"Table at Offset 0x%<PRIx64>:\n"
"\n"
-msgstr " Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ .debug_line: 0x%<PRIx64>\n"
+msgstr ""
+"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð° зміщеннÑм 0x%<PRIx64>:\n"
+"\n"
#: src/readelf.c:5687 src/readelf.c:9096
-#, fuzzy, c-format
+#, c-format
msgid " Offset entries: %8<PRIu64>\n"
-msgstr " Довжина зміщеннÑ: %<PRIu8>\n"
+msgstr " ЗапиÑи зміщеннÑ: %8<PRIu64>\n"
#: src/readelf.c:5703 src/readelf.c:9112
#, c-format
msgid " Unknown CU base: "
-msgstr ""
+msgstr " Ðевідома оÑнова CU: "
#: src/readelf.c:5705 src/readelf.c:9114
#, c-format
msgid " CU [%6<PRIx64>] base: "
-msgstr ""
+msgstr " ОÑнова CU [%6<PRIx64>]: "
#: src/readelf.c:5711 src/readelf.c:9120
#, c-format
msgid " Not associated with a CU.\n"
-msgstr ""
+msgstr " Ðе пов'Ñзано із CU.\n"
#: src/readelf.c:5722 src/readelf.c:9131
#, c-format
msgid "too many offset entries for unit length"
-msgstr ""
+msgstr "забагато запиÑів зÑуву Ð´Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ модулÑ"
#: src/readelf.c:5726 src/readelf.c:9135
-#, fuzzy, c-format
+#, c-format
msgid " Offsets starting at 0x%<PRIx64>:\n"
-msgstr " ЗміщеннÑ: 0x%<PRIx64>\n"
+msgstr " ЗміщеннÑ, що починаютьÑÑ Ð· 0x%<PRIx64>:\n"
#: src/readelf.c:5778
-#, fuzzy, c-format
+#, c-format
msgid "invalid range list data"
-msgstr "некоректні дані"
+msgstr "некоректні дані ÑпиÑку діапазонів"
#: src/readelf.c:5963 src/readelf.c:9423
-#, fuzzy, c-format
+#, c-format
msgid ""
" %zu padding bytes\n"
"\n"
-msgstr " %zu байтів доповненнÑ\n"
+msgstr ""
+" %zu байтів доповненнÑ\n"
+"\n"
#: src/readelf.c:5980
#, c-format
@@ -5245,6 +5258,8 @@ msgid ""
"\n"
" Unknown CU base: "
msgstr ""
+"\n"
+" Ðевідома оÑнова CU: "
#: src/readelf.c:6018 src/readelf.c:9480
#, c-format
@@ -5252,6 +5267,8 @@ msgid ""
"\n"
" CU [%6<PRIx64>] base: "
msgstr ""
+"\n"
+" ОÑнова CU [%6<PRIx64>]: "
#: src/readelf.c:6027 src/readelf.c:9506 src/readelf.c:9532
#, c-format
@@ -5259,16 +5276,18 @@ msgid " [%6tx] <INVALID DATA>\n"
msgstr " [%6tx] <ÐЕКОРЕКТÐІ ДÐÐІ>\n"
#: src/readelf.c:6048 src/readelf.c:9612
-#, fuzzy, c-format
+#, c-format
msgid ""
" [%6tx] base address\n"
" "
-msgstr " [%6tx] базова адреÑа %s\n"
+msgstr ""
+" [%6tx] базова адреÑа\n"
+" "
#: src/readelf.c:6056 src/readelf.c:9620
-#, fuzzy, c-format
+#, c-format
msgid " [%6tx] empty list\n"
-msgstr " [%6tx] порожній ÑпиÑок\n"
+msgstr " [%6tx] порожній ÑпиÑок\n"
#: src/readelf.c:6311
msgid " <INVALID DATA>\n"
@@ -5326,34 +5345,34 @@ msgid " %-26sLSDA pointer: %#<PRIx64>\n"
msgstr " %-26sвказівник LSDA: %#<PRIx64>\n"
#: src/readelf.c:6993
-#, fuzzy, c-format
+#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute code: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ код атрибута: %s"
+msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ код атрибута: %s"
#: src/readelf.c:7003
-#, fuzzy, c-format
+#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute form: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ форму атрибута: %s"
+msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ форму атрибута: %s"
#: src/readelf.c:7025
-#, fuzzy, c-format
+#, c-format
msgid "DIE [%<PRIx64>] cannot get attribute '%s' (%s) value: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°: %s"
+msgstr "DIE [%<PRIx64>] не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° «%s» (%s): %s"
#: src/readelf.c:7355
-#, fuzzy, c-format
+#, c-format
msgid "invalid file (%<PRId64>): %s"
-msgstr "некоректний файл"
+msgstr "некоректний файл (%<PRId64>): %s"
#: src/readelf.c:7359
-#, fuzzy, c-format
+#, c-format
msgid "no srcfiles for CU [%<PRIx64>]"
-msgstr " вÑтановити файл у %<PRIu64>\n"
+msgstr "немає srcfiles Ð´Ð»Ñ CU [%<PRIx64>]"
#: src/readelf.c:7363
-#, fuzzy, c-format
+#, c-format
msgid "couldn't get DWARF CU: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ELF: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ CU DWARF: %s"
#: src/readelf.c:7676
#, c-format
@@ -5367,12 +5386,12 @@ msgstr ""
" [ЗміщеннÑ]\n"
#: src/readelf.c:7726
-#, fuzzy, c-format
+#, c-format
msgid "cannot get next unit: %s"
-msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ наÑтупний модуль: %s"
#: src/readelf.c:7745
-#, fuzzy, c-format
+#, c-format
msgid ""
" Type unit at offset %<PRIu64>:\n"
" Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: "
@@ -5380,9 +5399,9 @@ msgid ""
" Type signature: %#<PRIx64>, Type offset: %#<PRIx64> [%<PRIx64>]\n"
msgstr ""
" Модуль типів за зміщеннÑм %<PRIu64>:\n"
-" ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, "
-"ЗміщеннÑ: %<PRIu8>\n"
-" ÐŸÑ–Ð´Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64>\n"
+" ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, Розмір адреÑи: "
+"%<PRIu8>, Розмір зміщеннÑ: %<PRIu8>\n"
+" ÐŸÑ–Ð´Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ: %#<PRIx64> [%<PRIx64>]\n"
#: src/readelf.c:7757
#, c-format
@@ -5398,12 +5417,12 @@ msgstr ""
#: src/readelf.c:7767 src/readelf.c:7930
#, c-format
msgid " Unit type: %s (%<PRIu8>)"
-msgstr ""
+msgstr " Тип модулÑ: %s (%<PRIu8>)"
#: src/readelf.c:7794
#, c-format
msgid "unknown version (%d) or unit type (%d)"
-msgstr ""
+msgstr "невідома верÑÑ–Ñ (%d) або тип Ð¼Ð¾Ð´ÑƒÐ»Ñ (%d)"
#: src/readelf.c:7823
#, c-format
@@ -5411,10 +5430,10 @@ msgid "cannot get DIE offset: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ DIE: %s"
#: src/readelf.c:7832
-#, fuzzy, c-format
+#, c-format
msgid "cannot get tag of DIE at offset [%<PRIx64>] in section '%s': %s"
msgstr ""
-"не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ мітку DIE за зміщеннÑм %<PRIu64> у розділі «%s»: %s"
+"не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ мітку DIE за зміщеннÑм [%<PRIu64>] у розділі «%s»: %s"
#: src/readelf.c:7870
#, c-format
@@ -5427,13 +5446,13 @@ msgid "cannot get next DIE: %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ наÑтупний DIE: %s"
#: src/readelf.c:7922
-#, fuzzy, c-format
+#, c-format
msgid ""
" Split compilation unit at offset %<PRIu64>:\n"
" Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: "
"%<PRIu8>, Offset size: %<PRIu8>\n"
msgstr ""
-" Модуль компілÑції за зміщеннÑм %<PRIu64>:\n"
+" Модуль розділеної компілÑції за зміщеннÑм %<PRIu64>:\n"
" ВерÑÑ–Ñ: %<PRIu16>, Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñкорочень: %<PRIu64>, ÐдреÑа: %<PRIu8>, "
"ЗміщеннÑ: %<PRIu8>\n"
@@ -5449,9 +5468,9 @@ msgstr ""
"\n"
#: src/readelf.c:8306
-#, fuzzy, c-format
+#, c-format
msgid "unknown form: %s"
-msgstr "невідома форма %#<PRIx64>"
+msgstr "невідома форма: %s"
#: src/readelf.c:8337
#, c-format
@@ -5460,7 +5479,7 @@ msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу лінійÐ
#. Print what we got so far.
#: src/readelf.c:8439
-#, fuzzy, c-format
+#, c-format
msgid ""
"\n"
" Length: %<PRIu64>\n"
@@ -5481,9 +5500,11 @@ msgstr ""
" Довжина: %<PRIu64>\n"
" ВерÑÑ–Ñ DWARF: %<PRIuFAST16>\n"
" Довжина вÑтупу: %<PRIu64>\n"
+" Розмір адреÑи: %zd\n"
+" Розмір Ñелектора Ñегментів: %zd\n"
" Мінімальна довж. інÑÑ‚Ñ€.: %<PRIuFAST8>\n"
" МакÑ. к-Ñ‚ÑŒ операцій на інÑтрукцію: %<PRIuFAST8>\n"
-" Поч. значеннÑ, Ñкщо «%s»: %<PRIuFAST8>\n"
+" Поч. значеннÑ, Ñкщо «is_stmt»: %<PRIuFAST8>\n"
" ОÑнова Ñ€Ñдків: %<PRIdFAST8>\n"
" Діапазон Ñ€Ñдків: %<PRIuFAST8>\n"
" ОÑнова кодів операцій: %<PRIuFAST8>\n"
@@ -5491,19 +5512,19 @@ msgstr ""
"Коди операцій:\n"
#: src/readelf.c:8461
-#, fuzzy, c-format
+#, c-format
msgid "cannot handle .debug_line version: %u\n"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ верÑÑ–ÑŽ Ñимволу: %s"
+msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ верÑÑ–ÑŽ .debug_line: %u\n"
#: src/readelf.c:8469
-#, fuzzy, c-format
+#, c-format
msgid "cannot handle address size: %u\n"
-msgstr "непідтримуваний розмір адреÑи"
+msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір адреÑи: %u\n"
#: src/readelf.c:8477
-#, fuzzy, c-format
+#, c-format
msgid "cannot handle segment selector size: %u\n"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s"
+msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розмір Ñелектора Ñегментів: %u\n"
#: src/readelf.c:8487
#, c-format
@@ -5527,26 +5548,21 @@ msgstr ""
"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ:"
#: src/readelf.c:8519 src/readelf.c:8596
-#, fuzzy, c-format
+#, c-format
msgid " ["
-msgstr " PC: "
+msgstr " ["
#: src/readelf.c:8590
-#, fuzzy
msgid ""
"\n"
"File name table:"
msgstr ""
"\n"
-" Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¼Ñ–ÑÑ†Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ:"
+" Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð°Ð·Ð² файлів:"
#: src/readelf.c:8651
-#, fuzzy
msgid " Entry Dir Time Size Name"
-msgstr ""
-"\n"
-"Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð°Ð·Ð² файлів:\n"
-" Ð—Ð°Ð¿Ð¸Ñ ÐšÐ°Ñ‚ Ð§Ð°Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðазва"
+msgstr " Ð—Ð°Ð¿Ð¸Ñ ÐšÐ°Ñ‚ Ð§Ð°Ñ Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ðазва"
#: src/readelf.c:8688
msgid ""
@@ -5562,21 +5578,19 @@ msgid "invalid maximum operations per instruction is zero"
msgstr "некоректну кількіÑÑ‚ÑŒ операцій на інÑтрукцію прирівнÑно до нулÑ"
#: src/readelf.c:8745
-#, fuzzy, c-format
+#, c-format
msgid " special opcode %u: address+%u = "
-msgstr " Ñпеціальний код операції %u: адреÑа+%u = %s, Ñ€Ñдок%+d = %zu\n"
+msgstr " Ñпеціальний код операції %u: адреÑа+%u = "
#: src/readelf.c:8749
-#, fuzzy, c-format
+#, c-format
msgid ", op_index = %u, line%+d = %zu\n"
-msgstr ""
-" Ñпеціальний код операції %u: адреÑа+%u = %s, індекÑ_оп = %u, Ñ€Ñдок%+d = "
-"%zu\n"
+msgstr ", індекÑ_оп = %u, Ñ€Ñдок%+d = %zu\n"
#: src/readelf.c:8752
#, c-format
msgid ", line%+d = %zu\n"
-msgstr ""
+msgstr ", Ñ€Ñдок%+d = %zu\n"
#: src/readelf.c:8770
#, c-format
@@ -5588,9 +5602,9 @@ msgid " end of sequence"
msgstr " кінець поÑлідовноÑÑ‚Ñ–"
#: src/readelf.c:8793
-#, fuzzy, c-format
+#, c-format
msgid " set address to "
-msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s\n"
+msgstr " вÑтановити адреÑу у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
#: src/readelf.c:8821
#, c-format
@@ -5615,14 +5629,14 @@ msgid " copy"
msgstr " копіÑ"
#: src/readelf.c:8863
-#, fuzzy, c-format
+#, c-format
msgid " advance address by %u to "
-msgstr " Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи на %u до %s\n"
+msgstr " Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи на %u до "
#: src/readelf.c:8867 src/readelf.c:8928
#, c-format
msgid ", op_index to %u"
-msgstr ""
+msgstr ", op_index до %u"
#: src/readelf.c:8879
#, c-format
@@ -5650,14 +5664,14 @@ msgid " set basic block flag"
msgstr " вÑтановити прапорець базового блоку"
#: src/readelf.c:8924
-#, fuzzy, c-format
+#, c-format
msgid " advance address by constant %u to "
-msgstr " збільшити адреÑу на Ñталу величину %u до %s\n"
+msgstr " збільшити адреÑу на Ñталу величину %u до "
#: src/readelf.c:8944
-#, fuzzy, c-format
+#, c-format
msgid " advance address by fixed value %u to \n"
-msgstr " збільшити адреÑу на фікÑовану величину %u до %s\n"
+msgstr " збільшити адреÑу на фікÑовану величину %u до \n"
#. Takes no argument.
#: src/readelf.c:8954
@@ -5686,14 +5700,14 @@ msgstr[1] " невідомий код операції з %<PRIu8> парамеÑ
msgstr[2] " невідомий код операції з %<PRIu8> параметрами:"
#: src/readelf.c:9018
-#, fuzzy, c-format
+#, c-format
msgid "cannot get .debug_loclists content: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loc: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ .debug_loclists: %s"
#: src/readelf.c:9187
-#, fuzzy, c-format
+#, c-format
msgid "invalid loclists data"
-msgstr "некоректні дані"
+msgstr "некоректні дані loclists"
#: src/readelf.c:9440
#, c-format
@@ -5735,9 +5749,9 @@ msgid " unknown version, cannot parse section\n"
msgstr " невідома верÑÑ–Ñ, не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ розділ\n"
#: src/readelf.c:9931
-#, fuzzy, c-format
+#, c-format
msgid " Flag: 0x%<PRIx8>"
-msgstr " Прапорець: 0x%<PRIx8>\n"
+msgstr " Прапорець: 0x%<PRIx8>"
#: src/readelf.c:9960
#, c-format
@@ -5787,38 +5801,34 @@ msgstr ""
" %*s РÑдок\n"
#: src/readelf.c:10287
-#, fuzzy, c-format
+#, c-format
msgid " *** error, missing string terminator\n"
-msgstr " *** помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€Ñдків: %s\n"
+msgstr " *** помилка, пропущено роздільник Ñ€Ñдків\n"
#: src/readelf.c:10316
-#, fuzzy, c-format
+#, c-format
msgid "cannot get .debug_str_offsets section data: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу .debug_str_offsets: %s"
#: src/readelf.c:10415
-#, fuzzy, c-format
+#, c-format
msgid " Length: %8<PRIu64>\n"
-msgstr ""
-"\n"
-" Довжина: %6<PRIu64>\n"
+msgstr " Довжина: %8<PRIu64>\n"
#: src/readelf.c:10417
-#, fuzzy, c-format
+#, c-format
msgid " Offset size: %8<PRIu8>\n"
-msgstr " Довжина зміщеннÑ: %<PRIu8>\n"
+msgstr " Розмір зÑуву: %8<PRIu8>\n"
#: src/readelf.c:10431
-#, fuzzy, c-format
+#, c-format
msgid " DWARF version: %8<PRIu16>\n"
-msgstr " верÑÑ–Ñ DWARF: %6<PRIuFAST16>\n"
+msgstr " верÑÑ–Ñ DWARF: %8<PRIu16>\n"
#: src/readelf.c:10440
-#, fuzzy, c-format
+#, c-format
msgid " Padding: %8<PRIx16>\n"
-msgstr ""
-"\n"
-" Довжина: %6<PRIu64>\n"
+msgstr " ЗаповненнÑ: %8<PRIx16>\n"
#: src/readelf.c:10494
#, c-format
@@ -5959,13 +5969,13 @@ msgstr ""
msgid "cannot get debug context descriptor: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ деÑкриптор контекÑту зневаджуваннÑ: %s"
-#: src/readelf.c:11449 src/readelf.c:12071 src/readelf.c:12182
-#: src/readelf.c:12240
+#: src/readelf.c:11454 src/readelf.c:12076 src/readelf.c:12187
+#: src/readelf.c:12245
#, c-format
msgid "cannot convert core note data: %s"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ дані запиÑу Ñдра: %s"
-#: src/readelf.c:11812
+#: src/readelf.c:11817
#, c-format
msgid ""
"\n"
@@ -5974,21 +5984,21 @@ msgstr ""
"\n"
"%*s... <повторюєтьÑÑ %u разів> ..."
-#: src/readelf.c:12319
+#: src/readelf.c:12324
msgid " Owner Data size Type\n"
msgstr " ВлаÑник Розм. даних Тип\n"
-#: src/readelf.c:12348
+#: src/readelf.c:12353
#, c-format
msgid " %-13.*s %9<PRId32> %s\n"
msgstr " %-13.*s %9<PRId32> %s\n"
-#: src/readelf.c:12400
-#, fuzzy, c-format
+#: src/readelf.c:12405
+#, c-format
msgid "cannot get content of note: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ розділу запиÑів: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ вміÑÑ‚ нотатки: %s"
-#: src/readelf.c:12434
+#: src/readelf.c:12439
#, c-format
msgid ""
"\n"
@@ -5998,7 +6008,7 @@ msgstr ""
"Розділ запиÑів (note) [%2zu] «%s» з %<PRIu64> байтів за зміщеннÑм "
"%#0<PRIx64>:\n"
-#: src/readelf.c:12457
+#: src/readelf.c:12462
#, c-format
msgid ""
"\n"
@@ -6007,7 +6017,7 @@ msgstr ""
"\n"
"Сегмент запиÑів з %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12504
+#: src/readelf.c:12509
#, c-format
msgid ""
"\n"
@@ -6016,12 +6026,12 @@ msgstr ""
"\n"
"У розділі [%zu] «%s» не міÑтитьÑÑ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n"
-#: src/readelf.c:12531 src/readelf.c:12582
+#: src/readelf.c:12536 src/readelf.c:12587
#, c-format
msgid "cannot get data for section [%zu] '%s': %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [%zu] «%s»: %s"
-#: src/readelf.c:12536
+#: src/readelf.c:12541
#, c-format
msgid ""
"\n"
@@ -6030,17 +6040,18 @@ msgstr ""
"\n"
"ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12541
-#, fuzzy, c-format
+#: src/readelf.c:12546
+#, c-format
msgid ""
"\n"
"Hex dump of section [%zu] '%s', %<PRIu64> bytes (%zd uncompressed) at offset "
"%#0<PRIx64>:\n"
msgstr ""
"\n"
-"ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
+"ШіÑÑ‚. дамп розділу [%zu] «%s», %<PRIu64> байтів (%zd неÑтиÑнено) за "
+"зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12555
+#: src/readelf.c:12560
#, c-format
msgid ""
"\n"
@@ -6049,7 +6060,7 @@ msgstr ""
"\n"
"У розділі [%zu] «%s» не міÑтитьÑÑ Ñ€Ñдків Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð¼Ð¿Ñƒ.\n"
-#: src/readelf.c:12587
+#: src/readelf.c:12592
#, c-format
msgid ""
"\n"
@@ -6058,17 +6069,18 @@ msgstr ""
"\n"
"Розділ Ñ€Ñдків [%zu] «%s» міÑтить %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
-#: src/readelf.c:12592
-#, fuzzy, c-format
+#: src/readelf.c:12597
+#, c-format
msgid ""
"\n"
"String section [%zu] '%s' contains %<PRIu64> bytes (%zd uncompressed) at "
"offset %#0<PRIx64>:\n"
msgstr ""
"\n"
-"Розділ Ñ€Ñдків [%zu] «%s» міÑтить %<PRIu64> байтів за зміщеннÑм %#0<PRIx64>:\n"
+"РÑдок розділу [%zu] «%s» міÑтить %<PRIu64> байти (%zd неÑтиÑнено) на "
+"зміщенні %#0<PRIx64>:\n"
-#: src/readelf.c:12641
+#: src/readelf.c:12646
#, c-format
msgid ""
"\n"
@@ -6077,7 +6089,7 @@ msgstr ""
"\n"
"розділу [%lu] не Ñ–Ñнує"
-#: src/readelf.c:12671
+#: src/readelf.c:12676
#, c-format
msgid ""
"\n"
@@ -6086,12 +6098,12 @@ msgstr ""
"\n"
"розділу «%s» не Ñ–Ñнує"
-#: src/readelf.c:12728
+#: src/readelf.c:12733
#, c-format
msgid "cannot get symbol index of archive '%s': %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ покажчик Ñимволів архіву «%s»: %s"
-#: src/readelf.c:12731
+#: src/readelf.c:12736
#, c-format
msgid ""
"\n"
@@ -6100,7 +6112,7 @@ msgstr ""
"\n"
"У архіві «%s» немає покажчика Ñимволів\n"
-#: src/readelf.c:12735
+#: src/readelf.c:12740
#, c-format
msgid ""
"\n"
@@ -6109,12 +6121,12 @@ msgstr ""
"\n"
"Покажчик архіву «%s» міÑтить %zu запиÑів:\n"
-#: src/readelf.c:12753
+#: src/readelf.c:12758
#, c-format
msgid "cannot extract member at offset %zu in '%s': %s"
msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ елемент за зміщеннÑм %zu у «%s»: %s"
-#: src/readelf.c:12758
+#: src/readelf.c:12763
#, c-format
msgid "Archive member '%s' contains:\n"
msgstr "Елемент архіву «%s» міÑтить:\n"
@@ -6181,17 +6193,17 @@ msgstr "Ðекоректна оÑнова чиÑленнÑ: %s"
msgid "%s: file format not recognized"
msgstr "%s: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ формат файла"
-#: src/size.c:418 src/size.c:557
+#: src/size.c:418 src/size.c:560
#, c-format
msgid " (ex %s)"
msgstr " (прикл. %s)"
#: src/size.c:482
-#, fuzzy, c-format
+#, c-format
msgid "cannot get section header"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу\n"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу"
-#: src/size.c:582
+#: src/size.c:585
msgid "(TOTALS)\n"
msgstr "(ЗÐГÐЛОМ)\n"
@@ -6305,7 +6317,6 @@ msgstr ""
"файлами діагноÑтичних даних"
#: src/stack.c:680
-#, fuzzy
msgid ""
"Print a stack for each thread in a process or core file.\n"
"\n"
@@ -6381,9 +6392,9 @@ msgid "invalid minimum length of matched string size"
msgstr "некоректна мінімальна довжина розмірноÑÑ‚Ñ– Ñ€Ñдка Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ"
#: src/strings.c:585
-#, fuzzy, c-format
+#, c-format
msgid "lseek failed"
-msgstr "помилка lseek64"
+msgstr "помилка lseek"
#: src/strings.c:602 src/strings.c:666
#, c-format
@@ -6441,6 +6452,10 @@ msgid ""
"is not reversable, incompatible with -f, -g, --remove-comment and --remove-"
"section)"
msgstr ""
+"Подібний до --reloc-debug-sections, або уÑÑ– тривіальні Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¼Ñ–Ð¶ "
+"розділами діагноÑтики вирішуютьÑÑ Ð½Ð° міÑці. Додаткове Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð½Ðµ "
+"виконуєтьÑÑ (дію неможливо ÑкаÑувати, параметр неÑуміÑний із -f, -g, --"
+"remove-comment та --remove-section)"
#: src/strip.c:89
msgid "Remove .comment section"
@@ -6451,12 +6466,17 @@ msgid ""
"Remove the named section. SECTION is an extended wildcard pattern. May be "
"given more than once. Only non-allocated sections can be removed."
msgstr ""
+"Вилучити іменований розділ. РОЗДІЛ Ñ” розширеним взірцем із Ñимволами-"
+"замінниками. Можна вказувати декілька розділів. Може бути вилучено лише "
+"нерозміщені у пам'ÑÑ‚Ñ– розділи."
#: src/strip.c:91
msgid ""
"Keep the named section. SECTION is an extended wildcard pattern. May be "
"given more than once."
msgstr ""
+"Зберегти іменований розділ. РОЗДІЛ Ñ” розширеним взірцем із Ñимволами-"
+"замінниками. Можна вказувати декілька розділів."
#. Short description of program.
#: src/strip.c:98
@@ -6474,6 +6494,8 @@ msgid ""
"--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --"
"remove-section"
msgstr ""
+"--reloc-debug-sections-only Ñ” неÑуміÑним із -f, -g, --remove-comment та --"
+"remove-section"
#: src/strip.c:267
#, c-format
@@ -6492,9 +6514,9 @@ msgid "-F option specified twice"
msgstr "параметр -F вказано двічі"
#: src/strip.c:362
-#, fuzzy, c-format
+#, c-format
msgid "cannot both keep and remove .comment section"
-msgstr "Вилучити розділ .comment"
+msgstr "неможливо одночаÑно зберегти Ñ– вилучити розділ .comment"
#: src/strip.c:574
#, c-format
@@ -6540,14 +6562,14 @@ msgid "cannot get number of phdrs"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ кількіÑÑ‚ÑŒ phdr"
#: src/strip.c:1060 src/strip.c:1103
-#, fuzzy, c-format
+#, c-format
msgid "cannot create new ehdr for file '%s': %s"
-msgstr "не вдалоÑÑ Ñтворити файл «%s»: %s"
+msgstr "не вдалоÑÑ Ñтворити ehdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s"
#: src/strip.c:1070 src/strip.c:1113
-#, fuzzy, c-format
+#, c-format
msgid "cannot create new phdr for file '%s': %s"
-msgstr "не вдалоÑÑ Ñтворити файл «%s»: %s"
+msgstr "не вдалоÑÑ Ñтворити phdr Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»: %s"
#: src/strip.c:1194
#, c-format
@@ -6555,14 +6577,14 @@ msgid "illformed file '%s'"
msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° «%s»"
#: src/strip.c:1204
-#, fuzzy, c-format
+#, c-format
msgid "Cannot remove allocated section '%s'"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити PLT-розділ: %s"
+msgstr "Ðеможливо вилучити розміщений у пам'ÑÑ‚Ñ– розділ «%s»"
#: src/strip.c:1213
-#, fuzzy, c-format
+#, c-format
msgid "Cannot both keep and remove section '%s'"
-msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ новий розділ: %s"
+msgstr "Ðеможливо одночаÑно зберегти та вилучити розділ «%s»"
#: src/strip.c:1573 src/strip.c:1688
#, c-format
@@ -6570,19 +6592,19 @@ msgid "while generating output file: %s"
msgstr "під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° з виведеними даними: %s"
#: src/strip.c:1637
-#, fuzzy, c-format
+#, c-format
msgid "%s: error while updating ELF header: %s"
-msgstr "%s: помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s"
+msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s"
#: src/strip.c:1646
-#, fuzzy, c-format
+#, c-format
msgid "%s: error while getting shdrstrndx: %s"
-msgstr "%s: помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s"
+msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ shdrstrndx: %s"
#: src/strip.c:1654 src/strip.c:2535
-#, fuzzy, c-format
+#, c-format
msgid "%s: error updating shdrstrndx: %s"
-msgstr "%s: помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF: %s"
+msgstr "%s: помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ shdrstrndx: %s"
#: src/strip.c:1671
#, c-format
@@ -6605,14 +6627,15 @@ msgid "while create section header string table: %s"
msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу: %s"
#: src/strip.c:1815
-#, fuzzy, c-format
+#, c-format
msgid "no memory to create section header string table"
-msgstr "під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу: %s"
+msgstr "недоÑтатньо пам'ÑÑ‚Ñ– Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків заголовка розділу"
#: src/strip.c:2028
#, c-format
msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]"
msgstr ""
+"Ðеможливо вилучити Ñимвол [%zd] з розміщеної у пам'ÑÑ‚Ñ– таблиці Ñимволів [%zd]"
#: src/strip.c:2451 src/strip.c:2559
#, c-format
@@ -6738,9 +6761,9 @@ msgid "cannot create ELF header: %s"
msgstr "не вдалоÑÑ Ñтворити заголовок ELF: %s"
#: src/unstrip.c:244
-#, fuzzy, c-format
+#, c-format
msgid "cannot get shdrstrndx:%s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ shdrstrndx:%s"
#: src/unstrip.c:248 src/unstrip.c:2081
#, c-format
@@ -6748,14 +6771,14 @@ msgid "cannot get ELF header: %s"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок ELF: %s"
#: src/unstrip.c:258
-#, fuzzy, c-format
+#, c-format
msgid "cannot get new zero section: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розділ: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ новий нульовий розділ: %s"
#: src/unstrip.c:261
-#, fuzzy, c-format
+#, c-format
msgid "cannot update new zero section: %s"
-msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ переÑуваннÑ: %s"
+msgstr "неможливо оновити новий нульовий розділ: %s"
#: src/unstrip.c:265
#, c-format
@@ -6830,14 +6853,14 @@ msgid "unexpected section type in [%zu] with sh_link to symtab"
msgstr "неочікуваний тип розділу у [%zu] з поÑиланнÑм sh_link на symtab"
#: src/unstrip.c:842
-#, fuzzy, c-format
+#, c-format
msgid "cannot get symbol section data: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñимволів: %s"
#: src/unstrip.c:844
-#, fuzzy, c-format
+#, c-format
msgid "cannot get string section data: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані розділу Ñ€Ñдків: %s"
#: src/unstrip.c:861
#, c-format
@@ -6850,29 +6873,29 @@ msgid "cannot read section [%zu] name: %s"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ назву розділу [%zu]: %s"
#: src/unstrip.c:1034
-#, fuzzy, c-format
+#, c-format
msgid "bad sh_link for group section: %s"
-msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link у розділі %zu"
+msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ sh_link Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
#: src/unstrip.c:1040
-#, fuzzy, c-format
+#, c-format
msgid "couldn't get shdr for group section: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок 0-го розділу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ shdr Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
#: src/unstrip.c:1045
-#, fuzzy, c-format
+#, c-format
msgid "bad data for group symbol section: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñимволів\n"
+msgstr "помилкові дані Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñимволів груп: %s"
#: src/unstrip.c:1051
-#, fuzzy, c-format
+#, c-format
msgid "couldn't get symbol for group section: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ верÑÑ–ÑŽ Ñимволу: %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñимвол Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
#: src/unstrip.c:1056
-#, fuzzy, c-format
+#, c-format
msgid "bad symbol name for group section: %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ заголовок розділу %zu: %s"
+msgstr "помилкова назва Ñимволу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ груп: %s"
#: src/unstrip.c:1098 src/unstrip.c:1117 src/unstrip.c:1155
#, c-format
@@ -6882,7 +6905,7 @@ msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ «.gnu.prelink_undoÂ
#: src/unstrip.c:1135
#, c-format
msgid "overflow with shnum = %zu in '%s' section"
-msgstr ""
+msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· shnum = %zu у розділі «%s»"
#: src/unstrip.c:1146
#, c-format
@@ -6925,7 +6948,7 @@ msgstr ""
#: src/unstrip.c:1400
#, c-format
msgid "no sections in stripped file"
-msgstr ""
+msgstr "у очищеному файлі немає розділів"
#: src/unstrip.c:1471 src/unstrip.c:1564
#, c-format
@@ -6943,9 +6966,9 @@ msgid "symbol [%zu] has invalid section index"
msgstr "Ñимвол [%zu] має некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
#: src/unstrip.c:1785
-#, fuzzy, c-format
+#, c-format
msgid "group has invalid section index [%zd]"
-msgstr "Ñимвол [%zu] має некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
+msgstr "група міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [%zd]"
#: src/unstrip.c:2060
#, c-format
@@ -7060,7 +7083,6 @@ msgstr ""
"[МОДУЛЬ...]"
#: src/unstrip.c:2551
-#, fuzzy
msgid ""
"Combine stripped files with separate symbols and debug information.\n"
"\n"
diff --git a/src/ChangeLog b/src/ChangeLog
index 6af977ed..512d7b54 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,58 @@
+2020-06-07 Mark Wielaard <mark@klomp.org>
+
+ * nm.c (sort_by_name_strtab): Replace by...
+ (sort_by_name_elf): New static Elf pointer and ...
+ (sort_by_name_ndx): New static size_t index.
+ (sort_by_name): Use elf_strptr to get symbol string.
+ (show_symbols): Set sort_by_name_elf and sort_by_name_ndx.
+
+2020-06-06 Mark Wielaard <mark@klomp.org>
+
+ * nm.c (show_symbols_sysv): Skip no name and STT_FILE symbols.
+ When not printing address and size pad strings. Strip "GNU_"
+ prefix from binding name.
+ (class_type_char): Use 'V' for weak symbols, 'C' for common
+ symbols and 'T' for weak functions.
+ (show_symbols_posix): Skip STT_FILE symbols. Don't print value and
+ size when undefined.
+
+2020-06-04 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (check_program_header): Remove PT_GNU_PROPERTY define.
+
+2020-05-14 Mark Wielaard <mark@klomp.org>
+
+ * size.c (show_bsd): Set printf format based on radix.
+
+2020-05-09 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (process_elf_file): Error out if ebl_openbackend fails.
+ * objdump.c (handle_elf): Likewise.
+ * nm.c (handle_elf): Likewise. Move full name string construction
+ forward, so it can be used in the error message.
+
+2020-04-17 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (print_debug): Check .gnu.debuglto_ prefix.
+
+2020-04-16 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (check_sections): Mask out SHF_EXCLUDE from processor
+ specific section flags when --gnu is given.
+
+2020-02-08 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (check_program_header): Handle PT_GNU_PROPERTY.
+
+2020-02-07 Mark Wielaard <mark@klomp.org>
+
+ * elflint.c (check_symtab): Check st_info isn't too big.
+
+2020-01-16 Mark Wielaard <mark@klomp.org>
+
+ * nm.c (show_symbols_sysv): Iterate over all symbols starting
+ at index zero.
+
2019-11-26 Mark Wielaard <mark@klomp.org>
* Makefile.am (BUILD_STATIC): Add libraries needed for libdw.
diff --git a/src/elflint.c b/src/elflint.c
index 684b794e..72584de0 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -658,6 +658,10 @@ section [%2d] '%s': symbol table cannot have more than one extended index sectio
ERROR (gettext ("\
section [%2u] '%s': entry size is does not match ElfXX_Sym\n"),
idx, section_name (ebl, idx));
+ else if (shdr->sh_info > shdr->sh_size / sh_entsize)
+ ERROR (gettext ("\
+section [%2u] '%s': number of local entries in 'st_info' larger than table size\n"),
+ idx, section_name (ebl, idx));
/* Test the zeroth entry. */
GElf_Sym sym_mem;
@@ -3917,6 +3921,11 @@ section [%2zu] '%s': size not multiple of entry size\n"),
GElf_Xword sh_flags = shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS;
if (sh_flags & SHF_MASKPROC)
{
+ /* Strictly speaking SHF_EXCLUDE is a processor specific
+ section flag, but it is used generically in the GNU
+ toolchain. */
+ if (gnuld)
+ sh_flags &= ~(GElf_Xword) SHF_EXCLUDE;
if (!ebl_machine_section_flag_check (ebl,
sh_flags & SHF_MASKPROC))
ERROR (gettext ("section [%2zu] '%s'"
@@ -4485,6 +4494,7 @@ only executables, shared objects, and core files can have program headers\n"));
if (phdr->p_type >= PT_NUM && phdr->p_type != PT_GNU_EH_FRAME
&& phdr->p_type != PT_GNU_STACK && phdr->p_type != PT_GNU_RELRO
+ && phdr->p_type != PT_GNU_PROPERTY
/* Check for a known machine-specific type. */
&& ebl_segment_type_name (ebl, phdr->p_type, NULL, 0) == NULL)
ERROR (gettext ("\
@@ -4761,7 +4771,14 @@ process_elf_file (Elf *elf, const char *prefix, const char *suffix,
ebl = ebl_openbackend (elf);
/* If there is no appropriate backend library we cannot test
architecture and OS specific features. Any encountered extension
- is an error. */
+ is an error. Often we'll get a "dummy" ebl, except if something
+ really bad happen, like a totally corrupted ELF file or out of
+ memory situation. */
+ if (ebl == NULL)
+ {
+ ERROR (gettext ("cannot create backend for ELF file\n"));
+ return;
+ }
/* Go straight by the gABI, check all the parts in turn. */
check_elf_header (ebl, ehdr, size);
diff --git a/src/nm.c b/src/nm.c
index 7f6cf2a2..a6334743 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -1,5 +1,5 @@
/* Print symbol information from ELF file in human-readable form.
- Copyright (C) 2000-2008, 2009, 2011, 2012, 2014, 2015 Red Hat, Inc.
+ Copyright (C) 2000-2008, 2009, 2011, 2012, 2014, 2015, 2020 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
@@ -787,7 +787,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
#endif
/* Iterate over all symbols. */
- for (cnt = 1; cnt < nsyms; ++cnt)
+ for (cnt = 0; cnt < nsyms; ++cnt)
{
/* In this format SECTION entries are not printed. */
if (GELF_ST_TYPE (syms[cnt].sym.st_info) == STT_SECTION)
@@ -797,6 +797,16 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
const char *symstr = sym_name (ebl->elf, strndx, syms[cnt].sym.st_name,
symstrbuf, sizeof symstrbuf);
+ /* Printing entries with a zero-length name makes the output
+ not very well parseable. Since these entries don't carry
+ much information we leave them out. */
+ if (symstr[0] == '\0')
+ continue;
+
+ /* We do not print the entries for files. */
+ if (GELF_ST_TYPE (syms[cnt].sym.st_info) == STT_FILE)
+ continue;
+
#ifdef USE_DEMANGLE
/* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */
if (demangle && symstr[0] == '_' && symstr[1] == 'Z')
@@ -825,7 +835,10 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
/* Covert the address. */
if (syms[cnt].sym.st_shndx == SHN_UNDEF)
- addressbuf[0] = sizebuf[0] = '\0';
+ {
+ sprintf (addressbuf, "%*c", digits, ' ');
+ sprintf (sizebuf, "%*c", digits, ' ');
+ }
else
{
snprintf (addressbuf, sizeof (addressbuf),
@@ -841,11 +854,14 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
}
/* Print the actual string. */
+ const char *bind;
+ 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)
+ bind += strlen ("GNU_");
printf ("%-*s|%s|%-6s|%-8s|%s|%*s|%s\n",
- longest_name, symstr, addressbuf,
- ebl_symbol_binding_name (ebl,
- GELF_ST_BIND (syms[cnt].sym.st_info),
- symbindbuf, sizeof (symbindbuf)),
+ longest_name, symstr, addressbuf, bind,
ebl_symbol_type_name (ebl, GELF_ST_TYPE (syms[cnt].sym.st_info),
symtypebuf, sizeof (symtypebuf)),
sizebuf, longest_where, syms[cnt].where,
@@ -884,6 +900,10 @@ class_type_char (Elf *elf, const GElf_Ehdr *ehdr, GElf_Sym *sym)
if (ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX
&& GELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE)
result = 'u';
+ else if (GELF_ST_BIND (sym->st_info) == STB_WEAK)
+ result = 'V';
+ else if (sym->st_shndx == SHN_COMMON)
+ result = 'C';
else
{
GElf_Shdr shdr_mem;
@@ -898,6 +918,11 @@ class_type_char (Elf *elf, const GElf_Ehdr *ehdr, GElf_Sym *sym)
}
}
}
+ else if (result == 'T')
+ {
+ if (GELF_ST_BIND (sym->st_info) == STB_WEAK)
+ result = 'W';
+ }
return local_p ? tolower (result) : result;
}
@@ -1063,6 +1088,10 @@ show_symbols_posix (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx,
if (symstr[0] == '\0')
continue;
+ /* We do not print the entries for files. */
+ if (GELF_ST_TYPE (syms[cnt].sym.st_info) == STT_FILE)
+ continue;
+
#ifdef USE_DEMANGLE
/* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */
if (demangle && symstr[0] == '_' && symstr[1] == 'Z')
@@ -1084,21 +1113,23 @@ show_symbols_posix (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx,
putchar_unlocked (' ');
}
- printf ((radix == radix_hex
- ? "%s %c%s %0*" PRIx64 " %0*" PRIx64 "\n"
- : (radix == radix_decimal
- ? "%s %c%s %*" PRId64 " %*" PRId64 "\n"
- : "%s %c%s %0*" PRIo64 " %0*" PRIo64 "\n")),
- symstr,
+ printf ("%s %c%s", symstr,
class_type_char (elf, ehdr, &syms[cnt].sym),
mark_special
? (GELF_ST_TYPE (syms[cnt].sym.st_info) == STT_TLS
? "@"
: (GELF_ST_BIND (syms[cnt].sym.st_info) == STB_WEAK
? "*" : " "))
- : "",
- digits, syms[cnt].sym.st_value,
- digits, syms[cnt].sym.st_size);
+ : "");
+ if (syms[cnt].sym.st_shndx != SHN_UNDEF)
+ printf ((radix == radix_hex
+ ? " %0*" PRIx64 " %0*" PRIx64
+ : (radix == radix_decimal
+ ? " %*" PRId64 " %*" PRId64
+ : " %0*" PRIo64 " %0*" PRIo64)),
+ digits, syms[cnt].sym.st_value,
+ digits, syms[cnt].sym.st_size);
+ putchar ('\n');
}
#ifdef USE_DEMANGLE
@@ -1122,7 +1153,8 @@ sort_by_address (const void *p1, const void *p2)
return reverse_sort ? -result : result;
}
-static Elf_Data *sort_by_name_strtab;
+static Elf *sort_by_name_elf;
+static size_t sort_by_name_ndx;
static int
sort_by_name (const void *p1, const void *p2)
@@ -1130,8 +1162,10 @@ sort_by_name (const void *p1, const void *p2)
GElf_SymX *s1 = (GElf_SymX *) p1;
GElf_SymX *s2 = (GElf_SymX *) p2;
- const char *n1 = sort_by_name_strtab->d_buf + s1->sym.st_name;
- const char *n2 = sort_by_name_strtab->d_buf + s2->sym.st_name;
+ const char *n1 = elf_strptr (sort_by_name_elf, sort_by_name_ndx,
+ s1->sym.st_name) ?: "";
+ const char *n2 = elf_strptr (sort_by_name_elf, sort_by_name_ndx,
+ s2->sym.st_name) ?: "";
int result = strcmp (n1, n2);
@@ -1444,8 +1478,8 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr,
/* Sort the entries according to the users wishes. */
if (sort == sort_name)
{
- sort_by_name_strtab = elf_getdata (elf_getscn (ebl->elf, shdr->sh_link),
- NULL);
+ sort_by_name_elf = ebl->elf;
+ sort_by_name_ndx = shdr->sh_link;
qsort (sym_mem, nentries, sizeof (GElf_SymX), sort_by_name);
}
else if (sort == sort_numeric)
@@ -1510,8 +1544,17 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
GElf_Ehdr *ehdr;
Ebl *ebl;
+ /* Create the full name of the file. */
+ if (prefix != NULL)
+ cp = mempcpy (cp, prefix, prefix_len);
+ cp = mempcpy (cp, fname, fname_len);
+ if (suffix != NULL)
+ memcpy (cp - 1, suffix, suffix_len + 1);
+
/* Get the backend for this object file type. */
ebl = ebl_openbackend (elf);
+ if (ebl == NULL)
+ INTERNAL_ERROR (fullname);
/* We need the ELF header in a few places. */
ehdr = gelf_getehdr (elf, &ehdr_mem);
@@ -1530,13 +1573,6 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
goto out;
}
- /* Create the full name of the file. */
- if (prefix != NULL)
- cp = mempcpy (cp, prefix, prefix_len);
- cp = mempcpy (cp, fname, fname_len);
- if (suffix != NULL)
- memcpy (cp - 1, suffix, suffix_len + 1);
-
/* Find the symbol table.
XXX Can there be more than one? Do we print all? Currently we do. */
diff --git a/src/objdump.c b/src/objdump.c
index a619674f..82d7bcf6 100644
--- a/src/objdump.c
+++ b/src/objdump.c
@@ -755,6 +755,9 @@ handle_elf (Elf *elf, const char *prefix, const char *fname,
/* Get the backend for this object file type. */
Ebl *ebl = ebl_openbackend (elf);
+ if (ebl == NULL)
+ error (EXIT_FAILURE, 0,
+ gettext ("cannot create backend for elf file"));
printf ("%s: elf%d-%s\n\n",
fname, gelf_getclass (elf) == ELFCLASS32 ? 32 : 64,
diff --git a/src/readelf.c b/src/readelf.c
index cbb519d1..685d0b17 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -11253,7 +11253,8 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
if (strcmp (name, ".debug_info") == 0
|| strcmp (name, ".debug_info.dwo") == 0
|| strcmp (name, ".zdebug_info") == 0
- || strcmp (name, ".zdebug_info.dwo") == 0)
+ || strcmp (name, ".zdebug_info.dwo") == 0
+ || strcmp (name, ".gnu.debuglto_.debug_info") == 0)
{
print_debug_info_section (dwflmod, ebl, ehdr,
scn, shdr, dbg);
@@ -11339,7 +11340,11 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
dbglen - 1) == 0
&& (scnlen == dbglen + 1
|| (scnlen == dbglen + 5
- && strstr (name, ".dwo") == name + dbglen + 1))))
+ && strstr (name, ".dwo") == name + dbglen + 1)))
+ || (scnlen > 14 /* .gnu.debuglto_ prefix. */
+ && strncmp (name, ".gnu.debuglto_", 14) == 0
+ && strcmp (&name[14], debug_sections[n].name) == 0)
+)
{
if ((print_debug_sections | implicit_debug_sections)
& debug_sections[n].bitmask)
diff --git a/src/size.c b/src/size.c
index a25d4471..e49b64b8 100644
--- a/src/size.c
+++ b/src/size.c
@@ -545,8 +545,11 @@ show_bsd (Elf *elf, const char *prefix, const char *fname,
datasize += shdr->sh_size;
}
- printf ("%*" PRId64 " %*" PRId64 " %*" PRId64 " %*" PRId64 " %*"
- PRIx64 " %s",
+ printf (radix == radix_decimal
+ ? "%*" PRId64 " %*" PRId64 " %*" PRId64 " %*" PRId64 " %*" PRIx64 " %s"
+ : radix == radix_hex
+ ? "%#*" PRIx64 " %#*" PRIx64 " %#*" PRIx64 " %*" PRId64 " %*" PRIx64 " %s"
+ : "%#*" PRIo64 " %#*" PRIo64 " %#*" PRIo64 " %*" PRId64 " %*" PRIx64 " %s",
ddigits - 2, textsize,
ddigits - 2, datasize,
ddigits - 2, bsssize,
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 6e3923f5..99f9da9d 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,209 @@
+2020-06-06 Mark Wielaard <mark@klomp.org>
+
+ * testfilesyms32.bz2: New test file.
+ * testfilesyms64.bz2: Likewise.
+ * run-nm-syms.sh: New test.
+ * Makefile.am (TESTS): Add run-nm-syms.sh.
+ (EXTRA_DIST): run-nm-syms.sh, testfilesyms32.bz2 and
+ testfilesyms64.bz2
+
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * elfputzdata.c (main): Explicitly check orig_buf is not NULL
+ before calling memcmp.
+
+2020-05-05 Mark Wielaard <mark@klomp.org>
+
+ * testfile-lto-gcc8.bz2: New test file.
+ * testfile-lto-gcc9.bz2: Likewise.
+ * Makefile.am (EXTRA_DIST): Add testfile-lto-gcc8.bz2 and
+ testfile-lto-gcc9.bz2.
+ * run-allfcts.sh: Add testfile-lto-gcc9 and testfile-lto-gcc8
+ tests.
+
+2020-05-05 Mark Wielaard <mark@klomp.org>
+
+ * testfile-lto-gcc10.bz2: New test file.
+ * Makefile.am (EXTRA_DIST): Add testfile-lto-gcc10.bz2.
+ * run-allfcts.sh: Add testfile-lto-gcc10 test.
+
+2020-04-17 Mark Wielaard <mark@klomp.org>
+
+ * test-subr.sh (testrun_on_self_obj): New function.
+ * run-varlocs-self.sh: Run testrun_on_self_exe and
+ testrun_on_self_lib with -e, run testrun_on_self_obj with
+ --exprlocs -e.
+
+2020-04-17 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (test-nlist$): New goal with minimal CFLAGS.
+ (test_nlist_CFLAGS): New variable.
+
+2020-03-28 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Test timestamps of archive-origin files.
+
+2020-03-27 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Test /path/-based debuginfod-find.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Test relay of UA and XFF headers across
+ federating debuginfods.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Look for debuginfod's new
+ http_responses_* metrics.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Look for bsdtar instead of dpkg.
+
+2020-03-26 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Check for bsdtar zstd capability
+ for running tests against zstd-compressed fedora31 rpms.
+
+2020-03-26 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (EXTRA_DIST): Add
+ debuginfod-rpms/fedora31/hello3-1.0-2.src.rpm,
+ debuginfod-rpms/fedora31/hello3-1.0-2.x86_64.rpm,
+ debuginfod-rpms/fedora31/hello3-debuginfo-1.0-2.x86_64.rpm,
+ debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpm,
+ debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpm,
+ debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpm
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-rpms/hello3.spec., /fedora31/*: New files with
+ uncanonicalized source paths.
+ * run-debuginfod-find.sh: Test them.
+
+2020-03-24 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Test the more detailed debuginfod
+ webapi log format.
+
+2020-03-23 Mark Wielaard <mark@klomp.org>
+
+ * getphdrnum.c: Include config.h.
+ * run-lfs-symbols.sh: Also check that file exists. Add more logs.
+ Remove ebl modules check.
+
+2020-03-22 Omar Sandoval <osandov@fb.com>
+ Mark Wielaard <mark@klomp.org>
+
+ * getphdrnum.c: New file.
+ * run-getphdrnum.sh: New test.
+ * testfile-phdrs.elf.bz2: New test file.
+ * Makefile.am (check_PROGRAMS): Add getphdrnum.
+ (TESTS): Add run-getphdrnum.sh.
+ (EXTRA_DIST): Add run-getphdrnum.sh and testfile-phdrs.elf.bz2.
+ (getphdrnum_LDADD): New variable.
+
+2020-03-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Look for URL in default progressfn
+ and from debuginfod-find -v.
+
+2020-02-19 Aaron Merey <amerey@redhat.com>
+
+ * run-debuginfod-find.sh: Run tests for verifying default
+ client cache locations.
+
+2020-02-26 Konrad Kleine <kkleine@redhat.com>
+
+ * run-debuginfod-find.sh: added tests for DEBUGINFOD_URLS beginning
+ with "file://"
+
+2020-02-21 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am (TESTS_ENVIRONMENT): Explicitly unset DEBUGINFOD_URLS.
+ (installed_TESTS_ENVIRONMENT): Likewise.
+
+2020-02-19 Aaron Merey <amerey@redhat.com>
+
+ * run-debuginfod-find.sh: Test that files unrelated to debuginfod
+ survive cache cleaning.
+
+2020-02-08 Mark Wielaard <mark@klomp.org>
+
+ * run-pt_gnu_prop-tests.sh: New test.
+ * testfile_pt_gnu_prop.bz2: New test file.
+ * testfile_pt_gnu_prop32.bz2: Likewise.
+ * Makefile.am (TESTS): Add run-pt_gnu_prop-tests.sh
+ (EXTRA_DISTS): Likewise. Add testfile_pt_gnu_prop.bz2 and
+ testfile_pt_gnu_prop32.bz2.
+
+2020-02-05 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfo-tars/*: New test files from Eli Schwartz of ArchLinux.
+ * Makefile.am (EXTRA_DIST): Package them.
+ * run-debuginfod-find.sh: Run basic archive extraction tests.
+
+2020-02-03 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Protect against missing curl & rpm2cpio.
+
+2020-01-19 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Check for proper groom completion count.
+
+2020-01-18 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Test empty source_paths[].
+
+2020-01-08 Mark Wielaard <mark@klomp.org>
+
+ * asm-test?.c: include libebl.h.
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Test --fdcache* options.
+
+2020-01-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Adjust to new work-queue metrics.
+
+2020-01-02 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-find.sh: Set DEBUGINFOD_TIMEOUT to 10.
+
+2019-12-22 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod-debs/*: New test files, based on
+ https://wiki.debian.org/Packaging/Intro.
+ * run-debuginfod-find.sh: Test deb file processing (if dpkg
+ installed).
+
+2019-12-04 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuinfod-find.sh: Test $DEBUGINFOD_PROGRESS.
+
+2019-12-11 Omar Sandoval <osandov@fb.com>
+
+ * dwfl-report-segment-coalesce.c: New test.
+ * Makefile.am: Add dwfl-report-segment-coalesce
+
+2019-12-06 Mark Wielaard <mark@klomp.org>
+
+ * run-debuginfod-find.sh: Force -Wl,--build-id.
+
+2019-12-05 Mark Wielaard <mark@klomp.org>
+
+ * run-findinfod-find.sh: Run strip under testrun.
+
+2019-12-06 Mark Wielaard <mark@klomp.org>
+
+ * backtrace-data.c (main): Add break after assert.
+
+2019-12-05 Mark Wielaard <mark@klomp.org>
+
+ * run-elfclassify.sh: Run elfcompress under testrun.
+
2019-11-26 Mark Wielaard <mark@klomp.org>
* Makefile.am (BUILD_STATIC): Add libraries needed for libdw.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 03eebfa8..fa4999df 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -50,7 +50,8 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
test-flag-nobits dwarf-getstring rerequest_tag \
alldts typeiter typeiter2 low_high_pc \
test-elf_cntl_gelf_getshdr dwflsyms dwfllines \
- dwfl-report-elf-align varlocs backtrace backtrace-child \
+ dwfl-report-elf-align dwfl-report-segment-contiguous \
+ varlocs backtrace backtrace-child \
backtrace-data backtrace-dwarf debuglink debugaltlink \
buildid deleted deleted-lib.so aggregate_size peel_type \
vdsosyms \
@@ -61,7 +62,8 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
get-units-invalid get-units-split attr-integrate-skel \
all-dwarf-ranges unit-info next_cfi \
elfcopy addsections xlate_notes elfrdwrnop \
- dwelf_elf_e_machine_string
+ dwelf_elf_e_machine_string \
+ getphdrnum
asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
asm-tst6 asm-tst7 asm-tst8 asm-tst9
@@ -78,6 +80,14 @@ backtrace-child-biarch$(EXEEXT): backtrace-child.c
$(AM_LDFLAGS) $(LDFLAGS) $(backtrace_child_LDFLAGS) \
-o $@ $<
+# test_nlist checks its own symbol table, and expects various symbols
+# to be in the order as specified in the source file. Explicitly set
+# minimal CFLAGS
+test-nlist$(EXEEXT): test-nlist.c
+ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(test_nlist_CFLAGS) $(test_nlist_LDADD) -o $@ $<
+
TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
update1 update2 update3 update4 \
run-show-die-info.sh run-get-files.sh run-get-lines.sh \
@@ -99,7 +109,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \
run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
run-find-prologues.sh run-allregs.sh run-addrcfi.sh \
- run-dwarfcfi.sh \
+ run-dwarfcfi.sh run-nm-syms.sh \
run-nm-self.sh run-readelf-self.sh run-readelf-info-plus.sh \
run-readelf-compressed.sh \
run-readelf-const-values.sh \
@@ -112,7 +122,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
run-native-test.sh run-bug1-test.sh \
run-debuglink.sh run-debugaltlink.sh run-buildid.sh \
dwfl-bug-addr-overflow run-addrname-test.sh \
- dwfl-bug-fd-leak dwfl-bug-report \
+ dwfl-bug-fd-leak dwfl-bug-report dwfl-report-segment-contiguous \
run-dwfl-bug-offline-rel.sh run-dwfl-addr-sect.sh \
run-disasm-x86.sh run-disasm-x86-64.sh \
run-early-offscn.sh run-dwarf-getmacros.sh run-dwarf-ranges.sh \
@@ -164,7 +174,9 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
run-strip-version.sh run-xlate-note.sh \
run-readelf-discr.sh \
run-dwelf_elf_e_machine_string.sh \
- run-elfclassify.sh run-elfclassify-self.sh
+ run-elfclassify.sh run-elfclassify-self.sh \
+ run-pt_gnu_prop-tests.sh \
+ run-getphdrnum.sh
if !BIARCH
export ELFUTILS_DISABLE_BIARCH = 1
@@ -204,6 +216,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \
testfile13.bz2 run-strip-test3.sh run-allfcts.sh \
testfile_class_func.bz2 testfile_nested_funcs.bz2 \
+ testfile-lto-gcc10.bz2 \
+ testfile-lto-gcc9.bz2 testfile-lto-gcc8.bz2 \
run-line2addr.sh run-elflint-test.sh testfile14.bz2 \
run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \
@@ -227,6 +241,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \
run-ranlib-test3.sh run-ranlib-test4.sh \
run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
+ run-nm-syms.sh testfilesyms32.bz2 testfilesyms64.bz2 \
run-nm-self.sh run-readelf-self.sh run-readelf-info-plus.sh \
run-readelf-compressed.sh \
run-readelf-const-values.sh testfile-const-values.debug.bz2 \
@@ -451,6 +466,12 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
debuginfod-rpms/fedora30/hello2-debugsource-1.0-2.x86_64.rpm \
debuginfod-rpms/fedora30/hello2-two-1.0-2.x86_64.rpm \
debuginfod-rpms/fedora30/hello2-two-debuginfo-1.0-2.x86_64.rpm \
+ debuginfod-rpms/fedora31/hello3-1.0-2.src.rpm \
+ debuginfod-rpms/fedora31/hello3-1.0-2.x86_64.rpm \
+ debuginfod-rpms/fedora31/hello3-debuginfo-1.0-2.x86_64.rpm \
+ debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpm \
+ debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpm \
+ debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpm \
debuginfod-rpms/hello2.spec. \
debuginfod-rpms/rhel6/hello2-1.0-2.i686.rpm \
debuginfod-rpms/rhel6/hello2-1.0-2.src.rpm \
@@ -459,8 +480,21 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
debuginfod-rpms/rhel7/hello2-1.0-2.src.rpm \
debuginfod-rpms/rhel7/hello2-1.0-2.x86_64.rpm \
debuginfod-rpms/rhel7/hello2-debuginfo-1.0-2.x86_64.rpm \
- debuginfod-rpms/rhel7/hello2-two-1.0-2.x86_64.rpm
-
+ debuginfod-rpms/rhel7/hello2-two-1.0-2.x86_64.rpm \
+ debuginfod-rpms/rhel7/hello2-two-1.0-2.x86_64.rpm \
+ debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb \
+ debuginfod-debs/hithere_1.0-1.debian.tar.xz \
+ debuginfod-debs/hithere_1.0-1.dsc \
+ debuginfod-debs/hithere_1.0-1_amd64.deb \
+ debuginfod-debs/hithere_1.0.orig.tar.gz \
+ debuginfod-tars/hello-1-1-x86_64.pkg.tar.xz \
+ debuginfod-tars/hello-debug-1-1-x86_64.pkg.tar.bz2 \
+ debuginfod-tars/pacman-sources/PKGBUILD \
+ debuginfod-tars/pacman-sources/README.md \
+ debuginfod-tars/pacman-sources/hello.c \
+ run-pt_gnu_prop-tests.sh \
+ testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \
+ run-getphdrnum.sh testfile-phdrs.elf.bz2
if USE_VALGRIND
@@ -479,6 +513,7 @@ installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir); \
export abs_top_builddir; \
export libdir; export bindir; \
export LC_ALL; export LANG; export VALGRIND_CMD; \
+ unset DEBUGINFOD_URLS; \
NM=$(NM); export NM;
installed_LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \
installed $(tests_rpath) \
@@ -493,6 +528,7 @@ TESTS_ENVIRONMENT = LC_ALL=C; LANG=C; VALGRIND_CMD=$(valgrind_cmd); \
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;
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
@@ -530,6 +566,7 @@ scnnames_LDADD = $(libelf)
sectiondump_LDADD = $(libelf)
showptable_LDADD = $(libelf)
hash_LDADD = $(libelf)
+test_nlist_CFLAGS =-g -O0
test_nlist_LDADD = $(libelf)
msg_tst_LDADD = $(libelf)
newscn_LDADD = $(libelf)
@@ -588,6 +625,7 @@ test_elf_cntl_gelf_getshdr_LDADD = $(libelf)
dwflsyms_LDADD = $(libdw) $(libelf) $(argp_LDADD)
dwfllines_LDADD = $(libdw) $(libelf) $(argp_LDADD)
dwfl_report_elf_align_LDADD = $(libdw)
+dwfl_report_segment_contiguous_LDADD = $(libdw) $(libebl) $(libelf)
varlocs_LDADD = $(libdw) $(libelf) $(argp_LDADD)
backtrace_LDADD = $(libdw) $(libelf) $(argp_LDADD)
# backtrace-child-biarch also uses those *_CFLAGS and *_LDLAGS variables:
@@ -636,6 +674,7 @@ debuginfod_build_id_find_LDADD = $(libelf) $(libdw)
xlate_notes_LDADD = $(libelf)
elfrdwrnop_LDADD = $(libelf)
dwelf_elf_e_machine_string_LDADD = $(libelf) $(libdw)
+getphdrnum_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/asm-tst1.c b/tests/asm-tst1.c
index 9afc676b..cdf2a921 100644
--- a/tests/asm-tst1.c
+++ b/tests/asm-tst1.c
@@ -20,6 +20,7 @@
#endif
#include <fcntl.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst2.c b/tests/asm-tst2.c
index 2556d0c4..9e88b70c 100644
--- a/tests/asm-tst2.c
+++ b/tests/asm-tst2.c
@@ -20,6 +20,7 @@
#endif
#include <fcntl.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst3.c b/tests/asm-tst3.c
index e52cfbe1..39c1d90c 100644
--- a/tests/asm-tst3.c
+++ b/tests/asm-tst3.c
@@ -20,6 +20,7 @@
#endif
#include <fcntl.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst4.c b/tests/asm-tst4.c
index 52e9e20b..5114938b 100644
--- a/tests/asm-tst4.c
+++ b/tests/asm-tst4.c
@@ -20,6 +20,7 @@
#endif
#include <fcntl.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst5.c b/tests/asm-tst5.c
index 5a29b01c..dcb852f8 100644
--- a/tests/asm-tst5.c
+++ b/tests/asm-tst5.c
@@ -20,6 +20,7 @@
#endif
#include <fcntl.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst6.c b/tests/asm-tst6.c
index bd9b362b..829cd90c 100644
--- a/tests/asm-tst6.c
+++ b/tests/asm-tst6.c
@@ -19,6 +19,7 @@
# include <config.h>
#endif
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst7.c b/tests/asm-tst7.c
index 00cb2bfe..90179769 100644
--- a/tests/asm-tst7.c
+++ b/tests/asm-tst7.c
@@ -21,6 +21,7 @@
#include <fcntl.h>
#include <inttypes.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst8.c b/tests/asm-tst8.c
index 4fb0d998..a65509fe 100644
--- a/tests/asm-tst8.c
+++ b/tests/asm-tst8.c
@@ -21,6 +21,7 @@
#include <fcntl.h>
#include <inttypes.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/asm-tst9.c b/tests/asm-tst9.c
index b6d0e431..681e872d 100644
--- a/tests/asm-tst9.c
+++ b/tests/asm-tst9.c
@@ -21,6 +21,7 @@
#include <fcntl.h>
#include <inttypes.h>
+#include ELFUTILS_HEADER(ebl)
#include ELFUTILS_HEADER(asm)
#include <libelf.h>
#include <stdio.h>
diff --git a/tests/backtrace-data.c b/tests/backtrace-data.c
index 907b4780..c81880d9 100644
--- a/tests/backtrace-data.c
+++ b/tests/backtrace-data.c
@@ -280,6 +280,7 @@ main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
{
case -1:
assert (0);
+ break;
case 0:;
long l = ptrace (PTRACE_TRACEME, 0, NULL, NULL);
assert (l == 0);
diff --git a/tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb b/tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb
new file mode 100644
index 00000000..f9879eb6
--- /dev/null
+++ b/tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb
Binary files differ
diff --git a/tests/debuginfod-debs/hithere_1.0-1.debian.tar.xz b/tests/debuginfod-debs/hithere_1.0-1.debian.tar.xz
new file mode 100644
index 00000000..9f0ce684
--- /dev/null
+++ b/tests/debuginfod-debs/hithere_1.0-1.debian.tar.xz
Binary files differ
diff --git a/tests/debuginfod-debs/hithere_1.0-1.dsc b/tests/debuginfod-debs/hithere_1.0-1.dsc
new file mode 100644
index 00000000..d5f72b90
--- /dev/null
+++ b/tests/debuginfod-debs/hithere_1.0-1.dsc
@@ -0,0 +1,19 @@
+Format: 3.0 (quilt)
+Source: hithere
+Binary: hithere
+Architecture: any
+Version: 1.0-1
+Maintainer: Lars Wirzenius <liw@liw.fi>
+Standards-Version: 3.9.2
+Build-Depends: debhelper (>= 9)
+Package-List:
+ hithere deb misc optional arch=any
+Checksums-Sha1:
+ 2dcd65497a12a3ea03223f52186447bd5733dce9 617 hithere_1.0.orig.tar.gz
+ 0b71331ef1c714c5bac67878551864b7356c56ce 764 hithere_1.0-1.debian.tar.xz
+Checksums-Sha256:
+ 63062b582a712f169f37a5f52a41aa3ca9a405aafb8aa837bc906fa413b62cdb 617 hithere_1.0.orig.tar.gz
+ 9afa907e360e626639ccb86b86e799429bea27149034aec5d5c7e500971d651e 764 hithere_1.0-1.debian.tar.xz
+Files:
+ 5b2830fa1fcd44ce489774771625526e 617 hithere_1.0.orig.tar.gz
+ 70106164d9397c70c2c1a4594e9897e4 764 hithere_1.0-1.debian.tar.xz
diff --git a/tests/debuginfod-debs/hithere_1.0-1_amd64.deb b/tests/debuginfod-debs/hithere_1.0-1_amd64.deb
new file mode 100644
index 00000000..11d1e958
--- /dev/null
+++ b/tests/debuginfod-debs/hithere_1.0-1_amd64.deb
Binary files differ
diff --git a/tests/debuginfod-debs/hithere_1.0.orig.tar.gz b/tests/debuginfod-debs/hithere_1.0.orig.tar.gz
new file mode 100644
index 00000000..23abea70
--- /dev/null
+++ b/tests/debuginfod-debs/hithere_1.0.orig.tar.gz
Binary files differ
diff --git a/tests/debuginfod-rpms/fedora31/hello3-1.0-2.src.rpm b/tests/debuginfod-rpms/fedora31/hello3-1.0-2.src.rpm
new file mode 100644
index 00000000..d0b34540
--- /dev/null
+++ b/tests/debuginfod-rpms/fedora31/hello3-1.0-2.src.rpm
Binary files differ
diff --git a/tests/debuginfod-rpms/fedora31/hello3-1.0-2.x86_64.rpm b/tests/debuginfod-rpms/fedora31/hello3-1.0-2.x86_64.rpm
new file mode 100644
index 00000000..8b2fe9bb
--- /dev/null
+++ b/tests/debuginfod-rpms/fedora31/hello3-1.0-2.x86_64.rpm
Binary files differ
diff --git a/tests/debuginfod-rpms/fedora31/hello3-debuginfo-1.0-2.x86_64.rpm b/tests/debuginfod-rpms/fedora31/hello3-debuginfo-1.0-2.x86_64.rpm
new file mode 100644
index 00000000..ee479ecb
--- /dev/null
+++ b/tests/debuginfod-rpms/fedora31/hello3-debuginfo-1.0-2.x86_64.rpm
Binary files differ
diff --git a/tests/debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpm b/tests/debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpm
new file mode 100644
index 00000000..890478e4
--- /dev/null
+++ b/tests/debuginfod-rpms/fedora31/hello3-debugsource-1.0-2.x86_64.rpm
Binary files differ
diff --git a/tests/debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpm b/tests/debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpm
new file mode 100644
index 00000000..73fd939d
--- /dev/null
+++ b/tests/debuginfod-rpms/fedora31/hello3-two-1.0-2.x86_64.rpm
Binary files differ
diff --git a/tests/debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpm b/tests/debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpm
new file mode 100644
index 00000000..0cc24073
--- /dev/null
+++ b/tests/debuginfod-rpms/fedora31/hello3-two-debuginfo-1.0-2.x86_64.rpm
Binary files differ
diff --git a/tests/debuginfod-rpms/hello3.spec. b/tests/debuginfod-rpms/hello3.spec.
new file mode 100644
index 00000000..ffb95134
--- /dev/null
+++ b/tests/debuginfod-rpms/hello3.spec.
@@ -0,0 +1,60 @@
+Summary: hello3 -- double hello, world rpm
+Name: hello3
+Version: 1.0
+Release: 2
+Group: Utilities
+License: GPL
+Distribution: RPM ^W Elfutils test suite.
+Vendor: Red Hat Software
+Packager: Red Hat Software <bugs@redhat.com>
+URL: http://www.redhat.com
+BuildRequires: gcc make
+Source0: hello-1.0.tar.gz
+
+%description
+Simple rpm demonstration with an eye to consumption by debuginfod.
+
+%package two
+Summary: hello3two
+License: GPL
+
+%description two
+Dittoish.
+
+%prep
+%setup -q -n hello-1.0
+
+%build
+mkdir foobar
+gcc -g -O1 foobar///./../hello.c -o hello
+gcc -g -O2 -D_FORTIFY_SOURCE=2 foobar///./../hello.c -o hello3
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/local/bin
+cp hello $RPM_BUILD_ROOT/usr/local/bin/
+cp hello3 $RPM_BUILD_ROOT/usr/local/bin/
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%attr(0751,root,root) /usr/local/bin/hello
+
+%files two
+%defattr(-,root,root)
+%attr(0751,root,root) /usr/local/bin/hello3
+
+%changelog
+* Tue Mar 24 2020 Frank Ch. Eigler <fche@redhat.com>
+- New variant of hello2, with crazy source file paths
+
+* Thu Nov 14 2019 Frank Ch. Eigler <fche@redhat.com>
+- Dropped misc files not relevant to debuginfod testing.
+
+* Wed May 18 2016 Mark Wielaard <mjw@redhat.com>
+- Add hello2 for dwz testing support.
+
+* Tue Oct 20 1998 Jeff Johnson <jbj@redhat.com>
+- create.
diff --git a/tests/debuginfod-tars/hello-1-1-x86_64.pkg.tar.xz b/tests/debuginfod-tars/hello-1-1-x86_64.pkg.tar.xz
new file mode 100644
index 00000000..fd784332
--- /dev/null
+++ b/tests/debuginfod-tars/hello-1-1-x86_64.pkg.tar.xz
Binary files differ
diff --git a/tests/debuginfod-tars/hello-debug-1-1-x86_64.pkg.tar.bz2 b/tests/debuginfod-tars/hello-debug-1-1-x86_64.pkg.tar.bz2
new file mode 100644
index 00000000..8701861f
--- /dev/null
+++ b/tests/debuginfod-tars/hello-debug-1-1-x86_64.pkg.tar.bz2
Binary files differ
diff --git a/tests/debuginfod-tars/pacman-sources/PKGBUILD b/tests/debuginfod-tars/pacman-sources/PKGBUILD
new file mode 100644
index 00000000..0cac1706
--- /dev/null
+++ b/tests/debuginfod-tars/pacman-sources/PKGBUILD
@@ -0,0 +1,19 @@
+pkgname=hello
+pkgver=1
+pkgrel=1
+pkgdesc="Simple hello world program to exercise debuginfod"
+arch=('x86_64')
+source=('hello.c')
+sha256sums=('f85badd2007451bbda4791e7fe820b41be0a424172a567573511688bff975235')
+
+# guarantee that split debug packages are turned on
+options=('strip' 'debug')
+
+build() {
+ # implicit Makefile
+ make hello
+}
+
+package() {
+ install -Dm755 hello "${pkgdir}"/usr/bin/hello
+}
diff --git a/tests/debuginfod-tars/pacman-sources/README.md b/tests/debuginfod-tars/pacman-sources/README.md
new file mode 100644
index 00000000..17f59bcb
--- /dev/null
+++ b/tests/debuginfod-tars/pacman-sources/README.md
@@ -0,0 +1,19 @@
+# Creating sample pacman packages
+
+You will need:
+- an archlinux installation
+- `pacman -S base-devel` for basic build requirements (like debian "build-essential")
+
+Run `makepkg` inside this directory to produce *.pkg.tar.* archives. This may
+be .xz, .zst, .gz etc. depending on the current defaults, see makepkg.conf(5)
+"PKGEXT" for details. The archives will appear in the current directory, or the
+"PKGDEST" defined by makepkg.conf(5).
+
+# Byte-for-byte reproduction
+
+You will need:
+- an archlinux installation
+- `pacman -S devtools` for the clean chroot builder/reproducer
+
+Run `makerepropkg /path/to/hello-debug-1-1-x86_64.pkg.tar.xz` (or whichever the
+archive filename is) inside this directory.
diff --git a/tests/debuginfod-tars/pacman-sources/hello.c b/tests/debuginfod-tars/pacman-sources/hello.c
new file mode 100644
index 00000000..c1ef1554
--- /dev/null
+++ b/tests/debuginfod-tars/pacman-sources/hello.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+int main() {
+ printf("hello\n");
+ return 0;
+}
diff --git a/tests/dwfl-report-segment-contiguous.c b/tests/dwfl-report-segment-contiguous.c
new file mode 100644
index 00000000..61e6bfee
--- /dev/null
+++ b/tests/dwfl-report-segment-contiguous.c
@@ -0,0 +1,82 @@
+/* Test bug in dwfl_report_segment() coalescing.
+ Copyright (C) 2019 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/>. */
+
+#include <config.h>
+#include <assert.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdio_ext.h>
+#include <locale.h>
+#include ELFUTILS_HEADER(dwfl)
+
+
+static const Dwfl_Callbacks offline_callbacks =
+ {
+ .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo),
+ .section_address = INTUSE(dwfl_offline_section_address),
+ };
+
+
+int
+main (void)
+{
+ /* We use no threads here which can interfere with handling a stream. */
+ (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
+
+ /* Set locale. */
+ (void) setlocale (LC_ALL, "");
+
+ Dwfl *dwfl = dwfl_begin (&offline_callbacks);
+ assert (dwfl != NULL);
+
+ GElf_Phdr phdr1 =
+ {
+ .p_type = PT_LOAD,
+ .p_flags = PF_R,
+ .p_offset = 0xf00,
+ .p_vaddr = 0xf00,
+ .p_filesz = 0x100,
+ .p_memsz = 0x100,
+ .p_align = 4,
+ };
+
+ int ndx = dwfl_report_segment (dwfl, 1, &phdr1, 0, dwfl);
+ assert(ndx == 1);
+
+ ndx = dwfl_addrsegment (dwfl, 0xf00, NULL);
+ assert(ndx == 1);
+
+ GElf_Phdr phdr2 =
+ {
+ .p_type = PT_LOAD,
+ .p_flags = PF_R | PF_W,
+ .p_offset = 0x1000,
+ .p_vaddr = 0x1000,
+ .p_filesz = 0x100,
+ .p_memsz = 0x100,
+ .p_align = 4,
+ };
+ ndx = dwfl_report_segment (dwfl, 2, &phdr2, 0, dwfl);
+ assert(ndx == 2);
+
+ ndx = dwfl_addrsegment (dwfl, 0x1000, NULL);
+ assert(ndx == 1 || ndx == 2);
+
+ dwfl_end (dwfl);
+
+ return 0;
+}
diff --git a/tests/elfputzdata.c b/tests/elfputzdata.c
index 66ab77ba..0d9c020e 100644
--- a/tests/elfputzdata.c
+++ b/tests/elfputzdata.c
@@ -105,14 +105,17 @@ main (int argc, char *argv[])
printf ("Unexpected data size for orig section %zd\n", idx);
return -1;
}
- char *orig_buf = malloc (d->d_size);
- if (orig_size > 0 && orig_buf == NULL)
+ char *orig_buf = NULL;
+ if (orig_size > 0)
{
- printf ("No memory to copy section %zd data\n", idx);
- return -1;
+ orig_buf = malloc (d->d_size);
+ if (orig_buf == NULL)
+ {
+ printf ("No memory to copy section %zd data\n", idx);
+ return -1;
+ }
+ memcpy (orig_buf, d->d_buf, orig_size);
}
- if (orig_size > 0)
- memcpy (orig_buf, d->d_buf, orig_size);
bool forced = false;
if (gnu)
@@ -175,7 +178,8 @@ main (int argc, char *argv[])
}
if (new_size == orig_size
- && memcmp (orig_buf, d->d_buf, orig_size) == 0)
+ && (orig_buf == NULL
+ || memcmp (orig_buf, d->d_buf, orig_size) == 0))
{
printf ("section %zd didn't compress\n", idx);
return -1;
@@ -211,7 +215,8 @@ main (int argc, char *argv[])
return -1;
}
if (newer_size != orig_size
- && memcmp (orig_buf, d->d_buf, orig_size) != 0)
+ && (orig_buf == NULL
+ || memcmp (orig_buf, d->d_buf, orig_size) != 0))
{
printf ("section %zd didn't correctly uncompress\n", idx);
return -1;
diff --git a/tests/getphdrnum.c b/tests/getphdrnum.c
new file mode 100644
index 00000000..07f75db0
--- /dev/null
+++ b/tests/getphdrnum.c
@@ -0,0 +1,48 @@
+#include "config.h"
+
+#include <fcntl.h>
+#include <libelf.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+int main (int argc, const char **argv)
+{
+ int fd;
+ Elf *elf;
+ size_t phnum;
+
+ if (argc != 2)
+ {
+ fprintf (stderr, "usage: %s FILE\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ fd = open (argv[1], O_RDONLY);
+ if (fd == -1)
+ {
+ perror ("open");
+ return EXIT_FAILURE;
+ }
+ elf_version (EV_CURRENT);
+ elf = elf_begin (fd, ELF_C_READ, NULL);
+ if (!elf)
+ {
+ fprintf (stderr, "elf_begin: %s\n", elf_errmsg (-1));
+ return EXIT_FAILURE;
+ }
+ if (elf_getphdrnum (elf, &phnum))
+ {
+ fprintf(stderr, "elf_getphdrnum: %s\n", elf_errmsg (-1));
+ return EXIT_FAILURE;
+ }
+
+ printf("%zu\n", phnum);
+
+ elf_end (elf);
+ close (fd);
+
+ return EXIT_SUCCESS;
+}
diff --git a/tests/run-allfcts.sh b/tests/run-allfcts.sh
index 6eaf13c8..9c0a55d8 100755
--- a/tests/run-allfcts.sh
+++ b/tests/run-allfcts.sh
@@ -91,4 +91,83 @@ testrun_compare ${abs_builddir}/allfcts testfile_nested_funcs testfile_class_fun
/home/mark/src/tests/nested/class_func.cxx:13:main
EOF
+# = testfile-lto.h =
+# struct t
+# {
+# int *p;
+# int c;
+# };
+#
+# extern int foo (int i, struct t *t);
+
+# = testfile-lto-func.c =
+# #include "testfile-lto.h"
+#
+# int
+# foo (int i, struct t *t)
+# {
+# int j, res = 0;
+# for (j = 0; j < i && j < t->c; j++)
+# res += t->p[j];
+#
+# return res;
+# }
+
+# = testfile-lto-main.c =
+# #include "testfile-lto.h"
+#
+# static struct t g;
+#
+# int
+# main (int argc, char **argv)
+# {
+# int i;
+# int j[argc];
+# g.c = argc;
+# g.p = j;
+# for (i = 0; i < argc; i++)
+# j[i] = (int) argv[i][0];
+# return foo (3, &g);
+# }
+
+# Using gcc (GCC) 10.0.1 20200430 (Red Hat 10.0.1-0.13)
+# gcc -g -O2 -flto -c testfile-lto-func.c
+# gcc -g -O2 -flto -c testfile-lto-main.c
+# gcc -g -O2 -flto -o testfile-lto-gcc10 testfile-lto-func.o testfile-lto-main.o
+
+testfiles testfile-lto-gcc10
+
+testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc10 <<\EOF
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+/home/mark/src/tests/testfile-lto-main.c:6:main
+EOF
+
+# Using gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)
+# gcc -g -O2 -flto -c testfile-lto-func.c
+# gcc -g -O2 -flto -c testfile-lto-main.c
+# gcc -g -O2 -flto -o testfile-lto-gcc8 testfile-lto-func.o testfile-lto-main.o
+
+testfiles testfile-lto-gcc8
+
+testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc8 <<\EOF
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+EOF
+
+# gcc (GCC) 9.1.1 20190605 (Red Hat 9.1.1-2)
+# gcc -g -O2 -flto -c testfile-lto-func.c
+# gcc -g -O2 -flto -c testfile-lto-main.c
+# gcc -g -O2 -flto -o testfile-lto-gcc9 testfile-lto-func.o testfile-lto-main.o
+
+testfiles testfile-lto-gcc9
+
+testrun_compare ${abs_builddir}/allfcts testfile-lto-gcc9 <<\EOF
+/home/mark/src/tests/testfile-lto-main.c:6:main
+/home/mark/src/tests/testfile-lto-func.c:4:foo
+/home/mark/src/tests/testfile-lto-main.c:6:main
+EOF
+
exit 0
diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
index 0ade03b7..7faad331 100755
--- a/tests/run-debuginfod-find.sh
+++ b/tests/run-debuginfod-find.sh
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright (C) 2019 Red Hat, Inc.
+# 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
@@ -18,19 +18,31 @@
. $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 L ${PWD}/.client_cache*
+ rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp*
exit_cleanup
}
@@ -52,8 +64,8 @@ done
# So we gather the LD_LIBRARY_PATH with this cunning trick:
ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'`
-mkdir F R L
-# not tempfiles F R L - they are directories which we clean up manually
+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()
@@ -77,13 +89,15 @@ wait_ready()
done;
if [ $timeout -eq 0 ]; then
- echo "metric $what never changed to $value on port $port"
+ echo "metric $what never changed to $value on port $port"
+ curl -s http://127.0.0.1:$port/metrics
exit 1;
fi
}
-env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R -d $DB -p $PORT1 -t0 -g0 R F L &
+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 -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 /
@@ -101,16 +115,21 @@ export DEBUGINFOD_TIMEOUT=10
# cannot find it without debuginfod.
echo "int main() { return 0; }" > ${PWD}/prog.c
tempfiles prog.c
-gcc -g -o prog ${PWD}/prog.c
- ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+# 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{file="F"}' 2
+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
########################################################################
@@ -125,12 +144,62 @@ 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 $BUILDID`
+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.
@@ -138,31 +207,46 @@ cmp $filename ${PWD}/prog.c
# Build another, non-stripped binary
echo "int main() { return 0; }" > ${PWD}/prog2.c
tempfiles prog2.c
-gcc -g -o prog2 ${PWD}/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{file="F"}' 3
+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 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2`
+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 -rp ${abs_srcdir}/debuginfod-rpms R
+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
rpms=$(find R -name \*rpm | wc -l)
-wait_ready $PORT1 'scanned_total{source="rpm"}' $rpms
+wait_ready $PORT1 'scanned_total{source=".rpm archive"}' $rpms
+txz=$(find Z -name \*tar.xz | wc -l)
+wait_ready $PORT1 'scanned_total{source=".tar.xz archive"}' $txz
+tb2=$(find Z -name \*tar.bz2 | wc -l)
+wait_ready $PORT1 'scanned_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 :)
@@ -177,7 +261,7 @@ for i in $newrpms; do
mkdir $subdir;
cd $subdir;
ls -lah ../$i
- rpm2cpio ../$i | cpio -id;
+ rpm2cpio ../$i | cpio -ivd;
cd ..;
done
sourcefiles=$(find -name \*\\.debug \
@@ -187,11 +271,11 @@ sourcefiles=$(find -name \*\\.debug \
cd ..
rm -rf extracted
-wait_ready $PORT1 'found_sourcerefs_total{source="rpm"}' $sourcefiles
+wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles
-# Run a bank of queries against the debuginfod-rpms test cases
+# Run a bank of queries against the debuginfod-rpms / debuginfod-debs test cases
-rpm_test() {
+archive_test() {
__BUILDID=$1
__SOURCEPATH=$2
__SOURCESHA1=$3
@@ -200,29 +284,51 @@ rpm_test() {
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
-
- 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`
+
+ 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
-rpm_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
-rpm_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
+archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
+archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA
# rhel7
-rpm_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
-rpm_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA
+archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA
# rhel6
-rpm_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA
-rpm_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA
+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
@@ -235,6 +341,8 @@ RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir, for a l
rm -r R/debuginfod-rpms/rhel6/*
kill -USR2 $PID1 # groom cycle
# Expect 3 rpms to be deleted by the groom
+# 1 groom 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
@@ -257,16 +365,43 @@ 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 -F -d ${DB}_2 -p $PORT2 -L L &
+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
# 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_total{source=".deb archive"}' `expr $debs`
+ ddebs=$(find D -name \*.ddeb | wc -l)
+ wait_ready $PORT2 'scanned_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`
@@ -288,14 +423,22 @@ testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1
########################################################################
-# Fetch some metrics, if curl program is installed
-if type curl 2>/dev/null; then
- curl http://127.0.0.1:$PORT1/badapi
- curl http://127.0.0.1:$PORT1/metrics
- curl http://127.0.0.1:$PORT2/metrics
- curl http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error'
- curl http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream'
-fi
+# 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'
+
+# 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
+
########################################################################
@@ -310,8 +453,21 @@ 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
@@ -321,4 +477,36 @@ 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-elfclassify.sh b/tests/run-elfclassify.sh
index 5a849bbd..fb14139d 100755
--- a/tests/run-elfclassify.sh
+++ b/tests/run-elfclassify.sh
@@ -267,7 +267,7 @@ $(echo $kmod_files | sed -e "s/ /\n/g")
EOF
echo "gnu compressed kmods are unstripped"
-${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
+testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
testrun ${abs_top_builddir}/src/elfclassify --unstripped $kmod_files
testrun_compare ${abs_top_builddir}/src/elfclassify --unstripped --print $kmod_files <<EOF
$(echo $kmod_files | sed -e "s/ /\n/g")
@@ -312,7 +312,7 @@ $(echo $debug_files | sed -e "s/ /\n/g")
EOF
echo "compress the debug sections and try again"
-${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
+testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
echo "again unstripped"
testrun ${abs_top_builddir}/src/elfclassify --unstripped $debug_files
diff --git a/tests/run-getphdrnum.sh b/tests/run-getphdrnum.sh
new file mode 100755
index 00000000..889cdaf1
--- /dev/null
+++ b/tests/run-getphdrnum.sh
@@ -0,0 +1,137 @@
+#! /bin/sh
+
+# testfile-phdrs.elf generated with python3 script
+# import struct
+# import sys
+#
+# phnum = 66000
+#
+# sys.stdout.buffer.write(
+# struct.pack(
+# "<16BHHIQQQIHHHHHH",
+# # EI_MAG
+# *b"\x7fELF",
+# # EI_CLASS = ELFCLASS64
+# 2,
+# # EI_DATA = ELFDATA2LSB
+# 1,
+# # EI_VERSION
+# 1,
+# # EI_OSABI = ELFOSABI_SYSV
+# 0,
+# # EI_ABIVERSION
+# 0,
+# # EI_PAD
+# *bytes(7),
+# # e_type = ET_CORE
+# 4,
+# # e_machine = EM_X86_64
+# 62,
+# # e_version
+# 1,
+# # e_entry
+# 0,
+# # e_phoff = sizeof(Elf64_Ehdr) + sizeof(Elf64_Shdr)
+# 128,
+# # e_shoff = sizeof(Elf64_Ehdr)
+# 64,
+# # e_flags
+# 0,
+# # e_ehsize
+# 64,
+# # e_phentsize
+# 56,
+# # e_phnum = PN_XNUM
+# 0xFFFF,
+# # e_shentsize
+# 64,
+# # e_shnum
+# 1,
+# # e_shstrndx
+# 0,
+# )
+# )
+#
+# sys.stdout.buffer.write(
+# struct.pack(
+# "<IIQQQQIIQQ",
+# # sh_name
+# 0,
+# # sh_type = SHT_NULL
+# 0,
+# # sh_flags
+# 0,
+# # sh_addr
+# 0,
+# # sh_offset
+# 0,
+# # sh_size
+# 0,
+# # sh_link
+# 0,
+# # sh_info
+# phnum,
+# # sh_addralign
+# 0,
+# # sh_entsize
+# 0,
+# )
+# )
+#
+# for i in range(phnum):
+# sys.stdout.buffer.write(
+# struct.pack(
+# "<IIQQQQQQ",
+# # p_type = PT_LOAD
+# 1,
+# # p_flags = PF_X|PF_W|PF_R
+# 0x7,
+# # p_offset
+# 0,
+# # p_vaddr
+# # i * 4096,
+# 4096,
+# # p_paddr
+# 0,
+# # p_filesz
+# 0,
+# # p_memsz
+# 4096,
+# # p_align
+# 0,
+# )
+# )
+
+. $srcdir/test-subr.sh
+
+testfiles testfile-phdrs.elf
+
+testrun_compare ${abs_top_builddir}/src/readelf -h testfile-phdrs.elf<<\EOF
+ELF Header:
+ Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF64
+ Data: 2's complement, little endian
+ Ident Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: CORE (Core file)
+ Machine: AMD x86-64
+ Version: 1 (current)
+ Entry point address: 0
+ Start of program headers: 128 (bytes into file)
+ Start of section headers: 64 (bytes into file)
+ Flags:
+ Size of this header: 64 (bytes)
+ Size of program header entries: 56 (bytes)
+ Number of program headers entries: 65535 (66000 in [0].sh_info)
+ Size of section header entries: 64 (bytes)
+ Number of section headers entries: 1
+ Section header string table index: 0
+
+EOF
+
+testrun_compare ${abs_builddir}/getphdrnum testfile-phdrs.elf<<\EOF
+66000
+EOF
+
+exit 0
diff --git a/tests/run-lfs-symbols.sh b/tests/run-lfs-symbols.sh
index f0894405..b65391b6 100755
--- a/tests/run-lfs-symbols.sh
+++ b/tests/run-lfs-symbols.sh
@@ -46,41 +46,44 @@ makeprint() {
}
testrun_lfs() {
- bad=$(testrun ${abs_top_builddir}/src/nm -u "$1" | awk "$LFS")
- if [ -n "$bad" ]; then
- echo "$1 contains non-lfs symbols:" $bad
+ echo "checking $1"
+ if [ -e "$1" ]; then
+ bad=$(testrun ${abs_top_builddir}/src/nm -u "$1" | awk "$LFS")
+ if [ -n "$bad" ]; then
+ echo "$1 contains non-lfs symbols:" $bad
+ exit_status=1
+ fi
+ else
+ echo "$1 doesn't exist"
exit_status=1
fi
}
-# First sanity-check that LFS detection works.
+echo First sanity-check that LFS detection works.
exit_status=0
testrun_lfs ./testfile-nolfs
if [ $exit_status -eq 0 ]; then
echo "Didn't detect any problem with testfile-nolfs!"
exit 99
fi
+echo
exit_status=0
-# Check all normal build targets.
+echo Check all normal build targets.
for dir in libelf libdw libasm libcpu src; do
dir=${abs_top_builddir}/$dir
for program in $(makeprint PROGRAMS $dir); do
testrun_lfs $dir/$program
done
done
+echo
-# Check all libebl modules.
-dir=${abs_top_builddir}/backends
-for module in $(makeprint modules $dir); do
- testrun_lfs $dir/libebl_$module.so
-done
-
-# Check all test programs.
+echo Check all test programs.
dir=${abs_builddir}
for program in $(makeprint check_PROGRAMS $dir); do
testrun_lfs $dir/$program
done
+echo
exit $exit_status
diff --git a/tests/run-nm-syms.sh b/tests/run-nm-syms.sh
new file mode 100755
index 00000000..ddf09222
--- /dev/null
+++ b/tests/run-nm-syms.sh
@@ -0,0 +1,166 @@
+#! /bin/sh
+# Copyright (C) 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
+
+# void *SYM1;
+# void *SYM2 = 0;
+# extern void *SYM3;
+# static void *SYM4;
+#
+# void *SYM6 = &SYM3;
+# static void *SYM7 = &SYM3;
+#
+# void *SYM8 __attribute__((__weak__));
+#
+# void FUN1 (void) { }
+# static void FUN2 (void) { }
+# extern void FUN3 (void);
+#
+# void *FREF = FUN3;
+#
+# void __attribute__((__weak__)) FUN4 (void) { };
+#
+# int NUM0 = 0; __asm__(".type NUM0,%gnu_unique_object");
+# int __thread NUM1 = 1;
+#
+# gcc -m64 -c syms.c -o testfilesyms64
+# gcc -m32 -c syms.c -o testfilesyms32
+
+testfiles testfilesyms32 testfilesyms64
+
+testrun_compare ${abs_top_builddir}/src/nm --format=bsd testfilesyms32 <<\EOF
+00000008 D FREF
+00000000 T FUN1
+00000010 t FUN2
+ U FUN3
+00000020 W FUN4
+00000008 u NUM0
+00000000 D NUM1
+00000004 C SYM1
+00000000 B SYM2
+ U SYM3
+0000000c b SYM4
+00000000 D SYM6
+00000004 d SYM7
+00000004 V SYM8
+ U _GLOBAL_OFFSET_TABLE_
+00000000 T __x86.get_pc_thunk.ax
+EOF
+
+testrun_compare ${abs_top_builddir}/src/nm --format=posix testfilesyms32 <<\EOF
+FREF D 00000008 00000004
+FUN1 T 00000000 00000010
+FUN2 t 00000010 00000010
+FUN3 U
+FUN4 W 00000020 00000010
+NUM0 u 00000008 00000004
+NUM1 D 00000000 00000004
+SYM1 C 00000004 00000004
+SYM2 B 00000000 00000004
+SYM3 U
+SYM4 b 0000000c 00000004
+SYM6 D 00000000 00000004
+SYM7 d 00000004 00000004
+SYM8 V 00000004 00000004
+_GLOBAL_OFFSET_TABLE_ U
+__x86.get_pc_thunk.ax T 00000000 00000000
+EOF
+
+testrun_compare ${abs_top_builddir}/src/nm --format=sysv testfilesyms32 <<\EOF
+
+
+Symbols from testfilesyms32:
+
+Name Value Class Type Size Line Section
+
+FREF |00000008|GLOBAL|OBJECT |00000004| |.data.rel
+FUN1 |00000000|GLOBAL|FUNC |00000010| |.text
+FUN2 |00000010|LOCAL |FUNC |00000010| |.text
+FUN3 | |GLOBAL|NOTYPE | | |UNDEF
+FUN4 |00000020|WEAK |FUNC |00000010| |.text
+NUM0 |00000008|UNIQUE|OBJECT |00000004| |.bss
+NUM1 |00000000|GLOBAL|TLS |00000004| |.tdata
+SYM1 |00000004|GLOBAL|OBJECT |00000004| |COMMON
+SYM2 |00000000|GLOBAL|OBJECT |00000004| |.bss
+SYM3 | |GLOBAL|NOTYPE | | |UNDEF
+SYM4 |0000000c|LOCAL |OBJECT |00000004| |.bss
+SYM6 |00000000|GLOBAL|OBJECT |00000004| |.data.rel
+SYM7 |00000004|LOCAL |OBJECT |00000004| |.data.rel
+SYM8 |00000004|WEAK |OBJECT |00000004| |.bss
+_GLOBAL_OFFSET_TABLE_| |GLOBAL|NOTYPE | | |UNDEF
+__x86.get_pc_thunk.ax|00000000|GLOBAL|FUNC |00000000| |.text.__x86.get_pc_thunk.ax
+EOF
+
+testrun_compare ${abs_top_builddir}/src/nm --format=bsd testfilesyms64 <<\EOF
+0000000000000010 D FREF
+0000000000000000 T FUN1
+0000000000000007 t FUN2
+ U FUN3
+000000000000000e W FUN4
+0000000000000010 u NUM0
+0000000000000000 D NUM1
+0000000000000008 C SYM1
+0000000000000000 B SYM2
+ U SYM3
+0000000000000018 b SYM4
+0000000000000000 D SYM6
+0000000000000008 d SYM7
+0000000000000008 V SYM8
+EOF
+
+testrun_compare ${abs_top_builddir}/src/nm --format=posix testfilesyms64 <<\EOF
+FREF D 0000000000000010 0000000000000008
+FUN1 T 0000000000000000 0000000000000007
+FUN2 t 0000000000000007 0000000000000007
+FUN3 U
+FUN4 W 000000000000000e 0000000000000007
+NUM0 u 0000000000000010 0000000000000004
+NUM1 D 0000000000000000 0000000000000004
+SYM1 C 0000000000000008 0000000000000008
+SYM2 B 0000000000000000 0000000000000008
+SYM3 U
+SYM4 b 0000000000000018 0000000000000008
+SYM6 D 0000000000000000 0000000000000008
+SYM7 d 0000000000000008 0000000000000008
+SYM8 V 0000000000000008 0000000000000008
+EOF
+
+testrun_compare ${abs_top_builddir}/src/nm --format=sysv testfilesyms64 <<\EOF
+
+
+Symbols from testfilesyms64:
+
+Name Value Class Type Size Line Section
+
+FREF |0000000000000010|GLOBAL|OBJECT |0000000000000008| |.data.rel
+FUN1 |0000000000000000|GLOBAL|FUNC |0000000000000007| |.text
+FUN2 |0000000000000007|LOCAL |FUNC |0000000000000007| |.text
+FUN3 | |GLOBAL|NOTYPE | | |UNDEF
+FUN4 |000000000000000e|WEAK |FUNC |0000000000000007| |.text
+NUM0 |0000000000000010|UNIQUE|OBJECT |0000000000000004| |.bss
+NUM1 |0000000000000000|GLOBAL|TLS |0000000000000004| |.tdata
+SYM1 |0000000000000008|GLOBAL|OBJECT |0000000000000008| |COMMON
+SYM2 |0000000000000000|GLOBAL|OBJECT |0000000000000008| |.bss
+SYM3 | |GLOBAL|NOTYPE | | |UNDEF
+SYM4 |0000000000000018|LOCAL |OBJECT |0000000000000008| |.bss
+SYM6 |0000000000000000|GLOBAL|OBJECT |0000000000000008| |.data.rel
+SYM7 |0000000000000008|LOCAL |OBJECT |0000000000000008| |.data.rel
+SYM8 |0000000000000008|WEAK |OBJECT |0000000000000008| |.bss
+EOF
+
+exit 0
diff --git a/tests/run-pt_gnu_prop-tests.sh b/tests/run-pt_gnu_prop-tests.sh
new file mode 100755
index 00000000..a9a8d912
--- /dev/null
+++ b/tests/run-pt_gnu_prop-tests.sh
@@ -0,0 +1,135 @@
+#! /bin/sh
+# Copyright (C) 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
+
+# On Fedora 31 with GCC 9.2.1 and binutils 2.32-31
+# echo "int main () { }" | \
+# gcc -o testfile_pt_gnu_prop \
+# -Os -fstack-clash-protection -fcf-protection=full -xc - && \
+# eu-strip --remove-comment -R .gnu.build.attributes testfile_pt_gnu_prop
+#
+# echo "int main () { }" | \
+# gcc -m32 -o testfile_pt_gnu_prop \
+# -Os -fstack-clash-protection -fcf-protection=full -xc - && \
+# eu-strip --remove-comment -R .gnu.build.attributes testfile_pt_gnu_prop32
+
+testfiles testfile_pt_gnu_prop testfile_pt_gnu_prop32
+
+testrun_compare ${abs_top_builddir}/src/readelf -ln testfile_pt_gnu_prop32 <<\EOF
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ PHDR 0x000034 0x08048034 0x08048034 0x000180 0x000180 R 0x4
+ INTERP 0x0001b4 0x080481b4 0x080481b4 0x000013 0x000013 R 0x1
+ [Requesting program interpreter: /lib/ld-linux.so.2]
+ LOAD 0x000000 0x08048000 0x08048000 0x000308 0x000308 R 0x1000
+ LOAD 0x001000 0x08049000 0x08049000 0x000224 0x000224 R E 0x1000
+ LOAD 0x002000 0x0804a000 0x0804a000 0x00015c 0x00015c R 0x1000
+ LOAD 0x002f0c 0x0804bf0c 0x0804bf0c 0x000108 0x00010c RW 0x1000
+ DYNAMIC 0x002f14 0x0804bf14 0x0804bf14 0x0000e8 0x0000e8 RW 0x4
+ NOTE 0x0001c8 0x080481c8 0x080481c8 0x000060 0x000060 R 0x4
+ GNU_PROPERTY 0x0001ec 0x080481ec 0x080481ec 0x00001c 0x00001c R 0x4
+ GNU_EH_FRAME 0x00200c 0x0804a00c 0x0804a00c 0x00004c 0x00004c R 0x4
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x000000 0x000000 RW 0x10
+ GNU_RELRO 0x002f0c 0x0804bf0c 0x0804bf0c 0x0000f4 0x0000f4 R 0x1
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00
+ 01 [RO: .interp]
+ 02 [RO: .interp .note.gnu.build-id .note.gnu.property .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt]
+ 03 [RO: .init .plt .plt.sec .text .fini]
+ 04 [RO: .rodata .eh_frame_hdr .eh_frame]
+ 05 [RELRO: .init_array .fini_array .dynamic .got] .got.plt .data .bss
+ 06 [RELRO: .dynamic]
+ 07 [RO: .note.gnu.build-id .note.gnu.property .note.ABI-tag]
+ 08 [RO: .note.gnu.property]
+ 09 [RO: .eh_frame_hdr]
+ 10
+ 11 [RELRO: .init_array .fini_array .dynamic .got]
+
+Note section [ 2] '.note.gnu.build-id' of 36 bytes at offset 0x1c8:
+ Owner Data size Type
+ GNU 20 GNU_BUILD_ID
+ Build ID: 2fcce91f5c2532f78b00a9f5f565354d2f44bc19
+
+Note section [ 3] '.note.gnu.property' of 28 bytes at offset 0x1ec:
+ Owner Data size Type
+ GNU 12 GNU_PROPERTY_TYPE_0
+ X86 FEATURE_1_AND: 00000003 IBT SHSTK
+
+Note section [ 4] '.note.ABI-tag' of 32 bytes at offset 0x208:
+ Owner Data size Type
+ GNU 16 GNU_ABI_TAG
+ OS: Linux, ABI: 3.2.0
+EOF
+
+testrun ${abs_top_builddir}/src/elflint --gnu testfile_pt_gnu_prop32
+
+testrun_compare ${abs_top_builddir}/src/readelf -ln testfile_pt_gnu_prop <<\EOF
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ PHDR 0x000040 0x0000000000400040 0x0000000000400040 0x0002d8 0x0002d8 R 0x8
+ INTERP 0x000318 0x0000000000400318 0x0000000000400318 0x00001c 0x00001c R 0x1
+ [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
+ LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x000498 0x000498 R 0x1000
+ LOAD 0x001000 0x0000000000401000 0x0000000000401000 0x0001a5 0x0001a5 R E 0x1000
+ LOAD 0x002000 0x0000000000402000 0x0000000000402000 0x000100 0x000100 R 0x1000
+ LOAD 0x002e50 0x0000000000403e50 0x0000000000403e50 0x0001cc 0x0001d0 RW 0x1000
+ DYNAMIC 0x002e60 0x0000000000403e60 0x0000000000403e60 0x000190 0x000190 RW 0x8
+ NOTE 0x000338 0x0000000000400338 0x0000000000400338 0x000020 0x000020 R 0x8
+ NOTE 0x000358 0x0000000000400358 0x0000000000400358 0x000044 0x000044 R 0x4
+ GNU_PROPERTY 0x000338 0x0000000000400338 0x0000000000400338 0x000020 0x000020 R 0x8
+ GNU_EH_FRAME 0x002010 0x0000000000402010 0x0000000000402010 0x000034 0x000034 R 0x4
+ GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x10
+ GNU_RELRO 0x002e50 0x0000000000403e50 0x0000000000403e50 0x0001b0 0x0001b0 R 0x1
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00
+ 01 [RO: .interp]
+ 02 [RO: .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn]
+ 03 [RO: .init .text .fini]
+ 04 [RO: .rodata .eh_frame_hdr .eh_frame]
+ 05 [RELRO: .init_array .fini_array .dynamic .got] .got.plt .data .bss
+ 06 [RELRO: .dynamic]
+ 07 [RO: .note.gnu.property]
+ 08 [RO: .note.gnu.build-id .note.ABI-tag]
+ 09 [RO: .note.gnu.property]
+ 10 [RO: .eh_frame_hdr]
+ 11
+ 12 [RELRO: .init_array .fini_array .dynamic .got]
+
+Note section [ 2] '.note.gnu.property' of 32 bytes at offset 0x338:
+ Owner Data size Type
+ GNU 16 GNU_PROPERTY_TYPE_0
+ X86 FEATURE_1_AND: 00000003 IBT SHSTK
+
+Note section [ 3] '.note.gnu.build-id' of 36 bytes at offset 0x358:
+ Owner Data size Type
+ GNU 20 GNU_BUILD_ID
+ Build ID: 84fa4d40bad074bc82431575821902da624a5b22
+
+Note section [ 4] '.note.ABI-tag' of 32 bytes at offset 0x37c:
+ Owner Data size Type
+ GNU 16 GNU_ABI_TAG
+ OS: Linux, ABI: 3.2.0
+EOF
+
+testrun ${abs_top_builddir}/src/elflint --gnu testfile_pt_gnu_prop
+
+exit 0
diff --git a/tests/run-varlocs-self.sh b/tests/run-varlocs-self.sh
index 54b6a8d7..5454fc70 100755
--- a/tests/run-varlocs-self.sh
+++ b/tests/run-varlocs-self.sh
@@ -19,4 +19,6 @@
# Make sure varlocs doesn't crash, doesn't trigger self-check/asserts
# or leaks running under valgrind.
-testrun_on_self_quiet ${abs_top_builddir}/tests/varlocs -e
+testrun_on_self_exe ${abs_top_builddir}/tests/varlocs -e
+testrun_on_self_lib ${abs_top_builddir}/tests/varlocs -e
+testrun_on_self_obj ${abs_top_builddir}/tests/varlocs --exprlocs -e
diff --git a/tests/test-subr.sh b/tests/test-subr.sh
index e768c1e5..411e5f28 100644
--- a/tests/test-subr.sh
+++ b/tests/test-subr.sh
@@ -168,6 +168,19 @@ testrun_on_self_lib()
if test $exit_status != 0; then exit $exit_status; fi
}
+testrun_on_self_obj()
+{
+ exit_status=0
+
+ for file in $self_test_files_obj; do
+ testrun $* $file \
+ || { echo "*** failure in $* $file"; exit_status=1; }
+ done
+
+ # Only exit if something failed
+ if test $exit_status != 0; then exit $exit_status; fi
+}
+
# Compress the files first. Compress both debug sections and symtab.
testrun_on_self_compressed()
{
diff --git a/tests/testfile-lto-gcc10.bz2 b/tests/testfile-lto-gcc10.bz2
new file mode 100755
index 00000000..e8ef621f
--- /dev/null
+++ b/tests/testfile-lto-gcc10.bz2
Binary files differ
diff --git a/tests/testfile-lto-gcc8.bz2 b/tests/testfile-lto-gcc8.bz2
new file mode 100755
index 00000000..cf744d9e
--- /dev/null
+++ b/tests/testfile-lto-gcc8.bz2
Binary files differ
diff --git a/tests/testfile-lto-gcc9.bz2 b/tests/testfile-lto-gcc9.bz2
new file mode 100755
index 00000000..df503618
--- /dev/null
+++ b/tests/testfile-lto-gcc9.bz2
Binary files differ
diff --git a/tests/testfile-phdrs.elf.bz2 b/tests/testfile-phdrs.elf.bz2
new file mode 100644
index 00000000..024ed79d
--- /dev/null
+++ b/tests/testfile-phdrs.elf.bz2
Binary files differ
diff --git a/tests/testfile_pt_gnu_prop.bz2 b/tests/testfile_pt_gnu_prop.bz2
new file mode 100755
index 00000000..f030fb9c
--- /dev/null
+++ b/tests/testfile_pt_gnu_prop.bz2
Binary files differ
diff --git a/tests/testfile_pt_gnu_prop32.bz2 b/tests/testfile_pt_gnu_prop32.bz2
new file mode 100755
index 00000000..6a7515a6
--- /dev/null
+++ b/tests/testfile_pt_gnu_prop32.bz2
Binary files differ
diff --git a/tests/testfilesyms32.bz2 b/tests/testfilesyms32.bz2
new file mode 100644
index 00000000..b3b7812c
--- /dev/null
+++ b/tests/testfilesyms32.bz2
Binary files differ
diff --git a/tests/testfilesyms64.bz2 b/tests/testfilesyms64.bz2
new file mode 100644
index 00000000..cdec3817
--- /dev/null
+++ b/tests/testfilesyms64.bz2
Binary files differ