summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2009-05-05 16:40:09 +0200
committerPetr Machata <pmachata@redhat.com>2009-05-05 16:40:09 +0200
commite2312613319efc397d2dc2285e84268b7b54dbb5 (patch)
tree2862cff76f10d6a0452e15b048bbe07c93a3946d
parent5e7f6f695bb91f1885e9ec0d8892533df7e3bcf8 (diff)
parent589b3d302f0d2b8dff71c64aff9e285d9005c2e2 (diff)
downloadelfutils-e2312613319efc397d2dc2285e84268b7b54dbb5.tar.gz
Merge commit 'origin/master' into pmachata/pending
Conflicts: libdw/dwarf_error.c
-rw-r--r--.gitignore1
-rw-r--r--AUTHORS2
-rw-r--r--ChangeLog30
-rw-r--r--Makefile.am4
-rw-r--r--NEWS25
-rw-r--r--README6
-rw-r--r--THANKS2
-rw-r--r--TODO18
-rw-r--r--backends/ChangeLog35
-rw-r--r--backends/Makefile.am5
-rw-r--r--backends/arm_attrs.c242
-rw-r--r--backends/arm_auxv.c46
-rw-r--r--backends/arm_corenote.c73
-rw-r--r--backends/arm_init.c10
-rw-r--r--backends/arm_regs.c117
-rw-r--r--backends/arm_retval.c138
-rw-r--r--backends/arm_symbol.c73
-rw-r--r--backends/i386_corenote.c4
-rw-r--r--backends/ia64_symbol.c6
-rw-r--r--backends/ppc_attrs.c12
-rw-r--r--backends/sparc_reloc.def164
-rw-r--r--config/ChangeLog23
-rw-r--r--config/Makefile.am4
-rw-r--r--config/elfutils.spec.in22
-rw-r--r--config/known-dwarf.awk55
-rw-r--r--configure.ac75
-rw-r--r--lib/ChangeLog15
-rw-r--r--lib/eu-config.h30
-rw-r--r--lib/system.h14
-rw-r--r--libasm/ChangeLog5
-rw-r--r--libasm/Makefile.am4
-rw-r--r--libasm/asm_error.c112
-rw-r--r--libcpu/ChangeLog10
-rw-r--r--libcpu/Makefile.am5
-rw-r--r--libdw/ChangeLog63
-rw-r--r--libdw/Makefile.am10
-rw-r--r--libdw/dwarf.h49
-rw-r--r--libdw/dwarf_error.c80
-rw-r--r--libdw/dwarf_getattrs.c33
-rw-r--r--libdw/dwarf_getsrclines.c6
-rw-r--r--libdw/dwarf_haschildren.c4
-rw-r--r--libdw/dwarf_ranges.c11
-rw-r--r--libdw/libdwP.h49
-rw-r--r--libdwfl/ChangeLog107
-rw-r--r--libdwfl/Makefile.am4
-rw-r--r--libdwfl/core-file.c14
-rw-r--r--libdwfl/derelocate.c5
-rw-r--r--libdwfl/dwfl_error.c87
-rw-r--r--libdwfl/dwfl_module_build_id.c23
-rw-r--r--libdwfl/dwfl_module_getdwarf.c51
-rw-r--r--libdwfl/dwfl_module_getelf.c88
-rw-r--r--libdwfl/dwfl_module_getsym.c26
-rw-r--r--libdwfl/dwfl_report_elf.c9
-rw-r--r--libdwfl/dwfl_segment_report_module.c30
-rw-r--r--libdwfl/gzip.c115
-rw-r--r--libdwfl/libdwfl.h11
-rw-r--r--libdwfl/libdwflP.h4
-rw-r--r--libdwfl/link_map.c7
-rw-r--r--libdwfl/offline.c2
-rw-r--r--libdwfl/open.c25
-rw-r--r--libdwfl/relocate.c20
-rw-r--r--libdwfl/segment.c4
-rw-r--r--libebl/ChangeLog11
-rw-r--r--libebl/eblauxvinfo.c6
-rw-r--r--libebl/eblreloctypename.c4
-rw-r--r--libebl/eblsymboltypename.c4
-rw-r--r--libelf/ChangeLog52
-rw-r--r--libelf/Makefile.am4
-rw-r--r--libelf/elf.h85
-rw-r--r--libelf/elf32_updatefile.c164
-rw-r--r--libelf/elf32_updatenull.c7
-rw-r--r--libelf/elf_error.c83
-rw-r--r--libelf/elf_strptr.c6
-rw-r--r--libelf/libelfP.h4
-rw-r--r--libelf/note_xlate.h4
-rw-r--r--m4/ChangeLog4
-rw-r--r--m4/zip.m47
-rw-r--r--po/ChangeLog6
-rw-r--r--po/Makevars2
-rw-r--r--po/POTFILES.in20
-rw-r--r--po/de.po5676
-rw-r--r--po/es.po5954
-rw-r--r--po/it.po394
-rw-r--r--src/ChangeLog173
-rw-r--r--src/Makefile.am8
-rw-r--r--src/addr2line.c134
-rw-r--r--src/ar.c28
-rw-r--r--src/elfcmp.c39
-rw-r--r--src/elflint.c132
-rw-r--r--src/findtextrel.c6
-rw-r--r--src/ld.c4
-rw-r--r--src/nm.c4
-rw-r--r--src/objdump.c188
-rw-r--r--src/ranlib.c4
-rw-r--r--src/readelf.c877
-rw-r--r--src/size.c19
-rw-r--r--src/strings.c6
-rw-r--r--src/strip.c9
-rw-r--r--src/unstrip.c5
-rw-r--r--tests/ChangeLog11
-rw-r--r--tests/Makefile.am10
-rwxr-xr-xtests/run-dwfl-addr-sect.sh8
-rw-r--r--tests/testfile50.bz2bin0 -> 229 bytes
103 files changed, 15265 insertions, 1221 deletions
diff --git a/.gitignore b/.gitignore
index b374f786..163d790d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@ config/ylwrap
configure
elfutils.spec
*.pot
+libdw/known-dwarf.h
diff --git a/AUTHORS b/AUTHORS
index 29b776f0..ef3c5430 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,2 +1,4 @@
For Now:
Ulrich Drepper.
+Roland McGrath
+Petr Machata
diff --git a/ChangeLog b/ChangeLog
index 7433b218..e97b1dba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2009-04-29 Ulrich Drepper <drepper@redhat.com>
+
+ * elflint.c (check_symtab): Add tests of st_other field.
+
+2009-04-19 Roland McGrath <roland@redhat.com>
+
+ * configure.ac (eu_version): Round down here, not in version.h macros.
+
+2009-04-17 Roland McGrath <roland@redhat.com>
+
+ * configure.ac (eu_version): Compute number 1000 times larger,
+ let $PACKAGE_VERSION be x.y.z as well as x.y (implied x.y.0).
+
+2009-01-23 Roland McGrath <roland@redhat.com>
+
+ * configure.ac (zlib check): Check for gzdirect, need zlib >= 1.2.2.3.
+
+ * configure.ac (__thread check): Use AC_LINK_IFELSE, in case of
+ building with compiler support but no working runtime support.
+
+2009-01-22 Ulrich Drepper <drepper@redhat.com>
+
+ * Makefile.am (rpm): The tarball is now bzip2-compressed.
+
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * configure.ac: Require gcc with TLS support.
+ Rename USE_TLS to USE_LOCKS. The option is renamed to
+ --enable-thread-safety.
+
2009-01-08 Roland McGrath <roland@redhat.com>
* configure.ac (eu_ZIPLIB): Moved to m4/zip.am.
diff --git a/Makefile.am b/Makefile.am
index 44d67d50..4decc55f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
## Process this file with automake to create Makefile.in
## Configure input file for elfutils.
##
-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
+## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2008, 2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -46,7 +46,7 @@ distcheck-hook:
chmod -R u+w $(distdir)
rpm: dist
- rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.gz
+ rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.bz2
# Tell version 3.79 and up of GNU make to not build goals in this
# directory in parallel.
diff --git a/NEWS b/NEWS
index b48aeed5..c0f60bca 100644
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,31 @@
+Version 0.141:
+
+libebl: sparc backend fixes;
+ some more arm backend support
+
+libdwfl: fix dwfl_module_build_id for prelinked DSO case;
+ fixes in core file support;
+ dwfl_module_getsym interface improved for non-address symbols
+
+strip: fix infinite loop on strange inputs with -f
+
+addr2line: take -j/--section=NAME option for binutils compatibility
+ (same effect as '(NAME)0x123' syntax already supported)
+
+Version 0.140:
+
+libelf: Fix regression in creation of section header
+
+libdwfl: Less strict behavior if DWARF reader ist just used to display data
+
Version 0.139:
libcpu: Add Intel SSE4 disassembler support
-readelf: Implement call frame information dumping.
+readelf: Implement call frame information and exception handling dumping.
+ Add -e option. Enable it implicitly for -a.
+
+elflint: Check PT_GNU_EH_FRAME program header entry.
libdwfl: Support automatic gzip/bzip2 decompression of ELF files.
diff --git a/README b/README
index afc94077..33cac74f 100644
--- a/README
+++ b/README
@@ -4,3 +4,9 @@ Fundamental design decision:
This leaves byte ordering aside. While assuming this the code can be
greatly simplified and speed increases. Since no change violating this
assumption is in sight this is believed to be a worthwhile optimization.
+
+- the ABI of the backend modules is not guaranteed. Really, not guarantee
+ whatsoever. We are enforcing this in the code. The modules and their
+ users must match. No third-party EBL module are supported or allowed.
+ The only reason there are separate modules is to not have the code for
+ all architectures in all the binaries.
diff --git a/THANKS b/THANKS
index 3ee88d16..887c067a 100644
--- a/THANKS
+++ b/THANKS
@@ -3,4 +3,4 @@ At least the following have submitted valuable patches:
Jeff Johnson building. rpm wrestling
Alexander Larsson separate debug info
Jakub Jelinek bug fixes, testing
-Roland McGrath lots of libdw{,fl} hacking
+Denys Vlasenko bug fuxes
diff --git a/TODO b/TODO
index bc374146..0012a566 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,7 @@
ToDo list for elfutils -*-outline-*-
----------------------
-Time-stamp: <2009-01-01 16:56:38 drepper>
+Time-stamp: <2009-02-05 22:08:01 drepper>
* mkinstalldirs
@@ -22,6 +22,13 @@ Time-stamp: <2009-01-01 16:56:38 drepper>
archives and only when having the archive handling separately this
remains maintainable.
+** shdrs in read-only files
+
+ When reading (ELF_C_READ*) then there is no need to malloc Shdr
+ structure in elfXX_getshdr if file is mmaped and unaligned access
+ is allowed or the structure is aligned. Use ELF_F_MALLOCED flag
+ to differentiate.
+
* libdw
@@ -103,6 +110,13 @@ Time-stamp: <2009-01-01 16:56:38 drepper>
Not implemented at all in the moment except for recognition of the option
itself.
+** variables with aliases in executables
+
+ When linking an executable with a references against a variable in a
+ DSO, create symbol table entries for all the aliases of the variable
+ in the DSO and create a relocation for one of them (a non-weak
+ definition)
+
* elflint
** additional checks
@@ -118,6 +132,8 @@ Time-stamp: <2009-01-01 16:56:38 drepper>
check TLS relocation depencies
+ Check content of .eh_frame_hdr, .eh_frame, .gcc_except_table
+
*** for x86
check that R_386_TLS_GD is followed by R_386_PLT32 for __tls_get_addr
diff --git a/backends/ChangeLog b/backends/ChangeLog
index 85609b15..c764f9ef 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,38 @@
+2009-04-16 Roland McGrath <roland@redhat.com>
+
+ * arm_regs.c (arm_register_info): Handle VFP registers.
+
+ * i386_corenote.c (EXTRA_NOTES): NT_PRXFPREG -> NT_PRXFPREG
+
+2009-04-14 Roland McGrath <roland@redhat.com>
+
+ * arm_retval.c: New file.
+ * arm_attrs.c: New file.
+ * Makefile.am (arm_SRCS): Add them.
+ * arm_symbol.c (arm_segment_type_name): New function.
+ (arm_section_type_name): New function.
+ (arm_machine_flag_check): New function.
+ * arm_init.c (arm_init): Initialize those hooks.
+
+ * arm_regs.c: New file.
+ * arm_corenote.c: New file.
+ * arm_auxv.c: New file.
+ * Makefile.am (arm_SRCS): Add them.
+ * arm_init.c (arm_init): Initialize core_note, register_info,
+ and auxv_info hooks.
+
+ * ia64_symbol.c (ia64_section_type_name): Remove "SHT_" prefixes.
+
+2009-04-01 Roland McGrath <roland@redhat.com>
+
+ * sparc_reloc.def: Update table.
+ Data from Dave Miller <davem@davemloft.net>.
+
+2009-02-15 Roland McGrath <roland@redhat.com>
+
+ * ppc_attrs.c (ppc_check_object_attribute): Handle tag
+ GNU_Power_ABI_Struct_Return.
+
2008-10-04 Ulrich Drepper <drepper@redhat.com>
* i386_reloc.def: Fix entries for TLS_GOTDESC, TLS_DESC_CALL, and
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 5b552946..6d7eb667 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to create Makefile.in
##
-## Copyright (C) 2000-2006, 2007, 2008 Red Hat, Inc.
+## Copyright (C) 2000-2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -85,7 +85,8 @@ alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.c \
libebl_alpha_pic_a_SOURCES = $(alpha_SRCS)
am_libebl_alpha_pic_a_OBJECTS = $(alpha_SRCS:.c=.os)
-arm_SRCS = arm_init.c arm_symbol.c
+arm_SRCS = arm_init.c arm_symbol.c arm_regs.c arm_corenote.c \
+ arm_auxv.c arm_attrs.c arm_retval.c
libebl_arm_pic_a_SOURCES = $(arm_SRCS)
am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os)
diff --git a/backends/arm_attrs.c b/backends/arm_attrs.c
new file mode 100644
index 00000000..84f4d451
--- /dev/null
+++ b/backends/arm_attrs.c
@@ -0,0 +1,242 @@
+/* Object attribute tags for ARM.
+ Copyright (C) 2009 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils 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; version 2 of the License.
+
+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <dwarf.h>
+
+#define BACKEND arm_
+#include "libebl_CPU.h"
+
+#define KNOWN_VALUES(...) do \
+ { \
+ static const char *table[] = { __VA_ARGS__ }; \
+ if (value < sizeof table / sizeof table[0]) \
+ *value_name = table[value]; \
+ } while (0)
+
+bool
+arm_check_object_attribute (ebl, vendor, tag, value, tag_name, value_name)
+ Ebl *ebl __attribute__ ((unused));
+ const char *vendor;
+ int tag;
+ uint64_t value __attribute__ ((unused));
+ const char **tag_name;
+ const char **value_name;
+{
+ if (!strcmp (vendor, "aeabi"))
+ switch (tag)
+ {
+ case 4:
+ *tag_name = "CPU_raw_name";
+ return true;
+ case 5:
+ *tag_name = "CPU_name";
+ return true;
+ case 6:
+ *tag_name = "CPU_arch";
+ KNOWN_VALUES ("Pre-v4",
+ "v4",
+ "v4T",
+ "v5T",
+ "v5TE",
+ "v5TEJ",
+ "v6",
+ "v6KZ",
+ "v6T2",
+ "v6K",
+ "v7",
+ "v6-M",
+ "v6S-M");
+ return true;
+ case 7:
+ *tag_name = "CPU_arch_profile";
+ switch (value)
+ {
+ case 'A':
+ *value_name = "Application";
+ break;
+ case 'R':
+ *value_name = "Realtime";
+ break;
+ case 'M':
+ *value_name = "Microcontroller";
+ break;
+ }
+ return true;
+ case 8:
+ *tag_name = "ARM_ISA_use";
+ KNOWN_VALUES ("No", "Yes");
+ return true;
+ case 9:
+ *tag_name = "THUMB_ISA_use";
+ KNOWN_VALUES ("No", "Thumb-1", "Thumb-2");
+ return true;
+ case 10:
+ *tag_name = "VFP_arch";
+ KNOWN_VALUES ("No", "VFPv1", "VFPv2", "VFPv3", "VFPv3-D16");
+ return true;
+ case 11:
+ *tag_name = "WMMX_arch";
+ KNOWN_VALUES ("No", "WMMXv1", "WMMXv2");
+ return true;
+ case 12:
+ *tag_name = "Advanced_SIMD_arch";
+ KNOWN_VALUES ("No", "NEONv1");
+ return true;
+ case 13:
+ *tag_name = "PCS_config";
+ KNOWN_VALUES ("None",
+ "Bare platform",
+ "Linux application",
+ "Linux DSO",
+ "PalmOS 2004",
+ "PalmOS (reserved)",
+ "SymbianOS 2004",
+ "SymbianOS (reserved)");
+ return true;
+ case 14:
+ *tag_name = "ABI_PCS_R9_use";
+ KNOWN_VALUES ("V6", "SB", "TLS", "Unused");
+ return true;
+ case 15:
+ *tag_name = "ABI_PCS_RW_data";
+ KNOWN_VALUES ("Absolute", "PC-relative", "SB-relative", "None");
+ return true;
+ case 16:
+ *tag_name = "ABI_PCS_RO_data";
+ KNOWN_VALUES ("Absolute", "PC-relative", "None");
+ return true;
+ case 17:
+ *tag_name = "ABI_PCS_GOT_use";
+ KNOWN_VALUES ("None", "direct", "GOT-indirect");
+ return true;
+ case 18:
+ *tag_name = "ABI_PCS_wchar_t";
+ return true;
+ case 19:
+ *tag_name = "ABI_FP_rounding";
+ KNOWN_VALUES ("Unused", "Needed");
+ return true;
+ case 20:
+ *tag_name = "ABI_FP_denormal";
+ KNOWN_VALUES ("Unused", "Needed", "Sign only");
+ return true;
+ case 21:
+ *tag_name = "ABI_FP_exceptions";
+ KNOWN_VALUES ("Unused", "Needed");
+ return true;
+ case 22:
+ *tag_name = "ABI_FP_user_exceptions";
+ KNOWN_VALUES ("Unused", "Needed");
+ return true;
+ case 23:
+ *tag_name = "ABI_FP_number_model";
+ KNOWN_VALUES ("Unused", "Finite", "RTABI", "IEEE 754");
+ return true;
+ case 24:
+ *tag_name = "ABI_align8_needed";
+ KNOWN_VALUES ("No", "Yes", "4-byte");
+ return true;
+ case 25:
+ *tag_name = "ABI_align8_preserved";
+ KNOWN_VALUES ("No", "Yes, except leaf SP", "Yes");
+ return true;
+ case 26:
+ *tag_name = "ABI_enum_size";
+ KNOWN_VALUES ("Unused", "small", "int", "forced to int");
+ return true;
+ case 27:
+ *tag_name = "ABI_HardFP_use";
+ KNOWN_VALUES ("as VFP_arch", "SP only", "DP only", "SP and DP");
+ return true;
+ case 28:
+ *tag_name = "ABI_VFP_args";
+ KNOWN_VALUES ("AAPCS", "VFP registers", "custom");
+ return true;
+ case 29:
+ *tag_name = "ABI_WMMX_args";
+ KNOWN_VALUES ("AAPCS", "WMMX registers", "custom");
+ return true;
+ case 30:
+ *tag_name = "ABI_optimization_goals";
+ KNOWN_VALUES ("None",
+ "Prefer Speed",
+ "Aggressive Speed",
+ "Prefer Size",
+ "Aggressive Size",
+ "Prefer Debug",
+ "Aggressive Debug");
+ return true;
+ case 31:
+ *tag_name = "ABI_FP_optimization_goals";
+ KNOWN_VALUES ("None",
+ "Prefer Speed",
+ "Aggressive Speed",
+ "Prefer Size",
+ "Aggressive Size",
+ "Prefer Accuracy",
+ "Aggressive Accuracy");
+ return true;
+ case 34:
+ *tag_name = "CPU_unaligned_access";
+ KNOWN_VALUES ("None", "v6");
+ return true;
+ case 36:
+ *tag_name = "VFP_HP_extension";
+ KNOWN_VALUES ("Not Allowed", "Allowed");
+ return true;
+ case 38:
+ *tag_name = "ABI_FP_16bit_format";
+ KNOWN_VALUES ("None", "IEEE 754", "Alternative Format");
+ return true;
+ case 64:
+ *tag_name = "nodefaults";
+ return true;
+ case 65:
+ *tag_name = "also_compatible_with";
+ return true;
+ case 66:
+ *tag_name = "T2EE_use";
+ KNOWN_VALUES ("Not Allowed", "Allowed");
+ return true;
+ case 67:
+ *tag_name = "conformance";
+ return true;
+ case 68:
+ *tag_name = "Virtualization_use";
+ KNOWN_VALUES ("Not Allowed", "Allowed");
+ return true;
+ case 70:
+ *tag_name = "MPextension_use";
+ KNOWN_VALUES ("Not Allowed", "Allowed");
+ return true;
+ }
+
+ return false;
+}
diff --git a/backends/arm_auxv.c b/backends/arm_auxv.c
new file mode 100644
index 00000000..728f940d
--- /dev/null
+++ b/backends/arm_auxv.c
@@ -0,0 +1,46 @@
+/* ARM-specific auxv handling.
+ Copyright (C) 2009 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils 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; version 2 of the License.
+
+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define BACKEND arm_
+#include "libebl_CPU.h"
+
+int
+EBLHOOK(auxv_info) (GElf_Xword a_type, const char **name, const char **format)
+{
+ if (a_type != AT_HWCAP)
+ return 0;
+
+ *name = "HWCAP";
+ *format = "b"
+ "swp\0" "half\0" "thumb\0" "26bit\0"
+ "fast-mult\0" "fpa\0" "vfp\0" "edsp\0"
+ "java\0" "iwmmxt\0"
+ "\0";
+ return 1;
+}
diff --git a/backends/arm_corenote.c b/backends/arm_corenote.c
new file mode 100644
index 00000000..6f2d3a3e
--- /dev/null
+++ b/backends/arm_corenote.c
@@ -0,0 +1,73 @@
+/* ARM specific core note handling.
+ Copyright (C) 2009 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils 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; version 2 of the License.
+
+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <elf.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/time.h>
+
+#define BACKEND arm_
+#include "libebl_CPU.h"
+
+
+static const Ebl_Register_Location prstatus_regs[] =
+ {
+ { .offset = 0, .regno = 0, .count = 16, .bits = 32 }, /* r0..r15 */
+ { .offset = 16 * 4, .regno = 128, .count = 1, .bits = 32 }, /* cpsr */
+ };
+#define PRSTATUS_REGS_SIZE (18 * 4)
+
+#define PRSTATUS_REGSET_ITEMS \
+ { \
+ .name = "orig_r0", .type = ELF_T_SWORD, .format = 'd', \
+ .offset = offsetof (struct EBLHOOK(prstatus), pr_reg) + (4 * 17), \
+ .group = "register" \
+ }
+
+static const Ebl_Register_Location fpregset_regs[] =
+ {
+ { .offset = 0, .regno = 96, .count = 8, .bits = 96 }, /* f0..f7 */
+ };
+#define FPREGSET_SIZE 140
+
+#define ULONG uint32_t
+#define PID_T int32_t
+#define UID_T uint16_t
+#define GID_T uint16_t
+#define ALIGN_ULONG 4
+#define ALIGN_PID_T 4
+#define ALIGN_UID_T 2
+#define ALIGN_GID_T 2
+#define TYPE_ULONG ELF_T_WORD
+#define TYPE_PID_T ELF_T_SWORD
+#define TYPE_UID_T ELF_T_HALF
+#define TYPE_GID_T ELF_T_HALF
+
+#include "linux-core-note.c"
diff --git a/backends/arm_init.c b/backends/arm_init.c
index 172af198..15c0ee67 100644
--- a/backends/arm_init.c
+++ b/backends/arm_init.c
@@ -1,5 +1,5 @@
/* Initialization of Arm specific backend library.
- Copyright (C) 2002, 2005 Red Hat, Inc.
+ Copyright (C) 2002, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -50,7 +50,15 @@ arm_init (elf, machine, eh, ehlen)
/* We handle it. */
eh->name = "ARM";
arm_init_reloc (eh);
+ HOOK (eh, segment_type_name);
+ HOOK (eh, section_type_name);
+ HOOK (eh, machine_flag_check);
HOOK (eh, reloc_simple_type);
+ HOOK (eh, register_info);
+ HOOK (eh, core_note);
+ HOOK (eh, auxv_info);
+ HOOK (eh, check_object_attribute);
+ HOOK (eh, return_value_location);
return MODVERSION;
}
diff --git a/backends/arm_regs.c b/backends/arm_regs.c
new file mode 100644
index 00000000..0a9536d4
--- /dev/null
+++ b/backends/arm_regs.c
@@ -0,0 +1,117 @@
+/* Register names and numbers for ARM DWARF.
+ Copyright (C) 2009 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils 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; version 2 of the License.
+
+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <dwarf.h>
+
+#define BACKEND arm_
+#include "libebl_CPU.h"
+
+ssize_t
+arm_register_info (Ebl *ebl __attribute__ ((unused)),
+ int regno, char *name, size_t namelen,
+ const char **prefix, const char **setname,
+ int *bits, int *type)
+{
+ if (name == NULL)
+ return 320;
+
+ if (regno < 0 || regno > 320 || namelen < 5)
+ return -1;
+
+ *prefix = NULL;
+ *bits = 32;
+ *type = DW_ATE_signed;
+ *setname = "integer";
+
+ switch (regno)
+ {
+ case 0 ... 9:
+ name[0] = 'r';
+ name[1] = regno + '0';
+ namelen = 2;
+ break;
+
+ case 10 ... 12:
+ name[0] = 'r';
+ name[1] = '1';
+ name[2] = regno % 10 + '0';
+ namelen = 3;
+ break;
+
+ case 13 ... 15:
+ *type = DW_ATE_address;
+ name[0] = "slp"[regno - 13];
+ name[1] = "prc"[regno - 13];
+ namelen = 2;
+ break;
+
+ case 16 + 0 ... 16 + 7:
+ regno += 96 - 16;
+ /* Fall through. */
+ case 96 + 0 ... 96 + 7:
+ *setname = "FPA";
+ *type = DW_ATE_float;
+ *bits = 96;
+ name[0] = 'f';
+ name[1] = regno - 96 + '0';
+ namelen = 2;
+ break;
+
+ case 128:
+ *type = DW_ATE_unsigned;
+ return stpcpy (name, "spsr") + 1 - name;
+
+ case 256 + 0 ... 256 + 9:
+ *setname = "VFP";
+ *type = DW_ATE_float;
+ *bits = 64;
+ name[0] = 'd';
+ name[1] = regno - 256 + '0';
+ namelen = 2;
+ break;
+
+ case 256 + 10 ... 256 + 31:
+ *setname = "VFP";
+ *type = DW_ATE_float;
+ *bits = 64;
+ name[0] = 'd';
+ name[1] = (regno - 256) / 10 + '0';
+ name[2] = (regno - 256) % 10 + '0';
+ namelen = 3;
+ break;
+
+ default:
+ *setname = NULL;
+ return 0;
+ }
+
+ name[namelen++] = '\0';
+ return namelen;
+}
diff --git a/backends/arm_retval.c b/backends/arm_retval.c
new file mode 100644
index 00000000..4ffc6e7c
--- /dev/null
+++ b/backends/arm_retval.c
@@ -0,0 +1,138 @@
+/* Function return value location for ARM EABI.
+ Copyright (C) 2009 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils 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; version 2 of the License.
+
+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <assert.h>
+#include <dwarf.h>
+
+#define BACKEND arm_
+#include "libebl_CPU.h"
+
+
+/* r0, or pair r0, r1, or aggregate up to r0-r3. */
+static const Dwarf_Op loc_intreg[] =
+ {
+ { .atom = DW_OP_reg0 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_reg1 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 4 },
+ };
+#define nloc_intreg 1
+#define nloc_intregs(n) (2 * (n))
+
+/* The return value is a structure and is actually stored in stack space
+ passed in a hidden argument by the caller. But, the compiler
+ helpfully returns the address of that space in r0. */
+static const Dwarf_Op loc_aggregate[] =
+ {
+ { .atom = DW_OP_breg0, .number = 0 }
+ };
+#define nloc_aggregate 1
+
+
+int
+arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+{
+ /* Start with the function's type, and get the DW_AT_type attribute,
+ which is the type of the return value. */
+
+ Dwarf_Attribute attr_mem;
+ Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
+ &attr_mem);
+ if (attr == NULL)
+ /* The function has no return value, like a `void' function in C. */
+ return 0;
+
+ Dwarf_Die die_mem;
+ Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
+ int tag = dwarf_tag (typedie);
+
+ /* Follow typedefs and qualifiers to get to the actual type. */
+ while (tag == DW_TAG_typedef
+ || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
+ || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
+ {
+ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
+ typedie = dwarf_formref_die (attr, &die_mem);
+ tag = dwarf_tag (typedie);
+ }
+
+ Dwarf_Word size;
+ switch (tag)
+ {
+ case -1:
+ return -1;
+
+ case DW_TAG_subrange_type:
+ if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
+ {
+ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
+ typedie = dwarf_formref_die (attr, &die_mem);
+ tag = dwarf_tag (typedie);
+ }
+ /* Fall through. */
+
+ case DW_TAG_base_type:
+ case DW_TAG_enumeration_type:
+ case DW_TAG_pointer_type:
+ case DW_TAG_ptr_to_member_type:
+ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
+ &attr_mem), &size) != 0)
+ {
+ if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
+ size = 4;
+ else
+ return -1;
+ }
+ if (size <= 16)
+ {
+ intreg:
+ *locp = loc_intreg;
+ return size <= 4 ? nloc_intreg : nloc_intregs ((size + 3) / 4);
+ }
+
+ aggregate:
+ *locp = loc_aggregate;
+ return nloc_aggregate;
+
+ case DW_TAG_structure_type:
+ case DW_TAG_class_type:
+ case DW_TAG_union_type:
+ case DW_TAG_array_type:
+ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
+ &attr_mem), &size) == 0
+ && size > 0 && size <= 4)
+ goto intreg;
+ goto aggregate;
+ }
+
+ /* XXX We don't have a good way to return specific errors from ebl calls.
+ This value means we do not understand the type, but it is well-formed
+ DWARF and might be valid. */
+ return -2;
+}
diff --git a/backends/arm_symbol.c b/backends/arm_symbol.c
index 6d2f56d3..e08874bb 100644
--- a/backends/arm_symbol.c
+++ b/backends/arm_symbol.c
@@ -1,7 +1,6 @@
/* Arm specific symbolic name handling.
- Copyright (C) 2002, 2005 Red Hat, Inc.
+ Copyright (C) 2002-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
Red Hat elfutils is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by the
@@ -34,6 +33,76 @@
#define BACKEND arm_
#include "libebl_CPU.h"
+
+const char *
+arm_segment_type_name (int segment, char *buf __attribute__ ((unused)),
+ size_t len __attribute__ ((unused)))
+{
+ switch (segment)
+ {
+ case PT_ARM_EXIDX:
+ return "ARM_EXIDX";
+ }
+ return NULL;
+}
+
+/* Return symbolic representation of section type. */
+const char *
+arm_section_type_name (int type,
+ char *buf __attribute__ ((unused)),
+ size_t len __attribute__ ((unused)))
+{
+ switch (type)
+ {
+ case SHT_ARM_EXIDX:
+ return "ARM_EXIDX";
+ case SHT_ARM_PREEMPTMAP:
+ return "ARM_PREEMPTMAP";
+ case SHT_ARM_ATTRIBUTES:
+ return "ARM_ATTRIBUTES";
+ }
+
+ return NULL;
+}
+
+/* Check whether machine flags are valid. */
+bool
+arm_machine_flag_check (GElf_Word flags)
+{
+ switch (flags & EF_ARM_EABIMASK)
+ {
+ case EF_ARM_EABI_UNKNOWN:
+ case EF_ARM_EABI_VER1:
+ case EF_ARM_EABI_VER2:
+ case EF_ARM_EABI_VER3:
+ case EF_ARM_EABI_VER4:
+ case EF_ARM_EABI_VER5:
+ break;
+ default:
+ return false;
+ }
+
+ return ((flags &~ (EF_ARM_EABIMASK
+ | EF_ARM_RELEXEC
+ | EF_ARM_HASENTRY
+ | EF_ARM_INTERWORK
+ | EF_ARM_APCS_26
+ | EF_ARM_APCS_FLOAT
+ | EF_ARM_PIC
+ | EF_ARM_ALIGN8
+ | EF_ARM_NEW_ABI
+ | EF_ARM_OLD_ABI
+ | EF_ARM_SOFT_FLOAT
+ | EF_ARM_VFP_FLOAT
+ | EF_ARM_MAVERICK_FLOAT
+ | EF_ARM_SYMSARESORTED
+ | EF_ARM_DYNSYMSUSESEGIDX
+ | EF_ARM_MAPSYMSFIRST
+ | EF_ARM_EABIMASK
+ | EF_ARM_BE8
+ | EF_ARM_LE8)) == 0);
+}
+
/* Check for the simple reloc types. */
Elf_Type
arm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
diff --git a/backends/i386_corenote.c b/backends/i386_corenote.c
index c371c4c3..89890252 100644
--- a/backends/i386_corenote.c
+++ b/backends/i386_corenote.c
@@ -1,5 +1,5 @@
/* i386 specific core note handling.
- Copyright (C) 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2007-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -101,7 +101,7 @@ static const Ebl_Register_Location prxfpreg_regs[] =
};
#define EXTRA_NOTES \
- EXTRA_REGSET (NT_PRFPXREG, 512, prxfpreg_regs) \
+ EXTRA_REGSET (NT_PRXFPREG, 512, prxfpreg_regs) \
case NT_386_TLS: \
return tls_info (descsz, regs_offset, nregloc, reglocs, nitems, items); \
EXTRA_NOTES_IOPERM
diff --git a/backends/ia64_symbol.c b/backends/ia64_symbol.c
index 2609db0f..1edef8b5 100644
--- a/backends/ia64_symbol.c
+++ b/backends/ia64_symbol.c
@@ -1,5 +1,5 @@
/* IA-64 specific symbolic name handling.
- Copyright (C) 2002, 2003, 2005, 2006, 2007 Red Hat, Inc.
+ Copyright (C) 2002-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -102,9 +102,9 @@ ia64_section_type_name (int type,
switch (type)
{
case SHT_IA_64_EXT:
- return "SHT_IA_64_EXT";
+ return "IA_64_EXT";
case SHT_IA_64_UNWIND:
- return "SHT_IA_64_UNWIND";
+ return "IA_64_UNWIND";
}
return NULL;
diff --git a/backends/ppc_attrs.c b/backends/ppc_attrs.c
index 733b8749..985df3f9 100644
--- a/backends/ppc_attrs.c
+++ b/backends/ppc_attrs.c
@@ -1,5 +1,5 @@
/* Object attribute tags for PowerPC.
- Copyright (C) 2008 Red Hat, Inc.
+ Copyright (C) 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -66,6 +66,16 @@ ppc_check_object_attribute (ebl, vendor, tag, value, tag_name, value_name)
if (value < sizeof vector_kinds / sizeof vector_kinds[0])
*value_name = vector_kinds[value];
return true;
+
+ case 12:
+ *tag_name = "GNU_Power_ABI_Struct_Return";
+ static const char *struct_return_kinds[] =
+ {
+ "Any", "r3/r4", "Memory"
+ };
+ if (value < sizeof struct_return_kinds / sizeof struct_return_kinds[0])
+ *value_name = struct_return_kinds[value];
+ return true;
}
return false;
diff --git a/backends/sparc_reloc.def b/backends/sparc_reloc.def
index de650974..a7ea52a3 100644
--- a/backends/sparc_reloc.def
+++ b/backends/sparc_reloc.def
@@ -1,5 +1,5 @@
/* List the relocation types for sparc. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
+ Copyright (C) 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -25,82 +25,94 @@
/* NAME, REL|EXEC|DYN */
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (8, 0)
-RELOC_TYPE (16, 0)
-RELOC_TYPE (32, 0)
-RELOC_TYPE (DISP8, 0)
-RELOC_TYPE (DISP16, 0)
-RELOC_TYPE (DISP32, 0)
-RELOC_TYPE (WDISP30, 0)
-RELOC_TYPE (WDISP22, 0)
-RELOC_TYPE (HI22, 0)
-RELOC_TYPE (22, 0)
-RELOC_TYPE (13, 0)
-RELOC_TYPE (LO10, 0)
-RELOC_TYPE (GOT10, 0)
-RELOC_TYPE (GOT13, 0)
-RELOC_TYPE (GOT22, 0)
-RELOC_TYPE (PC10, 0)
-RELOC_TYPE (PC22, 0)
-RELOC_TYPE (WPLT30, 0)
+RELOC_TYPE (NONE, REL)
+RELOC_TYPE (8, REL)
+RELOC_TYPE (16, REL)
+RELOC_TYPE (32, REL|DYN)
+RELOC_TYPE (DISP8, REL)
+RELOC_TYPE (DISP16, REL)
+RELOC_TYPE (DISP32, REL)
+RELOC_TYPE (WDISP30, REL)
+RELOC_TYPE (WDISP22, REL)
+RELOC_TYPE (HI22, REL)
+RELOC_TYPE (22, REL)
+RELOC_TYPE (13, REL)
+RELOC_TYPE (LO10, REL)
+RELOC_TYPE (GOT10, REL)
+RELOC_TYPE (GOT13, REL)
+RELOC_TYPE (GOT22, REL)
+RELOC_TYPE (PC10, REL)
+RELOC_TYPE (PC22, REL)
+RELOC_TYPE (WPLT30, REL)
RELOC_TYPE (COPY, EXEC)
RELOC_TYPE (GLOB_DAT, EXEC|DYN)
RELOC_TYPE (JMP_SLOT, EXEC|DYN)
RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (UA32, 0)
-RELOC_TYPE (PLT32, 0)
-RELOC_TYPE (HIPLT22, 0)
-RELOC_TYPE (LOPLT10, 0)
-RELOC_TYPE (PCPLT32, 0)
-RELOC_TYPE (PCPLT22, 0)
-RELOC_TYPE (PCPLT10, 0)
-RELOC_TYPE (10, 0)
-RELOC_TYPE (11, 0)
-RELOC_TYPE (64, 0)
-RELOC_TYPE (OLO10, 0)
-RELOC_TYPE (HH22, 0)
-RELOC_TYPE (HM10, 0)
-RELOC_TYPE (LM22, 0)
-RELOC_TYPE (PC_HH22, 0)
-RELOC_TYPE (PC_HM10, 0)
-RELOC_TYPE (PC_LM22, 0)
-RELOC_TYPE (WDISP16, 0)
-RELOC_TYPE (WDISP19, 0)
-RELOC_TYPE (7, 0)
-RELOC_TYPE (5, 0)
-RELOC_TYPE (6, 0)
-RELOC_TYPE (DISP64, 0)
-RELOC_TYPE (PLT64, 0)
-RELOC_TYPE (HIX22, 0)
-RELOC_TYPE (LOX10, 0)
-RELOC_TYPE (H44, 0)
-RELOC_TYPE (M44, 0)
-RELOC_TYPE (L44, 0)
-RELOC_TYPE (REGISTER, 0)
-RELOC_TYPE (UA64, 0)
-RELOC_TYPE (UA16, 0)
-RELOC_TYPE (TLS_GD_HI22, 0)
-RELOC_TYPE (TLS_GD_LO10, 0)
-RELOC_TYPE (TLS_GD_ADD, 0)
-RELOC_TYPE (TLS_GD_CALL, 0)
-RELOC_TYPE (TLS_LDM_HI22, 0)
-RELOC_TYPE (TLS_LDM_LO10, 0)
-RELOC_TYPE (TLS_LDM_ADD, 0)
-RELOC_TYPE (TLS_LDM_CALL, 0)
-RELOC_TYPE (TLS_LDO_HIX22, 0)
-RELOC_TYPE (TLS_LDO_LOX10, 0)
-RELOC_TYPE (TLS_LDO_ADD, 0)
-RELOC_TYPE (TLS_IE_HI22, 0)
-RELOC_TYPE (TLS_IE_LO10, 0)
-RELOC_TYPE (TLS_IE_LD, 0)
-RELOC_TYPE (TLS_IE_LDX, 0)
-RELOC_TYPE (TLS_IE_ADD, 0)
-RELOC_TYPE (TLS_LE_HIX22, 0)
-RELOC_TYPE (TLS_LE_LOX10, 0)
-RELOC_TYPE (TLS_DTPMOD32, 0)
-RELOC_TYPE (TLS_DTPMOD64, 0)
-RELOC_TYPE (TLS_DTPOFF32, 0)
-RELOC_TYPE (TLS_DTPOFF64, 0)
-RELOC_TYPE (TLS_TPOFF32, 0)
-RELOC_TYPE (TLS_TPOFF64, 0)
+RELOC_TYPE (UA32, REL)
+RELOC_TYPE (PLT32, REL)
+RELOC_TYPE (HIPLT22, REL)
+RELOC_TYPE (LOPLT10, REL)
+RELOC_TYPE (PCPLT32, REL)
+RELOC_TYPE (PCPLT22, REL)
+RELOC_TYPE (PCPLT10, REL)
+RELOC_TYPE (10, REL)
+RELOC_TYPE (11, REL)
+RELOC_TYPE (64, REL|DYN)
+RELOC_TYPE (OLO10, REL)
+RELOC_TYPE (HH22, REL)
+RELOC_TYPE (HM10, REL)
+RELOC_TYPE (LM22, REL)
+RELOC_TYPE (PC_HH22, REL)
+RELOC_TYPE (PC_HM10, REL)
+RELOC_TYPE (PC_LM22, REL)
+RELOC_TYPE (WDISP16, REL)
+RELOC_TYPE (WDISP19, REL)
+RELOC_TYPE (GLOB_JMP, EXEC|DYN)
+RELOC_TYPE (7, REL)
+RELOC_TYPE (5, REL)
+RELOC_TYPE (6, REL)
+RELOC_TYPE (DISP64, REL)
+RELOC_TYPE (PLT64, REL)
+RELOC_TYPE (HIX22, REL)
+RELOC_TYPE (LOX10, REL)
+RELOC_TYPE (H44, REL)
+RELOC_TYPE (M44, REL)
+RELOC_TYPE (L44, REL)
+RELOC_TYPE (REGISTER, REL)
+RELOC_TYPE (UA64, REL)
+RELOC_TYPE (UA16, REL)
+RELOC_TYPE (TLS_GD_HI22, REL)
+RELOC_TYPE (TLS_GD_LO10, REL)
+RELOC_TYPE (TLS_GD_ADD, REL)
+RELOC_TYPE (TLS_GD_CALL, REL)
+RELOC_TYPE (TLS_LDM_HI22, REL)
+RELOC_TYPE (TLS_LDM_LO10, REL)
+RELOC_TYPE (TLS_LDM_ADD, REL)
+RELOC_TYPE (TLS_LDM_CALL, REL)
+RELOC_TYPE (TLS_LDO_HIX22, REL)
+RELOC_TYPE (TLS_LDO_LOX10, REL)
+RELOC_TYPE (TLS_LDO_ADD, REL)
+RELOC_TYPE (TLS_IE_HI22, REL)
+RELOC_TYPE (TLS_IE_LO10, REL)
+RELOC_TYPE (TLS_IE_LD, REL)
+RELOC_TYPE (TLS_IE_LDX, REL)
+RELOC_TYPE (TLS_IE_ADD, REL)
+RELOC_TYPE (TLS_LE_HIX22, REL)
+RELOC_TYPE (TLS_LE_LOX10, REL)
+RELOC_TYPE (TLS_DTPMOD32, DYN)
+RELOC_TYPE (TLS_DTPMOD64, DYN)
+RELOC_TYPE (TLS_DTPOFF32, DYN)
+RELOC_TYPE (TLS_DTPOFF64, DYN)
+RELOC_TYPE (TLS_TPOFF32, DYN)
+RELOC_TYPE (TLS_TPOFF64, DYN)
+RELOC_TYPE (GOTDATA_HIX22, REL)
+RELOC_TYPE (GOTDATA_LOX10, REL)
+RELOC_TYPE (GOTDATA_OP_HIX22, DYN)
+RELOC_TYPE (GOTDATA_OP_LOX10, DYN)
+RELOC_TYPE (GOTDATA_OP, DYN)
+RELOC_TYPE (H34, REL)
+RELOC_TYPE (SIZE32, REL)
+RELOC_TYPE (SIZE64, REL)
+RELOC_TYPE (GNU_VTINHERIT, REL)
+RELOC_TYPE (GNU_VTENTRY, REL)
+RELOC_TYPE (REV32, REL)
diff --git a/config/ChangeLog b/config/ChangeLog
index 0c503736..798a2f93 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,26 @@
+2009-04-19 Roland McGrath <roland@redhat.com>
+
+ * version.h.in: Revert last change.
+
+2009-04-17 Roland McGrath <roland@redhat.com>
+
+ * version.h.in (_ELFUTILS_PREREQ): Multiple major by 1000000 and minor
+ by 1000; now _ELFUTILS_VERSION is 789000 for version 0.789.
+
+2009-01-22 Ulrich Drepper <drepper@redhat.com>
+
+ * elfutils.spec.in: Distribute <elfutils/version.h> in
+ elfutils-libelf-devel.
+
+2009-01-22 Roland McGrath <roland@redhat.com>
+
+ * known-dwarf.awk: Handle DW_FOO_BAR_* sets better.
+
+2009-01-11 Roland McGrath <roland@redhat.com>
+
+ * known-dwarf.awk: New file.
+ * Makefile.am (EXTRA_DIST): Add it.
+
2008-12-24 Roland McGrath <roland@redhat.com>
* Makefile.am ($(srcdir)/elfutils.spec.in): Rewrite awk magic.
diff --git a/config/Makefile.am b/config/Makefile.am
index f2db4efb..91adeee5 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -1,7 +1,7 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
## Configure input file for elfutils.
##
-## Copyright (C) 2004, 2005, 2008 Red Hat, Inc.
+## Copyright (C) 2004, 2005, 2008, 2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -25,7 +25,7 @@
## Network licensing program, please visit www.openinventionnetwork.com
## <http://www.openinventionnetwork.com>.
##
-EXTRA_DIST = elfutils.spec.in
+EXTRA_DIST = elfutils.spec.in known-dwarf.awk
if MAINTAINER_MODE
$(srcdir)/elfutils.spec.in: $(top_srcdir)/NEWS
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
index 55be54c3..04fc34b3 100644
--- a/config/elfutils.spec.in
+++ b/config/elfutils.spec.in
@@ -176,12 +176,34 @@ rm -rf ${RPM_BUILD_ROOT}
%{_includedir}/libelf.h
%{_includedir}/gelf.h
%{_includedir}/nlist.h
+%{_includedir}/elfutils/version.h
%{_libdir}/libelf.so
%files libelf-devel-static
%{_libdir}/libelf.a
%changelog
+* Thu Apr 23 2009 Ulrich Drepper <drepper@redhat.com> 0.141-1
+- libebl: sparc backend fixes; some more arm backend support
+- libdwfl: fix dwfl_module_build_id for prelinked DSO case;
+ fixes in core file support; dwfl_module_getsym interface
+ improved for non-address symbols
+- strip: fix infinite loop on strange inputs with -f
+- addr2line: take -j/--section=NAME option for binutils compatibility
+ (same effect as '(NAME)0x123' syntax already supported)
+
+* Mon Feb 16 2009 Ulrich Drepper <drepper@redhat.com> 0.140-1
+- libelf: Fix regression in creation of section header
+- libdwfl: Less strict behavior if DWARF reader ist just used to
+ display data
+
+* Thu Jan 22 2009 Ulrich Drepper <drepper@redhat.com> 0.139-1
+- libcpu: Add Intel SSE4 disassembler support
+- readelf: Implement call frame information and exception handling
+ dumping. Add -e option. Enable it implicitly for -a.
+- elflint: Check PT_GNU_EH_FRAME program header entry.
+- libdwfl: Support automatic gzip/bzip2 decompression of ELF files.
+
* Wed Dec 31 2008 Roland McGrath <roland@redhat.com> 0.138-1
- Install <elfutils/version.h> header file for applications to use in
source version compatibility checks.
diff --git a/config/known-dwarf.awk b/config/known-dwarf.awk
new file mode 100644
index 00000000..3089dd27
--- /dev/null
+++ b/config/known-dwarf.awk
@@ -0,0 +1,55 @@
+#!/bin/awk -f
+
+$1 == "enum" { set = ""; next }
+
+set == "" && $1 ~ /DW_([A-Z_]+)_([^ ]+)/ {
+ set = $1;
+ sub(/^DW_/, "", set);
+ sub(/_[^[:upper:]_].*$/, "", set);
+ if (set ~ /LANG_.+/) set = "LANG";
+}
+
+$1 ~ /DW([_A-Z]+)_([^ ]+)/ {
+ match($1, ("DW_" set "_([^ ]+)"), fields);
+ elt = fields[1];
+ if (set in DW)
+ DW[set] = DW[set] "," elt;
+ else
+ DW[set] = elt;
+ if ($NF == "*/" && $4 == "/*") {
+ c = $5;
+ for (i = 6; i < NF; ++i) c = c " " $i;
+ comment[set, elt] = c;
+ }
+}
+
+END {
+ print "/* Generated by config/dwarf-known.awk from libdw.h contents. */";
+ n = asorti(DW, sets);
+ for (i = 1; i <= n; ++i) {
+ set = sets[i];
+ if (what && what != set) continue;
+ split(DW[set], elts, ",");
+ m = asort(elts);
+ lo = hi = "";
+ if (m == 0) continue;
+ print "\n#define ALL_KNOWN_DW_" set " \\";
+ for (j = 1; j <= m; ++j) {
+ elt = elts[j];
+ if (elt ~ /(lo|low)_user$/) {
+ lo = elt;
+ continue;
+ }
+ if (elt ~ /(hi|high)_user$/) {
+ hi = elt;
+ continue;
+ }
+ if (comment[set, elt])
+ print " ONE_KNOWN_DW_" set "_DESC (" elt ", DW_" set "_" elt \
+ ", \"" comment[set, elt] "\") \\";
+ else
+ print " ONE_KNOWN_DW_" set " (" elt ", DW_" set "_" elt ") \\";
+ }
+ print " /* End of DW_" set "_*. */";
+ }
+}
diff --git a/configure.ac b/configure.ac
index 6a3b6a7f..4931530c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
dnl Configure input file for elfutils. -*-autoconf-*-
dnl
-dnl Copyright (C) 1996-2009 Red Hat, Inc.
+dnl Copyright (C) 1996-2008, 2009 Red Hat, Inc.
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
@@ -16,13 +16,13 @@ dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software Foundation,
dnl Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
dnl
-AC_INIT([Red Hat elfutils],[0.138],[http://bugzilla.redhat.com/bugzilla/],
+AC_INIT([Red Hat elfutils],[0.141],[http://bugzilla.redhat.com/bugzilla/],
[elfutils])
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_FILES([config/Makefile])
-AC_COPYRIGHT([Copyright (C) 1996-2007, 2008 Red Hat, Inc.])
+AC_COPYRIGHT([Copyright (C) 1996-2009 Red Hat, Inc.])
AC_PREREQ(2.59) dnl Minimum Autoconf version required.
dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
@@ -48,13 +48,13 @@ AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
AC_CANONICAL_HOST
-AC_ARG_ENABLE([tls],
-AS_HELP_STRING([--enable-tls], [enable use of thread local storage]),
-use_tls=yes, use_tls=no)
-AM_CONDITIONAL(USE_TLS, test "$use_tls" = yes)
-AS_IF([test "$use_tls" = yes], [AC_DEFINE(USE_TLS)])
+AC_ARG_ENABLE([thread-safety],
+AS_HELP_STRING([--enable-thread-safety], [enable thread safety of libraries]),
+use_tls=locks, use_locks=no)
+AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
+AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
-AH_TEMPLATE([USE_TLS], [Defined if thread local storage should be used.])
+AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
dnl Add all the languages for which translations are available.
ALL_LINGUAS=
@@ -74,6 +74,23 @@ CFLAGS="$old_CFLAGS"])
AS_IF([test "x$ac_cv_c99" != xyes],
AC_MSG_ERROR([gcc with C99 support required]))
+AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
+# Use the same flags that we use for our DSOs, so the test is representative.
+# Some old compiler/linker/libc combinations fail some ways and not others.
+save_CFLAGS="$CFLAGS"
+save_LDFLAGS="$LDFLAGS"
+CFLAGS="-fpic $CFLAGS"
+LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS"
+AC_LINK_IFELSE([dnl
+AC_LANG_PROGRAM([[#undef __thread
+static __thread int a; int foo (int b) { return a + b; }]],
+ [[exit (foo (0));]])],
+ ac_cv_tls=yes, ac_cv_tls=no)
+CFLAGS="$save_CFLAGS"
+LDFLAGS="$save_LDFLAGS"])
+AS_IF([test "x$ac_cv_tls" != xyes],
+ AC_MSG_ERROR([__thread support required]))
+
LOCALEDIR=$datadir
AC_SUBST(LOCALEDIR)
AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR")
@@ -186,7 +203,7 @@ dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am
dnl conditional and config.h USE_ZLIB/USE_BZLIB #define.
save_LIBS="$LIBS"
LIBS=
-eu_ZIPLIB(z,Z,z,gzdopen,gzip)
+eu_ZIPLIB(z,Z,z,gzdirect,gzip)
eu_ZIPLIB(bz,BZ,bz2,BZ2_bzdopen,bzip2)
zip_LIBS="$LIBS"
LIBS="$save_LIBS"
@@ -242,12 +259,38 @@ AH_BOTTOM([#include <eu-config.h>])
dnl Version compatibility header.
AC_CONFIG_FILES([version.h:config/version.h.in])
AC_SUBST([eu_version])
-case $PACKAGE_VERSION in
-0.???) eu_version=${PACKAGE_VERSION#0.} ;;
-?.???) eu_version=${PACKAGE_VERSION/./} ;;
-?.??) eu_version=${PACKAGE_VERSION/./}0 ;;
-?.?) eu_version=${PACKAGE_VERSION/./}00 ;;
-*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
+
+# 1.234<whatever> -> 1234<whatever>
+case "$PACKAGE_VERSION" in
+[[0-9]].*) eu_version="${PACKAGE_VERSION/./}" ;;
+*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
+esac
+case "$eu_version" in
+*.*)
+ # 1234.567 -> "1234", "567"
+ eu_extra_version="${eu_version#*.}"
+ eu_version="${eu_version%%.*}"
+ case "$eu_extra_version" in
+ [[0-9]][[0-9]][[0-9]]) ;;
+ [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
+ [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
+ *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
+ esac
+ ;;
+*)
+ eu_extra_version=000
+ ;;
esac
+case "$eu_version" in
+ 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
+[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
+[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
+[[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
+*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
+esac
+
+# Round up to the next release API (x.y) version.
+[eu_version=$[($eu_version + 999) / 1000]]
+
AC_OUTPUT
diff --git a/lib/ChangeLog b/lib/ChangeLog
index f4c261ab..06991826 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,18 @@
+2009-01-23 Roland McGrath <roland@redhat.com>
+
+ * eu-config.h: Add multiple inclusion protection.
+
+2009-01-17 Ulrich Drepper <drepper@redhat.com>
+
+ * system.h (ARGP_PROGRAM_VERSION_HOOK_DEF): Define.
+ (ARGP_PROGRAM_BUG_ADDRESS_DEF): Define.
+
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * eu-config.h: Remove tls_key_t, key_create, getspecific, setspecific,
+ once_define, and once_execute macros. Use USE_LOCKS instead of
+ USE_TLS.
+
2008-08-25 Roland McGrath <roland@redhat.com>
* eu-config.h [USE_TLS] (RWLOCK_CALL): New macro.
diff --git a/lib/eu-config.h b/lib/eu-config.h
index c41cbb0c..32f501ae 100644
--- a/lib/eu-config.h
+++ b/lib/eu-config.h
@@ -1,5 +1,5 @@
/* Configuration definitions.
- Copyright (C) 2008 Red Hat, Inc.
+ Copyright (C) 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -46,15 +46,12 @@
Network licensing program, please visit www.openinventionnetwork.com
<http://www.openinventionnetwork.com>. */
-#ifdef USE_TLS
+#ifndef EU_CONFIG_H
+#define EU_CONFIG_H 1
+
+#ifdef USE_LOCKS
# include <pthread.h>
# include <assert.h>
-# define tls_key_t __thread void *
-# define key_create(keyp, freefct) (1)
-# define getspecific(key) key
-# define setspecific(key,val) key = val
-# define once_define(class,name) class struct { } name
-# define once_execute(name,fct) ((void) &name, (void) (fct))
# define rwlock_define(class,name) class pthread_rwlock_t name
# define RWLOCK_CALL(call) \
({ int _err = pthread_rwlock_ ## call; assert_perror (_err); })
@@ -67,25 +64,13 @@
/* Eventually we will allow multi-threaded applications to use the
libraries. Therefore we will add the necessary locking although
the macros used expand to nothing for now. */
-# define lock_lock(lock) ((void) (lock))
# define rwlock_define(class,name) class int name
# define rwlock_init(lock) ((void) (lock))
# define rwlock_fini(lock) ((void) (lock))
# define rwlock_rdlock(lock) ((void) (lock))
# define rwlock_wrlock(lock) ((void) (lock))
# define rwlock_unlock(lock) ((void) (lock))
-# define tls_key_t void *
-# define key_create(keyp, freefct) (1)
-# define getspecific(key) key
-# define setspecific(key,val) key = val
-# define once_define(class,name) class int name
-# define once_execute(name,fct) \
- do { \
- if (name == 0) \
- fct (); \
- name = 1; \
- } while (0)
-#endif /* USE_TLS */
+#endif /* USE_LOCKS */
/* gettext helper macro. */
#define N_(Str) Str
@@ -196,3 +181,6 @@ asm (".section predict_data, \"aw\"; .previous\n"
/* This macro is used by the tests conditionalize for standalone building. */
#define ELFUTILS_HEADER(name) <lib##name.h>
+
+
+#endif /* eu-config.h */
diff --git a/lib/system.h b/lib/system.h
index 23c666ad..10b4734a 100644
--- a/lib/system.h
+++ b/lib/system.h
@@ -1,5 +1,5 @@
/* Declarations for common convenience functions.
- Copyright (C) 2006 Red Hat, Inc.
+ Copyright (C) 2006, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -78,4 +78,16 @@ extern int crc32_file (int fd, uint32_t *resp);
#define pread_retry(fd, buf, len, off) \
TEMP_FAILURE_RETRY (pread (fd, buf, len, off))
+
+/* We need define two variables, argp_program_version_hook and
+ argp_program_bug_address, in all programs. argp.h declares these
+ variables as non-const (which is correct in general). But we can
+ do better, it is not going to change. So we want to move them into
+ the .rodata section. Define macros to do the trick. */
+#define ARGP_PROGRAM_VERSION_HOOK_DEF \
+ void (*const apvh) (FILE *, struct argp_state *) \
+ __asm ("argp_program_version_hook")
+#define ARGP_PROGRAM_BUG_ADDRESS_DEF \
+ const char *const apba__ __asm ("argp_program_bug_address")
+
#endif /* system.h */
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
index c98deb64..d0d40396 100644
--- a/libasm/ChangeLog
+++ b/libasm/ChangeLog
@@ -1,3 +1,8 @@
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * Makefile.am: Use USE_LOCKS instead of USE_TLS.
+ * asm_error.c: Always use __thread. Remove all !USE_TLS code.
+
2008-12-03 Ulrich Drepper <drepper@redhat.com>
* Makefile.am [USE_TLS]: Like libasm.so with libpthread.
diff --git a/libasm/Makefile.am b/libasm/Makefile.am
index 62b5ee29..7d5e25d1 100644
--- a/libasm/Makefile.am
+++ b/libasm/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to create Makefile.in
##
-## Copyright (C) 2002, 2004, 2005, 2006, 2008 Red Hat, Inc.
+## Copyright (C) 2002, 2004, 2005, 2006, 2008, 2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -66,7 +66,7 @@ libasm_pic_a_SOURCES =
am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os)
libasm_so_LDLIBS =
-if USE_TLS
+if USE_LOCKS
libasm_so_LDLIBS += -lpthread
endif
diff --git a/libasm/asm_error.c b/libasm/asm_error.c
index 29c54cb0..4d249e9f 100644
--- a/libasm/asm_error.c
+++ b/libasm/asm_error.c
@@ -1,5 +1,5 @@
/* Error handling in libasm.
- Copyright (C) 2002, 2004, 2005 Red Hat, Inc.
+ Copyright (C) 2002, 2004, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -36,50 +36,13 @@
/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
+static __thread int global_error;
int
asm_errno (void)
{
- int result;
-
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We have a key. Use it to get the thread-specific buffer. */
- int *buffer = getspecific (key);
- if (buffer == NULL)
- {
- /* No buffer allocated so far. */
- buffer = (int *) malloc (sizeof (int));
- if (buffer == NULL)
- /* No more memory available. We use the static buffer. */
- buffer = &global_error;
-
- setspecific (key, buffer);
-
- *buffer = 0;
- }
-
- result = *buffer;
- *buffer = ASM_E_NOERROR;
- return result;
- }
-
- result = global_error;
+ int result = global_error;
global_error = ASM_E_NOERROR;
return result;
}
@@ -89,27 +52,6 @@ void
__libasm_seterrno (value)
int value;
{
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We have a key. Use it to get the thread-specific buffer. */
- int *buffer = getspecific (key);
- if (buffer == NULL)
- {
- /* No buffer allocated so far. */
- buffer = malloc (sizeof (int));
- if (buffer == NULL)
- /* No more memory available. We use the static buffer. */
- buffer = &global_error;
-
- setspecific (key, buffer);
- }
-
- *buffer = value;
- }
-
global_error = value;
}
@@ -133,31 +75,7 @@ const char *
asm_errmsg (error)
int error;
{
- int last_error;
-
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if ((error == 0 || error == -1) && threaded)
- {
- /* We have a key. Use it to get the thread-specific buffer. */
- int *buffer = (int *) getspecific (key);
- if (buffer == NULL)
- {
- /* No buffer allocated so far. */
- buffer = (int *) malloc (sizeof (int));
- if (buffer == NULL)
- /* No more memory available. We use the static buffer. */
- buffer = &global_error;
-
- setspecific (key, buffer);
- *buffer = 0;
- }
-
- last_error = *buffer;
- }
- else
- last_error = global_error;
+ int last_error = global_error;
if (error < -1)
return _("unknown error");
@@ -173,25 +91,3 @@ asm_errmsg (error)
return _(msgs[last_error]);
}
-
-
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem)
-{
- free (mem);
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
index a043e45f..738af57a 100644
--- a/libcpu/ChangeLog
+++ b/libcpu/ChangeLog
@@ -1,3 +1,13 @@
+2009-04-14 Roland McGrath <roland@redhat.com>
+
+ * Makefile.am (AM_CFLAGS): Add -fdollars-in-identifiers; it is not the
+ default on every machine.
+
+2009-01-23 Roland McGrath <roland@redhat.com>
+
+ * Makefile.am (i386_parse_CFLAGS): Use quotes around command
+ substitution that can produce leading whitespace.
+
2009-01-01 Ulrich Drepper <drepper@redhat.com>
* i386_parse.y (instrtable_out): Optimize match_data table by not
diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am
index 51817c1e..923556f6 100644
--- a/libcpu/Makefile.am
+++ b/libcpu/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to create Makefile.in
##
-## Copyright (C) 2002, 2004, 2005, 2007, 2008 Red Hat, Inc.
+## Copyright (C) 2002, 2004, 2005, 2007, 2008, 2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -31,6 +31,7 @@ else
AM_CFLAGS =
endif
AM_CFLAGS += -Wall -Wshadow -Wunused -Wextra -std=gnu99 -fpic \
+ -fdollars-in-identifiers \
$($(*F)_CFLAGS) \
$(if $($(*F)_no_Werror),,-Werror)
INCLUDES = -I$(srcdir) -I$(srcdir)/../lib -I$(srcdir)/../libelf \
@@ -70,7 +71,7 @@ libeu = ../lib/libeu.a
i386_lex_CFLAGS = -Wno-unused-label -Wno-unused-function -Wno-sign-compare
i386_parse.o: i386_parse.c i386.mnemonics
-i386_parse_CFLAGS = -DNMNES=$$(wc -l < i386.mnemonics)
+i386_parse_CFLAGS = -DNMNES="`wc -l < i386.mnemonics`"
i386_lex.o: i386_parse.h
i386_gendis_LDADD = $(libeu) -lm $(libmudflap)
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index fb1a8b0a..93a59673 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,8 +1,69 @@
+2009-04-15 Roland McGrath <roland@redhat.com>
+
+ * dwarf.h (DW_CIE_ID): Removed.
+ (DW_CIE_ID_32, DW_CIE_ID_64): New constants replace it.
+
+2009-04-01 Roland McGrath <roland@redhat.com>
+
+ * dwarf.h: Add DW_CFA_GNU_negative_offset_extended.
+
+2009-01-28 Roland McGrath <roland@redhat.com>
+
+ * libdwP.h (struct Dwarf_Line_s): Move out of struct Dwarf_Lines_s
+ defn so C++ doesn't scope the name to not match the Dwarf_Line typedef.
+
+ * libdwP.h (struct Dwarf_Files_s): Replace dbg field with cu field.
+
+2009-01-26 Roland McGrath <roland@redhat.com>
+
+ * dwarf_ranges.c: Return 0 when no ranges or *_pc attrs at all.
+
+2009-01-25 Roland McGrath <roland@redhat.com>
+
+ * dwarf_getattrs.c: Correctly skip attribute values when restarting.
+
+2009-01-23 Roland McGrath <roland@redhat.com>
+
+ * Makefile.am ($(srcdir)/known-dwarf.h): Target renamed back.
+ Put these rules under if MAINTAINER_MODE.
+
+2009-01-22 Roland McGrath <roland@redhat.com>
+
+ * dwarf.h: Add DW_OP_GNU_encoded_addr.
+
+2009-01-21 Roland McGrath <roland@redhat.com>
+
+ * Makefile.am (CLEANFILES): Renamed to ...
+ (MOSTLYCLEANFILES): ... here.
+ (CLEANFILES): New variable, add known-dwarf.h.
+
+2009-01-17 Roland McGrath <roland@redhat.com>
+
+ * Makefile.am (known-dwarf.h): Target renamed, not in $(srcdir).
+ Make it unconditional.
+ (BUILT_SOURCES): Updated.
+
+ * dwarf.h: Add description comments for DW_LANG_* values.
+
+ * Makefile.am [MAINTAINER_MODE]
+ ($(srcdir)/known-dwarf.h): New target.
+ (BUILT_SOURCES): Add it.
+
+ * dwarf.h: Add DW_OP_GNU_push_tls_address, DW_OP_GNU_uninit.
+
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * dwarf_error.c: Always use __thread. Remove all !USE_TLS code.
+
2009-01-08 Roland McGrath <roland@redhat.com>
* Makefile.am (libdw.so): Don't depend on $(zip_LIBS), just link it in.
-2009-01-06 Roland McGrath <roland@redhat.com>
+2008-01-06 Roland McGrath <roland@redhat.com>
+
+ * libdwP.h (struct Dwarf_Abbrev): Change type of 'has_children' to bool.
+ Reorder members.
+ * dwarf_haschildren.c: Return -1 for error case, not 0.
* Makefile.am (libdw.so): Link in $(zip_LIBS).
diff --git a/libdw/Makefile.am b/libdw/Makefile.am
index 56c7a2ff..e624ac10 100644
--- a/libdw/Makefile.am
+++ b/libdw/Makefile.am
@@ -85,6 +85,14 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \
libdw_visit_scopes.c \
dwarf_entry_breakpoints.c
+if MAINTAINER_MODE
+BUILT_SOURCES = $(srcdir)/known-dwarf.h
+MAINTAINERCLEANFILES = $(srcdir)/known-dwarf.h
+$(srcdir)/known-dwarf.h: $(top_srcdir)/config/known-dwarf.awk $(srcdir)/dwarf.h
+ $(AWK) -f $^ > $@.new
+ mv -f $@.new $@
+endif
+
if !MUDFLAP
libdw_pic_a_SOURCES =
am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os)
@@ -130,4 +138,4 @@ noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h
EXTRA_DIST = libdw.map
-CLEANFILES = $(am_libdw_pic_a_OBJECTS) *.gcno *.gcda libdw.so.$(VERSION)
+MOSTLYCLEANFILES = $(am_libdw_pic_a_OBJECTS) *.gcno *.gcda libdw.so.$(VERSION)
diff --git a/libdw/dwarf.h b/libdw/dwarf.h
index 091519c5..0546e3eb 100644
--- a/libdw/dwarf.h
+++ b/libdw/dwarf.h
@@ -1,5 +1,5 @@
/* This file defines standard DWARF types, structures, and macros.
- Copyright (C) 2000, 2002, 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2000,2002,2005,2006,2007,2008,2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -432,6 +432,11 @@ enum
DW_OP_call_frame_cfa = 0x9c,/* CFA as determined by CFI. */
DW_OP_bit_piece = 0x9d, /* ULEB128 size and ULEB128 offset in bits. */
+ /* GNU extensions. */
+ DW_OP_GNU_push_tls_address = 0xe0,
+ DW_OP_GNU_uninit = 0xf0,
+ DW_OP_GNU_encoded_addr = 0xf1,
+
DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */
DW_OP_hi_user = 0xff /* Implementation-defined range end. */
};
@@ -515,25 +520,25 @@ enum
/* DWARF language encodings. */
enum
{
- DW_LANG_C89 = 0x0001,
- DW_LANG_C = 0x0002,
- DW_LANG_Ada83 = 0x0003,
- DW_LANG_C_plus_plus = 0x0004,
- DW_LANG_Cobol74 = 0x0005,
- DW_LANG_Cobol85 = 0x0006,
- DW_LANG_Fortran77 = 0x0007,
- DW_LANG_Fortran90 = 0x0008,
- DW_LANG_Pascal83 = 0x0009,
- DW_LANG_Modula2 = 0x000a,
- DW_LANG_Java = 0x000b,
- DW_LANG_C99 = 0x000c,
- DW_LANG_Ada95 = 0x000d,
- DW_LANG_Fortran95 = 0x000e,
- DW_LANG_PL1 = 0x000f,
- DW_LANG_Objc = 0x0010,
- DW_LANG_ObjC_plus_plus = 0x0011,
- DW_LANG_UPC = 0x0012,
- DW_LANG_D = 0x0013,
+ DW_LANG_C89 = 0x0001, /* ISO C:1989 */
+ DW_LANG_C = 0x0002, /* C */
+ DW_LANG_Ada83 = 0x0003, /* ISO Ada:1983 */
+ DW_LANG_C_plus_plus = 0x0004, /* ISO C++:1998 */
+ DW_LANG_Cobol74 = 0x0005, /* ISO Cobol:1974 */
+ DW_LANG_Cobol85 = 0x0006, /* ISO Cobol:1985 */
+ DW_LANG_Fortran77 = 0x0007, /* ISO FORTRAN 77 */
+ DW_LANG_Fortran90 = 0x0008, /* ISO Fortran 90 */
+ DW_LANG_Pascal83 = 0x0009, /* ISO Pascal:1983 */
+ DW_LANG_Modula2 = 0x000a, /* ISO Modula-2:1996 */
+ DW_LANG_Java = 0x000b, /* Java */
+ DW_LANG_C99 = 0x000c, /* ISO C:1999 */
+ DW_LANG_Ada95 = 0x000d, /* ISO Ada:1995 */
+ DW_LANG_Fortran95 = 0x000e, /* ISO Fortran 95 */
+ DW_LANG_PL1 = 0x000f, /* ISO PL/1:1976 */
+ DW_LANG_Objc = 0x0010, /* Objective-C */
+ DW_LANG_ObjC_plus_plus = 0x0011, /* Objective-C++ */
+ DW_LANG_UPC = 0x0012, /* Unified Parallel C */
+ DW_LANG_D = 0x0013, /* D */
DW_LANG_lo_user = 0x8000,
DW_LANG_Mips_Assembler = 0x8001,
@@ -665,13 +670,15 @@ enum
DW_CFA_MIPS_advance_loc8 = 0x1d,
DW_CFA_GNU_window_save = 0x2d,
DW_CFA_GNU_args_size = 0x2e,
+ DW_CFA_GNU_negative_offset_extended = 0x2f,
DW_CFA_high_user = 0x3f
};
/* ID indicating CIE as opposed to FDE in .debug_frame. */
enum
{
- DW_CIE_ID = 0xffffffff
+ DW_CIE_ID_32 = 0xffffffffU, /* In 32-bit format CIE header. */
+ DW_CIE_ID_64 = 0xffffffffffffffffULL /* In 64-bit format CIE header. */
};
diff --git a/libdw/dwarf_error.c b/libdw/dwarf_error.c
index ee1e7faa..86ff8213 100644
--- a/libdw/dwarf_error.c
+++ b/libdw/dwarf_error.c
@@ -1,5 +1,5 @@
/* Retrieve ELF descriptor used for DWARF access.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -58,46 +58,14 @@
#include "libdwP.h"
-#ifdef USE_TLS
/* The error number. */
static __thread int global_error;
-#else
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void __attribute__ ((unused)) free_key_mem (void *mem);
-#endif /* TLS */
int
dwarf_errno (void)
{
- int result;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- result = (intptr_t) getspecific (key);
-
- setspecific (key, (void *) (intptr_t) DWARF_E_NOERROR);
- return result;
- }
-#endif /* TLS */
-
- result = global_error;
+ int result = global_error;
global_error = DWARF_E_NOERROR;
return result;
}
@@ -151,16 +119,6 @@ void
__libdw_seterrno (value)
int value;
{
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- setspecific (key, (void *) (intptr_t) value);
-#endif /* TLS */
-
global_error = (value >= 0 && value < (int) nerrmsgs
? value : DWARF_E_UNKNOWN_ERROR);
}
@@ -170,19 +128,7 @@ const char *
dwarf_errmsg (error)
int error;
{
- int last_error;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if ((error == 0 || error == -1) && threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- last_error = (intptr_t) getspecific (key);
- else
-#endif /* TLS */
- last_error = global_error;
+ int last_error = global_error;
if (error == 0)
return last_error != 0 ? _(errmsgs[last_error]) : NULL;
@@ -192,23 +138,3 @@ dwarf_errmsg (error)
return _(errmsgs[error == -1 ? last_error : error]);
}
INTDEF(dwarf_errmsg)
-
-
-#ifndef USE_TLS
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem __attribute__ ((unused)))
-{
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
-#endif /* TLS */
diff --git a/libdw/dwarf_getattrs.c b/libdw/dwarf_getattrs.c
index 42f25ca0..051dc25f 100644
--- a/libdw/dwarf_getattrs.c
+++ b/libdw/dwarf_getattrs.c
@@ -1,5 +1,5 @@
/* Get attributes of the DIE.
- Copyright (C) 2004, 2005, 2008 Red Hat, Inc.
+ Copyright (C) 2004, 2005, 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2004.
@@ -62,6 +62,9 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *),
if (die == NULL)
return -1l;
+ if (unlikely (offset == 1))
+ return 1;
+
const unsigned char *die_addr = die->addr;
/* Get the abbreviation code. */
@@ -80,7 +83,8 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *),
}
/* This is where the attributes start. */
- const unsigned char *attrp = die->abbrev->attrp + offset;
+ const unsigned char *attrp = die->abbrev->attrp;
+ const unsigned char *const offset_attrp = die->abbrev->attrp + offset;
/* Go over the list of attributes. */
Dwarf *dbg = die->cu->dbg;
@@ -108,16 +112,21 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *),
offset of an attribute. */
return 1l;
- /* Fill in the rest. */
- attr.valp = (unsigned char *) die_addr;
- attr.cu = die->cu;
-
- /* Now call the callback function. */
- if (callback (&attr, arg) != DWARF_CB_OK)
- /* Return the offset of the start of the attribute, so that
- dwarf_getattrs() can be restarted from this point if the
- caller so desires. */
- return remembered_attrp - die->abbrev->attrp;
+ /* If we are not to OFFSET_ATTRP yet, we just have to skip
+ the values of the intervening attributes. */
+ if (remembered_attrp >= offset_attrp)
+ {
+ /* Fill in the rest. */
+ attr.valp = (unsigned char *) die_addr;
+ attr.cu = die->cu;
+
+ /* Now call the callback function. */
+ if (callback (&attr, arg) != DWARF_CB_OK)
+ /* Return the offset of the start of the attribute, so that
+ dwarf_getattrs() can be restarted from this point if the
+ caller so desires. */
+ return remembered_attrp - die->abbrev->attrp;
+ }
/* Skip over the rest of this attribute (if there is any). */
if (attr.form != 0)
diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
index 9b3c97af..fe0e67d6 100644
--- a/libdw/dwarf_getsrclines.c
+++ b/libdw/dwarf_getsrclines.c
@@ -1,5 +1,5 @@
/* Return line number information of CU.
- Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2004-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2004.
@@ -634,8 +634,8 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines)
dirs[i] = dirarray[i]->dir;
dirs[ndirlist] = NULL;
- /* Remember the debugging descriptor. */
- files->dbg = dbg;
+ /* Remember the referring CU. */
+ files->cu = cu;
/* Make the file data structure available through the CU. */
cu->files = files;
diff --git a/libdw/dwarf_haschildren.c b/libdw/dwarf_haschildren.c
index fe431955..d9a47ad2 100644
--- a/libdw/dwarf_haschildren.c
+++ b/libdw/dwarf_haschildren.c
@@ -1,5 +1,5 @@
/* Return string associated with given attribute.
- Copyright (C) 2003, 2005 Red Hat, Inc.
+ Copyright (C) 2003, 2005, 2008 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -77,7 +77,7 @@ dwarf_haschildren (die)
if (unlikely (die->abbrev == DWARF_END_ABBREV))
{
__libdw_seterrno (DWARF_E_INVALID_DWARF);
- return 0;
+ return -1;
}
return die->abbrev->has_children;
diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c
index 89da0af4..1eef617b 100644
--- a/libdw/dwarf_ranges.c
+++ b/libdw/dwarf_ranges.c
@@ -1,5 +1,5 @@
/* Enumerate the PC ranges covered by a DIE.
- Copyright (C) 2005, 2007 Red Hat, Inc.
+ Copyright (C) 2005, 2007, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -78,8 +78,9 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
/* We have to look for a noncontiguous range. */
const Elf_Data *d = die->cu->dbg->sectiondata[IDX_debug_ranges];
- if (d == NULL)
+ if (d == NULL && offset != 0)
{
+ no_ranges:
__libdw_seterrno (DWARF_E_NO_DEBUG_RANGES);
return -1;
}
@@ -90,13 +91,17 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_ranges,
&attr_mem);
if (attr == NULL)
- return -1;
+ /* No PC attributes in this DIE at all, so an empty range list. */
+ return 0;
/* Must have the form data4 or data8 which act as an offset. */
Dwarf_Word start_offset;
if (INTUSE(dwarf_formudata) (attr, &start_offset) != 0)
return -1;
+ if (d == NULL)
+ goto no_ranges;
+
offset = start_offset;
assert ((Dwarf_Word) offset == start_offset);
diff --git a/libdw/libdwP.h b/libdw/libdwP.h
index f805295f..1d5a9b27 100644
--- a/libdw/libdwP.h
+++ b/libdw/libdwP.h
@@ -1,5 +1,5 @@
/* Internal definitions for libdwarf.
- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2002-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -194,12 +194,12 @@ struct Dwarf
/* Abbreviation representation. */
struct Dwarf_Abbrev
{
+ Dwarf_Off offset;
+ unsigned char *attrp;
+ unsigned int attrcnt;
unsigned int code;
unsigned int tag;
- int has_children;
- unsigned int attrcnt;
- unsigned char *attrp;
- Dwarf_Off offset;
+ bool has_children;
};
#include "dwarf_abbrev_hash.h"
@@ -208,7 +208,7 @@ struct Dwarf_Abbrev
/* Files in line information records. */
struct Dwarf_Files_s
{
- Dwarf *dbg;
+ struct Dwarf_CU *cu;
unsigned int ndirs;
unsigned int nfiles;
struct Dwarf_Fileinfo_s
@@ -223,26 +223,27 @@ typedef struct Dwarf_Fileinfo_s Dwarf_Fileinfo;
/* Representation of a row in the line table. */
-struct Dwarf_Lines_s
- {
- size_t nlines;
- struct Dwarf_Line_s
- {
- Dwarf_Addr addr;
- unsigned int file;
- int line;
- unsigned short int column;
- unsigned int is_stmt:1;
- unsigned int basic_block:1;
- unsigned int end_sequence:1;
- unsigned int prologue_end:1;
- unsigned int epilogue_begin:1;
-
- Dwarf_Files *files;
- } info[0];
- };
+struct Dwarf_Line_s
+{
+ Dwarf_Addr addr;
+ unsigned int file;
+ int line;
+ unsigned short int column;
+ unsigned int is_stmt:1;
+ unsigned int basic_block:1;
+ unsigned int end_sequence:1;
+ unsigned int prologue_end:1;
+ unsigned int epilogue_begin:1;
+ Dwarf_Files *files;
+};
+
+struct Dwarf_Lines_s
+{
+ size_t nlines;
+ struct Dwarf_Line_s info[0];
+};
/* Representation of address ranges. */
struct Dwarf_Aranges_s
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 2ddfc3af..8f51ca73 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,110 @@
+2009-04-23 Ulrich Drepper <drepper@redhat.com>
+
+ * dwfl_module_build_id.c: Define versioned symbols only if SHARED is
+ defined. Otherwise just define the latest version.
+
+2009-04-22 Roland McGrath <roland@redhat.com>
+
+ * relocate.c (resolve_symbol): Apply correct bias to st_value found in
+ a non-ET_REL module.
+
+ * dwfl_module_build_id.c (__libdwfl_find_build_id): Fix last change to
+ adjust properly for non-ET_REL.
+
+2009-04-21 Roland McGrath <roland@redhat.com>
+
+ * dwfl_module_getsym.c: Apply non-ET_REL bias only if SHF_ALLOC.
+
+ * relocate.c (__libdwfl_relocate_value): Assert that MOD is ET_REL.
+ * derelocate.c (cache_sections): Call __libdwfl_relocate_value only
+ for ET_REL.
+ * dwfl_module_build_id.c (__libdwfl_find_build_id): Likewise.
+
+2009-04-20 Roland McGrath <roland@redhat.com>
+
+ * dwfl_module_getdwarf.c (__libdwfl_getelf): Add internal_function.
+
+2009-04-19 Roland McGrath <roland@redhat.com>
+
+ * dwfl_module_getdwarf.c (find_file): Renamed to ...
+ (__libdwfl_getelf): ... this. Make it global.
+ (find_symtab, find_dw): Update callers.
+ (dwfl_module_getelf): Functions moved ...
+ * dwfl_module_getelf.c: ... here, new file.
+ * Makefile.am (libdwfl_a_SOURCES): Add it.
+ * libdwflP.h: Declare __libdwfl_getelf.
+
+2009-04-14 Roland McGrath <roland@redhat.com>
+
+ * dwfl_segment_report_module.c: Handle DT_STRTAB value being either
+ absolute (already adjusted in place) or needing load bias adjustment.
+
+ * core-file.c (dwfl_elf_phdr_memory_callback): Fix return value for
+ gelf_getphdr failure. Fix file size limit checks.
+
+ * dwfl_segment_report_module.c: Fix underflow in DYNSTRSZ check.
+
+2009-04-08 Roland McGrath <roland@redhat.com>
+
+ * dwfl_module_getsym.c: Don't adjust for bias again after
+ __libdwfl_relocate_value.
+
+ * relocate.c (__libdwfl_relocate_value): Don't adjust a value from
+ a non-SHF_ALLOC section.
+ (relocate_getsym): Test st_shndx for SHN_* values, not *SHNDX.
+ * dwfl_module_getsym.c (dwfl_module_getsym): Likewise.
+
+2009-03-09 Roland McGrath <roland@redhat.com>
+
+ * dwfl_module_build_id.c (__libdwfl_find_build_id): Move SHSTRNDX
+ variable to outer scope, so we cache it for the loop.
+
+ * relocate.c (__libdwfl_relocate_value): Add MOD->main.bias to sh_addr.
+
+2009-02-12 Roland McGrath <roland@redhat.com>
+
+ * dwfl_module_build_id.c (__libdwfl_find_build_id): Use
+ __libdwfl_relocate_value to find correct sh_addr value.
+
+2009-02-10 Roland McGrath <roland@redhat.com>
+
+ * dwfl_report_elf.c (__libdwfl_report_elf): Take new arg SANITY.
+ If false, don't fail for NO_PHDR.
+ (dwfl_report_elf): Update caller.
+ * libdwflP.h: Update decl.
+ * offline.c (process_elf): Call it with false, so we don't refuse
+ dubiously-formed objects here.
+
+ * link_map.c (consider_executable): Don't assert dwfl_addrsegment
+ finds our module. We shouldn't crash when we confuse some guesses.
+
+2009-02-10 Ulrich Drepper <drepper@redhat.com>
+
+ * open.c (decompress): Avoid crash with empty input file.
+
+2009-01-27 Roland McGrath <roland@redhat.com>
+
+ * dwfl_report_elf.c (__libdwfl_report_elf): Ignore trailing PT_LOAD
+ with zero vaddr and memsz.
+
+2009-01-22 Roland McGrath <roland@redhat.com>
+
+ * open.c (decompress): Move BUFFER, SIZE decls outside #if.
+
+ * dwfl_segment_report_module.c (addr_segndx): Remove bogus adjustments
+ after address-matching loop.
+
+ * segment.c (lookup): Fix fencepost in checking for HINT match.
+
+2009-01-14 Roland McGrath <roland@redhat.com>
+
+ * gzip.c [!BZLIB] (mapped_zImage): New function.
+ (unzip) [!BZLIB]: Grok Linux kernel zImage format.
+
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * dwfl_error.c: Always use __thread. Remove all !USE_TLS code.
+
2009-01-08 Roland McGrath <roland@redhat.com>
* linux-kernel-modules.c (dwfl_linux_kernel_report_offline):
diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am
index 605f9243..ebcb072a 100644
--- a/libdwfl/Makefile.am
+++ b/libdwfl/Makefile.am
@@ -51,8 +51,8 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \
dwfl_module.c dwfl_report_elf.c relocate.c \
dwfl_module_build_id.c dwfl_module_report_build_id.c \
derelocate.c offline.c segment.c \
- dwfl_module_info.c dwfl_getmodules.c \
- dwfl_module_getdwarf.c dwfl_getdwarf.c \
+ dwfl_module_info.c dwfl_getmodules.c dwfl_getdwarf.c \
+ dwfl_module_getdwarf.c dwfl_module_getelf.c \
dwfl_validate_address.c \
argp-std.c find-debuginfo.c \
dwfl_build_id_find_elf.c \
diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c
index bc881eb9..77f208cc 100644
--- a/libdwfl/core-file.c
+++ b/libdwfl/core-file.c
@@ -1,5 +1,5 @@
/* Core file handling.
- Copyright (C) 2008 Red Hat, Inc.
+ Copyright (C) 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -278,7 +278,7 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx,
do
if (unlikely (gelf_getphdr (elf, ndx++, &phdr) == NULL))
- return true;
+ return false;
while (phdr.p_type != PT_LOAD
|| ((phdr.p_vaddr + phdr.p_memsz + align - 1) & -align) <= vaddr);
@@ -320,8 +320,14 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx,
if (elf->map_address != NULL)
(void) more (elf->maximum_size - start);
- if (unlikely (end - start > elf->maximum_size))
- end = start + elf->maximum_size;
+ /* Make sure we don't look past the end of the actual file,
+ even if the headers tell us to. */
+ if (unlikely (end > elf->maximum_size))
+ end = elf->maximum_size;
+
+ /* If the file is too small, there is nothing at all to get. */
+ if (unlikely (start >= end))
+ return false;
if (elf->map_address != NULL)
{
diff --git a/libdwfl/derelocate.c b/libdwfl/derelocate.c
index f2a64675..c300f84b 100644
--- a/libdwfl/derelocate.c
+++ b/libdwfl/derelocate.c
@@ -1,5 +1,5 @@
/* Recover relocatibility for addresses computed from debug information.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2005-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -110,7 +110,8 @@ cache_sections (Dwfl_Module *mod)
if (shdr == NULL)
goto elf_error;
- if ((shdr->sh_flags & SHF_ALLOC) && shdr->sh_addr == 0)
+ if ((shdr->sh_flags & SHF_ALLOC) && shdr->sh_addr == 0
+ && mod->e_type == ET_REL)
{
/* This section might not yet have been looked at. */
if (__libdwfl_relocate_value (mod, mod->main.elf, &shstrndx,
diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c
index 414fbaf4..df2765af 100644
--- a/libdwfl/dwfl_error.c
+++ b/libdwfl/dwfl_error.c
@@ -1,5 +1,5 @@
/* Error handling in libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005, 2006, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -61,46 +61,14 @@
#include "libdwflP.h"
-#ifdef USE_TLS
/* The error number. */
static __thread int global_error;
-#else
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
-#endif /* TLS */
int
dwfl_errno (void)
{
- int result;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- result = (intptr_t) getspecific (key);
-
- setspecific (key, (void *) (intptr_t) DWFL_E_NOERROR);
- return result;
- }
-#endif /* TLS */
-
- result = global_error;
+ int result = global_error;
global_error = DWFL_E_NOERROR;
return result;
}
@@ -172,19 +140,7 @@ void
internal_function
__libdwfl_seterrno (Dwfl_Error error)
{
- int value = canonicalize (error);
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- setspecific (key, (void *) (intptr_t) value);
-#endif /* TLS */
-
- global_error = value;
+ global_error = canonicalize (error);
}
@@ -194,19 +150,7 @@ dwfl_errmsg (error)
{
if (error == 0 || error == -1)
{
- int last_error;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- last_error = (intptr_t) getspecific (key);
- else
-#endif /* TLS */
- last_error = global_error;
+ int last_error = global_error;
if (error == 0 && last_error == 0)
return NULL;
@@ -233,26 +177,3 @@ dwfl_errmsg (error)
? error : DWFL_E_UNKNOWN_ERROR]]);
}
INTDEF (dwfl_errmsg)
-
-
-#ifndef USE_TLS
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem __attribute__ ((unused)))
-{
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
-#endif /* TLS */
diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c
index d1e0eb05..d7bbb3ca 100644
--- a/libdwfl/dwfl_module_build_id.c
+++ b/libdwfl/dwfl_module_build_id.c
@@ -1,5 +1,5 @@
/* Return build ID information for a module.
- Copyright (C) 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -97,6 +97,7 @@ int
internal_function
__libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf)
{
+ size_t shstrndx = SHN_UNDEF;
int result = 0;
Elf_Scn *scn = elf_nextscn (elf, NULL);
@@ -130,9 +131,18 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf)
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
if (likely (shdr != NULL) && shdr->sh_type == SHT_NOTE)
- result = check_notes (mod, set, elf_getdata (scn, NULL),
- (shdr->sh_flags & SHF_ALLOC)
- ? shdr->sh_addr + mod->main.bias : NO_VADDR);
+ {
+ /* Determine the right sh_addr in this module. */
+ GElf_Addr vaddr = 0;
+ if (!(shdr->sh_flags & SHF_ALLOC))
+ vaddr = NO_VADDR;
+ else if (mod->e_type != ET_REL)
+ vaddr = shdr->sh_addr + mod->main.bias;
+ else if (__libdwfl_relocate_value (mod, elf, &shstrndx,
+ elf_ndxscn (scn), &vaddr))
+ vaddr = NO_VADDR;
+ result = check_notes (mod, set, elf_getdata (scn, NULL), vaddr);
+ }
}
while (result == 0 && (scn = elf_nextscn (elf, scn)) != NULL);
@@ -164,6 +174,7 @@ __dwfl_module_build_id (Dwfl_Module *mod,
*vaddr = mod->build_id_vaddr;
return mod->build_id_len;
}
+#ifdef SHARED
extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
__attribute__ ((alias ("__dwfl_module_build_id")));
asm (".symver "
@@ -180,3 +191,7 @@ _BUG_COMPAT_dwfl_module_build_id (Dwfl_Module *mod,
}
asm (".symver "
"_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130");
+#else
+extern __typeof__ (dwfl_module_build_id) dwfl_module_build_id
+ __attribute__ ((alias ("__dwfl_module_build_id")));
+#endif
diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c
index e99aa1f8..06cb4917 100644
--- a/libdwfl/dwfl_module_getdwarf.c
+++ b/libdwfl/dwfl_module_getdwarf.c
@@ -120,8 +120,9 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file)
/* Find the main ELF file for this module and open libelf on it.
When we return success, MOD->main.elf and MOD->main.bias are set up. */
-static void
-find_file (Dwfl_Module *mod)
+void
+internal_function
+__libdwfl_getelf (Dwfl_Module *mod)
{
if (mod->main.elf != NULL /* Already done. */
|| mod->elferr != DWFL_E_NOERROR) /* Cached failure. */
@@ -496,7 +497,7 @@ find_symtab (Dwfl_Module *mod)
|| mod->symerr != DWFL_E_NOERROR) /* Cached previous failure. */
return;
- find_file (mod);
+ __libdwfl_getelf (mod);
mod->symerr = mod->elferr;
if (mod->symerr != DWFL_E_NOERROR)
return;
@@ -592,7 +593,7 @@ __libdwfl_module_getebl (Dwfl_Module *mod)
{
if (mod->ebl == NULL)
{
- find_file (mod);
+ __libdwfl_getelf (mod);
if (mod->elferr != DWFL_E_NOERROR)
return mod->elferr;
@@ -660,7 +661,7 @@ find_dw (Dwfl_Module *mod)
|| mod->dwerr != DWFL_E_NOERROR) /* Cached previous failure. */
return;
- find_file (mod);
+ __libdwfl_getelf (mod);
mod->dwerr = mod->elferr;
if (mod->dwerr != DWFL_E_NOERROR)
return;
@@ -701,46 +702,6 @@ find_dw (Dwfl_Module *mod)
mod->dwerr = __libdwfl_canon_error (mod->dwerr);
}
-
-Elf *
-dwfl_module_getelf (Dwfl_Module *mod, GElf_Addr *loadbase)
-{
- if (mod == NULL)
- return NULL;
-
- find_file (mod);
- if (mod->elferr == DWFL_E_NOERROR)
- {
- if (mod->e_type == ET_REL && ! mod->main.relocated)
- {
- /* Before letting them get at the Elf handle,
- apply all the relocations we know how to. */
-
- mod->main.relocated = true;
- if (likely (__libdwfl_module_getebl (mod) == DWFL_E_NOERROR))
- {
- (void) __libdwfl_relocate (mod, mod->main.elf, false);
-
- if (mod->debug.elf == mod->main.elf)
- mod->debug.relocated = true;
- else if (mod->debug.elf != NULL && ! mod->debug.relocated)
- {
- mod->debug.relocated = true;
- (void) __libdwfl_relocate (mod, mod->debug.elf, false);
- }
- }
- }
-
- *loadbase = mod->main.bias;
- return mod->main.elf;
- }
-
- __libdwfl_seterrno (mod->elferr);
- return NULL;
-}
-INTDEF (dwfl_module_getelf)
-
-
Dwarf *
dwfl_module_getdwarf (Dwfl_Module *mod, Dwarf_Addr *bias)
{
diff --git a/libdwfl/dwfl_module_getelf.c b/libdwfl/dwfl_module_getelf.c
new file mode 100644
index 00000000..6414a9d3
--- /dev/null
+++ b/libdwfl/dwfl_module_getelf.c
@@ -0,0 +1,88 @@
+/* Find debugging and symbol information for a module in libdwfl.
+ Copyright (C) 2009 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils 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; version 2 of the License.
+
+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ In addition, as a special exception, Red Hat, Inc. gives You the
+ additional right to link the code of Red Hat elfutils with code licensed
+ under any Open Source Initiative certified open source license
+ (http://www.opensource.org/licenses/index.php) which requires the
+ distribution of source code with any binary distribution and to
+ distribute linked combinations of the two. Non-GPL Code permitted under
+ this exception must only link to the code of Red Hat elfutils through
+ those well defined interfaces identified in the file named EXCEPTION
+ found in the source code files (the "Approved Interfaces"). The files
+ of Non-GPL Code may instantiate templates or use macros or inline
+ functions from the Approved Interfaces without causing the resulting
+ work to be covered by the GNU General Public License. Only Red Hat,
+ Inc. may make changes or additions to the list of Approved Interfaces.
+ Red Hat's grant of this exception is conditioned upon your not adding
+ any new exceptions. If you wish to add a new Approved Interface or
+ exception, please contact Red Hat. You must obey the GNU General Public
+ License in all respects for all of the Red Hat elfutils code and other
+ code used in conjunction with Red Hat elfutils except the Non-GPL Code
+ covered by this exception. If you modify this file, you may extend this
+ exception to your version of the file, but you are not obligated to do
+ so. If you do not wish to provide this exception without modification,
+ you must delete this exception statement from your version and license
+ this file solely under the GPL without exception.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#include "libdwflP.h"
+
+Elf *
+dwfl_module_getelf (Dwfl_Module *mod, GElf_Addr *loadbase)
+{
+ if (mod == NULL)
+ return NULL;
+
+ __libdwfl_getelf (mod);
+ if (mod->elferr == DWFL_E_NOERROR)
+ {
+ if (mod->e_type == ET_REL && ! mod->main.relocated)
+ {
+ /* Before letting them get at the Elf handle,
+ apply all the relocations we know how to. */
+
+ mod->main.relocated = true;
+ if (likely (__libdwfl_module_getebl (mod) == DWFL_E_NOERROR))
+ {
+ (void) __libdwfl_relocate (mod, mod->main.elf, false);
+
+ if (mod->debug.elf == mod->main.elf)
+ mod->debug.relocated = true;
+ else if (mod->debug.elf != NULL && ! mod->debug.relocated)
+ {
+ mod->debug.relocated = true;
+ (void) __libdwfl_relocate (mod, mod->debug.elf, false);
+ }
+ }
+ }
+
+ *loadbase = mod->main.bias;
+ return mod->main.elf;
+ }
+
+ __libdwfl_seterrno (mod->elferr);
+ return NULL;
+}
+INTDEF (dwfl_module_getelf)
diff --git a/libdwfl/dwfl_module_getsym.c b/libdwfl/dwfl_module_getsym.c
index 5f289ccb..f78e6ec0 100644
--- a/libdwfl/dwfl_module_getsym.c
+++ b/libdwfl/dwfl_module_getsym.c
@@ -1,5 +1,5 @@
/* Find debugging and symbol information for a module in libdwfl.
- Copyright (C) 2006,2007 Red Hat, Inc.
+ Copyright (C) 2006,2007,2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -74,12 +74,25 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx,
if (sym->st_shndx != SHN_XINDEX)
shndx = sym->st_shndx;
+ /* Figure out whether this symbol points into an SHF_ALLOC section. */
+ bool alloc = true;
+ if ((shndxp != NULL || mod->e_type != ET_REL)
+ && (sym->st_shndx == SHN_XINDEX
+ || (sym->st_shndx < SHN_LORESERVE && sym->st_shndx != SHN_UNDEF)))
+ {
+ GElf_Shdr shdr_mem;
+ GElf_Shdr *shdr = gelf_getshdr (elf_getscn (mod->symfile->elf, shndx),
+ &shdr_mem);
+ alloc = unlikely (shdr == NULL) || (shdr->sh_flags & SHF_ALLOC);
+ }
+
if (shndxp != NULL)
- *shndxp = shndx;
+ /* Yield -1 in case of a non-SHF_ALLOC section. */
+ *shndxp = alloc ? shndx : (GElf_Word) -1;
- switch (shndx)
+ switch (sym->st_shndx)
{
- case SHN_ABS:
+ case SHN_ABS: /* XXX sometimes should use bias?? */
case SHN_UNDEF:
case SHN_COMMON:
break;
@@ -99,8 +112,9 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx,
return NULL;
}
}
- /* Apply the bias to the symbol value. */
- sym->st_value += mod->symfile->bias;
+ else if (alloc)
+ /* Apply the bias to the symbol value. */
+ sym->st_value += mod->symfile->bias;
break;
}
diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c
index 3482a229..a58d3029 100644
--- a/libdwfl/dwfl_report_elf.c
+++ b/libdwfl/dwfl_report_elf.c
@@ -62,7 +62,7 @@
Dwfl_Module *
internal_function
__libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name,
- int fd, Elf *elf, GElf_Addr base)
+ int fd, Elf *elf, GElf_Addr base, bool sanity)
{
GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem);
if (ehdr == NULL)
@@ -208,14 +208,15 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name,
GElf_Phdr phdr_mem, *ph = gelf_getphdr (elf, i, &phdr_mem);
if (unlikely (ph == NULL))
goto elf_error;
- if (ph->p_type == PT_LOAD)
+ if (ph->p_type == PT_LOAD
+ && ph->p_vaddr + ph->p_memsz > 0)
{
end = base + (ph->p_vaddr + ph->p_memsz);
break;
}
}
- if (end == 0)
+ if (end == 0 && sanity)
{
__libdwfl_seterrno (DWFL_E_NO_PHDR);
return NULL;
@@ -283,7 +284,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name,
}
Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name,
- fd, elf, base);
+ fd, elf, base, true);
if (mod == NULL)
{
elf_end (elf);
diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c
index 50ed140e..10787bdc 100644
--- a/libdwfl/dwfl_segment_report_module.c
+++ b/libdwfl/dwfl_segment_report_module.c
@@ -1,5 +1,5 @@
/* Sniff out modules from ELF headers visible in memory segments.
- Copyright (C) 2008 Red Hat, Inc.
+ Copyright (C) 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -87,13 +87,6 @@ addr_segndx (Dwfl *dwfl, size_t segment, GElf_Addr addr)
while (segment < dwfl->lookup_elts - 1
&& dwfl->lookup_addr[segment] < addr);
- while (dwfl->lookup_segndx[segment] < 0
- && segment < dwfl->lookup_elts - 1)
- ++segment;
-
- if (dwfl->lookup_segndx[segment] >= 0)
- ndx = dwfl->lookup_segndx[segment];
-
return ndx;
}
@@ -526,13 +519,28 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
size_t soname_size = 0;
if (dynstrsz != 0 && dynstr_vaddr != 0)
{
- /* We know the bounds of the .dynstr section. */
- dynstr_vaddr += bias;
+ /* We know the bounds of the .dynstr section.
+
+ The DYNSTR_VADDR pointer comes from the .dynamic section
+ (DT_STRTAB, detected above). Ordinarily the dynamic linker
+ will have adjusted this pointer in place so it's now an
+ absolute address. But sometimes .dynamic is read-only (in
+ vDSOs and odd architectures), and sometimes the adjustment
+ just hasn't happened yet in the memory image we looked at.
+ So treat DYNSTR_VADDR as an absolute address if it falls
+ within the module bounds, or try applying the phdr bias
+ when that adjusts it to fall within the module bounds. */
+
+ if ((dynstr_vaddr < module_start || dynstr_vaddr >= module_end)
+ && dynstr_vaddr + bias >= module_start
+ && dynstr_vaddr + bias < module_end)
+ dynstr_vaddr += bias;
+
if (unlikely (dynstr_vaddr + dynstrsz > module_end))
dynstrsz = 0;
/* Try to get the DT_SONAME string. */
- if (soname_stroff != 0 && soname_stroff < dynstrsz - 1
+ if (soname_stroff != 0 && soname_stroff + 1 < dynstrsz
&& ! read_portion (&soname, &soname_size,
dynstr_vaddr + soname_stroff, 0))
name = soname;
diff --git a/libdwfl/gzip.c b/libdwfl/gzip.c
index ed602a66..66445254 100644
--- a/libdwfl/gzip.c
+++ b/libdwfl/gzip.c
@@ -53,6 +53,7 @@
#ifdef BZLIB
# define inflate_groks_header true
+# define mapped_zImage(...) false
# include <bzlib.h>
# define unzip __libdw_bunzip2
# define DWFL_E_ZLIB DWFL_E_BZLIB
@@ -66,12 +67,41 @@
# define gzdopen BZ2_bzdopen
# define gzread BZ2_bzread
# define gzclose BZ2_bzclose
+# define gzerror BZ2_bzerror
#else
# define inflate_groks_header false
# include <zlib.h>
# define unzip __libdw_gunzip
# define MAGIC "\037\213"
# define Z(what) Z_##what
+
+/* We can also handle Linux kernel zImage format in a very hackish way.
+ If it looks like one, we actually just scan the image for the gzip
+ magic bytes to figure out where the gzip image starts. */
+
+# define LINUX_MAGIC_OFFSET 514
+# define LINUX_MAGIC "HdrS"
+
+static bool
+mapped_zImage (off64_t *start_offset, void **mapped, size_t *mapped_size)
+{
+ const size_t pos = LINUX_MAGIC_OFFSET + sizeof LINUX_MAGIC;
+ if (*mapped_size > pos
+ && !memcmp (*mapped + LINUX_MAGIC_OFFSET,
+ LINUX_MAGIC, sizeof LINUX_MAGIC - 1))
+ {
+ void *p = memmem (*mapped + pos, *mapped_size - pos,
+ MAGIC, sizeof MAGIC - 1);
+ if (p != NULL)
+ {
+ *start_offset += p - *mapped;
+ *mapped_size = *mapped + *mapped_size - p,
+ *mapped = p;
+ return true;
+ }
+ }
+ return false;
+}
#endif
/* If this is not a compressed image, return DWFL_E_BADELF.
@@ -120,7 +150,8 @@ unzip (int fd, off64_t start_offset,
/* If the file is already mapped in, look at the header. */
if (mapped != NULL
&& (mapped_size <= sizeof MAGIC
- || memcmp (mapped, MAGIC, sizeof MAGIC - 1)))
+ || memcmp (mapped, MAGIC, sizeof MAGIC - 1))
+ && !mapped_zImage (&start_offset, &mapped, &mapped_size))
/* Not a compressed file. */
return DWFL_E_BADELF;
@@ -165,35 +196,69 @@ unzip (int fd, off64_t start_offset,
{
/* Let the decompression library read the file directly. */
- int d = dup (fd);
- if (unlikely (d < 0))
- return DWFL_E_BADELF;
- if (start_offset != 0)
- {
- off64_t off = lseek (d, start_offset, SEEK_SET);
- if (off != start_offset)
- {
- close (d);
- return DWFL_E_BADELF;
- }
- }
- gzFile zf = gzdopen (d, "r");
- if (unlikely (zf == NULL))
- {
- close (d);
- return zlib_fail (Z (MEM_ERROR));
- }
+ gzFile zf;
+ Dwfl_Error open_stream (void)
+ {
+ int d = dup (fd);
+ if (unlikely (d < 0))
+ return DWFL_E_BADELF;
+ if (start_offset != 0)
+ {
+ off64_t off = lseek (d, start_offset, SEEK_SET);
+ if (off != start_offset)
+ {
+ close (d);
+ return DWFL_E_BADELF;
+ }
+ }
+ zf = gzdopen (d, "r");
+ if (unlikely (zf == NULL))
+ {
+ close (d);
+ return zlib_fail (Z (MEM_ERROR));
+ }
+
+ /* From here on, zlib will close D. */
+
+ return DWFL_E_NOERROR;
+ }
- /* From here on, zlib will close D. */
+ Dwfl_Error result = open_stream ();
#ifndef BZLIB
- if (gzdirect (zf))
+ if (result == DWFL_E_NOERROR && gzdirect (zf))
{
+ bool found = false;
+ char buf[sizeof LINUX_MAGIC - 1];
+ gzseek (zf, start_offset + LINUX_MAGIC_OFFSET, SEEK_SET);
+ int n = gzread (zf, buf, sizeof buf);
+ if (n == sizeof buf
+ && !memcmp (buf, LINUX_MAGIC, sizeof LINUX_MAGIC - 1))
+ while (gzread (zf, buf, sizeof MAGIC - 1) == sizeof MAGIC - 1)
+ if (!memcmp (buf, MAGIC, sizeof MAGIC - 1))
+ {
+ start_offset = gztell (zf) - 2;
+ found = true;
+ break;
+ }
gzclose (zf);
- return DWFL_E_BADELF;
+ if (found)
+ {
+ result = open_stream ();
+ if (result == DWFL_E_NOERROR && unlikely (gzdirect (zf)))
+ {
+ gzclose (zf);
+ result = DWFL_E_BADELF;
+ }
+ }
+ else
+ result = DWFL_E_BADELF;
}
#endif
+ if (result != DWFL_E_NOERROR)
+ return result;
+
ptrdiff_t pos = 0;
while (1)
{
@@ -205,9 +270,9 @@ unzip (int fd, off64_t start_offset,
int n = gzread (zf, buffer + pos, size - pos);
if (n < 0)
{
-#ifdef BZLIB
int code;
- BZ2_bzerror (zf, &code);
+ gzerror (zf, &code);
+#ifdef BZLIB
if (code == BZ_DATA_ERROR_MAGIC)
{
gzclose (zf);
@@ -216,7 +281,7 @@ unzip (int fd, off64_t start_offset,
}
#endif
gzclose (zf);
- return zlib_fail (Z (DATA_ERROR));
+ return zlib_fail (code);
}
if (n == 0)
break;
diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h
index b6ae7765..91d43802 100644
--- a/libdwfl/libdwfl.h
+++ b/libdwfl/libdwfl.h
@@ -1,5 +1,5 @@
/* Interfaces for libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2005-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -423,10 +423,11 @@ extern int dwfl_module_getsymtab (Dwfl_Module *mod);
/* Fetch one entry from the module's symbol table. On errors, returns
NULL. If successful, fills in *SYM and returns the string for st_name.
- This works like gelf_getsym except that st_value is always adjusted
- to an absolute value based on the module's location. If SHNDXP is
- non-null, it's set with the section index (whether from st_shndx or
- extended index table). */
+ This works like gelf_getsym except that st_value is always adjusted to
+ an absolute value based on the module's location, when the symbol is in
+ an SHF_ALLOC section. If SHNDXP is non-null, it's set with the section
+ index (whether from st_shndx or extended index table); in case of a
+ symbol in a non-allocated section, *SHNDXP is instead set to -1. */
extern const char *dwfl_module_getsym (Dwfl_Module *mod, int ndx,
GElf_Sym *sym, GElf_Word *shndxp)
__nonnull_attribute__ (3);
diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h
index 85519498..be2ad828 100644
--- a/libdwfl/libdwflP.h
+++ b/libdwfl/libdwflP.h
@@ -241,6 +241,8 @@ struct dwfl_arange
extern void __libdwfl_module_free (Dwfl_Module *mod) internal_function;
+/* Find the main ELF file, update MOD->elferr and/or MOD->main.elf. */
+extern void __libdwfl_getelf (Dwfl_Module *mod) internal_function;
/* Process relocations in debugging sections in an ET_REL file.
FILE must be opened with ELF_C_READ_MMAP_PRIVATE or ELF_C_READ,
@@ -306,7 +308,7 @@ extern int __libdwfl_crc32_file (int fd, uint32_t *resp) attribute_hidden;
Consumes ELF on success, not on failure. */
extern Dwfl_Module *__libdwfl_report_elf (Dwfl *dwfl, const char *name,
const char *file_name, int fd,
- Elf *elf, GElf_Addr base)
+ Elf *elf, GElf_Addr base, bool sanity)
internal_function;
/* Meat of dwfl_report_offline. */
diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c
index e9890384..2d4d75f1 100644
--- a/libdwfl/link_map.c
+++ b/libdwfl/link_map.c
@@ -1,5 +1,5 @@
/* Report modules by examining dynamic linker data structures.
- Copyright (C) 2008 Red Hat, Inc.
+ Copyright (C) 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -561,9 +561,7 @@ consider_executable (Dwfl_Module *mod, GElf_Addr at_phdr, GElf_Addr at_entry,
void *buffer = NULL;
size_t buffer_available = addrsize (ehdr.e_ident[EI_CLASS]);
- Dwfl_Module *m;
- int segndx = INTUSE(dwfl_addrsegment) (mod->dwfl, d_val_vaddr, &m);
- assert (m == mod);
+ int segndx = INTUSE(dwfl_addrsegment) (mod->dwfl, d_val_vaddr, NULL);
if ((*memory_callback) (mod->dwfl, segndx,
&buffer, &buffer_available,
@@ -587,7 +585,6 @@ consider_executable (Dwfl_Module *mod, GElf_Addr at_phdr, GElf_Addr at_entry,
(*memory_callback) (mod->dwfl, -1, &buffer, &buffer_available, 0, 0,
memory_callback_arg);
-
if (*elfclass == ELFCLASSNONE)
*elfclass = ehdr.e_ident[EI_CLASS];
else if (*elfclass != ehdr.e_ident[EI_CLASS])
diff --git a/libdwfl/offline.c b/libdwfl/offline.c
index a80e2928..34aa9f84 100644
--- a/libdwfl/offline.c
+++ b/libdwfl/offline.c
@@ -148,7 +148,7 @@ process_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd,
Elf *elf)
{
Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name, fd, elf,
- dwfl->offline_next_address);
+ dwfl->offline_next_address, false);
if (mod != NULL)
{
/* If this is an ET_EXEC file with fixed addresses, the address range
diff --git a/libdwfl/open.c b/libdwfl/open.c
index ca6b862f..0ab2a9d2 100644
--- a/libdwfl/open.c
+++ b/libdwfl/open.c
@@ -64,18 +64,19 @@
/* Always consumes *ELF, never consumes FD.
Replaces *ELF on success. */
static Dwfl_Error
-decompress (int fd, Elf **elf)
+decompress (int fd __attribute__ ((unused)), Elf **elf)
{
Dwfl_Error error = DWFL_E_BADELF;
+ void *buffer = NULL;
+ size_t size = 0;
#if USE_ZLIB || USE_BZLIB
- void *buffer;
- size_t size;
-
const off64_t offset = (*elf)->start_offset;
void *const mapped = ((*elf)->map_address == NULL ? NULL
: (*elf)->map_address + (*elf)->start_offset);
const size_t mapped_size = (*elf)->maximum_size;
+ if (mapped_size == 0)
+ return error;
error = __libdw_gunzip (fd, offset, mapped, mapped_size, &buffer, &size);
if (error == DWFL_E_BADELF)
@@ -87,14 +88,22 @@ decompress (int fd, Elf **elf)
if (error == DWFL_E_NOERROR)
{
- *elf = elf_memory (buffer, size);
- if (*elf == NULL)
+ if (unlikely (size == 0))
{
- error = DWFL_E_LIBELF;
+ error = DWFL_E_BADELF;
free (buffer);
}
else
- (*elf)->flags |= ELF_F_MALLOCED;
+ {
+ *elf = elf_memory (buffer, size);
+ if (*elf == NULL)
+ {
+ error = DWFL_E_LIBELF;
+ free (buffer);
+ }
+ else
+ (*elf)->flags |= ELF_F_MALLOCED;
+ }
}
return error;
diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c
index abacc041..2c0f3010 100644
--- a/libdwfl/relocate.c
+++ b/libdwfl/relocate.c
@@ -1,5 +1,5 @@
/* Relocate debug information.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2005-2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -59,6 +59,8 @@ internal_function
__libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx,
Elf32_Word shndx, GElf_Addr *value)
{
+ assert (mod->e_type == ET_REL);
+
Elf_Scn *refscn = elf_getscn (elf, shndx);
GElf_Shdr refshdr_mem, *refshdr = gelf_getshdr (refscn, &refshdr_mem);
if (refshdr == NULL)
@@ -95,8 +97,10 @@ __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx,
return DWFL_E_LIBELF;
}
- /* Apply the adjustment. */
- *value += refshdr->sh_addr;
+ if (refshdr->sh_flags & SHF_ALLOC)
+ /* Apply the adjustment. */
+ *value += refshdr->sh_addr + mod->main.bias;
+
return DWFL_E_NOERROR;
}
@@ -183,7 +187,7 @@ relocate_getsym (Dwfl_Module *mod,
if (sym->st_shndx != SHN_XINDEX)
*shndx = sym->st_shndx;
- switch (*shndx)
+ switch (sym->st_shndx)
{
case SHN_ABS:
case SHN_UNDEF:
@@ -263,9 +267,15 @@ resolve_symbol (Dwfl_Module *referer, struct reloc_symtab_cache *symtab,
continue;
/* We found it! */
- if (shndx == SHN_ABS)
+ if (shndx == SHN_ABS) /* XXX maybe should apply bias? */
return DWFL_E_NOERROR;
+ if (m->e_type != ET_REL)
+ {
+ sym->st_value += m->symfile->bias;
+ return DWFL_E_NOERROR;
+ }
+
/* In an ET_REL file, the symbol table values are relative
to the section, not to the module's load base. */
size_t symshstrndx = SHN_UNDEF;
diff --git a/libdwfl/segment.c b/libdwfl/segment.c
index cb520e64..36c850f0 100644
--- a/libdwfl/segment.c
+++ b/libdwfl/segment.c
@@ -1,5 +1,5 @@
/* Manage address space lookup table for libdwfl.
- Copyright (C) 2008 Red Hat, Inc.
+ Copyright (C) 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -142,7 +142,7 @@ lookup (Dwfl *dwfl, GElf_Addr address, int hint)
if (hint >= 0
&& address >= dwfl->lookup_addr[hint]
&& ((size_t) hint + 1 == dwfl->lookup_elts
- || address <= dwfl->lookup_addr[hint + 1]))
+ || address < dwfl->lookup_addr[hint + 1]))
return hint;
/* Do binary search on the array indexed by module load address. */
diff --git a/libebl/ChangeLog b/libebl/ChangeLog
index 51b3b705..83319c70 100644
--- a/libebl/ChangeLog
+++ b/libebl/ChangeLog
@@ -1,3 +1,14 @@
+2009-04-01 Roland McGrath <roland@redhat.com>
+
+ * eblsymboltypename.c (ebl_symbol_type_name): Add STT_GNU_IFUNC.
+
+ * eblauxvinfo.c (AUXV_TYPES): Add RANDOM and BASE_PLATFORM.
+
+2009-02-01 Ulrich Drepper <drepper@redhat.com>
+
+ * eblreloctypename.c (ebl_reloc_type_name): Return "<INVALID RELOC>"
+ instead of "???" for invalid relocations.
+
2008-08-01 Roland McGrath <roland@redhat.com>
* eblcorenotetypename.c: Handle NT_386_IOPERM.
diff --git a/libebl/eblauxvinfo.c b/libebl/eblauxvinfo.c
index af65c47b..6e02403f 100644
--- a/libebl/eblauxvinfo.c
+++ b/libebl/eblauxvinfo.c
@@ -1,5 +1,5 @@
/* Describe known auxv types.
- Copyright (C) 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -78,6 +78,7 @@
TYPE (EGID, "u") \
TYPE (CLKTCK, "u") \
TYPE (PLATFORM, "s") \
+ TYPE (BASE_PLATFORM, "s") \
TYPE (HWCAP, "x") \
TYPE (FPUCW, "x") \
TYPE (DCACHEBSIZE, "d") \
@@ -90,7 +91,8 @@
TYPE (L1I_CACHESHAPE, "d") \
TYPE (L1D_CACHESHAPE, "d") \
TYPE (L2_CACHESHAPE, "d") \
- TYPE (L3_CACHESHAPE, "d")
+ TYPE (L3_CACHESHAPE, "d") \
+ TYPE (RANDOM, "p")
static const struct
{
diff --git a/libebl/eblreloctypename.c b/libebl/eblreloctypename.c
index c715b064..3f2c7d9c 100644
--- a/libebl/eblreloctypename.c
+++ b/libebl/eblreloctypename.c
@@ -1,5 +1,5 @@
/* Return relocation type name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
+ Copyright (C) 2001, 2002, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -68,7 +68,7 @@ ebl_reloc_type_name (ebl, reloc, buf, len)
res = ebl != NULL ? ebl->reloc_type_name (reloc, buf, len) : NULL;
if (res == NULL)
/* There are no generic relocation type names. */
- res = "???";
+ res = "<INVALID RELOC>";
return res;
}
diff --git a/libebl/eblsymboltypename.c b/libebl/eblsymboltypename.c
index c7cb2cba..6aae13ee 100644
--- a/libebl/eblsymboltypename.c
+++ b/libebl/eblsymboltypename.c
@@ -1,5 +1,5 @@
/* Return symbol type name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
+ Copyright (C) 2001, 2002, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -86,6 +86,8 @@ ebl_symbol_type_name (ebl, symbol, buf, len)
{
if (symbol >= STT_LOPROC && symbol <= STT_HIPROC)
snprintf (buf, len, "LOPROC+%d", symbol - STT_LOPROC);
+ else if (symbol == STT_GNU_IFUNC)
+ return "GNU_IFUNC";
else if (symbol >= STT_LOOS && symbol <= STT_HIOS)
snprintf (buf, len, "LOOS+%d", symbol - STT_LOOS);
else
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index 9578f8bd..bfc3ee5f 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,55 @@
+2009-04-14 Roland McGrath <roland@redhat.com>
+
+ * elf.h: Update from glibc.
+
+2009-04-01 Roland McGrath <roland@redhat.com>
+
+ * elf.h: Update from glibc.
+
+2009-02-10 Ulrich Drepper <drepper@redhat.com>
+
+ * elf32_updatefile.c (updatefile): For the zeroth section we still
+ have to copy the section header.
+
+2009-02-01 Ulrich Drepper <drepper@redhat.com>
+
+ * elf_strptr.c: Add comment re possible problem.
+
+2009-01-26 Ulrich Drepper <drepper@redhat.com>
+
+ * elf32_updatenull.c (updatenull_wrlock): Fix comment of
+ ELF_F_LAYOUT behaviour re section header table.
+
+2009-01-22 Ulrich Drepper <drepper@redhat.com>
+
+ * elf32_updatefile.c (__elfXX_updatemmap): Fill the gap between
+ sections even if only the section at the start of the gap has been
+ changed.
+ (__elfXX_updatefile): Likewise.
+
+2009-01-21 Ulrich Drepper <drepper@redhat.com>
+
+ * elf32_updatefile.c (__elfXX_updatemmap): Skip most of the loop to
+ handle sections for NOBITS sections.
+ (elfXX_updatefile): Likewise.
+
+ * elf32_updatefile.c (__elfXX_updatemmap): When skipping non-NOBITS
+ sections we haven't loaded, update last_position based on scn_start,
+ not based on old value. Don't run the loop for the dummy section 0.
+ (elfXX_updatefile): Don't run the loop for the dummy section 0.
+
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * libelfP.h (_): We only have one translation domain, elfutils.
+
+ * Makefile.am: Use USE_LOCKS instead of USE_TLS.
+ * elf_error.c: Always use __thread. Remove all !USE_TLS code.
+
+2009-01-04 Roland McGrath <roland@redhat.com>
+
+ * note_xlate.h (elf_cvt_note): Don't examine a size too small to
+ container a note header.
+
2008-12-11 Roland McGrath <roland@redhat.com>
* elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Handle
diff --git a/libelf/Makefile.am b/libelf/Makefile.am
index 2458ecbd..84b01a86 100644
--- a/libelf/Makefile.am
+++ b/libelf/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to create Makefile.in
##
-## Copyright (C) 1996-2006, 2007, 2008 Red Hat, Inc.
+## Copyright (C) 1996-2006, 2007, 2008, 2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -106,7 +106,7 @@ libelf_pic_a_SOURCES =
am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os)
libelf_so_LDLIBS =
-if USE_TLS
+if USE_LOCKS
libelf_so_LDLIBS += -lpthread
endif
diff --git a/libelf/elf.h b/libelf/elf.h
index b4d34754..062ef00f 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-2003,2004,2005,2006,2007,2008
+ Copyright (C) 1995-2003,2004,2005,2006,2007,2008,2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -459,6 +459,7 @@ typedef struct
#define STT_TLS 6 /* Symbol is thread-local data object*/
#define STT_NUM 7 /* Number of defined types. */
#define STT_LOOS 10 /* Start of OS-specific */
+#define STT_GNU_IFUNC 10 /* Symbol is indirect code object */
#define STT_HIOS 12 /* End of OS-specific */
#define STT_LOPROC 13 /* Start of processor-specific */
#define STT_HIPROC 15 /* End of processor-specific */
@@ -972,6 +973,10 @@ typedef struct
#define AT_SECURE 23 /* Boolean, was exec setuid-like? */
+#define AT_BASE_PLATFORM 24 /* String identifying real platforms.*/
+
+#define AT_RANDOM 25 /* Address of 16 random bytes. */
+
#define AT_EXECFN 31 /* Filename of executable. */
/* Pointer to the global system page used for system calls and other
@@ -1241,6 +1246,7 @@ typedef struct
#define R_SPARC_PC_LM22 39 /* Low miggle 22 bits of ... */
#define R_SPARC_WDISP16 40 /* PC relative 16 bit shifted */
#define R_SPARC_WDISP19 41 /* PC relative 19 bit shifted */
+#define R_SPARC_GLOB_JMP 42 /* was part of v9 ABI but was removed */
#define R_SPARC_7 43 /* Direct 7 bit */
#define R_SPARC_5 44 /* Direct 5 bit */
#define R_SPARC_6 45 /* Direct 6 bit */
@@ -1278,8 +1284,19 @@ typedef struct
#define R_SPARC_TLS_DTPOFF64 77
#define R_SPARC_TLS_TPOFF32 78
#define R_SPARC_TLS_TPOFF64 79
+#define R_SPARC_GOTDATA_HIX22 80
+#define R_SPARC_GOTDATA_LOX10 81
+#define R_SPARC_GOTDATA_OP_HIX22 82
+#define R_SPARC_GOTDATA_OP_LOX10 83
+#define R_SPARC_GOTDATA_OP 84
+#define R_SPARC_H34 85
+#define R_SPARC_SIZE32 86
+#define R_SPARC_SIZE64 87
+#define R_SPARC_GNU_VTINHERIT 250
+#define R_SPARC_GNU_VTENTRY 251
+#define R_SPARC_REV32 252
/* Keep this the last entry. */
-#define R_SPARC_NUM 80
+#define R_SPARC_NUM 253
/* For Sparc64, legal values for d_tag of Elf64_Dyn. */
@@ -2188,42 +2205,62 @@ typedef Elf32_Addr Elf32_Conflict;
/* ARM specific declarations */
/* Processor specific flags for the ELF header e_flags field. */
-#define EF_ARM_RELEXEC 0x01
-#define EF_ARM_HASENTRY 0x02
-#define EF_ARM_INTERWORK 0x04
-#define EF_ARM_APCS_26 0x08
-#define EF_ARM_APCS_FLOAT 0x10
-#define EF_ARM_PIC 0x20
-#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */
-#define EF_ARM_NEW_ABI 0x80
-#define EF_ARM_OLD_ABI 0x100
+#define EF_ARM_RELEXEC 0x01
+#define EF_ARM_HASENTRY 0x02
+#define EF_ARM_INTERWORK 0x04
+#define EF_ARM_APCS_26 0x08
+#define EF_ARM_APCS_FLOAT 0x10
+#define EF_ARM_PIC 0x20
+#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */
+#define EF_ARM_NEW_ABI 0x80
+#define EF_ARM_OLD_ABI 0x100
+#define EF_ARM_SOFT_FLOAT 0x200
+#define EF_ARM_VFP_FLOAT 0x400
+#define EF_ARM_MAVERICK_FLOAT 0x800
+
/* Other constants defined in the ARM ELF spec. version B-01. */
/* NB. These conflict with values defined above. */
#define EF_ARM_SYMSARESORTED 0x04
-#define EF_ARM_DYNSYMSUSESEGIDX 0x08
+#define EF_ARM_DYNSYMSUSESEGIDX 0x08
#define EF_ARM_MAPSYMSFIRST 0x10
#define EF_ARM_EABIMASK 0XFF000000
-#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
-#define EF_ARM_EABI_UNKNOWN 0x00000000
-#define EF_ARM_EABI_VER1 0x01000000
-#define EF_ARM_EABI_VER2 0x02000000
+/* Constants defined in AAELF. */
+#define EF_ARM_BE8 0x00800000
+#define EF_ARM_LE8 0x00400000
+
+#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
+#define EF_ARM_EABI_UNKNOWN 0x00000000
+#define EF_ARM_EABI_VER1 0x01000000
+#define EF_ARM_EABI_VER2 0x02000000
+#define EF_ARM_EABI_VER3 0x03000000
+#define EF_ARM_EABI_VER4 0x04000000
+#define EF_ARM_EABI_VER5 0x05000000
-/* Additional symbol types for Thumb */
-#define STT_ARM_TFUNC 0xd
+/* Additional symbol types for Thumb. */
+#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */
+#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */
/* ARM-specific values for sh_flags */
-#define SHF_ARM_ENTRYSECT 0x10000000 /* Section contains an entry point */
-#define SHF_ARM_COMDEF 0x80000000 /* Section may be multiply defined
- in the input to a link step */
+#define SHF_ARM_ENTRYSECT 0x10000000 /* Section contains an entry point */
+#define SHF_ARM_COMDEF 0x80000000 /* Section may be multiply defined
+ in the input to a link step. */
/* ARM-specific program header flags */
-#define PF_ARM_SB 0x10000000 /* Segment contains the location
- addressed by the static base */
+#define PF_ARM_SB 0x10000000 /* Segment contains the location
+ addressed by the static base. */
+#define PF_ARM_PI 0x20000000 /* Position-independent segment. */
+#define PF_ARM_ABS 0x40000000 /* Absolute segment. */
/* Processor specific values for the Phdr p_type field. */
-#define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */
+#define PT_ARM_EXIDX (PT_LOPROC + 1) /* ARM unwind segment. */
+
+/* Processor specific values for the Shdr sh_type field. */
+#define SHT_ARM_EXIDX (SHT_LOPROC + 1) /* ARM unwind section. */
+#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) /* Preemption details. */
+#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */
+
/* ARM relocs. */
diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c
index e88f4a45..a4d83a1c 100644
--- a/libelf/elf32_updatefile.c
+++ b/libelf/elf32_updatefile.c
@@ -126,11 +126,10 @@ int
internal_function
__elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
{
- ElfW2(LIBELFBITS,Ehdr) *ehdr;
- char *last_position;
+ bool previous_scn_changed = false;
/* We need the ELF header several times. */
- ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
+ ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
/* Write out the ELF header. */
if ((elf->state.ELFW(elf,LIBELFBITS).ehdr_flags | elf->flags) & ELF_F_DIRTY)
@@ -160,6 +159,10 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
sizeof (ElfW2(LIBELFBITS,Ehdr)));
elf->state.ELFW(elf,LIBELFBITS).ehdr_flags &= ~ELF_F_DIRTY;
+
+ /* We start writing sections after the ELF header only if there is
+ no program header. */
+ previous_scn_changed = elf->state.ELFW(elf,LIBELFBITS).phdr == NULL;
}
/* Write out the program header table. */
@@ -200,14 +203,19 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum);
elf->state.ELFW(elf,LIBELFBITS).phdr_flags &= ~ELF_F_DIRTY;
+
+ /* We modified the program header. Maybe this created a gap so
+ we have to write fill bytes, if necessary. */
+ previous_scn_changed = true;
}
/* From now on we have to keep track of the last position to eventually
fill the gaps with the prescribed fill byte. */
- last_position = ((char *) elf->map_address + elf->start_offset
- + MAX (elf_typesize (LIBELFBITS, ELF_T_EHDR, 1),
- ehdr->e_phoff)
- + elf_typesize (LIBELFBITS, ELF_T_PHDR, ehdr->e_phnum));
+ char *last_position = ((char *) elf->map_address + elf->start_offset
+ + MAX (elf_typesize (LIBELFBITS, ELF_T_EHDR, 1),
+ ehdr->e_phoff)
+ + elf_typesize (LIBELFBITS, ELF_T_PHDR,
+ ehdr->e_phnum));
/* Write all the sections. Well, only those which are modified. */
if (shnum > 0)
@@ -283,14 +291,42 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
for (size_t cnt = 0; cnt < shnum; ++cnt)
{
Elf_Scn *scn = scns[cnt];
+ if (scn->index == 0)
+ {
+ /* The dummy section header entry. It should not be
+ possible to mark this "section" as dirty. */
+ assert ((scn->flags & ELF_F_DIRTY) == 0);
+ continue;
+ }
ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS);
+ if (shdr->sh_type == SHT_NOBITS)
+ goto next;
char *scn_start = ((char *) elf->map_address
+ elf->start_offset + shdr->sh_offset);
Elf_Data_List *dl = &scn->data_list;
+ bool scn_changed = false;
+
+ void fill_mmap (size_t offset)
+ {
+ size_t written = 0;
+
+ if (last_position < shdr_start)
+ {
+ written = MIN (scn_start + offset - last_position,
+ shdr_start - last_position);
+
+ memset (last_position, __libelf_fill_byte, written);
+ }
+
+ if (last_position + written != scn_start + offset
+ && shdr_end < scn_start + offset)
+ memset (shdr_end, __libelf_fill_byte,
+ scn_start + offset - shdr_end);
+ }
- if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL)
+ if (scn->data_list_rear != NULL)
do
{
assert (dl->data.d.d_off >= 0);
@@ -298,31 +334,15 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
assert (dl->data.d.d_size <= (shdr->sh_size
- (GElf_Off) dl->data.d.d_off));
+ /* If there is a gap, fill it. */
+ if (scn_start + dl->data.d.d_off > last_position
+ && ((previous_scn_changed && dl->data.d.d_off == 0)
+ || ((scn->flags | dl->flags | elf->flags)
+ & ELF_F_DIRTY) != 0))
+ fill_mmap (dl->data.d.d_off);
+
if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
{
- if (scn_start + dl->data.d.d_off > last_position)
- {
- /* This code assumes that the data blocks for
- a section are ordered by offset. */
- size_t written = 0;
-
- if (last_position < shdr_start)
- {
- written = MIN (scn_start + dl->data.d.d_off
- - last_position,
- shdr_start - last_position);
-
- memset (last_position, __libelf_fill_byte,
- written);
- }
-
- if (last_position + written
- != scn_start + dl->data.d.d_off
- && shdr_end < scn_start + dl->data.d.d_off)
- memset (shdr_end, __libelf_fill_byte,
- scn_start + dl->data.d.d_off - shdr_end);
- }
-
/* Let it go backward if the sections use a bogus
layout with overlaps. We'll overwrite the stupid
user's section data with the latest one, rather than
@@ -350,6 +370,8 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
last_position = mempcpy (last_position,
dl->data.d.d_buf,
dl->data.d.d_size);
+
+ scn_changed = true;
}
else
last_position += dl->data.d.d_size;
@@ -362,10 +384,20 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
dl = dl->next;
}
while (dl != NULL);
- else if (shdr->sh_type != SHT_NOBITS && scn->index != 0)
- /* We have to trust the existing section header information. */
- last_position += shdr->sh_size;
+ else
+ {
+ /* If the previous section (or the ELF/program
+ header) changed we might have to fill the gap. */
+ if (scn_start > last_position && previous_scn_changed)
+ fill_mmap (0);
+
+ /* We have to trust the existing section header information. */
+ last_position = scn_start + shdr->sh_size;
+ }
+
+ previous_scn_changed = scn_changed;
+ next:
scn->flags &= ~ELF_F_DIRTY;
}
@@ -470,6 +502,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
{
char fillbuf[FILLBUFSIZE];
size_t filled = 0;
+ bool previous_scn_changed = false;
/* We need the ELF header several times. */
ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
@@ -513,6 +546,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
}
elf->state.ELFW(elf,LIBELFBITS).ehdr_flags &= ~ELF_F_DIRTY;
+
+ /* We start writing sections after the ELF header only if there is
+ no program header. */
+ previous_scn_changed = elf->state.ELFW(elf,LIBELFBITS).phdr == NULL;
}
/* If the type sizes should be different at some time we have to
@@ -578,6 +615,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
free (tmp_phdr);
elf->state.ELFW(elf,LIBELFBITS).phdr_flags &= ~ELF_F_DIRTY;
+
+ /* We modified the program header. Maybe this created a gap so
+ we have to write fill bytes, if necessary. */
+ previous_scn_changed = true;
}
/* From now on we have to keep track of the last position to eventually
@@ -616,30 +657,43 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
for (size_t cnt = 0; cnt < shnum; ++cnt)
{
Elf_Scn *scn = scns[cnt];
+ if (scn->index == 0)
+ {
+ /* The dummy section header entry. It should not be
+ possible to mark this "section" as dirty. */
+ assert ((scn->flags & ELF_F_DIRTY) == 0);
+ goto next;
+ }
ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS);
+ if (shdr->sh_type == SHT_NOBITS)
+ goto next;
off_t scn_start = elf->start_offset + shdr->sh_offset;
Elf_Data_List *dl = &scn->data_list;
+ bool scn_changed = false;
- if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL
- && scn->index != 0)
+ if (scn->data_list_rear != NULL)
do
{
+ /* If there is a gap, fill it. */
+ if (scn_start + dl->data.d.d_off > last_offset
+ && ((previous_scn_changed && dl->data.d.d_off == 0)
+ || ((scn->flags | dl->flags | elf->flags)
+ & ELF_F_DIRTY) != 0))
+ {
+ if (unlikely (fill (elf->fildes, last_offset,
+ (scn_start + dl->data.d.d_off)
+ - last_offset, fillbuf,
+ &filled) != 0))
+ return 1;
+ }
+
if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
{
char tmpbuf[MAX_TMPBUF];
void *buf = dl->data.d.d_buf;
- if (scn_start + dl->data.d.d_off > last_offset)
- {
- if (unlikely (fill (elf->fildes, last_offset,
- (scn_start + dl->data.d.d_off)
- - last_offset, fillbuf,
- &filled) != 0))
- return 1;
- }
-
/* Let it go backward if the sections use a bogus
layout with overlaps. We'll overwrite the stupid
user's section data with the latest one, rather than
@@ -686,6 +740,8 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
if (buf != dl->data.d.d_buf && buf != tmpbuf)
free (buf);
+
+ scn_changed = true;
}
last_offset += dl->data.d.d_size;
@@ -695,9 +751,23 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
dl = dl->next;
}
while (dl != NULL);
- else if (shdr->sh_type != SHT_NOBITS && scn->index != 0)
- last_offset = scn_start + shdr->sh_size;
+ else
+ {
+ /* If the previous section (or the ELF/program
+ header) changed we might have to fill the gap. */
+ if (scn_start > last_offset && previous_scn_changed)
+ {
+ if (unlikely (fill (elf->fildes, last_offset,
+ scn_start - last_offset, fillbuf,
+ &filled) != 0))
+ return 1;
+ }
+
+ last_offset = scn_start + shdr->sh_size;
+ }
+ previous_scn_changed = scn_changed;
+ next:
/* Collect the section header table information. */
if (unlikely (change_bo))
(*shdr_fctp) (&shdr_data[scn->index],
diff --git a/libelf/elf32_updatenull.c b/libelf/elf32_updatenull.c
index a18d0bea..5ce8bbc9 100644
--- a/libelf/elf32_updatenull.c
+++ b/libelf/elf32_updatenull.c
@@ -1,5 +1,5 @@
/* Update data structures for changes.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
@@ -401,8 +401,9 @@ __elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum)
/* Store section information. */
if (elf->flags & ELF_F_LAYOUT)
{
- /* The user is supposed to fill out e_phoff. Use it and
- e_phnum to determine the maximum extend. */
+ /* The user is supposed to fill out e_shoff. Use it and
+ e_shnum (or sh_size of the dummy, first section header)
+ to determine the maximum extend. */
size = MAX ((GElf_Word) size,
(ehdr->e_shoff
+ (elf_typesize (LIBELFBITS, ELF_T_SHDR, shnum))));
diff --git a/libelf/elf_error.c b/libelf/elf_error.c
index 5e00372a..dc587828 100644
--- a/libelf/elf_error.c
+++ b/libelf/elf_error.c
@@ -1,5 +1,5 @@
/* Error handling in libelf.
- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright (C) 1998,1999,2000,2002,2003,2004,2005,2006,2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -61,46 +61,14 @@
#include "libelfP.h"
-#ifdef USE_TLS
/* The error number. */
static __thread int global_error;
-#else
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
-#endif /* TLS */
int
elf_errno (void)
{
- int result;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- result = (intptr_t) getspecific (key);
-
- setspecific (key, (void *) (intptr_t) ELF_E_NOERROR);
- return result;
- }
-#endif /* TLS */
-
- result = global_error;
+ int result = global_error;
global_error = ELF_E_NOERROR;
return result;
}
@@ -339,16 +307,6 @@ void
__libelf_seterrno (value)
int value;
{
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- setspecific (key, (void *) (intptr_t) value);
-#endif /* TLS */
-
global_error = value >= 0 && value < nmsgidx ? value : ELF_E_UNKNOWN_ERROR;
}
@@ -357,19 +315,7 @@ const char *
elf_errmsg (error)
int error;
{
- int last_error;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if ((error == 0 || error == -1) && threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- last_error = (intptr_t) getspecific (key);
- else
-#endif /* TLS */
- last_error = global_error;
+ int last_error = global_error;
if (error == 0)
{
@@ -382,26 +328,3 @@ elf_errmsg (error)
assert (msgidx[error == -1 ? last_error : error] < sizeof (msgstr));
return _(msgstr + msgidx[error == -1 ? last_error : error]);
}
-
-
-#ifndef USE_TLS
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem __attribute__ ((unused)))
-{
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
-#endif /* TLS */
diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c
index 35a0e9b6..7b837b09 100644
--- a/libelf/elf_strptr.c
+++ b/libelf/elf_strptr.c
@@ -1,5 +1,5 @@
/* Return string pointer from string section.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008 Red Hat, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -151,6 +151,10 @@ elf_strptr (elf, idx, offset)
}
if (likely (strscn->rawdata_base != NULL))
+ // XXX Is this correct if a file is read and then new data is added
+ // XXX to the string section? Likely needs to check offset against
+ // XXX size of rawdata_base buffer and then iterate over rest of the
+ // XXX list.
result = &strscn->rawdata_base[offset];
else
{
diff --git a/libelf/libelfP.h b/libelf/libelfP.h
index e8100397..818f42ac 100644
--- a/libelf/libelfP.h
+++ b/libelf/libelfP.h
@@ -1,5 +1,5 @@
/* Internal interfaces for libelf.
- Copyright (C) 1998-2003, 2005, 2006, 2007 Red Hat, Inc.
+ Copyright (C) 1998-2003, 2005, 2006, 2007, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -64,7 +64,7 @@
#include <string.h>
/* gettext helper macros. */
-#define _(Str) dgettext ("libelf", Str)
+#define _(Str) dgettext ("elfutils", Str)
/* Helper Macros to write 32 bit and 64 bit functions. */
diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h
index 6e8b78c6..a72fe868 100644
--- a/libelf/note_xlate.h
+++ b/libelf/note_xlate.h
@@ -1,5 +1,5 @@
/* Conversion functions for notes.
- Copyright (C) 2007 Red Hat, Inc.
+ Copyright (C) 2007, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -52,7 +52,7 @@ elf_cvt_note (void *dest, const void *src, size_t len, int encode)
{
assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
- while (len > 0)
+ while (len >= sizeof (Elf32_Nhdr))
{
(1 ? Elf32_cvt_Nhdr : Elf64_cvt_Nhdr) (dest, src, sizeof (Elf32_Nhdr),
encode);
diff --git a/m4/ChangeLog b/m4/ChangeLog
index eea78ff0..25675634 100644
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,7 @@
+2009-02-01 Roland McGrath <roland@redhat.com>
+
+ * zip.m4: Fix --with/--without argument handling.
+
2009-01-08 Roland McGrath <roland@redhat.com>
* zip.am: New file.
diff --git a/m4/zip.m4 b/m4/zip.m4
index 398d1be5..19fa4926 100644
--- a/m4/zip.m4
+++ b/m4/zip.m4
@@ -1,10 +1,11 @@
-dnl Test for either zlib or bzlib.
+dnl -*- Autoconf -*- test for either zlib or bzlib.
dnl Defines --with-$1lib argument, $2LIB automake conditional,
dnl and sets AC_DEFINE(USE_$2LIB) and LIBS.
-AC_DEFUN([eu_ZIPLIB], [with_[$1]lib=default
+AC_DEFUN([eu_ZIPLIB], [dnl
AC_ARG_WITH([[$1]lib],
-AC_HELP_STRING([--with-[$1]lib], [support g[$1]ip compression in libdwfl]))
+AC_HELP_STRING([--with-[$1]lib], [support g[$1]ip compression in libdwfl]),,
+ [with_[$1]lib=default])
if test $with_[$1]lib != no; then
AC_SEARCH_LIBS([$4], [$3], [with_[$1]lib=yes],
[test $with_[$1]lib = default ||
diff --git a/po/ChangeLog b/po/ChangeLog
index bbb72fad..1e103201 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-23 Ulrich Drepper <drepper@redhat.com>
+
+ * Makevars (XGETTEXT_OPTIONS): Add --flag option for argp_error.
+
+ * POTFILES.in: Add more files with translatable strings.
+
2007-06-05 Ulrich Drepper <drepper@redhat.com>
* Makefile.in.in: Update from gettext 0.16.1.
diff --git a/po/Makevars b/po/Makevars
index b8ea7022..8a8ebc60 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -9,7 +9,7 @@ top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --flag=error:3:c-format \
- --flag=ERROR:1:c-format
+ --flag=ERROR:1:c-format --flag=argp_error:2:c-format
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
diff --git a/po/POTFILES.in b/po/POTFILES.in
index e3a192be..5ac4cdea 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,5 +1,5 @@
# List of files which containing translatable strings.
-# Copyright (C) 2000, 2005 Red Hat, Inc.
+# Copyright (C) 2000, 2005, 2009 Red Hat, Inc.
# Files from the compatibility library
lib/xmalloc.c
@@ -10,14 +10,30 @@ lib/xstrndup.c
libelf/elf_error.c
libasm/asm_error.c
libdw/dwarf_error.c
+libdwfl/argp-std.c
+libebl/eblbackendname.c
+libebl/eblcorenotetypename.c
+libebl/ebldynamictagname.c
+libebl/eblobjecttypename.c
+libebl/eblobjnote.c
+libebl/eblobjnotetypename.c
+libebl/eblosabiname.c
+libebl/eblsectionname.c
+libebl/eblsectiontypename.c
+libebl/eblsegmenttypename.c
+libebl/eblsymbolbindingname.c
+libebl/eblsymboltypename.c
# Program sources
+src/ar.c
+src/arlib.c
src/nm.c
src/readelf.c
src/size.c
src/strip.c
src/ld.c
src/ldgeneric.c
+src/i386_ld.c
src/ldscript.y
src/elflint.c
src/addr2line.c
@@ -25,3 +41,5 @@ src/findtextrel.c
src/elfcmp.c
src/ranlib.c
src/strings.c
+src/unstrip.c
+src/objdump.c
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 00000000..fd9917a4
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,5676 @@
+# German translation of elfutils.
+# Copyright (C) 2009 THE elfutils'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the elfutils package.
+# Thomas Spura <tomspur@fedoraproject.org>, 2009.
+# Cornelius Neckenig <tbull@fedoraproject.org>, 2009.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: elfutils VERSION\n"
+"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n"
+"POT-Creation-Date: 2009-04-18 19:12+0000\n"
+"PO-Revision-Date: 2009-04-18 22:42+0100\n"
+"Last-Translator: Cornelius Neckenig <tbull@fedoraproject.org>\n"
+"Language-Team: German\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../lib/xmalloc.c:51
+#: ../lib/xmalloc.c:65
+#: ../lib/xmalloc.c:79
+#: ../src/readelf.c:2703
+#: ../src/readelf.c:3041
+#: ../src/unstrip.c:2086
+#: ../src/unstrip.c:2294
+#, c-format
+msgid "memory exhausted"
+msgstr "Kein Speicher mehr verfügbar"
+
+#: ../libelf/elf_error.c:81
+#: ../libasm/asm_error.c:62
+#: ../libdw/dwarf_error.c:79
+msgid "no error"
+msgstr "kein Fehler"
+
+#: ../libelf/elf_error.c:84
+#: ../libasm/asm_error.c:81
+#: ../libdw/dwarf_error.c:80
+msgid "unknown error"
+msgstr "unbekannter Fehler"
+
+#: ../libelf/elf_error.c:88
+msgid "unknown version"
+msgstr "unbekannte Version"
+
+#: ../libelf/elf_error.c:92
+msgid "unknown type"
+msgstr "unbekannter Typ"
+
+#: ../libelf/elf_error.c:96
+msgid "invalid `Elf' handle"
+msgstr ""
+
+#: ../libelf/elf_error.c:100
+msgid "invalid size of source operand"
+msgstr ""
+
+#: ../libelf/elf_error.c:104
+msgid "invalid size of destination operand"
+msgstr ""
+
+#: ../libelf/elf_error.c:108
+#: ../src/readelf.c:4592
+#, c-format
+msgid "invalid encoding"
+msgstr "ungültige Kodierung"
+
+#: ../libelf/elf_error.c:112
+#: ../libasm/asm_error.c:63
+#: ../libdw/dwarf_error.c:88
+msgid "out of memory"
+msgstr ""
+
+#: ../libelf/elf_error.c:116
+msgid "invalid file descriptor"
+msgstr ""
+
+#: ../libelf/elf_error.c:120
+msgid "invalid operation"
+msgstr "ungültige Operation"
+
+#: ../libelf/elf_error.c:124
+msgid "ELF version not set"
+msgstr ""
+
+#: ../libelf/elf_error.c:128
+#: ../libelf/elf_error.c:176
+#: ../libdw/dwarf_error.c:90
+msgid "invalid command"
+msgstr "Ungültiger Befehl"
+
+#: ../libelf/elf_error.c:132
+#: ../libelf/elf_error.c:192
+msgid "offset out of range"
+msgstr ""
+
+#: ../libelf/elf_error.c:136
+msgid "invalid fmag field in archive header"
+msgstr ""
+
+#: ../libelf/elf_error.c:140
+msgid "invalid archive file"
+msgstr "Ungültige Archiv-Datei"
+
+#: ../libelf/elf_error.c:144
+msgid "descriptor is not for an archive"
+msgstr ""
+
+#: ../libelf/elf_error.c:148
+msgid "no index available"
+msgstr ""
+
+#: ../libelf/elf_error.c:152
+msgid "cannot read data from file"
+msgstr "Daten aus der Datei konnten nicht gelesen werden"
+
+#: ../libelf/elf_error.c:156
+msgid "cannot write data to file"
+msgstr "Daten konnten nicht in die Datei geschrieben werden"
+
+#: ../libelf/elf_error.c:160
+msgid "invalid binary class"
+msgstr ""
+
+#: ../libelf/elf_error.c:164
+msgid "invalid section index"
+msgstr ""
+
+#: ../libelf/elf_error.c:168
+msgid "invalid operand"
+msgstr ""
+
+#: ../libelf/elf_error.c:172
+msgid "invalid section"
+msgstr ""
+
+#: ../libelf/elf_error.c:180
+msgid "executable header not created first"
+msgstr ""
+
+#: ../libelf/elf_error.c:184
+msgid "file descriptor disabled"
+msgstr ""
+
+#: ../libelf/elf_error.c:188
+msgid "archive/member fildes mismatch"
+msgstr ""
+
+#: ../libelf/elf_error.c:196
+msgid "cannot manipulate null section"
+msgstr ""
+
+#: ../libelf/elf_error.c:200
+msgid "data/scn mismatch"
+msgstr ""
+
+#: ../libelf/elf_error.c:204
+msgid "invalid section header"
+msgstr ""
+
+#: ../libelf/elf_error.c:208
+#: ../src/readelf.c:6062
+#: ../src/readelf.c:6163
+#, c-format
+msgid "invalid data"
+msgstr "Ungültige Daten"
+
+#: ../libelf/elf_error.c:212
+msgid "unknown data encoding"
+msgstr "Unbekannte Datenkodierung"
+
+#: ../libelf/elf_error.c:216
+msgid "section `sh_size' too small for data"
+msgstr ""
+
+#: ../libelf/elf_error.c:220
+msgid "invalid section alignment"
+msgstr ""
+
+#: ../libelf/elf_error.c:224
+msgid "invalid section entry size"
+msgstr ""
+
+#: ../libelf/elf_error.c:228
+msgid "update() for write on read-only file"
+msgstr ""
+
+#: ../libelf/elf_error.c:232
+msgid "no such file"
+msgstr "Datei nicht gefunden"
+
+#: ../libelf/elf_error.c:236
+msgid "only relocatable files can contain section groups"
+msgstr ""
+
+#: ../libelf/elf_error.c:241
+msgid "program header only allowed in executables, shared objects, and core files"
+msgstr ""
+
+#: ../libelf/elf_error.c:248
+msgid "file has no program header"
+msgstr "Datei hat keinen Programm-Kopf"
+
+#: ../libelf/elf_error.c:253
+#: ../libdw/dwarf_error.c:112
+msgid "invalid offset"
+msgstr ""
+
+#: ../libasm/asm_error.c:64
+#: ../src/ldgeneric.c:2687
+#, c-format
+msgid "cannot create output file"
+msgstr "Ausgangsdatei konnte nicht erstellt werden"
+
+#: ../libasm/asm_error.c:65
+msgid "invalid parameter"
+msgstr "ungültiger Parameter"
+
+#: ../libasm/asm_error.c:66
+msgid "cannot change mode of output file"
+msgstr ""
+
+#. Something went wrong.
+#: ../libasm/asm_error.c:67
+#: ../src/ldgeneric.c:7001
+#, c-format
+msgid "cannot rename output file"
+msgstr "Ausgangsdatei konnte nicht umbenannt werden"
+
+#: ../libasm/asm_error.c:68
+msgid "duplicate symbol"
+msgstr "Symbol doppelt vorhanden"
+
+#: ../libasm/asm_error.c:69
+msgid "invalid section type for operation"
+msgstr ""
+
+#: ../libasm/asm_error.c:70
+msgid "error during output of data"
+msgstr "Fehler bei Datenausgabe"
+
+#: ../libasm/asm_error.c:71
+msgid "no backend support available"
+msgstr ""
+
+#: ../libdw/dwarf_error.c:81
+msgid "invalid access"
+msgstr "Ungültiger Zugriff"
+
+#: ../libdw/dwarf_error.c:82
+msgid "no regular file"
+msgstr "Keine reguläre Date"
+
+#: ../libdw/dwarf_error.c:83
+msgid "I/O error"
+msgstr "I/O Fehler"
+
+#: ../libdw/dwarf_error.c:84
+msgid "invalid ELF file"
+msgstr "Ungültige ELF Datei"
+
+#: ../libdw/dwarf_error.c:85
+msgid "no DWARF information"
+msgstr "keine DWARF Information"
+
+#: ../libdw/dwarf_error.c:86
+msgid "no ELF file"
+msgstr "keine ELF Datei"
+
+#: ../libdw/dwarf_error.c:87
+msgid "cannot get ELF header"
+msgstr "ELF Kopf konnte nicht ausgelesen werden"
+
+#: ../libdw/dwarf_error.c:89
+msgid "not implemented"
+msgstr "Nicht implementiert"
+
+#: ../libdw/dwarf_error.c:91
+msgid "invalid version"
+msgstr "Ungültige Version"
+
+#: ../libdw/dwarf_error.c:92
+msgid "invalid file"
+msgstr "Ungültige Datei"
+
+#: ../libdw/dwarf_error.c:93
+msgid "no entries found"
+msgstr "Keine Einträge gefunden"
+
+#: ../libdw/dwarf_error.c:94
+msgid "invalid DWARF"
+msgstr "DWARF ungültig"
+
+#: ../libdw/dwarf_error.c:95
+msgid "no string data"
+msgstr ""
+
+#: ../libdw/dwarf_error.c:96
+msgid "no address value"
+msgstr "Kein Adress-Wert"
+
+#: ../libdw/dwarf_error.c:97
+msgid "no constant value"
+msgstr "Kein Konstanten-Wert"
+
+#: ../libdw/dwarf_error.c:98
+msgid "no reference value"
+msgstr "Kein Referenz-Wert"
+
+#: ../libdw/dwarf_error.c:99
+msgid "invalid reference value"
+msgstr "Ungültiger Referenz-Wert"
+
+#: ../libdw/dwarf_error.c:100
+msgid ".debug_line section missing"
+msgstr ".debug_line Sektion fehlt"
+
+#: ../libdw/dwarf_error.c:101
+msgid "invalid .debug_line section"
+msgstr "ungültige .debug_line Sektion"
+
+#: ../libdw/dwarf_error.c:102
+msgid "debug information too big"
+msgstr "Debug Information zu groß"
+
+#: ../libdw/dwarf_error.c:103
+msgid "invalid DWARF version"
+msgstr "Ungültige DWARF Version"
+
+#: ../libdw/dwarf_error.c:104
+msgid "invalid directory index"
+msgstr ""
+
+#: ../libdw/dwarf_error.c:105
+msgid "address out of range"
+msgstr "Außerhalb des Adressbereiches"
+
+#: ../libdw/dwarf_error.c:106
+msgid "no location list value"
+msgstr ""
+
+#: ../libdw/dwarf_error.c:107
+msgid "no block data"
+msgstr ""
+
+#: ../libdw/dwarf_error.c:108
+msgid "invalid line index"
+msgstr "Ungültiger Zeilenindex"
+
+#: ../libdw/dwarf_error.c:109
+msgid "invalid address range index"
+msgstr "Ungültiger Adressbereichs Index"
+
+#: ../libdw/dwarf_error.c:110
+msgid "no matching address range"
+msgstr "Kein passender Adressbereich"
+
+#: ../libdw/dwarf_error.c:111
+msgid "no flag value"
+msgstr ""
+
+#: ../libdw/dwarf_error.c:113
+msgid ".debug_ranges section missing"
+msgstr ""
+
+#: ../libdwfl/argp-std.c:67
+#: ../src/unstrip.c:2236
+msgid "Input selection options:"
+msgstr "Eingabeauswahloptionen:"
+
+#: ../libdwfl/argp-std.c:68
+msgid "Find addresses in FILE"
+msgstr "Finde Adressen in FILE"
+
+#: ../libdwfl/argp-std.c:70
+msgid "Find addresses from signatures found in COREFILE"
+msgstr "Finde Adressen von Signatur aus COREFILE"
+
+#: ../libdwfl/argp-std.c:72
+msgid "Find addresses in files mapped into process PID"
+msgstr ""
+
+#: ../libdwfl/argp-std.c:74
+msgid "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps format"
+msgstr ""
+
+#: ../libdwfl/argp-std.c:76
+msgid "Find addresses in the running kernel"
+msgstr "Finde Adressen im laufnenden Kernel"
+
+#: ../libdwfl/argp-std.c:78
+msgid "Kernel with all modules"
+msgstr "Kernel mit allen Modulen"
+
+#: ../libdwfl/argp-std.c:80
+msgid "Search path for separate debuginfo files"
+msgstr "Dateisuchpfad für separate Debug-Informationen"
+
+#: ../libdwfl/argp-std.c:163
+msgid "only one of -e, -p, -k, -K, or --core allowed"
+msgstr "Nur eine Option von -e, -p, -k, -K, oder --core erlaubt"
+
+#: ../libdwfl/argp-std.c:223
+#, c-format
+msgid "cannot read ELF core file: %s"
+msgstr "Konnte ELF Kerndatei %s nicht lesen"
+
+#: ../libdwfl/argp-std.c:243
+msgid "No modules recognized in core file"
+msgstr "Keine Module in der Kerndatei gefunden"
+
+#: ../libdwfl/argp-std.c:255
+msgid "cannot load kernel symbols"
+msgstr "Konnte Kernel Symbole nicht laden"
+
+#. Non-fatal to have no modules since we do have the kernel.
+#: ../libdwfl/argp-std.c:259
+msgid "cannot find kernel modules"
+msgstr "Konnte Kernel Module nicht finden"
+
+#: ../libdwfl/argp-std.c:273
+msgid "cannot find kernel or modules"
+msgstr "Konnte Kernel oder Module nicht finden"
+
+#: ../libebl/eblbackendname.c:63
+msgid "No backend"
+msgstr ""
+
+#: ../libebl/eblcorenotetypename.c:107
+#: ../libebl/eblobjecttypename.c:78
+#: ../libebl/eblobjnotetypename.c:85
+#: ../libebl/eblosabiname.c:98
+#: ../libebl/eblsectionname.c:110
+#: ../libebl/eblsectiontypename.c:140
+#: ../libebl/eblsegmenttypename.c:104
+msgid "<unknown>"
+msgstr "<Unbekannt>"
+
+#: ../libebl/ebldynamictagname.c:126
+#, c-format
+msgid "<unknown>: %#<PRIx64>"
+msgstr "<Unbekannt>: %#<PRIx64>"
+
+#: ../libebl/eblobjnote.c:76
+#, c-format
+msgid " Build ID: "
+msgstr " Build ID: "
+
+#: ../libebl/eblobjnote.c:129
+#, c-format
+msgid " OS: %s, ABI: "
+msgstr " OS: %s, ABI: "
+
+#: ../libebl/eblosabiname.c:95
+msgid "Stand alone"
+msgstr ""
+
+#: ../libebl/eblsymbolbindingname.c:86
+#: ../libebl/eblsymboltypename.c:94
+#, c-format
+msgid "<unknown>: %d"
+msgstr "<unknown>: %d"
+
+#: ../src/ar.c:76
+msgid "Commands:"
+msgstr "Befehle:"
+
+#: ../src/ar.c:77
+msgid "Delete files from archive."
+msgstr "Dateien aus dem Archiv löschen."
+
+#: ../src/ar.c:78
+msgid "Move files in archive."
+msgstr "Dateien zum Archiv hinzufügen."
+
+#: ../src/ar.c:79
+msgid "Print files in archive."
+msgstr "Packe Dateien in Archiv"
+
+#: ../src/ar.c:80
+msgid "Quick append files to archive."
+msgstr "Hänge Dateien an ein Archiv"
+
+#: ../src/ar.c:82
+msgid "Replace existing or insert new file into archive."
+msgstr "Ersetze existierende oder füge neue Datei in das Archiv ein."
+
+#: ../src/ar.c:83
+msgid "Display content of archive."
+msgstr "Zeige Archivinhalt an."
+
+#: ../src/ar.c:84
+msgid "Extract files from archive."
+msgstr "Entpacke Dateien aus dem Archiv"
+
+#: ../src/ar.c:86
+msgid "Command Modifiers:"
+msgstr ""
+
+#: ../src/ar.c:87
+msgid "Preserve original dates."
+msgstr ""
+
+#: ../src/ar.c:88
+msgid "Use instance [COUNT] of name."
+msgstr ""
+
+#: ../src/ar.c:90
+msgid "Do not replace existing files with extracted files."
+msgstr "Ersetze existierende Dateien nicht mit entpackten Dateien"
+
+#: ../src/ar.c:91
+msgid "Allow filename to be truncated if necessary."
+msgstr "Erlaube angehängte Dateinamen, wenn nötig"
+
+#: ../src/ar.c:93
+msgid "Provide verbose output."
+msgstr ""
+
+#: ../src/ar.c:94
+msgid "Force regeneration of symbol table."
+msgstr ""
+
+#: ../src/ar.c:95
+msgid "Insert file after [MEMBER]."
+msgstr "Füge Datei nach [MEMBER] ein."
+
+#: ../src/ar.c:96
+msgid "Insert file before [MEMBER]."
+msgstr "Füge Datei vor [MEMBER] ein."
+
+#: ../src/ar.c:97
+msgid "Same as -b."
+msgstr "Genau wie -b."
+
+#: ../src/ar.c:98
+msgid "Suppress message when library has to be created."
+msgstr ""
+
+#: ../src/ar.c:100
+msgid "Use full path for file matching."
+msgstr ""
+
+#: ../src/ar.c:101
+msgid "Update only older files in archive."
+msgstr "Nur ältere Datein im Archiv aktualisieren"
+
+#. Short description of program.
+#: ../src/ar.c:107
+msgid "Create, modify, and extract from archives."
+msgstr "Erstelle, ändere, extrahiere von Archiven"
+
+#. Strings for arguments in help texts.
+#: ../src/ar.c:110
+msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]"
+msgstr "[MEMBER] [COUNT] ARCHIVE [FILE...]"
+
+#: ../src/ar.c:192
+#, c-format
+msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options"
+msgstr "'a', 'b', und 'i' nur zusammen mit 'm' and 'r Optionen"
+
+#: ../src/ar.c:197
+#, c-format
+msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers"
+msgstr ""
+
+#: ../src/ar.c:213
+#, c-format
+msgid "'N' is only meaningful with the 'x' and 'd' options"
+msgstr ""
+
+#: ../src/ar.c:218
+#, c-format
+msgid "COUNT parameter required"
+msgstr "COUNT Parameter erforderlich"
+
+#: ../src/ar.c:230
+#, c-format
+msgid "invalid COUNT parameter %s"
+msgstr "Ungültiger COUNT Parameter %s"
+
+#: ../src/ar.c:237
+#, c-format
+msgid "'%' is only meaningful with the 'x' option"
+msgstr ""
+
+#: ../src/ar.c:243
+#, c-format
+msgid "archive name required"
+msgstr "Archivname erforderlich"
+
+#: ../src/ar.c:289
+#: ../src/nm.c:253
+#: ../src/readelf.c:432
+#: ../src/size.c:219
+#: ../src/strip.c:203
+#: ../src/ld.c:957
+#: ../src/elflint.c:238
+#: ../src/addr2line.c:180
+#: ../src/findtextrel.c:170
+#: ../src/elfcmp.c:522
+#: ../src/ranlib.c:136
+#: ../src/strings.c:227
+#: ../src/unstrip.c:233
+#: ../src/objdump.c:181
+#, c-format
+msgid ""
+"Copyright (C) %s Red Hat, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Red Hat, Inc.\n"
+"Dies ist freie Software, siehe Quellcode für Kopierbedingungen. KEINE GARANTIE,\n"
+"auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n"
+
+#: ../src/ar.c:294
+#: ../src/nm.c:258
+#: ../src/readelf.c:437
+#: ../src/size.c:224
+#: ../src/strip.c:208
+#: ../src/ld.c:962
+#: ../src/elflint.c:243
+#: ../src/addr2line.c:185
+#: ../src/findtextrel.c:175
+#: ../src/elfcmp.c:527
+#: ../src/ranlib.c:141
+#: ../src/strings.c:232
+#: ../src/unstrip.c:238
+#: ../src/objdump.c:186
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Geschrieben von %s.\n"
+
+#: ../src/ar.c:314
+#, c-format
+msgid "More than one operation specified"
+msgstr ""
+
+#: ../src/ar.c:404
+#, c-format
+msgid "cannot open archive '%s'"
+msgstr "Konnte Archiv '%s' nicht öffnen"
+
+#: ../src/ar.c:414
+#, c-format
+msgid "cannot open archive '%s': %s"
+msgstr "Konnte Archiv '%s': %s nicht öffnen"
+
+#: ../src/ar.c:418
+#, c-format
+msgid "%s: not an archive file"
+msgstr "%s: Keine Archiv-Datei"
+
+#: ../src/ar.c:422
+#, c-format
+msgid "cannot stat archive '%s'"
+msgstr ""
+
+#: ../src/ar.c:434
+#, c-format
+msgid "no entry %s in archive\n"
+msgstr "Kein Eintrag %s in Archiv\n"
+
+#: ../src/ar.c:474
+#: ../src/ar.c:918
+#: ../src/ar.c:1118
+#, c-format
+msgid "cannot create hash table"
+msgstr "Konnte Hash-Tabelle nicht erstellen"
+
+#: ../src/ar.c:481
+#: ../src/ar.c:925
+#: ../src/ar.c:1127
+#, c-format
+msgid "cannot insert into hash table"
+msgstr "Konnte nicht in Hash-Tabelle einfügen"
+
+#: ../src/ar.c:489
+#: ../src/ranlib.c:176
+#, c-format
+msgid "cannot stat '%s'"
+msgstr ""
+
+#: ../src/ar.c:585
+#, c-format
+msgid "cannot read content of %s: %s"
+msgstr "Konnte Inhalt von %s: %s nicht lesen"
+
+#: ../src/ar.c:629
+#, c-format
+msgid "cannot open %.*s"
+msgstr "Konnte %.*s nicht öffnen"
+
+#: ../src/ar.c:651
+#, c-format
+msgid "failed to write %s"
+msgstr "Konnte %s nicht schreiben"
+
+#: ../src/ar.c:663
+#, c-format
+msgid "cannot change mode of %s"
+msgstr ""
+
+#: ../src/ar.c:679
+#, c-format
+msgid "cannot change modification time of %s"
+msgstr "Konnte Bearbeitungszeit von %s nicht ändern"
+
+#: ../src/ar.c:726
+#, c-format
+msgid "cannot rename temporary file to %.*s"
+msgstr "Konnte temporäre Datei nicht in %.*s umbenennen"
+
+#: ../src/ar.c:762
+#: ../src/ar.c:1010
+#: ../src/ar.c:1408
+#: ../src/ranlib.c:250
+#, c-format
+msgid "cannot create new file"
+msgstr "neue Datei konnte nicht angelegt werden"
+
+#: ../src/ar.c:1209
+#, c-format
+msgid "position member %s not found"
+msgstr ""
+
+#: ../src/ar.c:1219
+#, c-format
+msgid "%s: no entry %s in archive!\n"
+msgstr "%s: Kein Eintrag %s in dem Archiv!\n"
+
+#: ../src/ar.c:1248
+#: ../src/ldgeneric.c:519
+#: ../src/objdump.c:257
+#, c-format
+msgid "cannot open %s"
+msgstr "Konnte %s nicht öffnen"
+
+#: ../src/ar.c:1253
+#, c-format
+msgid "cannot stat %s"
+msgstr ""
+
+#: ../src/ar.c:1259
+#, c-format
+msgid "%s is no regular file"
+msgstr "%s ist keine reguläre Datei"
+
+#: ../src/ar.c:1272
+#, c-format
+msgid "cannot get ELF descriptor for %s: %s\n"
+msgstr ""
+
+#: ../src/ar.c:1291
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "Konnte %s: %s nicht lesen"
+
+#. The archive is too big.
+#: ../src/arlib.c:215
+#, c-format
+msgid "the archive '%s' is too large"
+msgstr "Das Archiv '%s' ist zu groß"
+
+#: ../src/arlib.c:228
+#, c-format
+msgid "cannot read ELF header of %s(%s): %s"
+msgstr "\"Konnte ELF-Kopf von %s(%s): %s nicht lesen"
+
+#: ../src/nm.c:74
+#: ../src/readelf.c:72
+#: ../src/strip.c:72
+msgid "Output selection:"
+msgstr ""
+
+#: ../src/nm.c:75
+msgid "Display debugger-only symbols"
+msgstr ""
+
+#: ../src/nm.c:76
+msgid "Display only defined symbols"
+msgstr ""
+
+#: ../src/nm.c:79
+msgid "Display dynamic symbols instead of normal symbols"
+msgstr ""
+
+#: ../src/nm.c:80
+msgid "Display only external symbols"
+msgstr ""
+
+#: ../src/nm.c:81
+msgid "Display only undefined symbols"
+msgstr ""
+
+#: ../src/nm.c:83
+msgid "Include index for symbols from archive members"
+msgstr ""
+
+#: ../src/nm.c:85
+#: ../src/size.c:66
+msgid "Output format:"
+msgstr ""
+
+#: ../src/nm.c:87
+msgid "Print name of the input file before every symbol"
+msgstr ""
+
+#: ../src/nm.c:90
+msgid "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The default is `sysv'"
+msgstr ""
+
+#: ../src/nm.c:92
+msgid "Same as --format=bsd"
+msgstr ""
+
+#: ../src/nm.c:93
+msgid "Same as --format=posix"
+msgstr ""
+
+#: ../src/nm.c:94
+#: ../src/size.c:72
+msgid "Use RADIX for printing symbol values"
+msgstr ""
+
+#: ../src/nm.c:95
+msgid "Mark weak symbols"
+msgstr ""
+
+#: ../src/nm.c:96
+msgid "Print size of defined symbols"
+msgstr ""
+
+#: ../src/nm.c:98
+#: ../src/size.c:80
+#: ../src/strip.c:77
+#: ../src/unstrip.c:80
+msgid "Output options:"
+msgstr ""
+
+#: ../src/nm.c:99
+msgid "Sort symbols numerically by address"
+msgstr ""
+
+#: ../src/nm.c:101
+msgid "Do not sort the symbols"
+msgstr ""
+
+#: ../src/nm.c:102
+msgid "Reverse the sense of the sort"
+msgstr ""
+
+#: ../src/nm.c:103
+#: ../src/addr2line.c:73
+#: ../src/findtextrel.c:75
+#: ../src/elfcmp.c:75
+#: ../src/strings.c:83
+msgid "Miscellaneous:"
+msgstr ""
+
+#. Short description of program.
+#: ../src/nm.c:108
+msgid "List symbols from FILEs (a.out by default)."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/nm.c:111
+#: ../src/size.c:92
+#: ../src/strip.c:96
+#: ../src/findtextrel.c:84
+#: ../src/strings.c:92
+#: ../src/objdump.c:80
+msgid "[FILE...]"
+msgstr ""
+
+#: ../src/nm.c:136
+#: ../src/size.c:117
+#: ../src/strip.c:120
+#: ../src/objdump.c:105
+#, c-format
+msgid "%s: INTERNAL ERROR %d (%s-%s): %s"
+msgstr ""
+
+#: ../src/nm.c:363
+#: ../src/size.c:301
+#: ../src/strip.c:432
+#: ../src/strip.c:467
+#: ../src/ldgeneric.c:1767
+#: ../src/ldgeneric.c:4257
+#: ../src/findtextrel.c:229
+#: ../src/elfcmp.c:574
+#: ../src/ranlib.c:169
+#: ../src/strings.c:183
+#: ../src/unstrip.c:1899
+#: ../src/unstrip.c:1928
+#, c-format
+msgid "cannot open '%s'"
+msgstr ""
+
+#: ../src/nm.c:380
+#: ../src/nm.c:392
+#: ../src/size.c:317
+#: ../src/size.c:326
+#: ../src/size.c:337
+#: ../src/strip.c:1815
+#, c-format
+msgid "while closing '%s'"
+msgstr ""
+
+#: ../src/nm.c:402
+#: ../src/strip.c:358
+#: ../src/objdump.c:296
+#, c-format
+msgid "%s: File format not recognized"
+msgstr ""
+
+#. Note: 0 is no valid offset.
+#: ../src/nm.c:442
+msgid ""
+"\n"
+"Archive index:"
+msgstr ""
+
+#: ../src/nm.c:451
+#, c-format
+msgid "invalid offset %zu for symbol %s"
+msgstr ""
+
+#: ../src/nm.c:456
+#, c-format
+msgid "%s in %s\n"
+msgstr ""
+
+#: ../src/nm.c:464
+#, c-format
+msgid "cannot reset archive offset to beginning"
+msgstr ""
+
+#: ../src/nm.c:488
+#: ../src/objdump.c:344
+#, c-format
+msgid "%s%s%s: file format not recognized"
+msgstr ""
+
+#: ../src/nm.c:700
+#, c-format
+msgid "cannot create search tree"
+msgstr ""
+
+#: ../src/nm.c:740
+#: ../src/nm.c:1002
+#: ../src/readelf.c:850
+#: ../src/readelf.c:993
+#: ../src/readelf.c:1134
+#: ../src/readelf.c:1316
+#: ../src/readelf.c:1514
+#: ../src/readelf.c:1659
+#: ../src/readelf.c:1827
+#: ../src/readelf.c:2081
+#: ../src/readelf.c:2147
+#: ../src/readelf.c:2225
+#: ../src/readelf.c:2722
+#: ../src/readelf.c:2758
+#: ../src/readelf.c:2820
+#: ../src/readelf.c:6312
+#: ../src/readelf.c:7178
+#: ../src/readelf.c:7323
+#: ../src/readelf.c:7392
+#: ../src/size.c:425
+#: ../src/size.c:499
+#: ../src/strip.c:482
+#: ../src/objdump.c:744
+#, c-format
+msgid "cannot get section header string table index"
+msgstr ""
+
+#: ../src/nm.c:766
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Symbols from %s:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Symbole aus %s:\n"
+"\n"
+
+#: ../src/nm.c:768
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Symbols from %s[%s]:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Symbole aus %s[%s]:\n"
+"\n"
+
+#. The header line.
+#: ../src/nm.c:771
+#, c-format
+msgid ""
+"%*s%-*s %-*s Class Type %-*s %*s Section\n"
+"\n"
+msgstr ""
+
+#: ../src/nm.c:1012
+#, c-format
+msgid "%s: entry size in section `%s' is not what we expect"
+msgstr ""
+
+#: ../src/nm.c:1016
+#, c-format
+msgid "%s: size of section `%s' is not multiple of entry size"
+msgstr ""
+
+#. XXX Add machine specific object file types.
+#: ../src/nm.c:1255
+#, c-format
+msgid "%s%s%s%s: Invalid operation"
+msgstr ""
+
+#: ../src/nm.c:1312
+#, c-format
+msgid "%s%s%s: no symbols"
+msgstr ""
+
+#: ../src/readelf.c:73
+msgid "Equivalent to: -e -h -l"
+msgstr ""
+
+#: ../src/readelf.c:74
+msgid "Display the dynamic segment"
+msgstr ""
+
+#: ../src/readelf.c:75
+msgid "Display the ELF file header"
+msgstr ""
+
+#: ../src/readelf.c:77
+msgid "Display histogram of bucket list lengths"
+msgstr ""
+
+#: ../src/readelf.c:78
+msgid "Display the program headers"
+msgstr ""
+
+#: ../src/readelf.c:80
+msgid "Display relocations"
+msgstr ""
+
+#: ../src/readelf.c:81
+msgid "Display the sections' header"
+msgstr ""
+
+#: ../src/readelf.c:83
+msgid "Display the symbol table"
+msgstr ""
+
+#: ../src/readelf.c:84
+msgid "Display versioning information"
+msgstr ""
+
+#: ../src/readelf.c:86
+msgid "Display DWARF section content. SECTION can be one of abbrev, aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, or exception"
+msgstr ""
+
+#: ../src/readelf.c:89
+msgid "Display the core notes"
+msgstr ""
+
+#: ../src/readelf.c:91
+msgid "Display architecture specific information (if any)"
+msgstr ""
+
+#: ../src/readelf.c:93
+msgid "Dump the uninterpreted contents of SECTION, by number or name"
+msgstr ""
+
+#: ../src/readelf.c:95
+msgid "Print string contents of sections"
+msgstr ""
+
+#: ../src/readelf.c:98
+msgid "Display the symbol index of an archive"
+msgstr ""
+
+#: ../src/readelf.c:99
+msgid "Display sections for exception handling"
+msgstr ""
+
+#: ../src/readelf.c:102
+msgid "Output control:"
+msgstr ""
+
+#. Short description of program.
+#: ../src/readelf.c:108
+msgid "Print information from ELF file in human-readable form."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/readelf.c:112
+#: ../src/elflint.c:85
+msgid "FILE..."
+msgstr ""
+
+#: ../src/readelf.c:259
+#: ../src/elflint.c:158
+#, c-format
+msgid "cannot open input file"
+msgstr ""
+
+#: ../src/readelf.c:387
+#, c-format
+msgid "Unknown DWARF debug section `%s'.\n"
+msgstr ""
+
+#: ../src/readelf.c:408
+#: ../src/elflint.c:222
+msgid "Missing file name.\n"
+msgstr ""
+
+#: ../src/readelf.c:413
+#: ../src/objdump.c:236
+msgid "No operation specified.\n"
+msgstr ""
+
+#: ../src/readelf.c:448
+#, c-format
+msgid "cannot generate Elf descriptor: %s"
+msgstr ""
+
+#: ../src/readelf.c:460
+#, c-format
+msgid "'%s' is not an archive, cannot print archive index"
+msgstr ""
+
+#: ../src/readelf.c:465
+#, c-format
+msgid "error while closing Elf descriptor: %s"
+msgstr ""
+
+#: ../src/readelf.c:557
+#, c-format
+msgid "cannot stat input file"
+msgstr ""
+
+#: ../src/readelf.c:559
+#, c-format
+msgid "input file is empty"
+msgstr ""
+
+#: ../src/readelf.c:561
+#, c-format
+msgid "failed reading '%s': %s"
+msgstr ""
+
+#: ../src/readelf.c:596
+#, c-format
+msgid "cannot read ELF header: %s"
+msgstr ""
+
+#: ../src/readelf.c:604
+#, c-format
+msgid "cannot create EBL handle"
+msgstr ""
+
+#: ../src/readelf.c:611
+#: ../src/strip.c:542
+#: ../src/ldgeneric.c:661
+#: ../src/ldgeneric.c:1122
+#, c-format
+msgid "cannot determine number of sections: %s"
+msgstr ""
+
+#: ../src/readelf.c:697
+msgid "NONE (None)"
+msgstr ""
+
+#: ../src/readelf.c:698
+msgid "REL (Relocatable file)"
+msgstr ""
+
+#: ../src/readelf.c:699
+msgid "EXEC (Executable file)"
+msgstr ""
+
+#: ../src/readelf.c:700
+msgid "DYN (Shared object file)"
+msgstr ""
+
+#: ../src/readelf.c:701
+msgid "CORE (Core file)"
+msgstr ""
+
+#: ../src/readelf.c:706
+#, c-format
+msgid "OS Specific: (%x)\n"
+msgstr ""
+
+#. && e_type <= ET_HIPROC always true
+#: ../src/readelf.c:708
+#, c-format
+msgid "Processor Specific: (%x)\n"
+msgstr ""
+
+#: ../src/readelf.c:718
+msgid ""
+"ELF Header:\n"
+" Magic: "
+msgstr ""
+
+#: ../src/readelf.c:722
+#, c-format
+msgid ""
+"\n"
+" Class: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:727
+#, c-format
+msgid " Data: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:733
+#, c-format
+msgid " Ident Version: %hhd %s\n"
+msgstr ""
+
+#: ../src/readelf.c:735
+#: ../src/readelf.c:752
+msgid "(current)"
+msgstr ""
+
+#: ../src/readelf.c:739
+#, c-format
+msgid " OS/ABI: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:742
+#, c-format
+msgid " ABI Version: %hhd\n"
+msgstr ""
+
+#: ../src/readelf.c:745
+msgid " Type: "
+msgstr ""
+
+#: ../src/readelf.c:748
+#, c-format
+msgid " Machine: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:750
+#, c-format
+msgid " Version: %d %s\n"
+msgstr ""
+
+#: ../src/readelf.c:754
+#, c-format
+msgid " Entry point address: %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/readelf.c:757
+#, c-format
+msgid " Start of program headers: %<PRId64> %s\n"
+msgstr ""
+
+#: ../src/readelf.c:758
+#: ../src/readelf.c:761
+msgid "(bytes into file)"
+msgstr ""
+
+#: ../src/readelf.c:760
+#, c-format
+msgid " Start of section headers: %<PRId64> %s\n"
+msgstr ""
+
+#: ../src/readelf.c:763
+#, c-format
+msgid " Flags: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:766
+#, c-format
+msgid " Size of this header: %<PRId16> %s\n"
+msgstr ""
+
+#: ../src/readelf.c:767
+#: ../src/readelf.c:770
+#: ../src/readelf.c:776
+msgid "(bytes)"
+msgstr ""
+
+#: ../src/readelf.c:769
+#, c-format
+msgid " Size of program header entries: %<PRId16> %s\n"
+msgstr ""
+
+#: ../src/readelf.c:772
+#, c-format
+msgid " Number of program headers entries: %<PRId16>\n"
+msgstr ""
+
+#: ../src/readelf.c:775
+#, c-format
+msgid " Size of section header entries: %<PRId16> %s\n"
+msgstr ""
+
+#: ../src/readelf.c:778
+#, c-format
+msgid " Number of section headers entries: %<PRId16>"
+msgstr ""
+
+#: ../src/readelf.c:785
+#, c-format
+msgid " (%<PRIu32> in [0].sh_size)"
+msgstr ""
+
+#: ../src/readelf.c:788
+#: ../src/readelf.c:802
+msgid " ([0] not available)"
+msgstr ""
+
+#. We managed to get the zeroth section.
+#: ../src/readelf.c:798
+#, c-format
+msgid " (%<PRIu32> in [0].sh_link)"
+msgstr ""
+
+#: ../src/readelf.c:806
+#, c-format
+msgid ""
+" Section header string table index: XINDEX%s\n"
+"\n"
+msgstr ""
+
+#: ../src/readelf.c:810
+#, c-format
+msgid ""
+" Section header string table index: %<PRId16>\n"
+"\n"
+msgstr ""
+
+#: ../src/readelf.c:842
+#, c-format
+msgid ""
+"There are %d section headers, starting at offset %#<PRIx64>:\n"
+"\n"
+msgstr ""
+
+#: ../src/readelf.c:852
+msgid "Section Headers:"
+msgstr ""
+
+#: ../src/readelf.c:855
+msgid "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al"
+msgstr ""
+
+#: ../src/readelf.c:857
+msgid "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al"
+msgstr ""
+
+#: ../src/readelf.c:864
+#: ../src/readelf.c:1017
+#, c-format
+msgid "cannot get section: %s"
+msgstr ""
+
+#: ../src/readelf.c:871
+#: ../src/readelf.c:1025
+#: ../src/readelf.c:7343
+#: ../src/unstrip.c:352
+#: ../src/unstrip.c:376
+#: ../src/unstrip.c:426
+#: ../src/unstrip.c:535
+#: ../src/unstrip.c:552
+#: ../src/unstrip.c:590
+#: ../src/unstrip.c:788
+#: ../src/unstrip.c:1056
+#: ../src/unstrip.c:1243
+#: ../src/unstrip.c:1304
+#: ../src/unstrip.c:1426
+#: ../src/unstrip.c:1479
+#: ../src/unstrip.c:1587
+#: ../src/unstrip.c:1777
+#, c-format
+msgid "cannot get section header: %s"
+msgstr ""
+
+#: ../src/readelf.c:929
+msgid "Program Headers:"
+msgstr ""
+
+#: ../src/readelf.c:931
+msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
+msgstr ""
+
+#: ../src/readelf.c:934
+msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
+msgstr ""
+
+#: ../src/readelf.c:974
+#, c-format
+msgid "\t[Requesting program interpreter: %s]\n"
+msgstr ""
+
+#: ../src/readelf.c:995
+msgid ""
+"\n"
+" Section to Segment mapping:\n"
+" Segment Sections..."
+msgstr ""
+
+#: ../src/readelf.c:1006
+#: ../src/unstrip.c:1823
+#: ../src/unstrip.c:1862
+#: ../src/unstrip.c:1869
+#, c-format
+msgid "cannot get program header: %s"
+msgstr ""
+
+#: ../src/readelf.c:1140
+#, c-format
+msgid ""
+"\n"
+"COMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n"
+msgid_plural ""
+"\n"
+"COMDAT section group [%2zu] '%s' with signature '%s' contains %zu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1145
+#, c-format
+msgid ""
+"\n"
+"Section group [%2zu] '%s' with signature '%s' contains %zu entry:\n"
+msgid_plural ""
+"\n"
+"Section group [%2zu] '%s' with signature '%s' contains %zu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1153
+msgid "<INVALID SYMBOL>"
+msgstr ""
+
+#: ../src/readelf.c:1167
+msgid "<INVALID SECTION>"
+msgstr ""
+
+#: ../src/readelf.c:1318
+#, c-format
+msgid ""
+"\n"
+"Dynamic segment contains %lu entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Dynamic segment contains %lu entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1330
+msgid " Type Value\n"
+msgstr ""
+
+#: ../src/readelf.c:1354
+#, c-format
+msgid "Shared library: [%s]\n"
+msgstr ""
+
+#: ../src/readelf.c:1359
+#, c-format
+msgid "Library soname: [%s]\n"
+msgstr ""
+
+#: ../src/readelf.c:1364
+#, c-format
+msgid "Library rpath: [%s]\n"
+msgstr ""
+
+#: ../src/readelf.c:1369
+#, c-format
+msgid "Library runpath: [%s]\n"
+msgstr ""
+
+#: ../src/readelf.c:1389
+#, c-format
+msgid "%<PRId64> (bytes)\n"
+msgstr ""
+
+#: ../src/readelf.c:1499
+#: ../src/readelf.c:1644
+#, c-format
+msgid ""
+"\n"
+"Invalid symbol table at offset %#0<PRIx64>\n"
+msgstr ""
+
+#: ../src/readelf.c:1517
+#: ../src/readelf.c:1661
+#, c-format
+msgid ""
+"\n"
+"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0<PRIx64> contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0<PRIx64> contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#. The .rel.dyn section does not refer to a specific section but
+#. instead of section index zero. Do not try to print a section
+#. name.
+#: ../src/readelf.c:1532
+#, c-format
+msgid ""
+"\n"
+"Relocation section [%2u] '%s' at offset %#0<PRIx64> contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Relocation section [%2u] '%s' at offset %#0<PRIx64> contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1542
+msgid " Offset Type Value Name\n"
+msgstr ""
+
+#: ../src/readelf.c:1544
+msgid " Offset Type Value Name\n"
+msgstr ""
+
+#: ../src/readelf.c:1568
+#: ../src/readelf.c:1580
+#: ../src/readelf.c:1598
+#: ../src/readelf.c:1610
+#: ../src/readelf.c:1700
+#: ../src/readelf.c:1713
+#: ../src/readelf.c:1732
+#: ../src/readelf.c:1745
+msgid "<INVALID RELOC>"
+msgstr ""
+
+#: ../src/readelf.c:1569
+#: ../src/readelf.c:1701
+#: ../src/objdump.c:379
+msgid "INVALID SYMBOL"
+msgstr ""
+
+#: ../src/readelf.c:1599
+#: ../src/readelf.c:1733
+#: ../src/objdump.c:394
+msgid "INVALID SECTION"
+msgstr ""
+
+#: ../src/readelf.c:1673
+msgid " Offset Type Value Addend Name\n"
+msgstr ""
+
+#: ../src/readelf.c:1675
+msgid " Offset Type Value Addend Name\n"
+msgstr ""
+
+#: ../src/readelf.c:1834
+#, c-format
+msgid ""
+"\n"
+"Symbol table [%2u] '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"Symbol table [%2u] '%s' contains %u entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1840
+#, c-format
+msgid " %lu local symbol String table: [%2u] '%s'\n"
+msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1850
+msgid " Num: Value Size Type Bind Vis Ndx Name\n"
+msgstr ""
+
+#: ../src/readelf.c:1852
+msgid " Num: Value Size Type Bind Vis Ndx Name\n"
+msgstr ""
+
+#: ../src/readelf.c:1872
+#, c-format
+msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
+msgstr ""
+
+#: ../src/readelf.c:1960
+#, c-format
+msgid "bad dynamic symbol"
+msgstr ""
+
+#: ../src/readelf.c:2042
+msgid "none"
+msgstr ""
+
+#: ../src/readelf.c:2059
+msgid "| <unknown>"
+msgstr ""
+
+#: ../src/readelf.c:2084
+#, c-format
+msgid ""
+"\n"
+"Version needs section [%2u] '%s' contains %d entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Version needs section [%2u] '%s' contains %d entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2107
+#, c-format
+msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
+msgstr ""
+
+#: ../src/readelf.c:2120
+#, c-format
+msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
+msgstr ""
+
+#: ../src/readelf.c:2151
+#, c-format
+msgid ""
+"\n"
+"Version definition section [%2u] '%s' contains %d entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Version definition section [%2u] '%s' contains %d entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2181
+#, c-format
+msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:2196
+#, c-format
+msgid " %#06x: Parent %d: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:2428
+#, c-format
+msgid ""
+"\n"
+"Version symbols section [%2u] '%s' contains %d entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'"
+msgid_plural ""
+"\n"
+"Version symbols section [%2u] '%s' contains %d entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2458
+msgid " 0 *local* "
+msgstr ""
+
+#: ../src/readelf.c:2463
+msgid " 1 *global* "
+msgstr ""
+
+#: ../src/readelf.c:2494
+#, c-format
+msgid ""
+"\n"
+"Histogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Histogram for bucket list length in section [%2u] '%s' (total of %d buckets):\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2517
+#, c-format
+msgid " Length Number % of total Coverage\n"
+msgstr ""
+
+#: ../src/readelf.c:2519
+#, c-format
+msgid " 0 %6<PRIu32> %5.1f%%\n"
+msgstr ""
+
+#: ../src/readelf.c:2526
+#, c-format
+msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
+msgstr ""
+
+#: ../src/readelf.c:2539
+#, c-format
+msgid ""
+" Average number of tests: successful lookup: %f\n"
+" unsuccessful lookup: %f\n"
+msgstr ""
+
+#: ../src/readelf.c:2557
+#: ../src/readelf.c:2599
+#: ../src/readelf.c:2640
+#, c-format
+msgid "cannot get data for section %d: %s"
+msgstr ""
+
+#: ../src/readelf.c:2694
+#, c-format
+msgid ""
+" Symbol Bias: %u\n"
+" Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n"
+msgstr ""
+
+#: ../src/readelf.c:2768
+#, c-format
+msgid ""
+"\n"
+"Library list section [%2zu] '%s' at offset %#0<PRIx64> contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Library list section [%2zu] '%s' at offset %#0<PRIx64> contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2782
+msgid " Library Time Stamp Checksum Version Flags"
+msgstr ""
+
+#: ../src/readelf.c:2832
+#, c-format
+msgid ""
+"\n"
+"Object attributes section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:2848
+msgid " Owner Size\n"
+msgstr ""
+
+#: ../src/readelf.c:2874
+#, c-format
+msgid " %-13s %4<PRIu32>\n"
+msgstr ""
+
+#: ../src/readelf.c:2906
+#, c-format
+msgid " %-4u %12<PRIu32>\n"
+msgstr ""
+
+#. Tag_File
+#: ../src/readelf.c:2911
+#, c-format
+msgid " File: %11<PRIu32>\n"
+msgstr ""
+
+#: ../src/readelf.c:2946
+#, c-format
+msgid " %s: %<PRId64>, %s\n"
+msgstr ""
+
+#: ../src/readelf.c:2949
+#, c-format
+msgid " %s: %<PRId64>\n"
+msgstr ""
+
+#: ../src/readelf.c:2952
+#, c-format
+msgid " %s: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:2959
+#, c-format
+msgid " %u: %<PRId64>\n"
+msgstr ""
+
+#: ../src/readelf.c:2962
+#, c-format
+msgid " %u: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:2997
+#, c-format
+msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>"
+msgstr ""
+
+#: ../src/readelf.c:3000
+#, c-format
+msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>"
+msgstr ""
+
+#: ../src/readelf.c:3005
+#, c-format
+msgid "%#<PRIx64> <%s+%#<PRIx64>>"
+msgstr ""
+
+#: ../src/readelf.c:3008
+#, c-format
+msgid "%#0*<PRIx64> <%s+%#<PRIx64>>"
+msgstr ""
+
+#: ../src/readelf.c:3014
+#, c-format
+msgid "%s+%#<PRIx64> <%s>"
+msgstr ""
+
+#: ../src/readelf.c:3017
+#, c-format
+msgid "%s+%#0*<PRIx64> <%s>"
+msgstr ""
+
+#: ../src/readelf.c:3021
+#, c-format
+msgid "%#<PRIx64> <%s>"
+msgstr ""
+
+#: ../src/readelf.c:3024
+#, c-format
+msgid "%#0*<PRIx64> <%s>"
+msgstr ""
+
+#: ../src/readelf.c:3029
+#, c-format
+msgid "%s+%#<PRIx64>"
+msgstr ""
+
+#: ../src/readelf.c:3032
+#, c-format
+msgid "%s+%#0*<PRIx64>"
+msgstr ""
+
+#: ../src/readelf.c:3140
+#, c-format
+msgid "unknown tag %hx"
+msgstr ""
+
+#: ../src/readelf.c:3142
+#, c-format
+msgid "unknown user tag %hx"
+msgstr ""
+
+#: ../src/readelf.c:3352
+#, c-format
+msgid "unknown attribute %hx"
+msgstr ""
+
+#: ../src/readelf.c:3355
+#, c-format
+msgid "unknown user attribute %hx"
+msgstr ""
+
+#: ../src/readelf.c:3401
+#, c-format
+msgid "unknown form %<PRIx64>"
+msgstr ""
+
+#: ../src/readelf.c:4017
+#, c-format
+msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n"
+msgstr ""
+
+#: ../src/readelf.c:4030
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+" [ Code]\n"
+msgstr ""
+
+#: ../src/readelf.c:4037
+#, c-format
+msgid ""
+"\n"
+"Abbreviation section at offset %<PRIu64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:4050
+#, c-format
+msgid " *** error while reading abbreviation: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:4066
+#, c-format
+msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:4069
+msgid "yes"
+msgstr ""
+
+#: ../src/readelf.c:4069
+msgid "no"
+msgstr ""
+
+#: ../src/readelf.c:4105
+#, c-format
+msgid "cannot get .debug_aranges content: %s"
+msgstr ""
+
+#: ../src/readelf.c:4110
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64> contains %zu entry:\n"
+msgid_plural ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64> contains %zu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:4140
+#, c-format
+msgid " [%*zu] ???\n"
+msgstr ""
+
+#: ../src/readelf.c:4142
+#, c-format
+msgid " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
+msgstr ""
+
+#: ../src/readelf.c:4161
+#, c-format
+msgid "cannot get .debug_ranges content: %s"
+msgstr ""
+
+#: ../src/readelf.c:4166
+#: ../src/readelf.c:4623
+#: ../src/readelf.c:5272
+#: ../src/readelf.c:5717
+#: ../src/readelf.c:5812
+#: ../src/readelf.c:5984
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:4180
+#: ../src/readelf.c:5731
+#, c-format
+msgid " [%6tx] <INVALID DATA>\n"
+msgstr ""
+
+#: ../src/readelf.c:4202
+#: ../src/readelf.c:5753
+#, c-format
+msgid " [%6tx] base address %s\n"
+msgstr ""
+
+#. We have an address range entry.
+#. First address range entry in a list.
+#: ../src/readelf.c:4213
+#, c-format
+msgid " [%6tx] %s..%s\n"
+msgstr ""
+
+#: ../src/readelf.c:4215
+#, c-format
+msgid " %s..%s\n"
+msgstr ""
+
+#: ../src/readelf.c:4612
+#: ../src/readelf.c:6050
+#: ../src/readelf.c:6152
+#, c-format
+msgid "cannot get %s content: %s"
+msgstr ""
+
+#: ../src/readelf.c:4619
+#, c-format
+msgid ""
+"\n"
+"Call frame information section [%2zu] '%s' at offset %#<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:4646
+#: ../src/readelf.c:5306
+#, c-format
+msgid "invalid data in section [%zu] '%s'"
+msgstr ""
+
+#: ../src/readelf.c:4668
+#, c-format
+msgid ""
+"\n"
+" [%6tx] Zero terminator\n"
+msgstr ""
+
+#: ../src/readelf.c:4746
+msgid "FDE address encoding: "
+msgstr ""
+
+#: ../src/readelf.c:4752
+msgid "LSDA pointer encoding: "
+msgstr ""
+
+#: ../src/readelf.c:4797
+#, c-format
+msgid "invalid augmentation encoding"
+msgstr ""
+
+#: ../src/readelf.c:4868
+#, c-format
+msgid " (offset: %#<PRIx64>)"
+msgstr ""
+
+#: ../src/readelf.c:4875
+#, c-format
+msgid " (end offset: %#<PRIx64>)"
+msgstr ""
+
+#: ../src/readelf.c:4902
+#, c-format
+msgid " %-26sLSDA pointer: %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/readelf.c:4948
+#, c-format
+msgid "cannot get attribute code: %s"
+msgstr ""
+
+#: ../src/readelf.c:4956
+#, c-format
+msgid "cannot get attribute form: %s"
+msgstr ""
+
+#: ../src/readelf.c:4969
+#, c-format
+msgid "cannot get attribute value: %s"
+msgstr ""
+
+#: ../src/readelf.c:5151
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+" [Offset]\n"
+msgstr ""
+
+#: ../src/readelf.c:5176
+#, c-format
+msgid ""
+" Compilation unit at offset %<PRIu64>:\n"
+" Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: %<PRIu8>, Offset size: %<PRIu8>\n"
+msgstr ""
+
+#: ../src/readelf.c:5194
+#, c-format
+msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s"
+msgstr ""
+
+#: ../src/readelf.c:5205
+#, c-format
+msgid "cannot get DIE offset: %s"
+msgstr ""
+
+#: ../src/readelf.c:5213
+#, c-format
+msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s"
+msgstr ""
+
+#: ../src/readelf.c:5242
+#, c-format
+msgid "cannot get next DIE: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:5249
+#, c-format
+msgid "cannot get next DIE: %s"
+msgstr ""
+
+#: ../src/readelf.c:5284
+#, c-format
+msgid "cannot get line data section data: %s"
+msgstr ""
+
+#: ../src/readelf.c:5297
+#, c-format
+msgid ""
+"\n"
+"Table at offset %Zu:\n"
+msgstr ""
+
+#. Print what we got so far.
+#: ../src/readelf.c:5349
+#, c-format
+msgid ""
+"\n"
+" Length: %<PRIu64>\n"
+" DWARF version: %<PRIuFAST16>\n"
+" Prologue length: %<PRIu64>\n"
+" Minimum instruction length: %<PRIuFAST8>\n"
+" Initial value if '%s': %<PRIuFAST8>\n"
+" Line base: %<PRIdFAST8>\n"
+" Line range: %<PRIuFAST8>\n"
+" Opcode base: %<PRIuFAST8>\n"
+"\n"
+"Opcodes:\n"
+msgstr ""
+
+#: ../src/readelf.c:5368
+#, c-format
+msgid "invalid data at offset %tu in section [%zu] '%s'"
+msgstr ""
+
+#: ../src/readelf.c:5383
+#, c-format
+msgid " [%*<PRIuFAST8>] %hhu argument\n"
+msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:5391
+msgid ""
+"\n"
+"Directory table:"
+msgstr ""
+
+#: ../src/readelf.c:5407
+msgid ""
+"\n"
+"File name table:\n"
+" Entry Dir Time Size Name"
+msgstr ""
+
+#: ../src/readelf.c:5436
+msgid ""
+"\n"
+"Line number statements:"
+msgstr ""
+
+#: ../src/readelf.c:5497
+#, c-format
+msgid " special opcode %u: address+%u = %s, line%+d = %zu\n"
+msgstr ""
+
+#: ../src/readelf.c:5517
+#, c-format
+msgid " extended opcode %u: "
+msgstr ""
+
+#: ../src/readelf.c:5522
+msgid "end of sequence"
+msgstr ""
+
+#: ../src/readelf.c:5537
+#, c-format
+msgid "set address to %s\n"
+msgstr ""
+
+#: ../src/readelf.c:5558
+#, c-format
+msgid "define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
+msgstr ""
+
+#. Unknown, ignore it.
+#: ../src/readelf.c:5567
+msgid "unknown opcode"
+msgstr ""
+
+#. Takes no argument.
+#: ../src/readelf.c:5579
+msgid " copy"
+msgstr ""
+
+#: ../src/readelf.c:5589
+#, c-format
+msgid "advance address by %u to %s\n"
+msgstr ""
+
+#: ../src/readelf.c:5600
+#, c-format
+msgid " advance line by constant %d to %<PRId64>\n"
+msgstr ""
+
+#: ../src/readelf.c:5608
+#, c-format
+msgid " set file to %<PRIu64>\n"
+msgstr ""
+
+#: ../src/readelf.c:5618
+#, c-format
+msgid " set column to %<PRIu64>\n"
+msgstr ""
+
+#: ../src/readelf.c:5625
+#, c-format
+msgid " set '%s' to %<PRIuFAST8>\n"
+msgstr ""
+
+#. Takes no argument.
+#: ../src/readelf.c:5631
+msgid " set basic block flag"
+msgstr ""
+
+#: ../src/readelf.c:5641
+#, c-format
+msgid "advance address by constant %u to %s\n"
+msgstr ""
+
+#: ../src/readelf.c:5657
+#, c-format
+msgid "advance address by fixed value %u to %s\n"
+msgstr ""
+
+#. Takes no argument.
+#: ../src/readelf.c:5666
+msgid " set prologue end flag"
+msgstr ""
+
+#. Takes no argument.
+#: ../src/readelf.c:5671
+msgid " set epilogue begin flag"
+msgstr ""
+
+#. This is a new opcode the generator but not we know about.
+#. Read the parameters associated with it but then discard
+#. everything. Read all the parameters for this opcode.
+#: ../src/readelf.c:5680
+#, c-format
+msgid " unknown opcode with %<PRIu8> parameter:"
+msgid_plural " unknown opcode with %<PRIu8> parameters:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:5712
+#, c-format
+msgid "cannot get .debug_loc content: %s"
+msgstr ""
+
+#. First entry in a list.
+#: ../src/readelf.c:5767
+#, c-format
+msgid " [%6tx] %s..%s"
+msgstr ""
+
+#: ../src/readelf.c:5769
+#, c-format
+msgid " %s..%s"
+msgstr ""
+
+#: ../src/readelf.c:5822
+#, c-format
+msgid "cannot get macro information section data: %s"
+msgstr ""
+
+#: ../src/readelf.c:5901
+#, c-format
+msgid "%*s*** non-terminated string at end of section"
+msgstr ""
+
+#: ../src/readelf.c:5969
+#, c-format
+msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:6008
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+" %*s String\n"
+msgstr ""
+
+#: ../src/readelf.c:6022
+#, c-format
+msgid " *** error while reading strings: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:6042
+#, c-format
+msgid ""
+"\n"
+"Call frame search table section [%2zu] '.eh_frame_hdr':\n"
+msgstr ""
+
+#: ../src/readelf.c:6144
+#, c-format
+msgid ""
+"\n"
+"Exception handling table section [%2zu] '.gcc_except_table':\n"
+msgstr ""
+
+#: ../src/readelf.c:6167
+#, c-format
+msgid " LPStart encoding: %#x "
+msgstr ""
+
+#: ../src/readelf.c:6179
+#, c-format
+msgid " TType encoding: %#x "
+msgstr ""
+
+#: ../src/readelf.c:6193
+#, c-format
+msgid " Call site encoding: %#x "
+msgstr ""
+
+#: ../src/readelf.c:6206
+msgid ""
+"\n"
+" Call site table:"
+msgstr ""
+
+#: ../src/readelf.c:6220
+#, c-format
+msgid ""
+" [%4u] Call site start: %#<PRIx64>\n"
+" Call site length: %<PRIu64>\n"
+" Landing pad: %#<PRIx64>\n"
+" Action: %u\n"
+msgstr ""
+
+#: ../src/readelf.c:6280
+#, c-format
+msgid "invalid TType encoding"
+msgstr ""
+
+#: ../src/readelf.c:6303
+#, c-format
+msgid "cannot get debug context descriptor: %s"
+msgstr ""
+
+#: ../src/readelf.c:6438
+#: ../src/readelf.c:7016
+#, c-format
+msgid "cannot convert core note data: %s"
+msgstr ""
+
+#: ../src/readelf.c:6743
+#, c-format
+msgid ""
+"\n"
+"%*s... <repeats %u more times> ..."
+msgstr ""
+
+#: ../src/readelf.c:6785
+#, c-format
+msgid "unable to handle register number %d"
+msgstr ""
+
+#: ../src/readelf.c:6932
+#, c-format
+msgid "cannot get register info: %s"
+msgstr ""
+
+#: ../src/readelf.c:6956
+#, c-format
+msgid "cannot register info: %s"
+msgstr ""
+
+#: ../src/readelf.c:7114
+msgid " Owner Data size Type\n"
+msgstr ""
+
+#: ../src/readelf.c:7132
+#, c-format
+msgid " %-13.*s %9<PRId32> %s\n"
+msgstr ""
+
+#: ../src/readelf.c:7163
+#, c-format
+msgid "cannot get content of note section: %s"
+msgstr ""
+
+#: ../src/readelf.c:7190
+#, c-format
+msgid ""
+"\n"
+"Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7213
+#, c-format
+msgid ""
+"\n"
+"Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7259
+#, c-format
+msgid ""
+"\n"
+"Section [%Zu] '%s' has no data to dump.\n"
+msgstr ""
+
+#: ../src/readelf.c:7265
+#: ../src/readelf.c:7287
+#, c-format
+msgid "cannot get data for section [%Zu] '%s': %s"
+msgstr ""
+
+#: ../src/readelf.c:7269
+#, c-format
+msgid ""
+"\n"
+"Hex dump of section [%Zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7282
+#, c-format
+msgid ""
+"\n"
+"Section [%Zu] '%s' is empty.\n"
+msgstr ""
+
+#: ../src/readelf.c:7291
+#, c-format
+msgid ""
+"\n"
+"String section [%Zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7338
+#, c-format
+msgid ""
+"\n"
+"section [%lu] does not exist"
+msgstr ""
+
+#: ../src/readelf.c:7364
+#, c-format
+msgid ""
+"\n"
+"section '%s' does not exist"
+msgstr ""
+
+#: ../src/readelf.c:7425
+#, c-format
+msgid "cannot get symbol index of archive '%s': %s"
+msgstr ""
+
+#: ../src/readelf.c:7428
+#, c-format
+msgid ""
+"\n"
+"Archive '%s' has no symbol index\n"
+msgstr ""
+
+#: ../src/readelf.c:7432
+#, c-format
+msgid ""
+"\n"
+"Index of archive '%s' has %Zu entries:\n"
+msgstr ""
+
+#: ../src/readelf.c:7450
+#, c-format
+msgid "cannot extract member at offset %Zu in '%s': %s"
+msgstr ""
+
+#: ../src/readelf.c:7455
+#, c-format
+msgid "Archive member '%s' contains:\n"
+msgstr ""
+
+#: ../src/size.c:68
+msgid "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default is `bsd'"
+msgstr ""
+
+#: ../src/size.c:70
+msgid "Same as `--format=sysv'"
+msgstr ""
+
+#: ../src/size.c:71
+msgid "Same as `--format=bsd'"
+msgstr ""
+
+#: ../src/size.c:74
+msgid "Same as `--radix=10'"
+msgstr ""
+
+#: ../src/size.c:75
+msgid "Same as `--radix=8'"
+msgstr ""
+
+#: ../src/size.c:76
+msgid "Same as `--radix=16'"
+msgstr ""
+
+#: ../src/size.c:78
+msgid "Similar to `--format=sysv' output but in one line"
+msgstr ""
+
+#: ../src/size.c:82
+msgid "Print size and permission flags for loadable segments"
+msgstr ""
+
+#: ../src/size.c:83
+msgid "Display the total sizes (bsd only)"
+msgstr ""
+
+#. Short description of program.
+#: ../src/size.c:88
+msgid "List section sizes of FILEs (a.out by default)."
+msgstr ""
+
+#: ../src/size.c:269
+#, c-format
+msgid "Invalid format: %s"
+msgstr ""
+
+#: ../src/size.c:280
+#, c-format
+msgid "Invalid radix: %s"
+msgstr ""
+
+#: ../src/size.c:339
+#, c-format
+msgid "%s: file format not recognized"
+msgstr ""
+
+#: ../src/size.c:446
+#: ../src/size.c:589
+#, c-format
+msgid " (ex %s)"
+msgstr ""
+
+#: ../src/size.c:614
+msgid "(TOTALS)\n"
+msgstr ""
+
+#: ../src/strip.c:73
+msgid "Place stripped output into FILE"
+msgstr ""
+
+#: ../src/strip.c:74
+msgid "Extract the removed sections into FILE"
+msgstr ""
+
+#: ../src/strip.c:75
+msgid "Embed name FILE instead of -f argument"
+msgstr ""
+
+#: ../src/strip.c:79
+msgid "Remove all debugging symbols"
+msgstr ""
+
+#: ../src/strip.c:83
+msgid "Copy modified/access timestamps to the output"
+msgstr ""
+
+#: ../src/strip.c:85
+msgid "Remove .comment section"
+msgstr ""
+
+#: ../src/strip.c:88
+msgid "Relax a few rules to handle slightly broken ELF files"
+msgstr ""
+
+#. Short description of program.
+#: ../src/strip.c:93
+msgid "Discard symbols from object files."
+msgstr ""
+
+#: ../src/strip.c:185
+#, c-format
+msgid "Only one input file allowed together with '-o' and '-f'"
+msgstr ""
+
+#: ../src/strip.c:221
+#, c-format
+msgid "-f option specified twice"
+msgstr ""
+
+#: ../src/strip.c:230
+#, c-format
+msgid "-F option specified twice"
+msgstr ""
+
+#: ../src/strip.c:239
+#: ../src/unstrip.c:124
+#, c-format
+msgid "-o option specified twice"
+msgstr ""
+
+#: ../src/strip.c:259
+#, c-format
+msgid "-R option supports only .comment section"
+msgstr ""
+
+#: ../src/strip.c:297
+#: ../src/strip.c:321
+#, c-format
+msgid "cannot stat input file '%s'"
+msgstr ""
+
+#: ../src/strip.c:311
+#, c-format
+msgid "while opening '%s'"
+msgstr ""
+
+#: ../src/strip.c:349
+#, c-format
+msgid "%s: cannot use -o or -f when stripping archive"
+msgstr ""
+
+#: ../src/strip.c:447
+#, c-format
+msgid "cannot open EBL backend"
+msgstr ""
+
+#: ../src/strip.c:497
+#: ../src/strip.c:521
+#, c-format
+msgid "cannot create new file '%s': %s"
+msgstr ""
+
+#: ../src/strip.c:581
+#, c-format
+msgid "illformed file '%s'"
+msgstr ""
+
+#: ../src/strip.c:868
+#: ../src/strip.c:955
+#, c-format
+msgid "while generating output file: %s"
+msgstr ""
+
+#: ../src/strip.c:928
+#: ../src/strip.c:1667
+#, c-format
+msgid "%s: error while creating ELF header: %s"
+msgstr ""
+
+#: ../src/strip.c:942
+#, c-format
+msgid "while preparing output for '%s'"
+msgstr ""
+
+#: ../src/strip.c:993
+#: ../src/strip.c:1049
+#, c-format
+msgid "while create section header section: %s"
+msgstr ""
+
+#: ../src/strip.c:999
+#, c-format
+msgid "cannot allocate section data: %s"
+msgstr ""
+
+#: ../src/strip.c:1058
+#, c-format
+msgid "while create section header string table: %s"
+msgstr ""
+
+#: ../src/strip.c:1592
+#: ../src/strip.c:1689
+#, c-format
+msgid "while writing '%s': %s"
+msgstr ""
+
+#: ../src/strip.c:1603
+#, c-format
+msgid "while creating '%s'"
+msgstr ""
+
+#: ../src/strip.c:1615
+#, c-format
+msgid "while computing checksum for debug information"
+msgstr ""
+
+#: ../src/strip.c:1675
+#, c-format
+msgid "%s: error while reading the file: %s"
+msgstr ""
+
+#: ../src/strip.c:1721
+#: ../src/strip.c:1728
+#, c-format
+msgid "error while finishing '%s': %s"
+msgstr ""
+
+#: ../src/strip.c:1751
+#: ../src/strip.c:1808
+#, c-format
+msgid "cannot set access and modification date of '%s'"
+msgstr ""
+
+#: ../src/ld.c:87
+msgid "Input File Control:"
+msgstr ""
+
+#: ../src/ld.c:89
+msgid "Include whole archives in the output from now on."
+msgstr ""
+
+#: ../src/ld.c:91
+msgid "Stop including the whole arhives in the output."
+msgstr ""
+
+#: ../src/ld.c:92
+#: ../src/ld.c:106
+#: ../src/ld.c:184
+msgid "FILE"
+msgstr ""
+
+#: ../src/ld.c:93
+msgid "Start a group."
+msgstr ""
+
+#: ../src/ld.c:94
+msgid "End a group."
+msgstr ""
+
+#: ../src/ld.c:95
+msgid "PATH"
+msgstr ""
+
+#: ../src/ld.c:96
+msgid "Add PATH to list of directories files are searched in."
+msgstr ""
+
+#: ../src/ld.c:98
+msgid "Only set DT_NEEDED for following dynamic libs if actually used"
+msgstr ""
+
+#: ../src/ld.c:100
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr ""
+
+#: ../src/ld.c:102
+msgid "Ignore LD_LIBRARY_PATH environment variable."
+msgstr ""
+
+#: ../src/ld.c:105
+msgid "Output File Control:"
+msgstr ""
+
+#: ../src/ld.c:106
+msgid "Place output in FILE."
+msgstr ""
+
+#: ../src/ld.c:109
+msgid "Object is marked to not use default search path at runtime."
+msgstr ""
+
+#: ../src/ld.c:111
+msgid "Same as --whole-archive."
+msgstr ""
+
+#: ../src/ld.c:112
+msgid "Default rules of extracting from archive; weak references are not enough."
+msgstr ""
+
+#: ../src/ld.c:116
+msgid "Weak references cause extraction from archive."
+msgstr ""
+
+#: ../src/ld.c:118
+msgid "Allow multiple definitions; first is used."
+msgstr ""
+
+#: ../src/ld.c:120
+msgid "Disallow/allow undefined symbols in DSOs."
+msgstr ""
+
+#: ../src/ld.c:123
+msgid "Object requires immediate handling of $ORIGIN."
+msgstr ""
+
+#: ../src/ld.c:125
+msgid "Relocation will not be processed lazily."
+msgstr ""
+
+#: ../src/ld.c:127
+msgid "Object cannot be unloaded at runtime."
+msgstr ""
+
+#: ../src/ld.c:129
+msgid "Mark object to be initialized first."
+msgstr ""
+
+#: ../src/ld.c:131
+msgid "Enable/disable lazy-loading flag for following dependencies."
+msgstr ""
+
+#: ../src/ld.c:133
+msgid "Mark object as not loadable with 'dlopen'."
+msgstr ""
+
+#: ../src/ld.c:135
+msgid "Ignore/record dependencies on unused DSOs."
+msgstr ""
+
+#: ../src/ld.c:137
+msgid "Generated DSO will be a system library."
+msgstr ""
+
+#: ../src/ld.c:138
+msgid "ADDRESS"
+msgstr ""
+
+#: ../src/ld.c:138
+msgid "Set entry point address."
+msgstr ""
+
+#: ../src/ld.c:141
+msgid "Do not link against shared libraries."
+msgstr ""
+
+#: ../src/ld.c:144
+msgid "Prefer linking against shared libraries."
+msgstr ""
+
+#: ../src/ld.c:145
+msgid "Export all dynamic symbols."
+msgstr ""
+
+#: ../src/ld.c:146
+msgid "Strip all symbols."
+msgstr ""
+
+#: ../src/ld.c:147
+msgid "Strip debugging symbols."
+msgstr ""
+
+#: ../src/ld.c:149
+msgid "Assume pagesize for the target system to be SIZE."
+msgstr ""
+
+#: ../src/ld.c:151
+msgid "Set runtime DSO search path."
+msgstr ""
+
+#: ../src/ld.c:154
+msgid "Set link time DSO search path."
+msgstr ""
+
+#: ../src/ld.c:155
+msgid "Generate dynamic shared object."
+msgstr ""
+
+#: ../src/ld.c:156
+msgid "Generate relocatable object."
+msgstr ""
+
+#: ../src/ld.c:159
+msgid "Causes symbol not assigned to a version be reduced to local."
+msgstr ""
+
+#: ../src/ld.c:160
+msgid "Remove unused sections."
+msgstr ""
+
+#: ../src/ld.c:163
+msgid "Don't remove unused sections."
+msgstr ""
+
+#: ../src/ld.c:164
+msgid "Set soname of shared object."
+msgstr ""
+
+#: ../src/ld.c:165
+msgid "Set the dynamic linker name."
+msgstr ""
+
+#: ../src/ld.c:168
+msgid "Add/suppress addition indentifying link-editor to .comment section."
+msgstr ""
+
+#: ../src/ld.c:171
+msgid "Create .eh_frame_hdr section"
+msgstr ""
+
+#: ../src/ld.c:173
+msgid "Set hash style to sysv, gnu or both."
+msgstr ""
+
+#: ../src/ld.c:175
+msgid "Generate build ID note (md5, sha1 (default), uuid)."
+msgstr ""
+
+#: ../src/ld.c:177
+msgid "Linker Operation Control:"
+msgstr ""
+
+#: ../src/ld.c:178
+msgid "Verbose messages."
+msgstr ""
+
+#: ../src/ld.c:179
+msgid "Trace file opens."
+msgstr ""
+
+#: ../src/ld.c:181
+msgid "Trade speed for less memory usage"
+msgstr ""
+
+#: ../src/ld.c:182
+msgid "LEVEL"
+msgstr ""
+
+#: ../src/ld.c:183
+msgid "Set optimization level to LEVEL."
+msgstr ""
+
+#: ../src/ld.c:184
+msgid "Use linker script in FILE."
+msgstr ""
+
+#: ../src/ld.c:187
+msgid "Select to get parser debug information"
+msgstr ""
+
+#: ../src/ld.c:190
+msgid "Read version information from FILE."
+msgstr ""
+
+#: ../src/ld.c:191
+msgid "Set emulation to NAME."
+msgstr ""
+
+#. Short description of program.
+#: ../src/ld.c:197
+msgid "Combine object and archive files."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/ld.c:200
+msgid "[FILE]..."
+msgstr ""
+
+#: ../src/ld.c:333
+#, c-format
+msgid "At least one input file needed"
+msgstr ""
+
+#: ../src/ld.c:349
+#, c-format
+msgid "error while preparing linking"
+msgstr ""
+
+#: ../src/ld.c:356
+#, c-format
+msgid "cannot open linker script '%s'"
+msgstr ""
+
+#: ../src/ld.c:397
+#, c-format
+msgid "-( without matching -)"
+msgstr ""
+
+#: ../src/ld.c:572
+#: ../src/ld.c:610
+#, c-format
+msgid "only one option of -G and -r is allowed"
+msgstr ""
+
+#: ../src/ld.c:594
+#, c-format
+msgid "more than one '-m' parameter"
+msgstr ""
+
+#: ../src/ld.c:604
+#: ../src/ld.c:1013
+#, c-format
+msgid "unknown option `-%c %s'"
+msgstr ""
+
+#: ../src/ld.c:646
+#, c-format
+msgid "invalid page size value '%s': ignored"
+msgstr ""
+
+#: ../src/ld.c:687
+#, c-format
+msgid "invalid hash style '%s'"
+msgstr ""
+
+#: ../src/ld.c:697
+#, c-format
+msgid "invalid build-ID style '%s'"
+msgstr ""
+
+#: ../src/ld.c:785
+#, c-format
+msgid "More than one output file name given."
+msgstr ""
+
+#: ../src/ld.c:802
+#, c-format
+msgid "Invalid optimization level `%s'"
+msgstr ""
+
+#: ../src/ld.c:850
+#, c-format
+msgid "nested -( -) groups are not allowed"
+msgstr ""
+
+#: ../src/ld.c:869
+#, c-format
+msgid "-) without matching -("
+msgstr ""
+
+#: ../src/ld.c:1046
+#, c-format
+msgid "unknown option '-%c %s'"
+msgstr ""
+
+#: ../src/ld.c:1150
+#, c-format
+msgid "could not find input file to determine output file format"
+msgstr ""
+
+#: ../src/ld.c:1152
+#, c-format
+msgid "try again with an appropriate '-m' parameter"
+msgstr ""
+
+#: ../src/ld.c:1446
+#, c-format
+msgid "cannot read version script '%s'"
+msgstr ""
+
+#. The symbol is already defined and now again
+#. in the linker script. This is an error.
+#: ../src/ld.c:1512
+#: ../src/ld.c:1551
+#, c-format
+msgid "duplicate definition of '%s' in linker script"
+msgstr ""
+
+#: ../src/ldgeneric.c:209
+#: ../src/ldgeneric.c:5151
+#, c-format
+msgid "cannot create string table"
+msgstr ""
+
+#: ../src/ldgeneric.c:255
+#, c-format
+msgid "cannot load ld backend library '%s': %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:265
+#, c-format
+msgid "cannot find init function in ld backend library '%s': %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:310
+#, c-format
+msgid "%s listed more than once as input"
+msgstr ""
+
+#: ../src/ldgeneric.c:424
+#, c-format
+msgid "%s (for -l%s)\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:425
+#, c-format
+msgid "%s (for DT_NEEDED %s)\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:573
+#, c-format
+msgid "Warning: type of `%s' changed from %s in %s to %s in %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:586
+#, c-format
+msgid "Warning: size of `%s' changed from %<PRIu64> in %s to %<PRIu64> in %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:677
+#, c-format
+msgid "(%s+%#<PRIx64>): multiple definition of %s `%s'\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:700
+#, c-format
+msgid "(%s+%#<PRIx64>): first defined here\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:819
+#, c-format
+msgid "%s: cannot get section group data: %s"
+msgstr ""
+
+#. If we come here no section group contained the given section
+#. despite the SHF_GROUP flag. This is an error in the input
+#. file.
+#: ../src/ldgeneric.c:840
+#, c-format
+msgid "%s: section '%s' with group flag set does not belong to any group"
+msgstr ""
+
+#: ../src/ldgeneric.c:885
+#, c-format
+msgid "%s: section [%2d] '%s' is not in the correct section group"
+msgstr ""
+
+#. This should never happen.
+#: ../src/ldgeneric.c:1156
+#: ../src/ldgeneric.c:1413
+#: ../src/ldgeneric.c:1422
+#: ../src/ldgeneric.c:1481
+#: ../src/ldgeneric.c:1490
+#: ../src/ldgeneric.c:1753
+#: ../src/ldgeneric.c:2005
+#, c-format
+msgid "%s: invalid ELF file (%s:%d)\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:1250
+#, c-format
+msgid "%s: only files of type ET_REL might contain section groups"
+msgstr ""
+
+#: ../src/ldgeneric.c:1302
+#, c-format
+msgid "%s: cannot determine signature of section group [%2zd] '%s': %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:1314
+#, c-format
+msgid "%s: cannot get content of section group [%2zd] '%s': %s'"
+msgstr ""
+
+#: ../src/ldgeneric.c:1328
+#, c-format
+msgid "%s: group member %zu of section group [%2zd] '%s' has too high index: %<PRIu32>"
+msgstr ""
+
+#: ../src/ldgeneric.c:1350
+#, c-format
+msgid "%s: section '%s' has unknown type: %d"
+msgstr ""
+
+#: ../src/ldgeneric.c:1729
+#, c-format
+msgid "cannot get descriptor for ELF file (%s:%d): %s\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:1899
+#, c-format
+msgid "cannot read archive `%s': %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:2020
+#, c-format
+msgid "file of type %s cannot be linked in\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:2032
+#, c-format
+msgid "%s: input file incompatible with ELF machine type %s\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:2044
+#, c-format
+msgid "%s: cannot get section header string table index: %s\n"
+msgstr ""
+
+#: ../src/ldgeneric.c:2073
+#, c-format
+msgid "cannot use DSO '%s' when generating relocatable object file"
+msgstr ""
+
+#: ../src/ldgeneric.c:2158
+#, c-format
+msgid "input file '%s' ignored"
+msgstr ""
+
+#. XXX The error message should get better. It should use
+#. the debugging information if present to tell where in the
+#. sources the undefined reference is.
+#: ../src/ldgeneric.c:2372
+#, c-format
+msgid "undefined symbol `%s' in %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:2702
+#, c-format
+msgid "cannot create ELF descriptor for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:2709
+#, c-format
+msgid "could not create ELF header for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:3224
+#: ../src/ldgeneric.c:3294
+#: ../src/ldgeneric.c:3330
+#: ../src/ldgeneric.c:4457
+#: ../src/ldgeneric.c:4506
+#: ../src/ldgeneric.c:4538
+#: ../src/ldgeneric.c:4773
+#: ../src/ldgeneric.c:4828
+#: ../src/ldgeneric.c:5075
+#: ../src/ldgeneric.c:5131
+#: ../src/ldgeneric.c:5600
+#: ../src/ldgeneric.c:5612
+#, c-format
+msgid "cannot create section for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:3444
+#, c-format
+msgid "address computation expression contains variable '%s'"
+msgstr ""
+
+#: ../src/ldgeneric.c:3489
+#, c-format
+msgid "argument '%<PRIuMAX>' of ALIGN in address computation expression is no power of two"
+msgstr ""
+
+#: ../src/ldgeneric.c:3684
+#, c-format
+msgid "cannot find entry symbol '%s': defaulting to %#0*<PRIx64>"
+msgstr ""
+
+#: ../src/ldgeneric.c:3690
+#, c-format
+msgid "no entry symbol specified: defaulting to %#0*<PRIx64>"
+msgstr ""
+
+#: ../src/ldgeneric.c:3920
+#, c-format
+msgid "cannot create GNU hash table section for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:4071
+#, c-format
+msgid "cannot create hash table section for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:4114
+#, c-format
+msgid "cannot create build ID section: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:4191
+#, c-format
+msgid "cannot convert section data to file format: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:4200
+#, c-format
+msgid "cannot convert section data to memory format: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:4261
+#, c-format
+msgid "cannot read enough data for UUID"
+msgstr ""
+
+#: ../src/ldgeneric.c:4358
+#: ../src/ldgeneric.c:4379
+#: ../src/ldgeneric.c:4408
+#: ../src/ldgeneric.c:6062
+#, c-format
+msgid "cannot create symbol table for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:5300
+#: ../src/ldgeneric.c:5852
+#, c-format
+msgid "section index too large in dynamic symbol table"
+msgstr ""
+
+#: ../src/ldgeneric.c:5745
+#, c-format
+msgid "cannot create versioning section: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:5818
+#, c-format
+msgid "cannot create dynamic symbol table for output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:5994
+#, c-format
+msgid "cannot create versioning data: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6094
+#: ../src/ldgeneric.c:6107
+#: ../src/ldgeneric.c:6171
+#: ../src/ldgeneric.c:6179
+#, c-format
+msgid "cannot create section header string section: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6101
+#, c-format
+msgid "cannot create section header string section"
+msgstr ""
+
+#: ../src/ldgeneric.c:6259
+#, c-format
+msgid "cannot create program header: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6267
+#, c-format
+msgid "while determining file layout: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6388
+#, c-format
+msgid "internal error: non-nobits section follows nobits section"
+msgstr ""
+
+#: ../src/ldgeneric.c:6925
+#, c-format
+msgid "cannot get header of 0th section: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6941
+#: ../src/unstrip.c:1807
+#, c-format
+msgid "cannot update ELF header: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6972
+#, c-format
+msgid "linker backend didn't specify function to relocate section"
+msgstr ""
+
+#: ../src/ldgeneric.c:6984
+#, c-format
+msgid "while writing output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6989
+#, c-format
+msgid "while finishing output file: %s"
+msgstr ""
+
+#: ../src/ldgeneric.c:6995
+#, c-format
+msgid "cannot stat output file"
+msgstr ""
+
+#: ../src/ldgeneric.c:7011
+#, c-format
+msgid "WARNING: temporary output file overwritten before linking finished"
+msgstr ""
+
+#. This cannot be implemented generally. There should have been a
+#. machine dependent implementation and we should never have arrived
+#. here.
+#: ../src/ldgeneric.c:7064
+#: ../src/ldgeneric.c:7075
+#: ../src/ldgeneric.c:7086
+#: ../src/ldgeneric.c:7097
+#: ../src/ldgeneric.c:7116
+#: ../src/ldgeneric.c:7129
+#: ../src/ldgeneric.c:7141
+#, c-format
+msgid "no machine specific '%s' implementation"
+msgstr ""
+
+#: ../src/i386_ld.c:210
+#, c-format
+msgid "cannot allocate PLT section: %s"
+msgstr ""
+
+#: ../src/i386_ld.c:232
+#, c-format
+msgid "cannot allocate PLTREL section: %s"
+msgstr ""
+
+#: ../src/i386_ld.c:253
+#, c-format
+msgid "cannot allocate GOT section: %s"
+msgstr ""
+
+#: ../src/i386_ld.c:274
+#, c-format
+msgid "cannot allocate GOTPLT section: %s"
+msgstr ""
+
+#: ../src/i386_ld.c:661
+#, c-format
+msgid "initial-executable TLS relocation cannot be used "
+msgstr ""
+
+#: ../src/ldscript.y:178
+msgid "mode for segment invalid\n"
+msgstr ""
+
+#: ../src/ldscript.y:465
+#, c-format
+msgid "while reading version script '%s': %s at line %d"
+msgstr ""
+
+#: ../src/ldscript.y:466
+#, c-format
+msgid "while reading linker script '%s': %s at line %d"
+msgstr ""
+
+#: ../src/ldscript.y:745
+#, c-format
+msgid "symbol '%s' in declared both local and global for unnamed version"
+msgstr ""
+
+#: ../src/ldscript.y:747
+#, c-format
+msgid "symbol '%s' in declared both local and global for version '%s'"
+msgstr ""
+
+#: ../src/ldscript.y:767
+#: ../src/ldscript.y:774
+#, c-format
+msgid "default visibility set as local and global"
+msgstr ""
+
+#: ../src/elflint.c:71
+msgid "Be extremely strict, flag level 2 features."
+msgstr ""
+
+#: ../src/elflint.c:72
+msgid "Do not print anything if successful"
+msgstr ""
+
+#: ../src/elflint.c:73
+msgid "Binary is a separate debuginfo file"
+msgstr ""
+
+#: ../src/elflint.c:75
+msgid "Binary has been created with GNU ld and is therefore known to be broken in certain ways"
+msgstr ""
+
+#. Short description of program.
+#: ../src/elflint.c:81
+msgid "Pedantic checking of ELF files compliance with gABI/psABI spec."
+msgstr ""
+
+#: ../src/elflint.c:165
+#, c-format
+msgid "cannot generate Elf descriptor: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:184
+#, c-format
+msgid "error while closing Elf descriptor: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:188
+msgid "No errors"
+msgstr ""
+
+#: ../src/elflint.c:301
+#, c-format
+msgid " error while freeing sub-ELF descriptor: %s\n"
+msgstr ""
+
+#. We cannot do anything.
+#: ../src/elflint.c:309
+#, c-format
+msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
+msgstr ""
+
+#: ../src/elflint.c:368
+#, c-format
+msgid "e_ident[%d] == %d is no known class\n"
+msgstr ""
+
+#: ../src/elflint.c:373
+#, c-format
+msgid "e_ident[%d] == %d is no known data encoding\n"
+msgstr ""
+
+#: ../src/elflint.c:377
+#, c-format
+msgid "unknown ELF header version number e_ident[%d] == %d\n"
+msgstr ""
+
+#: ../src/elflint.c:382
+#, c-format
+msgid "unsupported OS ABI e_ident[%d] == '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:388
+#, c-format
+msgid "unsupport ABI version e_ident[%d] == %d\n"
+msgstr ""
+
+#: ../src/elflint.c:393
+#, c-format
+msgid "e_ident[%zu] is not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:398
+#, c-format
+msgid "unknown object file type %d\n"
+msgstr ""
+
+#: ../src/elflint.c:405
+#, c-format
+msgid "unknown machine type %d\n"
+msgstr ""
+
+#: ../src/elflint.c:409
+#, c-format
+msgid "unknown object file version\n"
+msgstr ""
+
+#: ../src/elflint.c:415
+#, c-format
+msgid "invalid program header offset\n"
+msgstr ""
+
+#: ../src/elflint.c:417
+#, c-format
+msgid "executables and DSOs cannot have zero program header offset\n"
+msgstr ""
+
+#: ../src/elflint.c:421
+#, c-format
+msgid "invalid number of program header entries\n"
+msgstr ""
+
+#: ../src/elflint.c:429
+#, c-format
+msgid "invalid section header table offset\n"
+msgstr ""
+
+#: ../src/elflint.c:432
+#, c-format
+msgid "section header table must be present\n"
+msgstr ""
+
+#: ../src/elflint.c:446
+#, c-format
+msgid "invalid number of section header table entries\n"
+msgstr ""
+
+#: ../src/elflint.c:463
+#, c-format
+msgid "invalid section header index\n"
+msgstr ""
+
+#: ../src/elflint.c:468
+#, c-format
+msgid "invalid machine flags: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:475
+#: ../src/elflint.c:492
+#, c-format
+msgid "invalid ELF header size: %hd\n"
+msgstr ""
+
+#: ../src/elflint.c:478
+#: ../src/elflint.c:495
+#, c-format
+msgid "invalid program header size: %hd\n"
+msgstr ""
+
+#: ../src/elflint.c:481
+#: ../src/elflint.c:498
+#, c-format
+msgid "invalid program header position or size\n"
+msgstr ""
+
+#: ../src/elflint.c:484
+#: ../src/elflint.c:501
+#, c-format
+msgid "invalid section header size: %hd\n"
+msgstr ""
+
+#: ../src/elflint.c:487
+#: ../src/elflint.c:504
+#, c-format
+msgid "invalid section header position or size\n"
+msgstr ""
+
+#: ../src/elflint.c:548
+#, c-format
+msgid "section [%2d] '%s': section with SHF_GROUP flag set not part of a section group\n"
+msgstr ""
+
+#: ../src/elflint.c:552
+#, c-format
+msgid "section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n"
+msgstr ""
+
+#: ../src/elflint.c:568
+#: ../src/elflint.c:1393
+#: ../src/elflint.c:1443
+#: ../src/elflint.c:1552
+#: ../src/elflint.c:2146
+#: ../src/elflint.c:2660
+#: ../src/elflint.c:2821
+#: ../src/elflint.c:2951
+#: ../src/elflint.c:3123
+#: ../src/elflint.c:4020
+#, c-format
+msgid "section [%2d] '%s': cannot get section data\n"
+msgstr ""
+
+#: ../src/elflint.c:581
+#: ../src/elflint.c:1559
+#, c-format
+msgid "section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n"
+msgstr ""
+
+#: ../src/elflint.c:604
+#, c-format
+msgid "section [%2d] '%s': symbol table cannot have more than one extended index section\n"
+msgstr ""
+
+#: ../src/elflint.c:615
+#, c-format
+msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
+msgstr ""
+
+#: ../src/elflint.c:624
+#, c-format
+msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:629
+#: ../src/elflint.c:632
+#: ../src/elflint.c:635
+#: ../src/elflint.c:638
+#: ../src/elflint.c:641
+#: ../src/elflint.c:644
+#, c-format
+msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:647
+#, c-format
+msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:657
+#, c-format
+msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:666
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
+msgstr ""
+
+#: ../src/elflint.c:679
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: too large section index but no extended section index section\n"
+msgstr ""
+
+#: ../src/elflint.c:685
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in st_shndx (%<PRIu32>)\n"
+msgstr ""
+
+#. || sym->st_shndx > SHN_HIRESERVE always false
+#: ../src/elflint.c:697
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
+msgstr ""
+
+#: ../src/elflint.c:705
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: unknown type\n"
+msgstr ""
+
+#: ../src/elflint.c:709
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
+msgstr ""
+
+#: ../src/elflint.c:717
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
+msgstr ""
+
+#: ../src/elflint.c:721
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
+msgstr ""
+
+#: ../src/elflint.c:725
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
+msgstr ""
+
+#: ../src/elflint.c:757
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:763
+#: ../src/elflint.c:788
+#: ../src/elflint.c:831
+#, c-format
+msgid "section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:772
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have SHF_TLS flag set\n"
+msgstr ""
+
+#: ../src/elflint.c:782
+#: ../src/elflint.c:824
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:809
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
+msgstr ""
+
+#: ../src/elflint.c:817
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:844
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: local symbol outside range described in sh_info\n"
+msgstr ""
+
+#: ../src/elflint.c:851
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: non-local symbol outside range described in sh_info\n"
+msgstr ""
+
+#: ../src/elflint.c:858
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
+msgstr ""
+
+#: ../src/elflint.c:908
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%2d]\n"
+msgstr ""
+
+#: ../src/elflint.c:915
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%s'\n"
+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:931
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not match %s section address %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:938
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not match %s section size %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:946
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got section\n"
+msgstr ""
+
+#: ../src/elflint.c:962
+#, c-format
+msgid "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic segment address %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:969
+#, c-format
+msgid "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic segment size %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:1020
+#, c-format
+msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
+msgstr ""
+
+#: ../src/elflint.c:1029
+#: ../src/elflint.c:1081
+#, c-format
+msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
+msgstr ""
+
+#: ../src/elflint.c:1054
+#: ../src/elflint.c:1106
+#, c-format
+msgid "section [%2d] '%s': relative relocations after index %d as specified by DT_RELCOUNT\n"
+msgstr ""
+
+#: ../src/elflint.c:1060
+#: ../src/elflint.c:1112
+#, c-format
+msgid "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT specified %d relative relocations\n"
+msgstr ""
+
+#: ../src/elflint.c:1072
+#, c-format
+msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
+msgstr ""
+
+#: ../src/elflint.c:1154
+#, c-format
+msgid "section [%2d] '%s': invalid destination section index\n"
+msgstr ""
+
+#: ../src/elflint.c:1167
+#, c-format
+msgid "section [%2d] '%s': invalid destination section type\n"
+msgstr ""
+
+#: ../src/elflint.c:1175
+#, c-format
+msgid "section [%2d] '%s': sh_info should be zero\n"
+msgstr ""
+
+#: ../src/elflint.c:1182
+#, c-format
+msgid "section [%2d] '%s': no relocations for merge-able sections possible\n"
+msgstr ""
+
+#: ../src/elflint.c:1189
+#, c-format
+msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
+msgstr ""
+
+#: ../src/elflint.c:1249
+#, c-format
+msgid "text relocation flag set but there is no read-only segment\n"
+msgstr ""
+
+#: ../src/elflint.c:1276
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: invalid type\n"
+msgstr ""
+
+#: ../src/elflint.c:1284
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: relocation type invalid for the file type\n"
+msgstr ""
+
+#: ../src/elflint.c:1292
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
+msgstr ""
+
+#: ../src/elflint.c:1310
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can be used with %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1327
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1342
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: copy relocation against symbol of type %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1363
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: read-only section modified but text relocation flag not set\n"
+msgstr ""
+
+#: ../src/elflint.c:1378
+#, c-format
+msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
+msgstr ""
+
+#: ../src/elflint.c:1417
+#: ../src/elflint.c:1467
+#, c-format
+msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1547
+#, c-format
+msgid "more than one dynamic section present\n"
+msgstr ""
+
+#: ../src/elflint.c:1565
+#, c-format
+msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
+msgstr ""
+
+#: ../src/elflint.c:1570
+#: ../src/elflint.c:1862
+#, c-format
+msgid "section [%2d] '%s': sh_info not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:1580
+#, c-format
+msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1588
+#, c-format
+msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
+msgstr ""
+
+#: ../src/elflint.c:1595
+#, c-format
+msgid "section [%2d] '%s': entry %zu: unknown tag\n"
+msgstr ""
+
+#: ../src/elflint.c:1606
+#, c-format
+msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1616
+#, c-format
+msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
+msgstr ""
+
+#: ../src/elflint.c:1634
+#, c-format
+msgid "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
+msgstr ""
+
+#: ../src/elflint.c:1656
+#, 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:1699
+#, c-format
+msgid "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
+msgstr ""
+
+#: ../src/elflint.c:1714
+#, c-format
+msgid "section [%2d] '%s': entry %zu: %s value must be valid offset in section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:1734
+#: ../src/elflint.c:1762
+#, c-format
+msgid "section [%2d] '%s': contains %s entry but not %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1746
+#, c-format
+msgid "section [%2d] '%s': mandatory tag %s not present\n"
+msgstr ""
+
+#: ../src/elflint.c:1755
+#, c-format
+msgid "section [%2d] '%s': no hash section present\n"
+msgstr ""
+
+#: ../src/elflint.c:1770
+#: ../src/elflint.c:1777
+#, c-format
+msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
+msgstr ""
+
+#: ../src/elflint.c:1787
+#: ../src/elflint.c:1791
+#, c-format
+msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
+msgstr ""
+
+#: ../src/elflint.c:1797
+#, c-format
+msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
+msgstr ""
+
+#: ../src/elflint.c:1808
+#: ../src/elflint.c:1812
+#: ../src/elflint.c:1816
+#: ../src/elflint.c:1820
+#, c-format
+msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
+msgstr ""
+
+#: ../src/elflint.c:1832
+#, c-format
+msgid "section [%2d] '%s': only relocatable files can have extended section index\n"
+msgstr ""
+
+#: ../src/elflint.c:1842
+#, c-format
+msgid "section [%2d] '%s': extended section index section not for symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:1847
+#, c-format
+msgid "cannot get data for symbol section\n"
+msgstr ""
+
+#: ../src/elflint.c:1850
+#, c-format
+msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
+msgstr ""
+
+#: ../src/elflint.c:1857
+#, c-format
+msgid "section [%2d] '%s': extended index table too small for symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:1872
+#, c-format
+msgid "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to same symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:1883
+#, c-format
+msgid "symbol 0 should have zero extended section index\n"
+msgstr ""
+
+#: ../src/elflint.c:1895
+#, c-format
+msgid "cannot get data for symbol %zu\n"
+msgstr ""
+
+#: ../src/elflint.c:1900
+#, c-format
+msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
+msgstr ""
+
+#: ../src/elflint.c:1916
+#: ../src/elflint.c:1957
+#, c-format
+msgid "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
+msgstr ""
+
+#: ../src/elflint.c:1928
+#: ../src/elflint.c:1969
+#, c-format
+msgid "section [%2d] '%s': chain array too large\n"
+msgstr ""
+
+#: ../src/elflint.c:1937
+#: ../src/elflint.c:1978
+#, c-format
+msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1943
+#, c-format
+msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1984
+#, c-format
+msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1999
+#, c-format
+msgid "section [%2d] '%s': bitmask size not power of 2: %u\n"
+msgstr ""
+
+#: ../src/elflint.c:2010
+#, c-format
+msgid "section [%2d] '%s': hash table section is too small (is %ld, expected at least%ld)\n"
+msgstr ""
+
+#: ../src/elflint.c:2018
+#, c-format
+msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
+msgstr ""
+
+#: ../src/elflint.c:2050
+#, c-format
+msgid "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
+msgstr ""
+
+#: ../src/elflint.c:2071
+#, c-format
+msgid "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is undefined\n"
+msgstr ""
+
+#: ../src/elflint.c:2082
+#, c-format
+msgid "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
+msgstr ""
+
+#: ../src/elflint.c:2113
+#, c-format
+msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:2118
+#, c-format
+msgid "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:2124
+#, c-format
+msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
+msgstr ""
+
+#: ../src/elflint.c:2137
+#, c-format
+msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
+msgstr ""
+
+#: ../src/elflint.c:2155
+#, c-format
+msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:2163
+#, c-format
+msgid "section [%2d] '%s': hash table entry size incorrect\n"
+msgstr ""
+
+#: ../src/elflint.c:2168
+#, c-format
+msgid "section [%2d] '%s': not marked to be allocated\n"
+msgstr ""
+
+#: ../src/elflint.c:2173
+#, c-format
+msgid "section [%2d] '%s': hash table has not even room for initial administrative entries\n"
+msgstr ""
+
+#: ../src/elflint.c:2221
+#, c-format
+msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
+msgstr ""
+
+#: ../src/elflint.c:2299
+#: ../src/elflint.c:2303
+#, c-format
+msgid "section [%2zu] '%s': reference to symbol index 0\n"
+msgstr ""
+
+#: ../src/elflint.c:2310
+#, 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:2322
+#, 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:2338
+#, c-format
+msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
+msgstr ""
+
+#: ../src/elflint.c:2358
+#, c-format
+msgid "section [%2d] '%s': section groups only allowed in relocatable object files\n"
+msgstr ""
+
+#: ../src/elflint.c:2369
+#, c-format
+msgid "section [%2d] '%s': cannot get symbol table: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:2374
+#, c-format
+msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:2380
+#, c-format
+msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
+msgstr ""
+
+#: ../src/elflint.c:2385
+#, c-format
+msgid "section [%2d] '%s': sh_flags not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:2392
+#, c-format
+msgid "section [%2d] '%s': cannot get symbol for signature\n"
+msgstr ""
+
+#: ../src/elflint.c:2397
+#, c-format
+msgid "section [%2d] '%s': signature symbol canot be empty string\n"
+msgstr ""
+
+#: ../src/elflint.c:2403
+#, c-format
+msgid "section [%2d] '%s': sh_flags not set correctly\n"
+msgstr ""
+
+#: ../src/elflint.c:2409
+#, c-format
+msgid "section [%2d] '%s': cannot get data: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:2418
+#, c-format
+msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
+msgstr ""
+
+#: ../src/elflint.c:2423
+#, c-format
+msgid "section [%2d] '%s': section group without flags word\n"
+msgstr ""
+
+#: ../src/elflint.c:2429
+#, c-format
+msgid "section [%2d] '%s': section group without member\n"
+msgstr ""
+
+#: ../src/elflint.c:2433
+#, c-format
+msgid "section [%2d] '%s': section group with only one member\n"
+msgstr ""
+
+#: ../src/elflint.c:2444
+#, c-format
+msgid "section [%2d] '%s': unknown section group flags\n"
+msgstr ""
+
+#: ../src/elflint.c:2456
+#, c-format
+msgid "section [%2d] '%s': section index %Zu out of range\n"
+msgstr ""
+
+#: ../src/elflint.c:2465
+#, c-format
+msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:2472
+#, c-format
+msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:2478
+#, c-format
+msgid "section [%2d] '%s': element %Zu references section [%2d] '%s' without SHF_GROUP flag set\n"
+msgstr ""
+
+#: ../src/elflint.c:2485
+#, c-format
+msgid "section [%2d] '%s' is contained in more than one section group\n"
+msgstr ""
+
+#: ../src/elflint.c:2674
+#, 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:2685
+#, c-format
+msgid "section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:2701
+#, c-format
+msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
+msgstr ""
+
+#: ../src/elflint.c:2717
+#, c-format
+msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
+msgstr ""
+
+#: ../src/elflint.c:2725
+#, c-format
+msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
+msgstr ""
+
+#: ../src/elflint.c:2739
+#, c-format
+msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
+msgstr ""
+
+#: ../src/elflint.c:2744
+#, c-format
+msgid "section [%2d] '%s': symbol %d: version index %d is for defined version\n"
+msgstr ""
+
+#: ../src/elflint.c:2754
+#, c-format
+msgid "section [%2d] '%s': symbol %d: version index %d is for requested version\n"
+msgstr ""
+
+#: ../src/elflint.c:2806
+#, c-format
+msgid "more than one version reference section present\n"
+msgstr ""
+
+#: ../src/elflint.c:2814
+#: ../src/elflint.c:2943
+#, c-format
+msgid "section [%2d] '%s': sh_link does not link to string table\n"
+msgstr ""
+
+#: ../src/elflint.c:2837
+#: ../src/elflint.c:2995
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong version %d\n"
+msgstr ""
+
+#: ../src/elflint.c:2843
+#: ../src/elflint.c:3001
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
+msgstr ""
+
+#: ../src/elflint.c:2851
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid file reference\n"
+msgstr ""
+
+#: ../src/elflint.c:2859
+#, c-format
+msgid "section [%2d] '%s': entry %d references unknown dependency\n"
+msgstr ""
+
+#: ../src/elflint.c:2871
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
+msgstr ""
+
+#: ../src/elflint.c:2878
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name reference\n"
+msgstr ""
+
+#: ../src/elflint.c:2885
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %#x, expected %#x\n"
+msgstr ""
+
+#: ../src/elflint.c:2895
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version name '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:2906
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
+msgstr ""
+
+#: ../src/elflint.c:2922
+#: ../src/elflint.c:3080
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
+msgstr ""
+
+#: ../src/elflint.c:2935
+#, c-format
+msgid "more than one version definition section present\n"
+msgstr ""
+
+#: ../src/elflint.c:2980
+#, c-format
+msgid "section [%2d] '%s': more than one BASE definition\n"
+msgstr ""
+
+#: ../src/elflint.c:2984
+#, c-format
+msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
+msgstr ""
+
+#: ../src/elflint.c:2990
+#, c-format
+msgid "section [%2d] '%s': entry %d has unknown flag\n"
+msgstr ""
+
+#: ../src/elflint.c:3014
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid name reference\n"
+msgstr ""
+
+#: ../src/elflint.c:3021
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
+msgstr ""
+
+#: ../src/elflint.c:3030
+#, c-format
+msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:3049
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
+msgstr ""
+
+#: ../src/elflint.c:3064
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
+msgstr ""
+
+#: ../src/elflint.c:3086
+#, c-format
+msgid "section [%2d] '%s': no BASE definition\n"
+msgstr ""
+
+#: ../src/elflint.c:3102
+#, c-format
+msgid "section [%2d] '%s': unknown parent version '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:3115
+#, c-format
+msgid "section [%2d] '%s': empty object attributes section\n"
+msgstr ""
+
+#: ../src/elflint.c:3136
+#, c-format
+msgid "section [%2d] '%s': unrecognized attribute format\n"
+msgstr ""
+
+#: ../src/elflint.c:3152
+#, c-format
+msgid "section [%2d] '%s': offset %zu: zero length field in attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3161
+#, c-format
+msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3173
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n"
+msgstr ""
+
+#: ../src/elflint.c:3190
+#, c-format
+msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
+msgstr ""
+
+#: ../src/elflint.c:3199
+#, c-format
+msgid "section [%2d] '%s': offset %zu: truncated attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3208
+#, c-format
+msgid "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
+msgstr ""
+
+#: ../src/elflint.c:3221
+#, c-format
+msgid "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
+msgstr ""
+
+#. Tag_File
+#: ../src/elflint.c:3232
+#, c-format
+msgid "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
+msgstr ""
+
+#: ../src/elflint.c:3250
+#, c-format
+msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"
+msgstr ""
+
+#: ../src/elflint.c:3261
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n"
+msgstr ""
+
+#: ../src/elflint.c:3274
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"
+msgstr ""
+
+#: ../src/elflint.c:3278
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3288
+#, c-format
+msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n"
+msgstr ""
+
+#: ../src/elflint.c:3294
+#, c-format
+msgid "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3383
+#, c-format
+msgid "cannot get section header of zeroth section\n"
+msgstr ""
+
+#: ../src/elflint.c:3387
+#, c-format
+msgid "zeroth section has nonzero name\n"
+msgstr ""
+
+#: ../src/elflint.c:3389
+#, c-format
+msgid "zeroth section has nonzero type\n"
+msgstr ""
+
+#: ../src/elflint.c:3391
+#, c-format
+msgid "zeroth section has nonzero flags\n"
+msgstr ""
+
+#: ../src/elflint.c:3393
+#, c-format
+msgid "zeroth section has nonzero address\n"
+msgstr ""
+
+#: ../src/elflint.c:3395
+#, c-format
+msgid "zeroth section has nonzero offset\n"
+msgstr ""
+
+#: ../src/elflint.c:3397
+#, c-format
+msgid "zeroth section has nonzero info field\n"
+msgstr ""
+
+#: ../src/elflint.c:3399
+#, c-format
+msgid "zeroth section has nonzero align value\n"
+msgstr ""
+
+#: ../src/elflint.c:3401
+#, c-format
+msgid "zeroth section has nonzero entry size value\n"
+msgstr ""
+
+#: ../src/elflint.c:3404
+#, c-format
+msgid "zeroth section has nonzero size value while ELF header has nonzero shnum value\n"
+msgstr ""
+
+#: ../src/elflint.c:3408
+#, c-format
+msgid "zeroth section has nonzero link value while ELF header does not signal overflow in shstrndx\n"
+msgstr ""
+
+#: ../src/elflint.c:3425
+#, c-format
+msgid "cannot get section header for section [%2zu] '%s': %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3434
+#, c-format
+msgid "section [%2zu]: invalid name\n"
+msgstr ""
+
+#: ../src/elflint.c:3461
+#, c-format
+msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3477
+#, c-format
+msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3494
+#, c-format
+msgid "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3512
+#, c-format
+msgid "section [%2zu] '%s' present in object file\n"
+msgstr ""
+
+#: ../src/elflint.c:3518
+#: ../src/elflint.c:3550
+#, c-format
+msgid "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
+msgstr ""
+
+#: ../src/elflint.c:3523
+#: ../src/elflint.c:3555
+#, c-format
+msgid "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n"
+msgstr ""
+
+#: ../src/elflint.c:3531
+#, c-format
+msgid "section [%2zu] '%s' is extension section index table in non-object file\n"
+msgstr ""
+
+#: ../src/elflint.c:3574
+#, c-format
+msgid "section [%2zu] '%s': size not multiple of entry size\n"
+msgstr ""
+
+#: ../src/elflint.c:3579
+#, c-format
+msgid "cannot get section header\n"
+msgstr ""
+
+#: ../src/elflint.c:3589
+#, c-format
+msgid "section [%2zu] '%s' has unsupported type %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3603
+#, c-format
+msgid "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3610
+#, c-format
+msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3618
+#, c-format
+msgid "section [%2zu] '%s': thread-local data sections address not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:3626
+#, c-format
+msgid "section [%2zu] '%s': invalid section reference in link value\n"
+msgstr ""
+
+#: ../src/elflint.c:3631
+#, c-format
+msgid "section [%2zu] '%s': invalid section reference in info value\n"
+msgstr ""
+
+#: ../src/elflint.c:3638
+#, c-format
+msgid "section [%2zu] '%s': strings flag set without merge flag\n"
+msgstr ""
+
+#: ../src/elflint.c:3643
+#, c-format
+msgid "section [%2zu] '%s': merge flag set but entry size is zero\n"
+msgstr ""
+
+#: ../src/elflint.c:3661
+#, c-format
+msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n"
+msgstr ""
+
+#: ../src/elflint.c:3670
+#, c-format
+msgid "section [%2zu] '%s' is both executable and writable\n"
+msgstr ""
+
+#: ../src/elflint.c:3697
+#, c-format
+msgid "section [%2zu] '%s' not fully contained in segment of program header entry %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3705
+#, 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:3714
+#, 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:3725
+#, c-format
+msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3735
+#, c-format
+msgid "section [%2zu] '%s' is writable in unwritable segment %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3745
+#, c-format
+msgid "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
+msgstr ""
+
+#: ../src/elflint.c:3751
+#, 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:3759
+#, c-format
+msgid "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
+msgstr ""
+
+#: ../src/elflint.c:3810
+#, c-format
+msgid "more than one version symbol table present\n"
+msgstr ""
+
+#: ../src/elflint.c:3833
+#, c-format
+msgid "INTERP program header entry but no .interp section\n"
+msgstr ""
+
+#: ../src/elflint.c:3844
+#, c-format
+msgid "loadable segment [%u] is executable but contains no executable sections\n"
+msgstr ""
+
+#: ../src/elflint.c:3850
+#, c-format
+msgid "loadable segment [%u] is writable but contains no writable sections\n"
+msgstr ""
+
+#: ../src/elflint.c:3861
+#, c-format
+msgid "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section exist\n"
+msgstr ""
+
+#: ../src/elflint.c:3874
+#, c-format
+msgid "duplicate version index %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3888
+#, c-format
+msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n"
+msgstr ""
+
+#: ../src/elflint.c:3937
+#, c-format
+msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3941
+#, c-format
+msgid "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n"
+msgstr ""
+
+#: ../src/elflint.c:3963
+#, c-format
+msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n"
+msgstr ""
+
+#: ../src/elflint.c:3967
+#, c-format
+msgid "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n"
+msgstr ""
+
+#: ../src/elflint.c:3984
+#, c-format
+msgid "phdr[%d]: no note entries defined for the type of file\n"
+msgstr ""
+
+#: ../src/elflint.c:4003
+#, c-format
+msgid "phdr[%d]: cannot get content of note section: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:4006
+#, c-format
+msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
+msgstr ""
+
+#: ../src/elflint.c:4027
+#, c-format
+msgid "section [%2d] '%s': no note entries defined for the type of file\n"
+msgstr ""
+
+#: ../src/elflint.c:4034
+#, c-format
+msgid "section [%2d] '%s': cannot get content of note section\n"
+msgstr ""
+
+#: ../src/elflint.c:4037
+#, c-format
+msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
+msgstr ""
+
+#: ../src/elflint.c:4055
+#, c-format
+msgid "only executables, shared objects, and core files can have program headers\n"
+msgstr ""
+
+#: ../src/elflint.c:4070
+#, c-format
+msgid "cannot get program header entry %d: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:4079
+#, c-format
+msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:4090
+#, c-format
+msgid "more than one INTERP entry in program header\n"
+msgstr ""
+
+#: ../src/elflint.c:4098
+#, c-format
+msgid "more than one TLS entry in program header\n"
+msgstr ""
+
+#: ../src/elflint.c:4105
+#, c-format
+msgid "static executable cannot have dynamic sections\n"
+msgstr ""
+
+#: ../src/elflint.c:4119
+#, c-format
+msgid "dynamic section reference in program header has wrong offset\n"
+msgstr ""
+
+#: ../src/elflint.c:4122
+#, c-format
+msgid "dynamic section size mismatch in program and section header\n"
+msgstr ""
+
+#: ../src/elflint.c:4132
+#, c-format
+msgid "more than one GNU_RELRO entry in program header\n"
+msgstr ""
+
+#: ../src/elflint.c:4153
+#, c-format
+msgid "loadable segment GNU_RELRO applies to is not writable\n"
+msgstr ""
+
+#: ../src/elflint.c:4156
+#, c-format
+msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
+msgstr ""
+
+#: ../src/elflint.c:4164
+#: ../src/elflint.c:4187
+#, c-format
+msgid "%s segment not contained in a loaded segment\n"
+msgstr ""
+
+#: ../src/elflint.c:4193
+#, c-format
+msgid "program header offset in ELF header and PHDR entry do not match"
+msgstr ""
+
+#: ../src/elflint.c:4217
+#, c-format
+msgid "call frame search table reference in program header has wrong offset\n"
+msgstr ""
+
+#: ../src/elflint.c:4220
+#, c-format
+msgid "call frame search table size mismatch in program and section header\n"
+msgstr ""
+
+#: ../src/elflint.c:4233
+#, c-format
+msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
+msgstr ""
+
+#: ../src/elflint.c:4241
+#, c-format
+msgid "call frame search table must be allocated\n"
+msgstr ""
+
+#: ../src/elflint.c:4244
+#, c-format
+msgid "section [%2zu] '%s' must be allocated\n"
+msgstr ""
+
+#: ../src/elflint.c:4248
+#, c-format
+msgid "call frame search table must not be writable\n"
+msgstr ""
+
+#: ../src/elflint.c:4251
+#, c-format
+msgid "section [%2zu] '%s' must not be writable\n"
+msgstr ""
+
+#: ../src/elflint.c:4256
+#, c-format
+msgid "call frame search table must not be executable\n"
+msgstr ""
+
+#: ../src/elflint.c:4259
+#, c-format
+msgid "section [%2zu] '%s' must not be executable\n"
+msgstr ""
+
+#: ../src/elflint.c:4270
+#, c-format
+msgid "program header entry %d: file size greater than memory size\n"
+msgstr ""
+
+#: ../src/elflint.c:4277
+#, c-format
+msgid "program header entry %d: alignment not a power of 2\n"
+msgstr ""
+
+#: ../src/elflint.c:4280
+#, c-format
+msgid "program header entry %d: file offset and virtual address not module of alignment\n"
+msgstr ""
+
+#: ../src/elflint.c:4293
+#, 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:4327
+#, c-format
+msgid "cannot read ELF header: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:4353
+#, c-format
+msgid "text relocation flag set but not needed\n"
+msgstr ""
+
+#: ../src/addr2line.c:66
+msgid "Output selection options:"
+msgstr ""
+
+#: ../src/addr2line.c:67
+msgid "Show only base names of source files"
+msgstr ""
+
+#: ../src/addr2line.c:69
+msgid "Show absolute file names using compilation directory"
+msgstr ""
+
+#: ../src/addr2line.c:70
+msgid "Also show function names"
+msgstr ""
+
+#: ../src/addr2line.c:71
+msgid "Also show symbol or section names"
+msgstr ""
+
+#. Short description of program.
+#: ../src/addr2line.c:82
+msgid "Locate source files and line information for ADDRs (in a.out by default)."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/addr2line.c:86
+msgid "[ADDR...]"
+msgstr ""
+
+#: ../src/addr2line.c:387
+#, c-format
+msgid "Section syntax requires exactly one module"
+msgstr ""
+
+#: ../src/addr2line.c:410
+#, c-format
+msgid "offset %#<PRIxMAX> lies outside section '%s'"
+msgstr ""
+
+#: ../src/addr2line.c:428
+#, c-format
+msgid "cannot find symbol '%s'"
+msgstr ""
+
+#: ../src/addr2line.c:433
+#, c-format
+msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
+msgstr ""
+
+#: ../src/findtextrel.c:70
+msgid "Input Selection:"
+msgstr ""
+
+#: ../src/findtextrel.c:71
+msgid "Prepend PATH to all file names"
+msgstr ""
+
+#: ../src/findtextrel.c:73
+msgid "Use PATH as root of debuginfo hierarchy"
+msgstr ""
+
+#. Short description of program.
+#: ../src/findtextrel.c:80
+msgid "Locate source of text relocations in FILEs (a.out by default)."
+msgstr ""
+
+#: ../src/findtextrel.c:236
+#: ../src/elfcmp.c:578
+#: ../src/ranlib.c:186
+#, c-format
+msgid "cannot create ELF descriptor for '%s': %s"
+msgstr ""
+
+#: ../src/findtextrel.c:246
+#, c-format
+msgid "cannot get ELF header '%s': %s"
+msgstr ""
+
+#: ../src/findtextrel.c:257
+#, c-format
+msgid "'%s' is not a DSO or PIE"
+msgstr ""
+
+#: ../src/findtextrel.c:274
+#, c-format
+msgid "getting get section header of section %zu: %s"
+msgstr ""
+
+#: ../src/findtextrel.c:292
+#, c-format
+msgid "cannot read dynamic section: %s"
+msgstr ""
+
+#: ../src/findtextrel.c:307
+#, c-format
+msgid "no text relocations reported in '%s'"
+msgstr ""
+
+#: ../src/findtextrel.c:319
+#, c-format
+msgid "while reading ELF file"
+msgstr ""
+
+#: ../src/findtextrel.c:328
+#: ../src/findtextrel.c:345
+#, c-format
+msgid "cannot get program header index at offset %d: %s"
+msgstr ""
+
+#: ../src/findtextrel.c:397
+#, c-format
+msgid "cannot get section header of section %Zu: %s"
+msgstr ""
+
+#: ../src/findtextrel.c:409
+#, c-format
+msgid "cannot get symbol table section %zu in '%s': %s"
+msgstr ""
+
+#: ../src/findtextrel.c:429
+#: ../src/findtextrel.c:452
+#, c-format
+msgid "cannot get relocation at index %d in section %zu in '%s': %s"
+msgstr ""
+
+#: ../src/findtextrel.c:517
+#, c-format
+msgid "%s not compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:570
+#, c-format
+msgid "the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:577
+#: ../src/findtextrel.c:597
+#, c-format
+msgid "the file containing the function '%s' might not be compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:585
+#, c-format
+msgid "either the file containing the function '%s' or the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:605
+#, c-format
+msgid "a relocation modifies memory at offset %llu in a write-protected segment\n"
+msgstr ""
+
+#: ../src/elfcmp.c:69
+msgid "Control options:"
+msgstr ""
+
+#: ../src/elfcmp.c:70
+msgid "Control treatment of gaps in loadable segments [ignore|match] (default: ignore)"
+msgstr ""
+
+#: ../src/elfcmp.c:72
+msgid "Ignore permutation of buckets in SHT_HASH section"
+msgstr ""
+
+#: ../src/elfcmp.c:73
+msgid "Output nothing; yield exit status only"
+msgstr ""
+
+#. Short description of program.
+#: ../src/elfcmp.c:80
+msgid "Compare relevant parts of two ELF files for equality."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/elfcmp.c:84
+msgid "FILE1 FILE2"
+msgstr ""
+
+#: ../src/elfcmp.c:140
+msgid "Invalid number of parameters.\n"
+msgstr ""
+
+#: ../src/elfcmp.c:168
+#: ../src/elfcmp.c:173
+#, c-format
+msgid "cannot get ELF header of '%s': %s"
+msgstr ""
+
+#: ../src/elfcmp.c:190
+#, c-format
+msgid "%s %s diff: ELF header"
+msgstr ""
+
+#: ../src/elfcmp.c:248
+#, c-format
+msgid "%s %s differ: section header"
+msgstr ""
+
+#: ../src/elfcmp.c:276
+#: ../src/elfcmp.c:282
+#, c-format
+msgid "cannot get content of section %zu in '%s': %s"
+msgstr ""
+
+#: ../src/elfcmp.c:298
+#: ../src/elfcmp.c:304
+#, c-format
+msgid "cannot get symbol in '%s': %s"
+msgstr ""
+
+#: ../src/elfcmp.c:325
+#, c-format
+msgid "%s %s differ: symbol table [%zu]"
+msgstr ""
+
+#: ../src/elfcmp.c:328
+#, c-format
+msgid "%s %s differ: symbol table [%zu,%zu]"
+msgstr ""
+
+#: ../src/elfcmp.c:376
+#, c-format
+msgid "%s %s differ: section [%zu] '%s' content"
+msgstr ""
+
+#: ../src/elfcmp.c:380
+#, c-format
+msgid "%s %s differ: section [%zu,%zu] '%s' content"
+msgstr ""
+
+#: ../src/elfcmp.c:396
+#, c-format
+msgid "%s %s differ: unequal amount of important sections"
+msgstr ""
+
+#: ../src/elfcmp.c:430
+#: ../src/elfcmp.c:435
+#, c-format
+msgid "cannot load data of '%s': %s"
+msgstr ""
+
+#: ../src/elfcmp.c:454
+#: ../src/elfcmp.c:460
+#, c-format
+msgid "cannot get program header entry %d of '%s': %s"
+msgstr ""
+
+#: ../src/elfcmp.c:466
+#, c-format
+msgid "%s %s differ: program header %d"
+msgstr ""
+
+#: ../src/elfcmp.c:491
+#, c-format
+msgid "%s %s differ: gap"
+msgstr ""
+
+#: ../src/elfcmp.c:550
+#, c-format
+msgid "Invalid value '%s' for --gaps parameter."
+msgstr ""
+
+#: ../src/elfcmp.c:583
+#, c-format
+msgid "cannot create EBL descriptor for '%s'"
+msgstr ""
+
+#: ../src/elfcmp.c:601
+#, c-format
+msgid "cannot get section header of section %zu: %s"
+msgstr ""
+
+#: ../src/elfcmp.c:611
+#, c-format
+msgid "cannot get content of section %zu: %s"
+msgstr ""
+
+#: ../src/elfcmp.c:621
+#: ../src/elfcmp.c:635
+#, c-format
+msgid "cannot get relocation: %s"
+msgstr ""
+
+#. Short description of program.
+#: ../src/ranlib.c:74
+msgid "Generate an index to speed access to archives."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/ranlib.c:77
+msgid "ARCHIVE"
+msgstr ""
+
+#: ../src/ranlib.c:116
+#, c-format
+msgid "Archive name required"
+msgstr ""
+
+#: ../src/ranlib.c:194
+#, c-format
+msgid "'%s' is no archive"
+msgstr ""
+
+#: ../src/ranlib.c:229
+#, c-format
+msgid "error while freeing sub-ELF descriptor: %s"
+msgstr ""
+
+#: ../src/strings.c:70
+msgid "Output Selection:"
+msgstr ""
+
+#: ../src/strings.c:71
+msgid "Scan entire file, not only loaded sections"
+msgstr ""
+
+#: ../src/strings.c:73
+msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed"
+msgstr ""
+
+#: ../src/strings.c:74
+msgid "Select character size and endianess: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit"
+msgstr ""
+
+#: ../src/strings.c:78
+msgid "Print name of the file before each string."
+msgstr ""
+
+#: ../src/strings.c:80
+msgid "Print location of the string in base 8, 10, or 16 respectively."
+msgstr ""
+
+#: ../src/strings.c:81
+msgid "Alias for --radix=o"
+msgstr ""
+
+#. Short description of program.
+#: ../src/strings.c:88
+msgid "Print the strings of printable characters in files."
+msgstr ""
+
+#: ../src/strings.c:268
+#: ../src/strings.c:303
+#, c-format
+msgid "invalid value '%s' for %s parameter"
+msgstr ""
+
+#: ../src/strings.c:314
+#, c-format
+msgid "invalid minimum length of matched string size"
+msgstr ""
+
+#: ../src/strings.c:601
+#, c-format
+msgid "lseek64 failed"
+msgstr ""
+
+#: ../src/strings.c:616
+#: ../src/strings.c:680
+#, c-format
+msgid "re-mmap failed"
+msgstr ""
+
+#: ../src/strings.c:653
+#, c-format
+msgid "mprotect failed"
+msgstr ""
+
+#: ../src/unstrip.c:77
+msgid "Match MODULE against file names, not module names"
+msgstr ""
+
+#: ../src/unstrip.c:78
+msgid "Silently skip unfindable files"
+msgstr ""
+
+#: ../src/unstrip.c:81
+msgid "Place output into FILE"
+msgstr ""
+
+#: ../src/unstrip.c:83
+msgid "Create multiple output files under DIRECTORY"
+msgstr ""
+
+#: ../src/unstrip.c:84
+msgid "Use module rather than file names"
+msgstr ""
+
+#: ../src/unstrip.c:86
+msgid "Create output for modules that have no separate debug information"
+msgstr ""
+
+#: ../src/unstrip.c:89
+msgid "Apply relocations to section contents in ET_REL files"
+msgstr ""
+
+#: ../src/unstrip.c:91
+msgid "Only list module and file names, build IDs"
+msgstr ""
+
+#: ../src/unstrip.c:133
+#, c-format
+msgid "-d option specified twice"
+msgstr ""
+
+#: ../src/unstrip.c:165
+#, c-format
+msgid "only one of -o or -d allowed"
+msgstr ""
+
+#: ../src/unstrip.c:174
+#, c-format
+msgid "-n cannot be used with explicit files or -o or -d"
+msgstr ""
+
+#: ../src/unstrip.c:189
+#, c-format
+msgid "output directory '%s'"
+msgstr ""
+
+#: ../src/unstrip.c:198
+#, c-format
+msgid "exactly two file arguments are required"
+msgstr ""
+
+#: ../src/unstrip.c:204
+#, c-format
+msgid "-m, -a, -R, and -i options not allowed with explicit files"
+msgstr ""
+
+#: ../src/unstrip.c:217
+#, c-format
+msgid "-o or -d is required when using implicit files"
+msgstr ""
+
+#: ../src/unstrip.c:253
+#, c-format
+msgid "cannot create ELF header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:258
+#, c-format
+msgid "cannot copy ELF header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:263
+#: ../src/unstrip.c:1816
+#, c-format
+msgid "cannot create program headers: %s"
+msgstr ""
+
+#: ../src/unstrip.c:269
+#, c-format
+msgid "cannot copy program header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:279
+#, c-format
+msgid "cannot copy section header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:282
+#: ../src/unstrip.c:1504
+#, c-format
+msgid "cannot get section data: %s"
+msgstr ""
+
+#: ../src/unstrip.c:284
+#: ../src/unstrip.c:1506
+#, c-format
+msgid "cannot copy section data: %s"
+msgstr ""
+
+#: ../src/unstrip.c:308
+#, c-format
+msgid "cannot create directory '%s'"
+msgstr ""
+
+#: ../src/unstrip.c:348
+#: ../src/unstrip.c:762
+#: ../src/unstrip.c:1539
+#, c-format
+msgid "cannot get symbol table entry: %s"
+msgstr ""
+
+#: ../src/unstrip.c:364
+#: ../src/unstrip.c:579
+#: ../src/unstrip.c:600
+#: ../src/unstrip.c:612
+#: ../src/unstrip.c:1560
+#: ../src/unstrip.c:1690
+#: ../src/unstrip.c:1714
+#, c-format
+msgid "cannot update symbol table: %s"
+msgstr ""
+
+#: ../src/unstrip.c:381
+#: ../src/unstrip.c:431
+#: ../src/unstrip.c:561
+#: ../src/unstrip.c:1208
+#: ../src/unstrip.c:1524
+#: ../src/unstrip.c:1719
+#: ../src/unstrip.c:1790
+#, c-format
+msgid "cannot update section header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:407
+#: ../src/unstrip.c:418
+#, c-format
+msgid "cannot update relocation: %s"
+msgstr ""
+
+#: ../src/unstrip.c:506
+#, c-format
+msgid "cannot get symbol version: %s"
+msgstr ""
+
+#: ../src/unstrip.c:518
+#, c-format
+msgid "unexpected section type in [%Zu] with sh_link to symtab"
+msgstr ""
+
+#: ../src/unstrip.c:768
+#, c-format
+msgid "invalid string offset in symbol [%Zu]"
+msgstr ""
+
+#: ../src/unstrip.c:910
+#: ../src/unstrip.c:1247
+#, c-format
+msgid "cannot read section [%Zu] name: %s"
+msgstr ""
+
+#: ../src/unstrip.c:951
+#: ../src/unstrip.c:970
+#: ../src/unstrip.c:1003
+#, c-format
+msgid "cannot read '.gnu.prelink_undo' section: %s"
+msgstr ""
+
+#: ../src/unstrip.c:991
+#, c-format
+msgid "invalid contents in '%s' section"
+msgstr ""
+
+#: ../src/unstrip.c:1046
+#: ../src/unstrip.c:1369
+#, c-format
+msgid "cannot find matching section for [%Zu] '%s'"
+msgstr ""
+
+#: ../src/unstrip.c:1170
+#: ../src/unstrip.c:1185
+#: ../src/unstrip.c:1450
+#, c-format
+msgid "cannot add section name to string table: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1194
+#, c-format
+msgid "cannot update section header string table data: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1222
+#: ../src/unstrip.c:1226
+#, c-format
+msgid "cannot get section header string table section index: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1230
+#: ../src/unstrip.c:1234
+#: ../src/unstrip.c:1465
+#, c-format
+msgid "cannot get section count: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1292
+#: ../src/unstrip.c:1384
+#, c-format
+msgid "cannot read section header string table: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1444
+#, c-format
+msgid "cannot add new section: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1547
+#, c-format
+msgid "symbol [%Zu] has invalid section index"
+msgstr ""
+
+#: ../src/unstrip.c:1799
+#, c-format
+msgid "cannot get ELF header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1826
+#, c-format
+msgid "cannot update program header: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1831
+#: ../src/unstrip.c:1910
+#, c-format
+msgid "cannot write output file: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1879
+#, c-format
+msgid "DWARF data not adjusted for prelinking bias; consider prelink -u"
+msgstr ""
+
+#: ../src/unstrip.c:1882
+#, c-format
+msgid "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"
+msgstr ""
+
+#: ../src/unstrip.c:1901
+#: ../src/unstrip.c:1941
+#: ../src/unstrip.c:1953
+#: ../src/unstrip.c:2033
+#, c-format
+msgid "cannot create ELF descriptor: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1959
+#, c-format
+msgid "'%s' and '%s' do not seem to match"
+msgstr ""
+
+#: ../src/unstrip.c:1990
+#, c-format
+msgid "cannot find stripped file for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:1994
+#, c-format
+msgid "cannot open stripped file '%s' for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:2009
+#, c-format
+msgid "cannot find debug file for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:2013
+#, c-format
+msgid "cannot open debug file '%s' for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:2026
+#, c-format
+msgid "module '%s' file '%s' is not stripped"
+msgstr ""
+
+#: ../src/unstrip.c:2057
+#, c-format
+msgid "cannot cache section addresses for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:2190
+#, c-format
+msgid "no matching modules found"
+msgstr ""
+
+#: ../src/unstrip.c:2199
+#, c-format
+msgid "matched more than one module"
+msgstr ""
+
+#: ../src/unstrip.c:2246
+msgid ""
+"STRIPPED-FILE DEBUG-FILE\n"
+"[MODULE...]"
+msgstr ""
+
+#: ../src/unstrip.c:2247
+msgid ""
+"Combine stripped files with separate symbols and debug information.\vThe first form puts the result in DEBUG-FILE if -o was not given.\n"
+"\n"
+"MODULE arguments give file name patterns matching modules to process.\n"
+"With -f these match the file name of the main (stripped) file (slashes are never special), otherwise they match the simple module names. With no arguments, process all modules found.\n"
+"\n"
+"Multiple modules are written to files under OUTPUT-DIRECTORY, creating subdirectories as needed. With -m these files have simple module names, otherwise they have the name of the main file complete with directory underneath OUTPUT-DIRECTORY.\n"
+"\n"
+"With -n no files are written, but one line to standard output for each module:\n"
+"\tSTART+SIZE BUILDID FILE DEBUGFILE MODULENAME\n"
+"START and SIZE are hexadecimal giving the address bounds of the module. BUILDID is hexadecimal for the build ID bits, or - if no ID is known; the hexadecimal may be followed by @0xADDR giving the address where the ID resides if that is known. FILE is the file name found for the module, or - if none was found, or . if an ELF image is available but not from any named file. DEBUGFILE is the separate debuginfo file name, or - if no debuginfo was found, or . if FILE contains the debug information."
+msgstr ""
+
+#: ../src/objdump.c:61
+msgid "Mode selection:"
+msgstr ""
+
+#: ../src/objdump.c:62
+msgid "Display relocation information."
+msgstr ""
+
+#: ../src/objdump.c:64
+msgid "Display the full contents of all sections requested"
+msgstr ""
+
+#: ../src/objdump.c:66
+msgid "Display assembler code of executable sections"
+msgstr ""
+
+#: ../src/objdump.c:68
+msgid "Output option selection:"
+msgstr ""
+
+#: ../src/objdump.c:70
+msgid "Only display information for section NAME."
+msgstr ""
+
+#. Short description of program.
+#: ../src/objdump.c:76
+msgid "Show information from FILEs (a.out by default)."
+msgstr ""
+
+#: ../src/objdump.c:274
+#: ../src/objdump.c:286
+#, c-format
+msgid "while close `%s'"
+msgstr ""
+
+#: ../src/objdump.c:510
+#, c-format
+msgid ""
+"\n"
+"RELOCATION RECORDS FOR [%s]:\n"
+"%-*s TYPE VALUE\n"
+msgstr ""
+
+#: ../src/objdump.c:513
+msgid "OFFSET"
+msgstr ""
+
+#: ../src/objdump.c:576
+#, c-format
+msgid "Contents of section %s:\n"
+msgstr ""
+
+#: ../src/objdump.c:676
+#, c-format
+msgid "cannot disassemble"
+msgstr ""
+
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 00000000..0b16333a
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,5954 @@
+# Fedora Spanish Translation of elfutils.
+# Domingo Becker <domingobecker@gmail.com>, 2009.
+# Héctor Daniel Cabrera <h.daniel.cabrera@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: elfutils\n"
+"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n"
+"POT-Creation-Date: 2009-04-24 14:08+0000\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Héctor Daniel Cabrera <h.daniel.cabrera@gmail.com>\n"
+"Language-Team: Fedora Spanish <fedora-trans-es@redhat.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Spanish\n"
+
+#: ../lib/xmalloc.c:51
+#: ../lib/xmalloc.c:65
+#: ../lib/xmalloc.c:79
+#: ../src/readelf.c:2703
+#: ../src/readelf.c:3041
+#: ../src/unstrip.c:2086
+#: ../src/unstrip.c:2294
+#, c-format
+msgid "memory exhausted"
+msgstr "memoria agotada"
+
+#: ../libelf/elf_error.c:81
+#: ../libasm/asm_error.c:62
+#: ../libdw/dwarf_error.c:79
+msgid "no error"
+msgstr "ningún error"
+
+#: ../libelf/elf_error.c:84
+#: ../libasm/asm_error.c:81
+#: ../libdw/dwarf_error.c:80
+msgid "unknown error"
+msgstr "error desconocido"
+
+#: ../libelf/elf_error.c:88
+#, fuzzy
+msgid "unknown version"
+msgstr "versión desconocida"
+
+#: ../libelf/elf_error.c:92
+msgid "unknown type"
+msgstr "tipo desconocido"
+
+#: ../libelf/elf_error.c:96
+msgid "invalid `Elf' handle"
+msgstr "identificador `Elf' inválido"
+
+#: ../libelf/elf_error.c:100
+msgid "invalid size of source operand"
+msgstr "tamaño inválido del operando fuente"
+
+#: ../libelf/elf_error.c:104
+msgid "invalid size of destination operand"
+msgstr "tamaño inválido del operando destino"
+
+#: ../libelf/elf_error.c:108
+#: ../src/readelf.c:4592
+#, c-format
+msgid "invalid encoding"
+msgstr "codificación inválida"
+
+#: ../libelf/elf_error.c:112
+#: ../libasm/asm_error.c:63
+#: ../libdw/dwarf_error.c:88
+msgid "out of memory"
+msgstr "memoria agotada"
+
+#: ../libelf/elf_error.c:116
+msgid "invalid file descriptor"
+msgstr "descriptor de archivo inválido"
+
+#: ../libelf/elf_error.c:120
+msgid "invalid operation"
+msgstr "operación inválida"
+
+#: ../libelf/elf_error.c:124
+msgid "ELF version not set"
+msgstr "no se puso la versión de ELF"
+
+#: ../libelf/elf_error.c:128
+#: ../libelf/elf_error.c:176
+#: ../libdw/dwarf_error.c:90
+msgid "invalid command"
+msgstr "comando inválido"
+
+#: ../libelf/elf_error.c:132
+#: ../libelf/elf_error.c:192
+msgid "offset out of range"
+msgstr "desplazamiento fuera de rango"
+
+#: ../libelf/elf_error.c:136
+msgid "invalid fmag field in archive header"
+msgstr "campo fmag no válido en el encabezado del archivo"
+
+#: ../libelf/elf_error.c:140
+msgid "invalid archive file"
+msgstr "archivo de archivado inválido"
+
+#: ../libelf/elf_error.c:144
+msgid "descriptor is not for an archive"
+msgstr "el descriptor no es de un archivador"
+
+#: ../libelf/elf_error.c:148
+msgid "no index available"
+msgstr "no hay índice disponible"
+
+#: ../libelf/elf_error.c:152
+msgid "cannot read data from file"
+msgstr "no se pueden leer los datos del archivo"
+
+#: ../libelf/elf_error.c:156
+msgid "cannot write data to file"
+msgstr "no se puede escribir los datos al archivo"
+
+#: ../libelf/elf_error.c:160
+msgid "invalid binary class"
+msgstr "clase de binario inválida"
+
+#: ../libelf/elf_error.c:164
+msgid "invalid section index"
+msgstr "sección de índice inválida"
+
+#: ../libelf/elf_error.c:168
+msgid "invalid operand"
+msgstr "operando inválido"
+
+#: ../libelf/elf_error.c:172
+msgid "invalid section"
+msgstr "sección inválida"
+
+#: ../libelf/elf_error.c:180
+msgid "executable header not created first"
+msgstr "no se ha creado primero el encabezado ejecutable"
+
+#: ../libelf/elf_error.c:184
+msgid "file descriptor disabled"
+msgstr "descriptor de archivo deshabilitada"
+
+#: ../libelf/elf_error.c:188
+msgid "archive/member fildes mismatch"
+msgstr "descriptor archivo/miembro no coinciden"
+
+#: ../libelf/elf_error.c:196
+msgid "cannot manipulate null section"
+msgstr "no se pudo manipular una sección nula"
+
+#: ../libelf/elf_error.c:200
+msgid "data/scn mismatch"
+msgstr "no coinciden los datos/scn"
+
+#: ../libelf/elf_error.c:204
+msgid "invalid section header"
+msgstr "cabecera de sección inválida"
+
+#: ../libelf/elf_error.c:208
+#: ../src/readelf.c:6062
+#: ../src/readelf.c:6163
+#, c-format
+msgid "invalid data"
+msgstr "datos inválidos"
+
+#: ../libelf/elf_error.c:212
+msgid "unknown data encoding"
+msgstr "codificación de caracteres desconocida"
+
+#: ../libelf/elf_error.c:216
+msgid "section `sh_size' too small for data"
+msgstr "el tamaño de la sección `sh_size' es demasiado pequeño para los datos "
+
+#: ../libelf/elf_error.c:220
+msgid "invalid section alignment"
+msgstr "alineación de la sección inválida"
+
+#: ../libelf/elf_error.c:224
+msgid "invalid section entry size"
+msgstr "tamaño de la entrada de la sección inválida"
+
+#: ../libelf/elf_error.c:228
+msgid "update() for write on read-only file"
+msgstr "update() para escribir sobre archivo de sólo lectura"
+
+#: ../libelf/elf_error.c:232
+msgid "no such file"
+msgstr "no hay tal archivo"
+
+#: ../libelf/elf_error.c:236
+msgid "only relocatable files can contain section groups"
+msgstr "solo los archivos realojables pueden contener grupos de sección"
+
+#: ../libelf/elf_error.c:241
+msgid "program header only allowed in executables, shared objects, and core files"
+msgstr "los encabezados de los programas solo son permitidos en archivos ejecutables, archivos principales, u objetos compartidos"
+
+#: ../libelf/elf_error.c:248
+msgid "file has no program header"
+msgstr "el archivo no tiene cabecera de programa"
+
+#: ../libelf/elf_error.c:253
+#: ../libdw/dwarf_error.c:112
+msgid "invalid offset"
+msgstr "desplazamiento inválido"
+
+#: ../libasm/asm_error.c:64
+#: ../src/ldgeneric.c:2687
+#, c-format
+msgid "cannot create output file"
+msgstr "no se puede crear el archivo de salida"
+
+#: ../libasm/asm_error.c:65
+#, fuzzy
+msgid "invalid parameter"
+msgstr "PTP. Parámetro no válido"
+
+#: ../libasm/asm_error.c:66
+#, fuzzy
+msgid "cannot change mode of output file"
+msgstr "Localización del fichero de salida en modo C#:\n"
+
+#. Something went wrong.
+#: ../libasm/asm_error.c:67
+#: ../src/ldgeneric.c:7001
+#, fuzzy, c-format
+msgid "cannot rename output file"
+msgstr "no se puede generar el fichero de salida"
+
+#: ../libasm/asm_error.c:68
+#, fuzzy
+msgid "duplicate symbol"
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../libasm/asm_error.c:69
+#, fuzzy
+msgid "invalid section type for operation"
+msgstr "sección inválida para la operación en `%s'"
+
+#: ../libasm/asm_error.c:70
+#, fuzzy
+msgid "error during output of data"
+msgstr "error en formato de datos"
+
+#: ../libasm/asm_error.c:71
+#, fuzzy
+msgid "no backend support available"
+msgstr "¡No está disponible el soporte XBM!"
+
+#: ../libdw/dwarf_error.c:81
+#, fuzzy
+msgid "invalid access"
+msgstr "Acceder a archivos"
+
+#: ../libdw/dwarf_error.c:82
+#, fuzzy
+msgid "no regular file"
+msgstr "no es un fichero regular"
+
+#: ../libdw/dwarf_error.c:83
+#, fuzzy
+msgid "I/O error"
+msgstr "Error de E/S"
+
+#: ../libdw/dwarf_error.c:84
+#, fuzzy
+msgid "invalid ELF file"
+msgstr "Versión de ABI del fichero ELF inválida"
+
+#: ../libdw/dwarf_error.c:85
+#, fuzzy
+msgid "no DWARF information"
+msgstr "Sin información sobre inodos"
+
+#: ../libdw/dwarf_error.c:86
+#, fuzzy
+msgid "no ELF file"
+msgstr "%F%P: %s (%s): No hay tal fichero: %E\n"
+
+#: ../libdw/dwarf_error.c:87
+#, fuzzy
+msgid "cannot get ELF header"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../libdw/dwarf_error.c:89
+#, fuzzy
+msgid "not implemented"
+msgstr "%s: sin implementar"
+
+#: ../libdw/dwarf_error.c:91
+#, fuzzy
+msgid "invalid version"
+msgstr "%B: %s: versión requerida %d inválida"
+
+#: ../libdw/dwarf_error.c:92
+#, fuzzy
+msgid "invalid file"
+msgstr "Archivo no válido."
+
+#: ../libdw/dwarf_error.c:93
+#, fuzzy
+msgid "no entries found"
+msgstr "No se han encontrado documentos."
+
+#: ../libdw/dwarf_error.c:94
+#, fuzzy
+msgid "invalid DWARF"
+msgstr " Versión DWARF: %d\n"
+
+#: ../libdw/dwarf_error.c:95
+#, fuzzy
+msgid "no string data"
+msgstr "no hay datos firmados\n"
+
+#: ../libdw/dwarf_error.c:96
+#, fuzzy
+msgid "no address value"
+msgstr "(no hay valor asignado)"
+
+#: ../libdw/dwarf_error.c:97
+#, fuzzy
+msgid "no constant value"
+msgstr "se requiere un valor constante"
+
+#: ../libdw/dwarf_error.c:98
+#, fuzzy
+msgid "no reference value"
+msgstr "inicialización por valor de la referencia"
+
+#: ../libdw/dwarf_error.c:99
+#, fuzzy
+msgid "invalid reference value"
+msgstr "inicialización por valor de la referencia"
+
+#: ../libdw/dwarf_error.c:100
+#, fuzzy
+msgid ".debug_line section missing"
+msgstr "no hay sección `msgstr'"
+
+#: ../libdw/dwarf_error.c:101
+#, fuzzy
+msgid "invalid .debug_line section"
+msgstr ""
+"\n"
+"Volcado del contenido de depuración de la sección %s:\n"
+"\n"
+
+#: ../libdw/dwarf_error.c:102
+#, fuzzy
+msgid "debug information too big"
+msgstr "ERROR: %d es demasiado grande"
+
+#: ../libdw/dwarf_error.c:103
+#, fuzzy
+msgid "invalid DWARF version"
+msgstr "%B: %s: versión requerida %d inválida"
+
+#: ../libdw/dwarf_error.c:104
+#, fuzzy
+msgid "invalid directory index"
+msgstr "GIF: Indice de gif no válido."
+
+#: ../libdw/dwarf_error.c:105
+#, fuzzy
+msgid "address out of range"
+msgstr "dirección relativa fuera de rango"
+
+#: ../libdw/dwarf_error.c:106
+#, fuzzy
+msgid "no location list value"
+msgstr "Seleccione una zona de la lista"
+
+#: ../libdw/dwarf_error.c:107
+#, fuzzy
+msgid "no block data"
+msgstr "Primer bloque de datos=%u\n"
+
+#: ../libdw/dwarf_error.c:108
+#, fuzzy
+msgid "invalid line index"
+msgstr "GIF: Indice de gif no válido."
+
+#: ../libdw/dwarf_error.c:109
+#, fuzzy
+msgid "invalid address range index"
+msgstr "desplazamiento de índice fuera de rango"
+
+#: ../libdw/dwarf_error.c:110
+#, fuzzy
+msgid "no matching address range"
+msgstr "dirección relativa fuera de rango"
+
+#: ../libdw/dwarf_error.c:111
+#, fuzzy
+msgid "no flag value"
+msgstr "(no hay valor asignado)"
+
+#: ../libdw/dwarf_error.c:113
+#, fuzzy
+msgid ".debug_ranges section missing"
+msgstr "no hay sección `msgstr'"
+
+#: ../libdwfl/argp-std.c:67
+#: ../src/unstrip.c:2236
+#, fuzzy
+msgid "Input selection options:"
+msgstr "Opciones de selección de archivo"
+
+#: ../libdwfl/argp-std.c:68
+#, fuzzy
+msgid "Find addresses in FILE"
+msgstr "directorio NULL en find_file"
+
+#: ../libdwfl/argp-std.c:70
+msgid "Find addresses from signatures found in COREFILE"
+msgstr "Busca direcciones desde firmas encontradas en COREFILE"
+
+#: ../libdwfl/argp-std.c:72
+msgid "Find addresses in files mapped into process PID"
+msgstr "Busca direcciones en archivos mapeados sobre procesos PID"
+
+#: ../libdwfl/argp-std.c:74
+msgid "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps format"
+msgstr "Busca direcciones en archivos mapeados como leídos desde FILE en formato Linux /proc/PID/maps"
+
+#: ../libdwfl/argp-std.c:76
+msgid "Find addresses in the running kernel"
+msgstr "Busca direcciones en el kernel que está ejecutándose"
+
+#: ../libdwfl/argp-std.c:78
+#, fuzzy
+msgid "Kernel with all modules"
+msgstr "Reemplazar todos los &espacios con:"
+
+#: ../libdwfl/argp-std.c:80
+msgid "Search path for separate debuginfo files"
+msgstr "Busca caminos para deferentes arhivos debugingfo"
+
+#: ../libdwfl/argp-std.c:163
+#, fuzzy
+msgid "only one of -e, -p, -k, -K, or --core allowed"
+msgstr "Sólo se permite una comparación condicional"
+
+#: ../libdwfl/argp-std.c:223
+#, fuzzy, c-format
+msgid "cannot read ELF core file: %s"
+msgstr "No se pueden leer los datos del archivo"
+
+#: ../libdwfl/argp-std.c:243
+#, fuzzy
+msgid "No modules recognized in core file"
+msgstr "No hay segmentos de notas presentes el el fichero core.\n"
+
+#: ../libdwfl/argp-std.c:255
+#, fuzzy
+msgid "cannot load kernel symbols"
+msgstr "No se puede cargar el icono de '%s'."
+
+#. Non-fatal to have no modules since we do have the kernel.
+#: ../libdwfl/argp-std.c:259
+#, fuzzy
+msgid "cannot find kernel modules"
+msgstr "No se puede encontrar nodo de tipo de letra '%s'."
+
+#: ../libdwfl/argp-std.c:273
+msgid "cannot find kernel or modules"
+msgstr "imposible encontrar kernel o modulos"
+
+#: ../libebl/eblbackendname.c:63
+#, fuzzy
+msgid "No backend"
+msgstr "Backend del reproductor"
+
+#: ../libebl/eblcorenotetypename.c:107
+#: ../libebl/eblobjecttypename.c:78
+#: ../libebl/eblobjnotetypename.c:85
+#: ../libebl/eblosabiname.c:98
+#: ../libebl/eblsectionname.c:110
+#: ../libebl/eblsectiontypename.c:140
+#: ../libebl/eblsegmenttypename.c:104
+#, fuzzy
+msgid "<unknown>"
+msgstr "<desconocido>"
+
+#: ../libebl/ebldynamictagname.c:126
+#, fuzzy, c-format
+msgid "<unknown>: %#<PRIx64>"
+msgstr ": conjunto de caracteres desconocido"
+
+#: ../libebl/eblobjnote.c:76
+#, fuzzy, c-format
+msgid " Build ID: "
+msgstr "Identificador de la cámara: %s\n"
+
+#: ../libebl/eblobjnote.c:129
+#, fuzzy, c-format
+msgid " OS: %s, ABI: "
+msgstr ", ABI del SO: %s %d.%d.%d"
+
+#: ../libebl/eblosabiname.c:95
+#, fuzzy
+msgid "Stand alone"
+msgstr "prefijo `%s' por sí solo"
+
+#: ../libebl/eblsymbolbindingname.c:86
+#: ../libebl/eblsymboltypename.c:94
+#, fuzzy, c-format
+msgid "<unknown>: %d"
+msgstr "<desconocido>: %d"
+
+#: ../src/ar.c:76
+#, fuzzy
+msgid "Commands:"
+msgstr ""
+"Comandos:\n"
+"\n"
+
+#: ../src/ar.c:77
+#, fuzzy
+msgid "Delete files from archive."
+msgstr "extrae ficheros de un archivo"
+
+#: ../src/ar.c:78
+#, fuzzy
+msgid "Move files in archive."
+msgstr "¿Actualizar los archivos en el archivador «%s»?"
+
+#: ../src/ar.c:79
+#, fuzzy
+msgid "Print files in archive."
+msgstr "¿Actualizar los archivos en el archivador «%s»?"
+
+#: ../src/ar.c:80
+#, fuzzy
+msgid "Quick append files to archive."
+msgstr "añade ficheros al final de un archivo"
+
+#: ../src/ar.c:82
+#, fuzzy
+msgid "Replace existing or insert new file into archive."
+msgstr " r[ab][f][u] - reemplaza fichero(s) existente(s) o inserta fichero(s) nuevo(s) en el archivo\n"
+
+#: ../src/ar.c:83
+#, fuzzy
+msgid "Display content of archive."
+msgstr "Lista el contenido del archivo"
+
+#: ../src/ar.c:84
+#, fuzzy
+msgid "Extract files from archive."
+msgstr "extrae ficheros de un archivo"
+
+#: ../src/ar.c:86
+#, fuzzy
+msgid "Command Modifiers:"
+msgstr " modificadores específicos de la orden:\n"
+
+#: ../src/ar.c:87
+#, fuzzy
+msgid "Preserve original dates."
+msgstr " [o] - conserva las fechas originales\n"
+
+#: ../src/ar.c:88
+#, fuzzy
+msgid "Use instance [COUNT] of name."
+msgstr " [N] - usa la instancia [cuenta] del nombre\n"
+
+#: ../src/ar.c:90
+msgid "Do not replace existing files with extracted files."
+msgstr "No reemplazar los archivos existentes con los archivos extraídos."
+
+#: ../src/ar.c:91
+msgid "Allow filename to be truncated if necessary."
+msgstr "Permitir truncamiento del nombre de archivo de ser necesario"
+
+#: ../src/ar.c:93
+#, fuzzy
+msgid "Provide verbose output."
+msgstr "Activa salida detallada"
+
+#: ../src/ar.c:94
+#, fuzzy
+msgid "Force regeneration of symbol table."
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../src/ar.c:95
+#, fuzzy
+msgid "Insert file after [MEMBER]."
+msgstr " [a] - coloca fichero(s) despúes de [nombre-miembro]\n"
+
+#: ../src/ar.c:96
+#, fuzzy
+msgid "Insert file before [MEMBER]."
+msgstr "Introduzca la ruta al archivo"
+
+#: ../src/ar.c:97
+#, fuzzy
+msgid "Same as -b."
+msgstr "lo mismo que --format=posix"
+
+#: ../src/ar.c:98
+msgid "Suppress message when library has to be created."
+msgstr "Suprimir mensaje cuando se alla creado la libreria"
+
+#: ../src/ar.c:100
+#, fuzzy
+msgid "Use full path for file matching."
+msgstr "Ruta al archivo de base de datos a usar"
+
+#: ../src/ar.c:101
+#, fuzzy
+msgid "Update only older files in archive."
+msgstr "solamente añade ficheros más recientes que la copia del archivo"
+
+#. Short description of program.
+#: ../src/ar.c:107
+msgid "Create, modify, and extract from archives."
+msgstr "Crear, modificar, y extraer desde archivos."
+
+#. Strings for arguments in help texts.
+#: ../src/ar.c:110
+#, fuzzy
+msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]"
+msgstr ""
+"Se incluyó el miembro del archivo debido al fichero (símbolo)\n"
+"\n"
+
+#: ../src/ar.c:192
+#, fuzzy, c-format
+msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options"
+msgstr "`N' sólo tiene significado con las opciones `x' y `d'."
+
+#: ../src/ar.c:197
+#, c-format
+msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers"
+msgstr "Los modificadres 'a', 'b', e 'i', requieren parámetros MEMBR"
+
+#: ../src/ar.c:213
+#, fuzzy, c-format
+msgid "'N' is only meaningful with the 'x' and 'd' options"
+msgstr "`N' sólo tiene significado con las opciones `x' y `d'."
+
+#: ../src/ar.c:218
+#, fuzzy, c-format
+msgid "COUNT parameter required"
+msgstr "El parámetro '%s' no fue especificado."
+
+#: ../src/ar.c:230
+#, fuzzy, c-format
+msgid "invalid COUNT parameter %s"
+msgstr "PTP. Parámetro no válido"
+
+#: ../src/ar.c:237
+#, fuzzy, c-format
+msgid "'%' is only meaningful with the 'x' option"
+msgstr "`u' sólo tiene significado con la opción `r'."
+
+#: ../src/ar.c:243
+#, fuzzy, c-format
+msgid "archive name required"
+msgstr "%s: se requiere un nombre de señalador\n"
+
+#: ../src/ar.c:289
+#: ../src/nm.c:253
+#: ../src/readelf.c:432
+#: ../src/size.c:219
+#: ../src/strip.c:203
+#: ../src/ld.c:957
+#: ../src/elflint.c:238
+#: ../src/addr2line.c:185
+#: ../src/findtextrel.c:170
+#: ../src/elfcmp.c:522
+#: ../src/ranlib.c:136
+#: ../src/strings.c:227
+#: ../src/unstrip.c:233
+#: ../src/objdump.c:181
+#, c-format
+msgid ""
+"Copyright (C) %s Red Hat, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Red Hat, Inc.\n"
+"El siguiente es un software libre; consulte el código para conocer las condiciones de copiado. NO TIENE\n"
+"garantía, ni siquiera para SU COMERCIALIZACION o PARA SER USADO CON UN FIN DETERMINADO.\n"
+
+#: ../src/ar.c:294
+#: ../src/nm.c:258
+#: ../src/readelf.c:437
+#: ../src/size.c:224
+#: ../src/strip.c:208
+#: ../src/ld.c:962
+#: ../src/elflint.c:243
+#: ../src/addr2line.c:190
+#: ../src/findtextrel.c:175
+#: ../src/elfcmp.c:527
+#: ../src/ranlib.c:141
+#: ../src/strings.c:232
+#: ../src/unstrip.c:238
+#: ../src/objdump.c:186
+#, fuzzy, c-format
+msgid "Written by %s.\n"
+msgstr "Escrito por %s.\n"
+
+#: ../src/ar.c:314
+#, fuzzy, c-format
+msgid "More than one operation specified"
+msgstr "%s: La opción -L se ha especificado más de una vez\n"
+
+#: ../src/ar.c:404
+#, fuzzy, c-format
+msgid "cannot open archive '%s'"
+msgstr ""
+"Imposible abrir el archivo %s\n"
+"%s"
+
+#: ../src/ar.c:414
+#, fuzzy, c-format
+msgid "cannot open archive '%s': %s"
+msgstr ""
+"Imposible abrir el archivo %s\n"
+"%s"
+
+#: ../src/ar.c:418
+#, fuzzy, c-format
+msgid "%s: not an archive file"
+msgstr "%s: el fichero %s no es un archivo\n"
+
+#: ../src/ar.c:422
+#, fuzzy, c-format
+msgid "cannot stat archive '%s'"
+msgstr "no se puede efectuar `stat' sobre el archivo de locales \"%s\""
+
+#: ../src/ar.c:434
+#, fuzzy, c-format
+msgid "no entry %s in archive\n"
+msgstr "no existe la entrada %s en el archivo\n"
+
+#: ../src/ar.c:474
+#: ../src/ar.c:918
+#: ../src/ar.c:1118
+#, fuzzy, c-format
+msgid "cannot create hash table"
+msgstr "%P%F: Falló al crear la tabla de dispersión\n"
+
+#: ../src/ar.c:481
+#: ../src/ar.c:925
+#: ../src/ar.c:1127
+#, fuzzy, c-format
+msgid "cannot insert into hash table"
+msgstr "se inserta \"%s\" en la tabla de de dispersión de cadenas: %s"
+
+#: ../src/ar.c:489
+#: ../src/ranlib.c:176
+#, fuzzy, c-format
+msgid "cannot stat '%s'"
+msgstr ""
+" Imposible identificar \"%s\"\n"
+" %s "
+
+#: ../src/ar.c:585
+#, fuzzy, c-format
+msgid "cannot read content of %s: %s"
+msgstr "no se puede leer la cabecera"
+
+#: ../src/ar.c:629
+#, fuzzy, c-format
+msgid "cannot open %.*s"
+msgstr ""
+" Imposible abrir \"%s\"\n"
+" %s "
+
+#: ../src/ar.c:651
+#, fuzzy, c-format
+msgid "failed to write %s"
+msgstr "Falló al escribir %s."
+
+#: ../src/ar.c:663
+#, fuzzy, c-format
+msgid "cannot change mode of %s"
+msgstr "%s: No se puede cambiar el modo a %s"
+
+#: ../src/ar.c:679
+#, fuzzy, c-format
+msgid "cannot change modification time of %s"
+msgstr "# La fecha de modificación no se comprobó."
+
+#: ../src/ar.c:726
+#, fuzzy, c-format
+msgid "cannot rename temporary file to %.*s"
+msgstr "No se pudo abrir archivo temporal."
+
+#: ../src/ar.c:762
+#: ../src/ar.c:1010
+#: ../src/ar.c:1408
+#: ../src/ranlib.c:250
+#, fuzzy, c-format
+msgid "cannot create new file"
+msgstr "%s: no se puede crear un nuevo fichero de preferencias predeterminadas\n"
+
+#: ../src/ar.c:1209
+#, fuzzy, c-format
+msgid "position member %s not found"
+msgstr "no se encuentra los datos miembros C++ en el contenedor"
+
+#: ../src/ar.c:1219
+#, fuzzy, c-format
+msgid "%s: no entry %s in archive!\n"
+msgstr "No hay una entrada %s en el archivo.\n"
+
+#: ../src/ar.c:1248
+#: ../src/ldgeneric.c:519
+#: ../src/objdump.c:257
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "no se puede abrir %s"
+
+#: ../src/ar.c:1253
+#, fuzzy, c-format
+msgid "cannot stat %s"
+msgstr "no se puede efectuar `stat' sobre %s"
+
+#: ../src/ar.c:1259
+#, fuzzy, c-format
+msgid "%s is no regular file"
+msgstr " %s no es un archivo ordinario "
+
+#: ../src/ar.c:1272
+#, fuzzy, c-format
+msgid "cannot get ELF descriptor for %s: %s\n"
+msgstr " Imposible obtener tamaño/permisos para %s "
+
+#: ../src/ar.c:1291
+#, fuzzy, c-format
+msgid "cannot read %s: %s"
+msgstr "%s: No se pudo leer %s (%s).\n"
+
+#. The archive is too big.
+#: ../src/arlib.c:215
+#, fuzzy, c-format
+msgid "the archive '%s' is too large"
+msgstr " El archivo %s es demasiado grande "
+
+#: ../src/arlib.c:228
+#, fuzzy, c-format
+msgid "cannot read ELF header of %s(%s): %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/nm.c:74
+#: ../src/readelf.c:72
+#: ../src/strip.c:72
+#, fuzzy
+msgid "Output selection:"
+msgstr "Selección del resultado:"
+
+#: ../src/nm.c:75
+#, fuzzy
+msgid "Display debugger-only symbols"
+msgstr "Mostrar sólo cuando el adaptador esté presente"
+
+#: ../src/nm.c:76
+#, fuzzy
+msgid "Display only defined symbols"
+msgstr "Extrañamente sólo hay %d particiones definidas.\n"
+
+#: ../src/nm.c:79
+msgid "Display dynamic symbols instead of normal symbols"
+msgstr "Muestra símbolos dinámicos en lugar de símbolos normales"
+
+#: ../src/nm.c:80
+#, fuzzy
+msgid "Display only external symbols"
+msgstr "Da a los símbolos externos un subrayado inicial"
+
+#: ../src/nm.c:81
+#, fuzzy
+msgid "Display only undefined symbols"
+msgstr "Mostrar sólo cuando el adaptador esté presente"
+
+#: ../src/nm.c:83
+msgid "Include index for symbols from archive members"
+msgstr "Incluye índices para símbolos desde miembros de archivo"
+
+#: ../src/nm.c:85
+#: ../src/size.c:66
+#, fuzzy
+msgid "Output format:"
+msgstr "Formato de salida:\n"
+
+#: ../src/nm.c:87
+msgid "Print name of the input file before every symbol"
+msgstr "Imprimir el nombre del archivo de entrada antes de cada símbolo"
+
+#: ../src/nm.c:90
+msgid "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The default is `sysv'"
+msgstr "Use el formato de salida FORMAT. FORMAT puede ser o bien `bsd', o `sysv', o `posix'. El establecido por defecto es `sysv'"
+
+#: ../src/nm.c:92
+#, fuzzy
+msgid "Same as --format=bsd"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/nm.c:93
+#, fuzzy
+msgid "Same as --format=posix"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/nm.c:94
+#: ../src/size.c:72
+msgid "Use RADIX for printing symbol values"
+msgstr "Utilice RADIX para imprimir valores de símbolo"
+
+#: ../src/nm.c:95
+#, fuzzy
+msgid "Mark weak symbols"
+msgstr "Símbolos musicales bizantinos"
+
+#: ../src/nm.c:96
+#, fuzzy
+msgid "Print size of defined symbols"
+msgstr "_Ignorar el área de impresión definido"
+
+#: ../src/nm.c:98
+#: ../src/size.c:80
+#: ../src/strip.c:77
+#: ../src/unstrip.c:80
+#, fuzzy
+msgid "Output options:"
+msgstr "las especificaciones del estilo de salida son conflictivas"
+
+#: ../src/nm.c:99
+#, fuzzy
+msgid "Sort symbols numerically by address"
+msgstr "Ordena los símbolos comunes por tamaño"
+
+#: ../src/nm.c:101
+#, fuzzy
+msgid "Do not sort the symbols"
+msgstr "%P%X: no se pueden leer símbolos: %E\n"
+
+#: ../src/nm.c:102
+#, fuzzy
+msgid "Reverse the sense of the sort"
+msgstr "_Invertir orden"
+
+#: ../src/nm.c:103
+#: ../src/addr2line.c:75
+#: ../src/findtextrel.c:75
+#: ../src/elfcmp.c:75
+#: ../src/strings.c:83
+#, fuzzy
+msgid "Miscellaneous:"
+msgstr "Misceláneos"
+
+#. Short description of program.
+#: ../src/nm.c:108
+#, fuzzy
+msgid "List symbols from FILEs (a.out by default)."
+msgstr "Lista de símbolos en [fichero(s)] (a.out por defecto).\n"
+
+#. Strings for arguments in help texts.
+#: ../src/nm.c:111
+#: ../src/size.c:92
+#: ../src/strip.c:96
+#: ../src/findtextrel.c:84
+#: ../src/strings.c:92
+#: ../src/objdump.c:80
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[FICHERO...]"
+
+#: ../src/nm.c:136
+#: ../src/size.c:117
+#: ../src/strip.c:120
+#: ../src/objdump.c:105
+#, fuzzy, c-format
+msgid "%s: INTERNAL ERROR %d (%s-%s): %s"
+msgstr "error interno %s"
+
+#: ../src/nm.c:363
+#: ../src/size.c:301
+#: ../src/strip.c:432
+#: ../src/strip.c:467
+#: ../src/ldgeneric.c:1767
+#: ../src/ldgeneric.c:4257
+#: ../src/findtextrel.c:229
+#: ../src/elfcmp.c:574
+#: ../src/ranlib.c:169
+#: ../src/strings.c:183
+#: ../src/unstrip.c:1899
+#: ../src/unstrip.c:1928
+#, fuzzy, c-format
+msgid "cannot open '%s'"
+msgstr ""
+" Imposible abrir \"%s\"\n"
+" %s "
+
+#: ../src/nm.c:380
+#: ../src/nm.c:392
+#: ../src/size.c:317
+#: ../src/size.c:326
+#: ../src/size.c:337
+#: ../src/strip.c:1815
+#, fuzzy, c-format
+msgid "while closing '%s'"
+msgstr "error al cerrar la entrada `%s'"
+
+#: ../src/nm.c:402
+#: ../src/strip.c:358
+#: ../src/objdump.c:296
+#, fuzzy, c-format
+msgid "%s: File format not recognized"
+msgstr "No se reconoce el formato del fichero"
+
+#. Note: 0 is no valid offset.
+#: ../src/nm.c:442
+#, fuzzy
+msgid ""
+"\n"
+"Archive index:"
+msgstr ""
+"\n"
+"Índice del archivo:\n"
+
+#: ../src/nm.c:451
+#, fuzzy, c-format
+msgid "invalid offset %zu for symbol %s"
+msgstr "%s: DSO inválido para la definición del símbolo `%s'"
+
+#: ../src/nm.c:456
+#, fuzzy, c-format
+msgid "%s in %s\n"
+msgstr "Mí_n"
+
+#: ../src/nm.c:464
+#, c-format
+msgid "cannot reset archive offset to beginning"
+msgstr "imposible restablecer archivo compensar al inicio"
+
+#: ../src/nm.c:488
+#: ../src/objdump.c:344
+#, fuzzy, c-format
+msgid "%s%s%s: file format not recognized"
+msgstr "No se reconoce el formato del fichero"
+
+#: ../src/nm.c:700
+#, fuzzy, c-format
+msgid "cannot create search tree"
+msgstr "No se puede crear el componente de búsqueda"
+
+#: ../src/nm.c:740
+#: ../src/nm.c:1002
+#: ../src/readelf.c:850
+#: ../src/readelf.c:993
+#: ../src/readelf.c:1134
+#: ../src/readelf.c:1316
+#: ../src/readelf.c:1514
+#: ../src/readelf.c:1659
+#: ../src/readelf.c:1827
+#: ../src/readelf.c:2081
+#: ../src/readelf.c:2147
+#: ../src/readelf.c:2225
+#: ../src/readelf.c:2722
+#: ../src/readelf.c:2758
+#: ../src/readelf.c:2820
+#: ../src/readelf.c:6312
+#: ../src/readelf.c:7178
+#: ../src/readelf.c:7323
+#: ../src/readelf.c:7392
+#: ../src/size.c:425
+#: ../src/size.c:499
+#: ../src/strip.c:482
+#: ../src/objdump.c:744
+#, fuzzy, c-format
+msgid "cannot get section header string table index"
+msgstr "no se puede obtener índice de la tabla de la cadena del encabezado de sección"
+
+#: ../src/nm.c:766
+#, fuzzy, c-format
+msgid ""
+"\n"
+"\n"
+"Symbols from %s:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Símbolos de %s:\n"
+"\n"
+
+#: ../src/nm.c:768
+#, fuzzy, c-format
+msgid ""
+"\n"
+"\n"
+"Symbols from %s[%s]:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Símbolos de %s[%s]:\n"
+"\n"
+
+#. The header line.
+#: ../src/nm.c:771
+#, fuzzy, c-format
+msgid ""
+"%*s%-*s %-*s Class Type %-*s %*s Section\n"
+"\n"
+msgstr "no se reconoce el tipo de sección"
+
+#: ../src/nm.c:1012
+#, c-format
+msgid "%s: entry size in section `%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:1016
+#, fuzzy, c-format
+msgid "%s: size of section `%s' is not multiple of entry size"
+msgstr "Aviso, el tamaño de la sección .pdata (%ld) no es un múltiplo de %d\n"
+
+#. XXX Add machine specific object file types.
+#: ../src/nm.c:1255
+#, fuzzy, c-format
+msgid "%s%s%s%s: Invalid operation"
+msgstr "Operación inválida"
+
+#: ../src/nm.c:1312
+#, fuzzy, c-format
+msgid "%s%s%s: no symbols"
+msgstr "No hay símbolos"
+
+#: ../src/readelf.c:73
+#, fuzzy
+msgid "Equivalent to: -e -h -l"
+msgstr "Copiando «%B» a «%B»"
+
+#: ../src/readelf.c:74
+#, fuzzy
+msgid "Display the dynamic segment"
+msgstr " [los símbolos dinámicos utilizan índices de segmento]"
+
+#: ../src/readelf.c:75
+#, fuzzy
+msgid "Display the ELF file header"
+msgstr "encabezado del fichero BFD versión %s\n"
+
+#: ../src/readelf.c:77
+#, fuzzy
+msgid "Display histogram of bucket list lengths"
+msgstr "Muestra histograma de la longitud de las listas de almacenamiento"
+
+#: ../src/readelf.c:78
+#, fuzzy
+msgid "Display the program headers"
+msgstr ""
+"\n"
+" Inicio de encabezados de programa: "
+
+#: ../src/readelf.c:80
+#, fuzzy
+msgid "Display relocations"
+msgstr "pantalla vnc"
+
+#: ../src/readelf.c:81
+#, fuzzy
+msgid "Display the sections' header"
+msgstr ""
+"\n"
+"Encabezado Auxiliar de Ejecución\n"
+
+#: ../src/readelf.c:83
+#, fuzzy
+msgid "Display the symbol table"
+msgstr " [tabla de símbolos ordenados]"
+
+#: ../src/readelf.c:84
+#, fuzzy
+msgid "Display versioning information"
+msgstr "Mostrar la información de la versión."
+
+#: ../src/readelf.c:86
+#, fuzzy
+msgid "Display DWARF section content. SECTION can be one of abbrev, aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, or exception"
+msgstr "Muestra el contenido de la seccion DWARF. SECTION puede ser algo de lo siguiente: abbrev, aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, or exception"
+
+#: ../src/readelf.c:89
+#, fuzzy
+msgid "Display the core notes"
+msgstr "_Ocultar notas"
+
+#: ../src/readelf.c:91
+msgid "Display architecture specific information (if any)"
+msgstr "Muestra información específica de la arquitectura (si es que hubiera)"
+
+#: ../src/readelf.c:93
+msgid "Dump the uninterpreted contents of SECTION, by number or name"
+msgstr "Descarga los contenidos no interpretados de SECTION, por nombre o número"
+
+#: ../src/readelf.c:95
+#, fuzzy
+msgid "Print string contents of sections"
+msgstr "Muestra una tabla del contenido de la entrada"
+
+#: ../src/readelf.c:98
+#, fuzzy
+msgid "Display the symbol index of an archive"
+msgstr " [s] - crea un índice del archivo (cf. ranlib)\n"
+
+#: ../src/readelf.c:99
+#, fuzzy
+msgid "Display sections for exception handling"
+msgstr "Sólo genera tablas de desenredo para manejo de excepciones"
+
+#: ../src/readelf.c:102
+#, fuzzy
+msgid "Output control:"
+msgstr "Control del resultado:"
+
+#. Short description of program.
+#: ../src/readelf.c:108
+msgid "Print information from ELF file in human-readable form."
+msgstr "Imprime información desde el archivo ELF en una forma comprensible para los seres humanos. "
+
+#. Strings for arguments in help texts.
+#: ../src/readelf.c:112
+#: ../src/elflint.c:85
+#, fuzzy
+msgid "FILE..."
+msgstr "&Archivo"
+
+#: ../src/readelf.c:259
+#: ../src/elflint.c:158
+#, fuzzy, c-format
+msgid "cannot open input file"
+msgstr "no se puede abrir el fichero de entrada"
+
+#: ../src/readelf.c:387
+#, fuzzy, c-format
+msgid "Unknown DWARF debug section `%s'.\n"
+msgstr ""
+"\n"
+"Volcado del contenido de depuración de la sección %s:\n"
+"\n"
+
+#: ../src/readelf.c:408
+#: ../src/elflint.c:222
+#, fuzzy
+msgid "Missing file name.\n"
+msgstr "Falta el nombre de archivo."
+
+#: ../src/readelf.c:413
+#: ../src/objdump.c:236
+#, fuzzy
+msgid "No operation specified.\n"
+msgstr "no se especificó una operación"
+
+#: ../src/readelf.c:448
+#, fuzzy, c-format
+msgid "cannot generate Elf descriptor: %s"
+msgstr "no se puede crear un descriptor interno"
+
+#: ../src/readelf.c:460
+#, c-format
+msgid "'%s' is not an archive, cannot print archive index"
+msgstr "'%s' no es un archivo, no se puede imprimir índice de archivo"
+
+#: ../src/readelf.c:465
+#, fuzzy, c-format
+msgid "error while closing Elf descriptor: %s"
+msgstr "error al cerrar el fichero de salida"
+
+#: ../src/readelf.c:557
+#, fuzzy, c-format
+msgid "cannot stat input file"
+msgstr "stat() no pudo evaluar archivo de entrada \"%s\": %s"
+
+#: ../src/readelf.c:559
+#, fuzzy, c-format
+msgid "input file is empty"
+msgstr "ATENCIÓN `%s' es un fichero vacío\n"
+
+#: ../src/readelf.c:561
+#, fuzzy, c-format
+msgid "failed reading '%s': %s"
+msgstr "Falló al leer la sección %s de %s: %s"
+
+#: ../src/readelf.c:596
+#, fuzzy, c-format
+msgid "cannot read ELF header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/readelf.c:604
+#, fuzzy, c-format
+msgid "cannot create EBL handle"
+msgstr "Nautilus no puede manejar lugares %s:"
+
+#: ../src/readelf.c:611
+#: ../src/strip.c:542
+#: ../src/ldgeneric.c:661
+#: ../src/ldgeneric.c:1122
+#, fuzzy, c-format
+msgid "cannot determine number of sections: %s"
+msgstr "no se puede determinar el carácter de escape"
+
+#: ../src/readelf.c:697
+#, fuzzy
+msgid "NONE (None)"
+msgstr "NONE (Ninguno)"
+
+#: ../src/readelf.c:698
+#, fuzzy
+msgid "REL (Relocatable file)"
+msgstr "REL (Fichero reubicable)"
+
+#: ../src/readelf.c:699
+#, fuzzy
+msgid "EXEC (Executable file)"
+msgstr "EXEC (Fichero ejecutable)"
+
+#: ../src/readelf.c:700
+#, fuzzy
+msgid "DYN (Shared object file)"
+msgstr "DYN (Fichero objeto compartido)"
+
+#: ../src/readelf.c:701
+#, fuzzy
+msgid "CORE (Core file)"
+msgstr "CORE (Fichero núcleo)"
+
+#: ../src/readelf.c:706
+#, fuzzy, c-format
+msgid "OS Specific: (%x)\n"
+msgstr "<específico del SO>: %d"
+
+#. && e_type <= ET_HIPROC always true
+#: ../src/readelf.c:708
+#, fuzzy, c-format
+msgid "Processor Specific: (%x)\n"
+msgstr "<específico del procesador> %d:"
+
+#: ../src/readelf.c:718
+#, fuzzy
+msgid ""
+"ELF Header:\n"
+" Magic: "
+msgstr "cabecera ELF inválida"
+
+#: ../src/readelf.c:722
+#, fuzzy, c-format
+msgid ""
+"\n"
+" Class: %s\n"
+msgstr "_Clase:"
+
+#: ../src/readelf.c:727
+#, fuzzy, c-format
+msgid " Data: %s\n"
+msgstr " Datos: %s\n"
+
+#: ../src/readelf.c:733
+#, fuzzy, c-format
+msgid " Ident Version: %hhd %s\n"
+msgstr " <versión de EABI no reconocida>"
+
+#: ../src/readelf.c:735
+#: ../src/readelf.c:752
+#, fuzzy
+msgid "(current)"
+msgstr "Actual:"
+
+#: ../src/readelf.c:739
+#, fuzzy, c-format
+msgid " OS/ABI: %s\n"
+msgstr " OS/ABI: %s\n"
+
+#: ../src/readelf.c:742
+#, fuzzy, c-format
+msgid " ABI Version: %hhd\n"
+msgstr "No hubo coincidencia en el número de versión ABI %d.%d.x (necesitaba %d.%d.x)"
+
+#: ../src/readelf.c:745
+#, fuzzy
+msgid " Type: "
+msgstr "Tipo"
+
+#: ../src/readelf.c:748
+#, fuzzy, c-format
+msgid " Machine: %s\n"
+msgstr " Máquina: %s\n"
+
+#: ../src/readelf.c:750
+#, fuzzy, c-format
+msgid " Version: %d %s\n"
+msgstr " Versión: %d %s\n"
+
+#: ../src/readelf.c:754
+#, fuzzy, c-format
+msgid " Entry point address: %#<PRIx64>\n"
+msgstr "dirección IP punto-a-punto"
+
+#: ../src/readelf.c:757
+#, fuzzy, c-format
+msgid " Start of program headers: %<PRId64> %s\n"
+msgstr " Número de encabezados de programa: %ld\n"
+
+#: ../src/readelf.c:758
+#: ../src/readelf.c:761
+#, fuzzy
+msgid "(bytes into file)"
+msgstr " (bytes en el fichero)\n"
+
+#: ../src/readelf.c:760
+#, fuzzy, c-format
+msgid " Start of section headers: %<PRId64> %s\n"
+msgstr ""
+" (bytes en el fichero)\n"
+" Inicio de encabezados de sección: "
+
+#: ../src/readelf.c:763
+#, fuzzy, c-format
+msgid " Flags: %s\n"
+msgstr "Banderas"
+
+#: ../src/readelf.c:766
+#, fuzzy, c-format
+msgid " Size of this header: %<PRId16> %s\n"
+msgstr " Tamaño de este encabezado: %ld (bytes)\n"
+
+#: ../src/readelf.c:767
+#: ../src/readelf.c:770
+#: ../src/readelf.c:776
+#, fuzzy
+msgid "(bytes)"
+msgstr "%s (%s bytes)"
+
+#: ../src/readelf.c:769
+#, c-format
+msgid " Size of program header entries: %<PRId16> %s\n"
+msgstr " Tamaño de las entradas en el encabezado del programa: %<PRId16> %s\n"
+
+#: ../src/readelf.c:772
+#, c-format
+msgid " Number of program headers entries: %<PRId16>\n"
+msgstr " Cantidad de entradas en los encabezados del programa: %<PRId16>\n"
+
+#: ../src/readelf.c:775
+#, c-format
+msgid " Size of section header entries: %<PRId16> %s\n"
+msgstr " Tamaño de las entradas en el encabezado de sección: %<PRId16> %s\n"
+
+#: ../src/readelf.c:778
+#, c-format
+msgid " Number of section headers entries: %<PRId16>"
+msgstr " Cantidad de entradas en los encabezados de sección: %<PRId16>"
+
+#: ../src/readelf.c:785
+#, fuzzy, c-format
+msgid " (%<PRIu32> in [0].sh_size)"
+msgstr "El tamaño de fuente en puntos."
+
+#: ../src/readelf.c:788
+#: ../src/readelf.c:802
+#, fuzzy
+msgid " ([0] not available)"
+msgstr "no disponible: %s"
+
+#. We managed to get the zeroth section.
+#: ../src/readelf.c:798
+#, fuzzy, c-format
+msgid " (%<PRIu32> in [0].sh_link)"
+msgstr "%B: sh_link [%d] en la sección `%A', es incorrecto"
+
+#: ../src/readelf.c:806
+#, fuzzy, c-format
+msgid ""
+" Section header string table index: XINDEX%s\n"
+"\n"
+msgstr " Índice de tabla de cadenas de sección de encabezado: %ld"
+
+#: ../src/readelf.c:810
+#, fuzzy, c-format
+msgid ""
+" Section header string table index: %<PRId16>\n"
+"\n"
+msgstr " Índice de tabla de cadenas de sección de encabezado: %ld"
+
+#: ../src/readelf.c:842
+#, fuzzy, c-format
+msgid ""
+"There are %d section headers, starting at offset %#<PRIx64>:\n"
+"\n"
+msgstr "Hay %d encabezados de sección, comenzando en el desplazamiento: 0x%lx:\n"
+
+#: ../src/readelf.c:852
+#, fuzzy
+msgid "Section Headers:"
+msgstr "encabezados de sección"
+
+#: ../src/readelf.c:855
+#, fuzzy
+msgid "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al"
+msgstr " [Nr] Nombre Tipo Direc Desp Tam ES Opt En Inf Al\n"
+
+#: ../src/readelf.c:857
+#, fuzzy
+msgid "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al"
+msgstr " [Nr] Nombre Tipo Direc Desp Tam ES Opt En Inf Al\n"
+
+#: ../src/readelf.c:864
+#: ../src/readelf.c:1017
+#, fuzzy, c-format
+msgid "cannot get section: %s"
+msgstr "%s: no se puede encontrar la sección %s"
+
+#: ../src/readelf.c:871
+#: ../src/readelf.c:1025
+#: ../src/readelf.c:7343
+#: ../src/unstrip.c:352
+#: ../src/unstrip.c:376
+#: ../src/unstrip.c:426
+#: ../src/unstrip.c:535
+#: ../src/unstrip.c:552
+#: ../src/unstrip.c:590
+#: ../src/unstrip.c:788
+#: ../src/unstrip.c:1056
+#: ../src/unstrip.c:1243
+#: ../src/unstrip.c:1304
+#: ../src/unstrip.c:1426
+#: ../src/unstrip.c:1479
+#: ../src/unstrip.c:1587
+#: ../src/unstrip.c:1777
+#, fuzzy, c-format
+msgid "cannot get section header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/readelf.c:929
+#, fuzzy
+msgid "Program Headers:"
+msgstr "encabezados de programa"
+
+#: ../src/readelf.c:931
+#, fuzzy
+msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
+msgstr " Tipo Desplaz DirVirt DirFísica TamFich TamMem Opt Alin\n"
+
+#: ../src/readelf.c:934
+#, fuzzy
+msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
+msgstr " Tipo Desplaz DirVirt DirFísica TamFich TamMem Opt Alin\n"
+
+#: ../src/readelf.c:974
+#, fuzzy, c-format
+msgid "\t[Requesting program interpreter: %s]\n"
+msgstr ""
+"\n"
+" [Solicitando el programa intérprete: %s]"
+
+#: ../src/readelf.c:995
+#, fuzzy
+msgid ""
+"\n"
+" Section to Segment mapping:\n"
+" Segment Sections..."
+msgstr "secciones múltiples remapeadas a la sección de salida %s"
+
+#: ../src/readelf.c:1006
+#: ../src/unstrip.c:1823
+#: ../src/unstrip.c:1862
+#: ../src/unstrip.c:1869
+#, fuzzy, c-format
+msgid "cannot get program header: %s"
+msgstr "no se puede asignar memoria para la cabecera del programa"
+
+#: ../src/readelf.c:1140
+#, c-format
+msgid ""
+"\n"
+"COMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n"
+msgid_plural ""
+"\n"
+"COMDAT section group [%2zu] '%s' with signature '%s' contains %zu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1145
+#, c-format
+msgid ""
+"\n"
+"Section group [%2zu] '%s' with signature '%s' contains %zu entry:\n"
+msgid_plural ""
+"\n"
+"Section group [%2zu] '%s' with signature '%s' contains %zu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1153
+#, fuzzy
+msgid "<INVALID SYMBOL>"
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../src/readelf.c:1167
+#, fuzzy
+msgid "<INVALID SECTION>"
+msgstr "%P%F: opción de ordenado de sección inválida: %s\n"
+
+#: ../src/readelf.c:1318
+#, c-format
+msgid ""
+"\n"
+"Dynamic segment contains %lu entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Dynamic segment contains %lu entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1330
+#, fuzzy
+msgid " Type Value\n"
+msgstr " Marca Tipo Nombre/Valor\n"
+
+#: ../src/readelf.c:1354
+#, fuzzy, c-format
+msgid "Shared library: [%s]\n"
+msgstr "Biblioteca compartida: [%s]"
+
+#: ../src/readelf.c:1359
+#, fuzzy, c-format
+msgid "Library soname: [%s]\n"
+msgstr "Nombre-so de la biblioteca: [%s]"
+
+#: ../src/readelf.c:1364
+#, fuzzy, c-format
+msgid "Library rpath: [%s]\n"
+msgstr "Rpath de la biblioteca: [%s]"
+
+#: ../src/readelf.c:1369
+#, fuzzy, c-format
+msgid "Library runpath: [%s]\n"
+msgstr "Ruta de ejecución de la biblioteca: [%s]"
+
+#: ../src/readelf.c:1389
+#, fuzzy, c-format
+msgid "%<PRId64> (bytes)\n"
+msgstr " bytes de memoria"
+
+#: ../src/readelf.c:1499
+#: ../src/readelf.c:1644
+#, c-format
+msgid ""
+"\n"
+"Invalid symbol table at offset %#0<PRIx64>\n"
+msgstr ""
+
+#: ../src/readelf.c:1517
+#: ../src/readelf.c:1661
+#, c-format
+msgid ""
+"\n"
+"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0<PRIx64> contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0<PRIx64> contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#. The .rel.dyn section does not refer to a specific section but
+#. instead of section index zero. Do not try to print a section
+#. name.
+#: ../src/readelf.c:1532
+#, c-format
+msgid ""
+"\n"
+"Relocation section [%2u] '%s' at offset %#0<PRIx64> contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Relocation section [%2u] '%s' at offset %#0<PRIx64> contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1542
+#, fuzzy
+msgid " Offset Type Value Name\n"
+msgstr " Desplaz Info Tipo Valor Símbolo Nombre Símbolo\n"
+
+#: ../src/readelf.c:1544
+#, fuzzy
+msgid " Offset Type Value Name\n"
+msgstr " Desplaz Info Tipo Valor Símbolo Nombre Símbolo\n"
+
+#: ../src/readelf.c:1568
+#: ../src/readelf.c:1580
+#: ../src/readelf.c:1598
+#: ../src/readelf.c:1610
+#: ../src/readelf.c:1700
+#: ../src/readelf.c:1713
+#: ../src/readelf.c:1732
+#: ../src/readelf.c:1745
+#, fuzzy
+msgid "<INVALID RELOC>"
+msgstr "%F%P: declaración inválida de reubicación\n"
+
+#: ../src/readelf.c:1569
+#: ../src/readelf.c:1701
+#: ../src/objdump.c:379
+#, fuzzy
+msgid "INVALID SYMBOL"
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../src/readelf.c:1599
+#: ../src/readelf.c:1733
+#: ../src/objdump.c:394
+#, fuzzy
+msgid "INVALID SECTION"
+msgstr "%P%F: opción de ordenado de sección inválida: %s\n"
+
+#: ../src/readelf.c:1673
+#, fuzzy
+msgid " Offset Type Value Addend Name\n"
+msgstr " Desplaz Info Tipo Valor Símbolo Nombre Símbolo + Adend\n"
+
+#: ../src/readelf.c:1675
+#, fuzzy
+msgid " Offset Type Value Addend Name\n"
+msgstr " Desplaz Info Tipo Valor Símbolo Nombre Símbolo + Adend\n"
+
+#: ../src/readelf.c:1834
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Symbol table [%2u] '%s' contains %u entry:\n"
+msgid_plural ""
+"\n"
+"Symbol table [%2u] '%s' contains %u entries:\n"
+msgstr[0] ""
+"\n"
+"La tabla de símbolos '%s' contiene %lu entradas:\n"
+msgstr[1] ""
+
+#: ../src/readelf.c:1840
+#, c-format
+msgid " %lu local symbol String table: [%2u] '%s'\n"
+msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:1850
+#, fuzzy
+msgid " Num: Value Size Type Bind Vis Ndx Name\n"
+msgstr " Num: Valor Tam Tipo Unión Vis Nombre Ind\n"
+
+#: ../src/readelf.c:1852
+#, fuzzy
+msgid " Num: Value Size Type Bind Vis Ndx Name\n"
+msgstr " Num: Valor Tam Tipo Unión Vis Nombre Ind\n"
+
+#: ../src/readelf.c:1872
+#, c-format
+msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
+msgstr ""
+
+#: ../src/readelf.c:1960
+#, fuzzy, c-format
+msgid "bad dynamic symbol"
+msgstr "símbolo dinámico erróneo\n"
+
+#: ../src/readelf.c:2042
+#, fuzzy
+msgid "none"
+msgstr "nada"
+
+#: ../src/readelf.c:2059
+#, fuzzy
+msgid "| <unknown>"
+msgstr "Desconocido"
+
+#: ../src/readelf.c:2084
+#, c-format
+msgid ""
+"\n"
+"Version needs section [%2u] '%s' contains %d entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Version needs section [%2u] '%s' contains %d entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2107
+#, c-format
+msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
+msgstr ""
+
+#: ../src/readelf.c:2120
+#, c-format
+msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
+msgstr ""
+
+#: ../src/readelf.c:2151
+#, c-format
+msgid ""
+"\n"
+"Version definition section [%2u] '%s' contains %d entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Version definition section [%2u] '%s' contains %d entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2181
+#, c-format
+msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:2196
+#, fuzzy, c-format
+msgid " %#06x: Parent %d: %s\n"
+msgstr " %#06x: Padre %d: %s\n"
+
+#: ../src/readelf.c:2428
+#, c-format
+msgid ""
+"\n"
+"Version symbols section [%2u] '%s' contains %d entry:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'"
+msgid_plural ""
+"\n"
+"Version symbols section [%2u] '%s' contains %d entries:\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2458
+#, fuzzy
+msgid " 0 *local* "
+msgstr "Local"
+
+#: ../src/readelf.c:2463
+#, fuzzy
+msgid " 1 *global* "
+msgstr " 1 (*global*) "
+
+#: ../src/readelf.c:2494
+#, c-format
+msgid ""
+"\n"
+"Histogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgid_plural ""
+"\n"
+"Histogram for bucket list length in section [%2u] '%s' (total of %d buckets):\n"
+" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2517
+#, fuzzy, c-format
+msgid " Length Number % of total Coverage\n"
+msgstr " Long Número %% del total Cobertura\n"
+
+#: ../src/readelf.c:2519
+#, fuzzy, c-format
+msgid " 0 %6<PRIu32> %5.1f%%\n"
+msgstr "%.1f km"
+
+#: ../src/readelf.c:2526
+#, fuzzy, c-format
+msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
+msgstr "Fuerza Beaufort %.1f"
+
+#: ../src/readelf.c:2539
+#, c-format
+msgid ""
+" Average number of tests: successful lookup: %f\n"
+" unsuccessful lookup: %f\n"
+msgstr ""
+
+#: ../src/readelf.c:2557
+#: ../src/readelf.c:2599
+#: ../src/readelf.c:2640
+#, fuzzy, c-format
+msgid "cannot get data for section %d: %s"
+msgstr ""
+"\n"
+"No se puede obtener el ontenido de la sección '%s'.\n"
+
+#: ../src/readelf.c:2694
+#, c-format
+msgid ""
+" Symbol Bias: %u\n"
+" Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n"
+msgstr ""
+
+#: ../src/readelf.c:2768
+#, c-format
+msgid ""
+"\n"
+"Library list section [%2zu] '%s' at offset %#0<PRIx64> contains %d entry:\n"
+msgid_plural ""
+"\n"
+"Library list section [%2zu] '%s' at offset %#0<PRIx64> contains %d entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:2782
+msgid " Library Time Stamp Checksum Version Flags"
+msgstr ""
+
+#: ../src/readelf.c:2832
+#, c-format
+msgid ""
+"\n"
+"Object attributes section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:2848
+#, fuzzy
+msgid " Owner Size\n"
+msgstr " Prop\t\tTamaño datos\tDescripción\n"
+
+#: ../src/readelf.c:2874
+#, fuzzy, c-format
+msgid " %-13s %4<PRIu32>\n"
+msgstr "Pedido de servidor desconocida %<PRIu32>"
+
+#: ../src/readelf.c:2906
+#, fuzzy, c-format
+msgid " %-4u %12<PRIu32>\n"
+msgstr "12 x 11 in"
+
+#. Tag_File
+#: ../src/readelf.c:2911
+#, fuzzy, c-format
+msgid " File: %11<PRIu32>\n"
+msgstr "10 x 11 in"
+
+#: ../src/readelf.c:2946
+#, c-format
+msgid " %s: %<PRId64>, %s\n"
+msgstr " %s: %<PRId64>, %s\n"
+
+#: ../src/readelf.c:2949
+#, c-format
+msgid " %s: %<PRId64>\n"
+msgstr " %s: %<PRId64>\n"
+
+#: ../src/readelf.c:2952
+#, c-format
+msgid " %s: %s\n"
+msgstr " %s: %s\n"
+
+#: ../src/readelf.c:2959
+#, c-format
+msgid " %u: %<PRId64>\n"
+msgstr " %u: %<PRId64>\n"
+
+#: ../src/readelf.c:2962
+#, c-format
+msgid " %u: %s\n"
+msgstr " %u: %s\n"
+
+#: ../src/readelf.c:2997
+#, c-format
+msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>"
+msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>"
+
+#: ../src/readelf.c:3000
+#, c-format
+msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>"
+msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>"
+
+#: ../src/readelf.c:3005
+#, c-format
+msgid "%#<PRIx64> <%s+%#<PRIx64>>"
+msgstr "%#<PRIx64> <%s+%#<PRIx64>>"
+
+#: ../src/readelf.c:3008
+#, c-format
+msgid "%#0*<PRIx64> <%s+%#<PRIx64>>"
+msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>"
+
+#: ../src/readelf.c:3014
+#, c-format
+msgid "%s+%#<PRIx64> <%s>"
+msgstr "%s+%#<PRIx64> <%s>"
+
+#: ../src/readelf.c:3017
+#, c-format
+msgid "%s+%#0*<PRIx64> <%s>"
+msgstr "%s+%#0*<PRIx64> <%s>"
+
+#: ../src/readelf.c:3021
+#, c-format
+msgid "%#<PRIx64> <%s>"
+msgstr "%#<PRIx64> <%s>"
+
+#: ../src/readelf.c:3024
+#, c-format
+msgid "%#0*<PRIx64> <%s>"
+msgstr "%#0*<PRIx64> <%s>"
+
+#: ../src/readelf.c:3029
+#, c-format
+msgid "%s+%#<PRIx64>"
+msgstr "%s+%#<PRIx64>"
+
+#: ../src/readelf.c:3032
+#, c-format
+msgid "%s+%#0*<PRIx64>"
+msgstr "%s+%#0*<PRIx64>"
+
+#: ../src/readelf.c:3140
+#, fuzzy, c-format
+msgid "unknown tag %hx"
+msgstr "línea %d: etiqueta desconocida: %s\n"
+
+#: ../src/readelf.c:3142
+#, fuzzy, c-format
+msgid "unknown user tag %hx"
+msgstr "Valor TAG desconocido: %lx"
+
+#: ../src/readelf.c:3352
+#, fuzzy, c-format
+msgid "unknown attribute %hx"
+msgstr "atributo de sección '%c' desconocido"
+
+#: ../src/readelf.c:3355
+#, fuzzy, c-format
+msgid "unknown user attribute %hx"
+msgstr "Nombres de atributos de usuario predeterminados:\n"
+
+#: ../src/readelf.c:3401
+#, fuzzy, c-format
+msgid "unknown form %<PRIx64>"
+msgstr "Valor FORM desconocido: %lx"
+
+#: ../src/readelf.c:4017
+#, fuzzy, c-format
+msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n"
+msgstr "Fichero truncado"
+
+#: ../src/readelf.c:4030
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+" [ Code]\n"
+msgstr ""
+
+#: ../src/readelf.c:4037
+#, c-format
+msgid ""
+"\n"
+"Abbreviation section at offset %<PRIu64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:4050
+#, fuzzy, c-format
+msgid " *** error while reading abbreviation: %s\n"
+msgstr "Error al leer el disco."
+
+#: ../src/readelf.c:4066
+#, c-format
+msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
+msgstr ""
+
+#: ../src/readelf.c:4069
+#, fuzzy
+msgid "yes"
+msgstr "sí"
+
+#: ../src/readelf.c:4069
+#, fuzzy
+msgid "no"
+msgstr "no"
+
+#: ../src/readelf.c:4105
+#, c-format
+msgid "cannot get .debug_aranges content: %s"
+msgstr "no se ha podido obtener contenido de .debug_aranges: %s"
+
+#: ../src/readelf.c:4110
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64> contains %zu entry:\n"
+msgid_plural ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64> contains %zu entries:\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:4140
+#, c-format
+msgid " [%*zu] ???\n"
+msgstr " [%*zu] ???\n"
+
+#: ../src/readelf.c:4142
+#, c-format
+msgid " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
+msgstr ""
+
+#: ../src/readelf.c:4161
+#, c-format
+msgid "cannot get .debug_ranges content: %s"
+msgstr "no se ha podido obtener contenido de .debug_ranges: %s"
+
+#: ../src/readelf.c:4166
+#: ../src/readelf.c:4623
+#: ../src/readelf.c:5272
+#: ../src/readelf.c:5717
+#: ../src/readelf.c:5812
+#: ../src/readelf.c:5984
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:4180
+#: ../src/readelf.c:5731
+#, fuzzy, c-format
+msgid " [%6tx] <INVALID DATA>\n"
+msgstr "%F%P: declaración inválida de datos\n"
+
+#: ../src/readelf.c:4202
+#: ../src/readelf.c:5753
+#, fuzzy, c-format
+msgid " [%6tx] base address %s\n"
+msgstr " %8.8lx %8.8lx %8.8lx (dirección base)\n"
+
+#. We have an address range entry.
+#. First address range entry in a list.
+#: ../src/readelf.c:4213
+#, c-format
+msgid " [%6tx] %s..%s\n"
+msgstr " [%6tx] %s..%s\n"
+
+#: ../src/readelf.c:4215
+#, c-format
+msgid " %s..%s\n"
+msgstr " %s..%s\n"
+
+#: ../src/readelf.c:4612
+#: ../src/readelf.c:6050
+#: ../src/readelf.c:6152
+#, fuzzy, c-format
+msgid "cannot get %s content: %s"
+msgstr "No se puede obtener el nombre de la máquina (hostname)"
+
+#: ../src/readelf.c:4619
+#, c-format
+msgid ""
+"\n"
+"Call frame information section [%2zu] '%s' at offset %#<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:4646
+#: ../src/readelf.c:5306
+#, fuzzy, c-format
+msgid "invalid data in section [%zu] '%s'"
+msgstr "La sección BOUNDS en el archivo no es válida."
+
+#: ../src/readelf.c:4668
+#, fuzzy, c-format
+msgid ""
+"\n"
+" [%6tx] Zero terminator\n"
+msgstr "terminador de linea desconocido"
+
+#: ../src/readelf.c:4746
+#, fuzzy
+msgid "FDE address encoding: "
+msgstr "Codificación en una sola pasada"
+
+#: ../src/readelf.c:4752
+#, fuzzy
+msgid "LSDA pointer encoding: "
+msgstr "Codificación en una sola pasada"
+
+#: ../src/readelf.c:4797
+#, fuzzy, c-format
+msgid "invalid augmentation encoding"
+msgstr "especificada una codificación inválida"
+
+#: ../src/readelf.c:4868
+#, fuzzy, c-format
+msgid " (offset: %#<PRIx64>)"
+msgstr "Desplazamiento horizontal"
+
+#: ../src/readelf.c:4875
+#, fuzzy, c-format
+msgid " (end offset: %#<PRIx64>)"
+msgstr " Desplaz Inicio Fin\n"
+
+#: ../src/readelf.c:4902
+#, fuzzy, c-format
+msgid " %-26sLSDA pointer: %#<PRIx64>\n"
+msgstr "\tNombre de la Tabla de Punteros \t\t"
+
+#: ../src/readelf.c:4948
+#, fuzzy, c-format
+msgid "cannot get attribute code: %s"
+msgstr "No se puede inicializar el código de libbonoboui"
+
+#: ../src/readelf.c:4956
+#, fuzzy, c-format
+msgid "cannot get attribute form: %s"
+msgstr "No se puede añadir el atributo SMIMEEncKeyPrefs"
+
+#: ../src/readelf.c:4969
+#, fuzzy, c-format
+msgid "cannot get attribute value: %s"
+msgstr "No se puede añadir el atributo SMIMEEncKeyPrefs"
+
+#: ../src/readelf.c:5151
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+" [Offset]\n"
+msgstr ""
+
+#: ../src/readelf.c:5176
+#, c-format
+msgid ""
+" Compilation unit at offset %<PRIu64>:\n"
+" Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: %<PRIu8>, Offset size: %<PRIu8>\n"
+msgstr ""
+
+#: ../src/readelf.c:5194
+#, fuzzy, c-format
+msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s"
+msgstr "no se ha podido obtener DIE en offset %<PRIu64> en la sección '%s': %s"
+
+#: ../src/readelf.c:5205
+#, fuzzy, c-format
+msgid "cannot get DIE offset: %s"
+msgstr "%s: no se puede desplazar a la posición %s"
+
+#: ../src/readelf.c:5213
+#, fuzzy, c-format
+msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s"
+msgstr "no se ha podido obtener etiqueta de DIE en offset %<PRIu64> en la sección '%s': %s"
+
+#: ../src/readelf.c:5242
+#, fuzzy, c-format
+msgid "cannot get next DIE: %s\n"
+msgstr "No se puede obtener el nombre oficial de la máquina (hostname)"
+
+#: ../src/readelf.c:5249
+#, fuzzy, c-format
+msgid "cannot get next DIE: %s"
+msgstr "No se puede obtener el nombre oficial de la máquina (hostname)"
+
+#: ../src/readelf.c:5284
+#, fuzzy, c-format
+msgid "cannot get line data section data: %s"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/readelf.c:5297
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Table at offset %Zu:\n"
+msgstr "%s: error al escribir en el desplazamiento %s"
+
+#. Print what we got so far.
+#: ../src/readelf.c:5349
+#, c-format
+msgid ""
+"\n"
+" Length: %<PRIu64>\n"
+" DWARF version: %<PRIuFAST16>\n"
+" Prologue length: %<PRIu64>\n"
+" Minimum instruction length: %<PRIuFAST8>\n"
+" Initial value if '%s': %<PRIuFAST8>\n"
+" Line base: %<PRIdFAST8>\n"
+" Line range: %<PRIuFAST8>\n"
+" Opcode base: %<PRIuFAST8>\n"
+"\n"
+"Opcodes:\n"
+msgstr ""
+
+#: ../src/readelf.c:5368
+#, fuzzy, c-format
+msgid "invalid data at offset %tu in section [%zu] '%s'"
+msgstr "datos inválidos en offset %ty en la sección [%zu] '%s'"
+
+#: ../src/readelf.c:5383
+#, fuzzy, c-format
+msgid " [%*<PRIuFAST8>] %hhu argument\n"
+msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
+msgstr[0] "argumento inválido en"
+msgstr[1] ""
+
+#: ../src/readelf.c:5391
+#, fuzzy
+msgid ""
+"\n"
+"Directory table:"
+msgstr "Tabla del Cortafuegos:"
+
+#: ../src/readelf.c:5407
+msgid ""
+"\n"
+"File name table:\n"
+" Entry Dir Time Size Name"
+msgstr ""
+
+#: ../src/readelf.c:5436
+#, fuzzy
+msgid ""
+"\n"
+"Line number statements:"
+msgstr ""
+"\n"
+" Declaraciones de Número de Línea:\n"
+
+#: ../src/readelf.c:5497
+#, fuzzy, c-format
+msgid " special opcode %u: address+%u = %s, line%+d = %zu\n"
+msgstr " special opcode %u: address+%u = %s, line%+d = %zu\n"
+
+#: ../src/readelf.c:5517
+#, fuzzy, c-format
+msgid " extended opcode %u: "
+msgstr " Código de operación extendido %d: "
+
+#: ../src/readelf.c:5522
+#, fuzzy
+msgid "end of sequence"
+msgstr ""
+"Fin de la Secuencia\n"
+"\n"
+
+#: ../src/readelf.c:5537
+#, fuzzy, c-format
+msgid "set address to %s\n"
+msgstr "La dirección de la sección %s se estableció a "
+
+#: ../src/readelf.c:5558
+#, fuzzy, c-format
+msgid "define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
+msgstr "definir nuevo archivo: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
+
+#. Unknown, ignore it.
+#: ../src/readelf.c:5567
+#, fuzzy
+msgid "unknown opcode"
+msgstr "código de operación desconocido"
+
+#. Takes no argument.
+#: ../src/readelf.c:5579
+#, fuzzy
+msgid " copy"
+msgstr "&Copiar"
+
+#: ../src/readelf.c:5589
+#, fuzzy, c-format
+msgid "advance address by %u to %s\n"
+msgstr " Línea de Avance por %d para %d\n"
+
+#: ../src/readelf.c:5600
+#, fuzzy, c-format
+msgid " advance line by constant %d to %<PRId64>\n"
+msgstr " Avanzar el PC por la constante %lu a 0x%lx\n"
+
+#: ../src/readelf.c:5608
+#, fuzzy, c-format
+msgid " set file to %<PRIu64>\n"
+msgstr "No se pudieron cambiar permisos del archivo temporal"
+
+#: ../src/readelf.c:5618
+#, fuzzy, c-format
+msgid " set column to %<PRIu64>\n"
+msgstr " Establecer la columna a %lu\n"
+
+#: ../src/readelf.c:5625
+#, fuzzy, c-format
+msgid " set '%s' to %<PRIuFAST8>\n"
+msgstr "<I>%s</I> fijo los modos del usuario <I>%s</I> a: %s"
+
+#. Takes no argument.
+#: ../src/readelf.c:5631
+#, fuzzy
+msgid " set basic block flag"
+msgstr "\t%d registro de cuenta de bloques básicos\n"
+
+#: ../src/readelf.c:5641
+#, fuzzy, c-format
+msgid "advance address by constant %u to %s\n"
+msgstr " Avanzar el PC por %lu para %lx\n"
+
+#: ../src/readelf.c:5657
+#, c-format
+msgid "advance address by fixed value %u to %s\n"
+msgstr "dirección avanzada arreglando el valor %u a %s\n"
+
+#. Takes no argument.
+#: ../src/readelf.c:5666
+#, fuzzy
+msgid " set prologue end flag"
+msgstr " Establecer prologue_end a true\n"
+
+#. Takes no argument.
+#: ../src/readelf.c:5671
+#, fuzzy
+msgid " set epilogue begin flag"
+msgstr " Establecer epilogue_begin a true\n"
+
+#. This is a new opcode the generator but not we know about.
+#. Read the parameters associated with it but then discard
+#. everything. Read all the parameters for this opcode.
+#: ../src/readelf.c:5680
+#, c-format
+msgid " unknown opcode with %<PRIu8> parameter:"
+msgid_plural " unknown opcode with %<PRIu8> parameters:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/readelf.c:5712
+#, c-format
+msgid "cannot get .debug_loc content: %s"
+msgstr "no es posible obtener contenido de .debug_loc: %s"
+
+#. First entry in a list.
+#: ../src/readelf.c:5767
+#, c-format
+msgid " [%6tx] %s..%s"
+msgstr " [%6tx] %s..%s"
+
+#: ../src/readelf.c:5769
+#, c-format
+msgid " %s..%s"
+msgstr " %s..%s"
+
+#: ../src/readelf.c:5822
+#, c-format
+msgid "cannot get macro information section data: %s"
+msgstr "no es posible obtener datos de la sección de macro información: %s"
+
+#: ../src/readelf.c:5901
+#, c-format
+msgid "%*s*** non-terminated string at end of section"
+msgstr "%*s*** cadena no finalizada al final de la sección"
+
+#: ../src/readelf.c:5969
+#, fuzzy, c-format
+msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
+msgstr " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, nombre: %s\n"
+
+#: ../src/readelf.c:6008
+#, c-format
+msgid ""
+"\n"
+"DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n"
+" %*s String\n"
+msgstr ""
+
+#: ../src/readelf.c:6022
+#, fuzzy, c-format
+msgid " *** error while reading strings: %s\n"
+msgstr "Error al leer el disco."
+
+#: ../src/readelf.c:6042
+#, c-format
+msgid ""
+"\n"
+"Call frame search table section [%2zu] '.eh_frame_hdr':\n"
+msgstr ""
+
+#: ../src/readelf.c:6144
+#, c-format
+msgid ""
+"\n"
+"Exception handling table section [%2zu] '.gcc_except_table':\n"
+msgstr ""
+
+#: ../src/readelf.c:6167
+#, fuzzy, c-format
+msgid " LPStart encoding: %#x "
+msgstr ": codificación desconocida"
+
+#: ../src/readelf.c:6179
+#, fuzzy, c-format
+msgid " TType encoding: %#x "
+msgstr ": codificación desconocida"
+
+#: ../src/readelf.c:6193
+#, fuzzy, c-format
+msgid " Call site encoding: %#x "
+msgstr "Codificación en una sola pasada"
+
+#: ../src/readelf.c:6206
+#, fuzzy
+msgid ""
+"\n"
+" Call site table:"
+msgstr "[<tipo>:][<tabla>:]<nombre_de_archivo>"
+
+#: ../src/readelf.c:6220
+#, c-format
+msgid ""
+" [%4u] Call site start: %#<PRIx64>\n"
+" Call site length: %<PRIu64>\n"
+" Landing pad: %#<PRIx64>\n"
+" Action: %u\n"
+msgstr ""
+
+#: ../src/readelf.c:6280
+#, fuzzy, c-format
+msgid "invalid TType encoding"
+msgstr "especificada una codificación inválida"
+
+#: ../src/readelf.c:6303
+#, fuzzy, c-format
+msgid "cannot get debug context descriptor: %s"
+msgstr "no es posible obtener un descriptor de contexto de debug: %s"
+
+#: ../src/readelf.c:6438
+#: ../src/readelf.c:7016
+#, fuzzy, c-format
+msgid "cannot convert core note data: %s"
+msgstr "no es posible convertir datos de la nota proncipal: %s"
+
+#: ../src/readelf.c:6743
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%*s... <repeats %u more times> ..."
+msgstr "Mostrar horas del día."
+
+#: ../src/readelf.c:6785
+#, fuzzy, c-format
+msgid "unable to handle register number %d"
+msgstr "No se puede asignar un número de partición."
+
+#: ../src/readelf.c:6932
+#, fuzzy, c-format
+msgid "cannot get register info: %s"
+msgstr "No se pudo registrar el servicio"
+
+#: ../src/readelf.c:6956
+#, fuzzy, c-format
+msgid "cannot register info: %s"
+msgstr "No se pudo registrar el servicio"
+
+#: ../src/readelf.c:7114
+#, fuzzy
+msgid " Owner Data size Type\n"
+msgstr "Escribir un tamaño en puntos."
+
+#: ../src/readelf.c:7132
+#, fuzzy, c-format
+msgid " %-13.*s %9<PRId32> %s\n"
+msgstr "13 lugares"
+
+#: ../src/readelf.c:7163
+#, fuzzy, c-format
+msgid "cannot get content of note section: %s"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/readelf.c:7190
+#, c-format
+msgid ""
+"\n"
+"Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7213
+#, c-format
+msgid ""
+"\n"
+"Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7259
+#, c-format
+msgid ""
+"\n"
+"Section [%Zu] '%s' has no data to dump.\n"
+msgstr ""
+
+#: ../src/readelf.c:7265
+#: ../src/readelf.c:7287
+#, c-format
+msgid "cannot get data for section [%Zu] '%s': %s"
+msgstr "no es posible obtener datos de la sección [%Zu] '%s': %s"
+
+#: ../src/readelf.c:7269
+#, c-format
+msgid ""
+"\n"
+"Hex dump of section [%Zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7282
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Section [%Zu] '%s' is empty.\n"
+msgstr " La historia de órdenes está vacía "
+
+#: ../src/readelf.c:7291
+#, c-format
+msgid ""
+"\n"
+"String section [%Zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n"
+msgstr ""
+
+#: ../src/readelf.c:7338
+#, fuzzy, c-format
+msgid ""
+"\n"
+"section [%lu] does not exist"
+msgstr "El anclaje HTML %s no existe."
+
+#: ../src/readelf.c:7364
+#, fuzzy, c-format
+msgid ""
+"\n"
+"section '%s' does not exist"
+msgstr ": ¡el archivo no existe!"
+
+#: ../src/readelf.c:7425
+#, fuzzy, c-format
+msgid "cannot get symbol index of archive '%s': %s"
+msgstr "%s: no se pueden obtener las direcciones del archivo"
+
+#: ../src/readelf.c:7428
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Archive '%s' has no symbol index\n"
+msgstr "la directiva .ent no tiene símbolo"
+
+#: ../src/readelf.c:7432
+#, c-format
+msgid ""
+"\n"
+"Index of archive '%s' has %Zu entries:\n"
+msgstr ""
+
+#: ../src/readelf.c:7450
+#, fuzzy, c-format
+msgid "cannot extract member at offset %Zu in '%s': %s"
+msgstr "no es posible extraer miembro en offset %Zu in '%s': %s"
+
+#: ../src/readelf.c:7455
+#, fuzzy, c-format
+msgid "Archive member '%s' contains:\n"
+msgstr "Comprueba si el archivador contiene errores"
+
+#: ../src/size.c:68
+msgid "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default is `bsd'"
+msgstr "Utilice el formato de salida FORMAT. FORMAT puede set tanto `bsd' como `sysv'. El establecido por defecto es `bsd'"
+
+#: ../src/size.c:70
+#, fuzzy
+msgid "Same as `--format=sysv'"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/size.c:71
+#, fuzzy
+msgid "Same as `--format=bsd'"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/size.c:74
+#, fuzzy
+msgid "Same as `--radix=10'"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/size.c:75
+#, fuzzy
+msgid "Same as `--radix=8'"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/size.c:76
+#, fuzzy
+msgid "Same as `--radix=16'"
+msgstr "lo mismo que --format=posix"
+
+#: ../src/size.c:78
+msgid "Similar to `--format=sysv' output but in one line"
+msgstr "Similar a la salida `--format=sysv' pero en una sola línea"
+
+#: ../src/size.c:82
+msgid "Print size and permission flags for loadable segments"
+msgstr "Imprime el tamaño y las marcas de permiso para los segmentos posibles de ser cargados"
+
+#: ../src/size.c:83
+msgid "Display the total sizes (bsd only)"
+msgstr "Muestra el tamaño total (bsd solamente)"
+
+#. Short description of program.
+#: ../src/size.c:88
+msgid "List section sizes of FILEs (a.out by default)."
+msgstr "Lista los tamaños de sección de FILEs (por defecto a.out). "
+
+#: ../src/size.c:269
+#, fuzzy, c-format
+msgid "Invalid format: %s"
+msgstr "%s: Formato de archivo inválido"
+
+#: ../src/size.c:280
+#, fuzzy, c-format
+msgid "Invalid radix: %s"
+msgstr "%s: radical inválido"
+
+#: ../src/size.c:339
+#, fuzzy, c-format
+msgid "%s: file format not recognized"
+msgstr "No se reconoce el formato del fichero"
+
+#: ../src/size.c:446
+#: ../src/size.c:589
+#, fuzzy, c-format
+msgid " (ex %s)"
+msgstr "ex"
+
+#: ../src/size.c:614
+#, fuzzy
+msgid "(TOTALS)\n"
+msgstr "calcular totales"
+
+#: ../src/strip.c:73
+#, fuzzy
+msgid "Place stripped output into FILE"
+msgstr "Coloca la salida obtenida en FILE"
+
+#: ../src/strip.c:74
+#, fuzzy
+msgid "Extract the removed sections into FILE"
+msgstr "substituir las secciones i18n en el archivo spec"
+
+#: ../src/strip.c:75
+#, fuzzy
+msgid "Embed name FILE instead of -f argument"
+msgstr "-L NOMBRE --label=NOMBRE Usa NOMBRE en lugar del nombre de fichero."
+
+#: ../src/strip.c:79
+#, fuzzy
+msgid "Remove all debugging symbols"
+msgstr "Descarta todos los símbolos locales"
+
+#: ../src/strip.c:83
+msgid "Copy modified/access timestamps to the output"
+msgstr ""
+
+#: ../src/strip.c:85
+#, fuzzy
+msgid "Remove .comment section"
+msgstr "Quita la traducción de nombre/comentario"
+
+#: ../src/strip.c:88
+msgid "Relax a few rules to handle slightly broken ELF files"
+msgstr ""
+
+#. Short description of program.
+#: ../src/strip.c:93
+#, fuzzy
+msgid "Discard symbols from object files."
+msgstr " Remueve símbolos y secciones de los ficheros\n"
+
+#: ../src/strip.c:185
+#, c-format
+msgid "Only one input file allowed together with '-o' and '-f'"
+msgstr "Solo se permite ingresar un archivo junto con '-o' y '-f'"
+
+#: ../src/strip.c:221
+#, fuzzy, c-format
+msgid "-f option specified twice"
+msgstr "se desconoce la opción -m%s= especificada: '%s'"
+
+#: ../src/strip.c:230
+#, fuzzy, c-format
+msgid "-F option specified twice"
+msgstr "se desconoce la opción -m%s= especificada: '%s'"
+
+#: ../src/strip.c:239
+#: ../src/unstrip.c:124
+#, fuzzy, c-format
+msgid "-o option specified twice"
+msgstr "se desconoce la opción -m%s= especificada: '%s'"
+
+#: ../src/strip.c:259
+#, c-format
+msgid "-R option supports only .comment section"
+msgstr "la opción -R es soportada sólo en la sección .comment"
+
+#: ../src/strip.c:297
+#: ../src/strip.c:321
+#, fuzzy, c-format
+msgid "cannot stat input file '%s'"
+msgstr "stat() no pudo evaluar archivo de entrada \"%s\": %s"
+
+#: ../src/strip.c:311
+#, fuzzy, c-format
+msgid "while opening '%s'"
+msgstr "mientras se abría %s"
+
+#: ../src/strip.c:349
+#, fuzzy, c-format
+msgid "%s: cannot use -o or -f when stripping archive"
+msgstr "%s: no puede utilzarse -o o -f cuando se extrae un archivo"
+
+#: ../src/strip.c:447
+#, fuzzy, c-format
+msgid "cannot open EBL backend"
+msgstr "No se puede abrir el documento HTML: %s"
+
+#: ../src/strip.c:497
+#: ../src/strip.c:521
+#, fuzzy, c-format
+msgid "cannot create new file '%s': %s"
+msgstr "%s: no se puede crear un nuevo fichero de preferencias predeterminadas\n"
+
+#: ../src/strip.c:581
+#, fuzzy, c-format
+msgid "illformed file '%s'"
+msgstr "Error de archivo"
+
+#: ../src/strip.c:868
+#: ../src/strip.c:955
+#, fuzzy, c-format
+msgid "while generating output file: %s"
+msgstr "error al cerrar el fichero de salida"
+
+#: ../src/strip.c:928
+#: ../src/strip.c:1667
+#, fuzzy, c-format
+msgid "%s: error while creating ELF header: %s"
+msgstr "Error al crear el enlace hacia %B."
+
+#: ../src/strip.c:942
+#, fuzzy, c-format
+msgid "while preparing output for '%s'"
+msgstr "no se puede abrir `%s' para salida: %s"
+
+#: ../src/strip.c:993
+#: ../src/strip.c:1049
+#, fuzzy, c-format
+msgid "while create section header section: %s"
+msgstr "no se puede crear el encabezado precompilado %s: %m"
+
+#: ../src/strip.c:999
+#, fuzzy, c-format
+msgid "cannot allocate section data: %s"
+msgstr "no se puede asignar espacio para los datos del símbolo"
+
+#: ../src/strip.c:1058
+#, fuzzy, c-format
+msgid "while create section header string table: %s"
+msgstr "falló la asignación de la tabla de cadenas de cabeceras de sección"
+
+#: ../src/strip.c:1592
+#: ../src/strip.c:1689
+#, fuzzy, c-format
+msgid "while writing '%s': %s"
+msgstr "%s: al escribir el resultado %s: %m:"
+
+#: ../src/strip.c:1603
+#, fuzzy, c-format
+msgid "while creating '%s'"
+msgstr "Error al crear thread"
+
+#: ../src/strip.c:1615
+#, c-format
+msgid "while computing checksum for debug information"
+msgstr ""
+
+#: ../src/strip.c:1675
+#, fuzzy, c-format
+msgid "%s: error while reading the file: %s"
+msgstr "Error al leer archivo."
+
+#: ../src/strip.c:1721
+#: ../src/strip.c:1728
+#, fuzzy, c-format
+msgid "error while finishing '%s': %s"
+msgstr "Error al copiar «%B»."
+
+#: ../src/strip.c:1751
+#: ../src/strip.c:1808
+#, c-format
+msgid "cannot set access and modification date of '%s'"
+msgstr "no es posible establecer acceso y fecha de modificación de '%s'"
+
+#: ../src/ld.c:87
+#, fuzzy
+msgid "Input File Control:"
+msgstr ""
+"-o FICHERO-SALIDA [FICHERO-ENTRADA]...\n"
+"[FICHERO-SALIDA [FICHERO-ENTRADA]...]"
+
+#: ../src/ld.c:89
+msgid "Include whole archives in the output from now on."
+msgstr "A partir de ahora incluye archivos completos en la salida."
+
+#: ../src/ld.c:91
+msgid "Stop including the whole arhives in the output."
+msgstr "Deja de incluir archivos completos en la salida."
+
+#: ../src/ld.c:92
+#: ../src/ld.c:106
+#: ../src/ld.c:184
+#, fuzzy
+msgid "FILE"
+msgstr "FICHERO"
+
+#: ../src/ld.c:93
+#, fuzzy
+msgid "Start a group."
+msgstr "Inicia un grupo"
+
+#: ../src/ld.c:94
+#, fuzzy
+msgid "End a group."
+msgstr "Termina un grupo"
+
+#: ../src/ld.c:95
+#, fuzzy
+msgid "PATH"
+msgstr "RUTA"
+
+#: ../src/ld.c:96
+msgid "Add PATH to list of directories files are searched in."
+msgstr "Agrega PATH a la lista de los directorios en los que se realiza la búsqueda"
+
+#: ../src/ld.c:98
+#, fuzzy
+msgid "Only set DT_NEEDED for following dynamic libs if actually used"
+msgstr "Solo se define DT_NEEDED para las librerías dinámicas siguientes, están siendo utilizadas"
+
+#: ../src/ld.c:100
+#, fuzzy
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Siempre establece DT_NEEDED para las siguientes bibliotecas dinámicas"
+
+#: ../src/ld.c:102
+msgid "Ignore LD_LIBRARY_PATH environment variable."
+msgstr "Ignora la variable de entorno LD_LIBRARY_PATH."
+
+#: ../src/ld.c:105
+#, fuzzy
+msgid "Output File Control:"
+msgstr ""
+"-o FICHERO-SALIDA [FICHERO-ENTRADA]...\n"
+"[FICHERO-SALIDA [FICHERO-ENTRADA]...]"
+
+#: ../src/ld.c:106
+#, fuzzy
+msgid "Place output in FILE."
+msgstr " -o <fichero> Coloca la salida en el <fichero>\n"
+
+#: ../src/ld.c:109
+msgid "Object is marked to not use default search path at runtime."
+msgstr "Los objetos son marcados para que no utilicen el camino de búsqueda establecido por defecto en el momento de su ejecución."
+
+#: ../src/ld.c:111
+#, fuzzy
+msgid "Same as --whole-archive."
+msgstr "Apaga --whole-archive"
+
+#: ../src/ld.c:112
+msgid "Default rules of extracting from archive; weak references are not enough."
+msgstr "Reglas establecidas por defecto para extraer desde el archivo; las referencias débiles no son suficientes."
+
+#: ../src/ld.c:116
+msgid "Weak references cause extraction from archive."
+msgstr "Referencias débiles causan extracción desde archivo."
+
+#: ../src/ld.c:118
+msgid "Allow multiple definitions; first is used."
+msgstr "Permite definiciones múltiples; es utilizada la primera."
+
+#: ../src/ld.c:120
+msgid "Disallow/allow undefined symbols in DSOs."
+msgstr "Habilita/deshabilita símbolos indefinidos en DSOs."
+
+#: ../src/ld.c:123
+msgid "Object requires immediate handling of $ORIGIN."
+msgstr "Los objetos requieren manipulación inmediata de $ORIGIN."
+
+#: ../src/ld.c:125
+#, fuzzy
+msgid "Relocation will not be processed lazily."
+msgstr "No se pudo procesar la búsqueda"
+
+#: ../src/ld.c:127
+#, fuzzy
+msgid "Object cannot be unloaded at runtime."
+msgstr "La constante nombrada '%s' en %L no puede ser un objeto EQUIVALENCE"
+
+#: ../src/ld.c:129
+msgid "Mark object to be initialized first."
+msgstr "Marca el objeto para ser inicializado primero."
+
+#: ../src/ld.c:131
+#, fuzzy
+msgid "Enable/disable lazy-loading flag for following dependencies."
+msgstr "Activa/desactiva marca lazy-loading para las siguientes dependencias."
+
+#: ../src/ld.c:133
+msgid "Mark object as not loadable with 'dlopen'."
+msgstr "Marca el objeto como no cargable con 'dlopen'"
+
+#: ../src/ld.c:135
+msgid "Ignore/record dependencies on unused DSOs."
+msgstr "Ignora/registra dependencias sobre DSOs no utilizados."
+
+#: ../src/ld.c:137
+msgid "Generated DSO will be a system library."
+msgstr "El DSO generado será una librería del sistema. "
+
+#: ../src/ld.c:138
+#, fuzzy
+msgid "ADDRESS"
+msgstr "DIRECCIÓN"
+
+#: ../src/ld.c:138
+#, fuzzy
+msgid "Set entry point address."
+msgstr "dirección IP punto-a-punto"
+
+#: ../src/ld.c:141
+#, fuzzy
+msgid "Do not link against shared libraries."
+msgstr "No enlaza contra bibliotecas compartidas"
+
+#: ../src/ld.c:144
+#, fuzzy
+msgid "Prefer linking against shared libraries."
+msgstr "No enlaza contra bibliotecas compartidas"
+
+#: ../src/ld.c:145
+#, fuzzy
+msgid "Export all dynamic symbols."
+msgstr "Exporta todos los símbolos dinámicos"
+
+#: ../src/ld.c:146
+#, fuzzy
+msgid "Strip all symbols."
+msgstr "Descarta todos los símbolos"
+
+#: ../src/ld.c:147
+#, fuzzy
+msgid "Strip debugging symbols."
+msgstr "Descarta los símbolos de depuración"
+
+#: ../src/ld.c:149
+#, fuzzy
+msgid "Assume pagesize for the target system to be SIZE."
+msgstr "Asume que será SIZE el pagesize para el objeto del sistema."
+
+#: ../src/ld.c:151
+#, fuzzy
+msgid "Set runtime DSO search path."
+msgstr "Establece la ruta de búsqueda de bibliotecas compartidas en tiempo de ejecución"
+
+#: ../src/ld.c:154
+#, fuzzy
+msgid "Set link time DSO search path."
+msgstr "Establece la ruta de búsqueda de bibliotecas compartidas en tiempo de enlace"
+
+#: ../src/ld.c:155
+#, fuzzy
+msgid "Generate dynamic shared object."
+msgstr "La reapertura del objeto compartido `%s' falló"
+
+#: ../src/ld.c:156
+#, fuzzy
+msgid "Generate relocatable object."
+msgstr "Genera salida reubicable"
+
+#: ../src/ld.c:159
+#, fuzzy
+msgid "Causes symbol not assigned to a version be reduced to local."
+msgstr "Hace que un símbolo no asinado a ninguna versión sea reducido a local."
+
+#: ../src/ld.c:160
+#, fuzzy
+msgid "Remove unused sections."
+msgstr "No elimina las secciones sin uso (por defecto)"
+
+#: ../src/ld.c:163
+#, fuzzy
+msgid "Don't remove unused sections."
+msgstr "No elimina las secciones sin uso (por defecto)"
+
+#: ../src/ld.c:164
+#, fuzzy
+msgid "Set soname of shared object."
+msgstr "La reapertura del objeto compartido `%s' falló"
+
+#: ../src/ld.c:165
+#, fuzzy
+msgid "Set the dynamic linker name."
+msgstr " -L --linker <nombre> Usa <nombre> como el enlazador.\n"
+
+#: ../src/ld.c:168
+msgid "Add/suppress addition indentifying link-editor to .comment section."
+msgstr ""
+
+#: ../src/ld.c:171
+msgid "Create .eh_frame_hdr section"
+msgstr "Crea una sección .eh_frame_hdr"
+
+#: ../src/ld.c:173
+#, fuzzy
+msgid "Set hash style to sysv, gnu or both."
+msgstr "Establece el hash style a sysv, gnu o ambos."
+
+#: ../src/ld.c:175
+#, fuzzy
+msgid "Generate build ID note (md5, sha1 (default), uuid)."
+msgstr "Crea una nota del ID de compilación (md5, sha1 (por defecto), uuid)."
+
+#: ../src/ld.c:177
+#, fuzzy
+msgid "Linker Operation Control:"
+msgstr "Control de volumen desconocido %d"
+
+#: ../src/ld.c:178
+#, fuzzy
+msgid "Verbose messages."
+msgstr "Genera mensajes explicativos"
+
+#: ../src/ld.c:179
+#, fuzzy
+msgid "Trace file opens."
+msgstr "Rastrea la apertura de ficheros"
+
+#: ../src/ld.c:181
+msgid "Trade speed for less memory usage"
+msgstr "Intercambia velocidad por menor utilización de la memoria"
+
+#: ../src/ld.c:182
+#, fuzzy
+msgid "LEVEL"
+msgstr "NIVEL"
+
+#: ../src/ld.c:183
+#, fuzzy
+msgid "Set optimization level to LEVEL."
+msgstr "Establece el nivel de optimización a <número>"
+
+#: ../src/ld.c:184
+#, fuzzy
+msgid "Use linker script in FILE."
+msgstr "%P%F: no se puede abrir el fichero de guión del enlazador %s: %E\n"
+
+#: ../src/ld.c:187
+msgid "Select to get parser debug information"
+msgstr ""
+
+#: ../src/ld.c:190
+#, fuzzy
+msgid "Read version information from FILE."
+msgstr "Muestra la información de <fichero(s)> objeto.\n"
+
+#: ../src/ld.c:191
+#, fuzzy
+msgid "Set emulation to NAME."
+msgstr "|NOMBRE|usa el juego de caracteres NOMBRE"
+
+#. Short description of program.
+#: ../src/ld.c:197
+#, fuzzy
+msgid "Combine object and archive files."
+msgstr "Combina objeto y archivos de almacenamiento."
+
+#. Strings for arguments in help texts.
+#: ../src/ld.c:200
+#, fuzzy
+msgid "[FILE]..."
+msgstr "[FICHERO]..."
+
+#: ../src/ld.c:333
+#, fuzzy, c-format
+msgid "At least one input file needed"
+msgstr "sólo se permite un fichero de entrada máximo"
+
+#: ../src/ld.c:349
+#, fuzzy, c-format
+msgid "error while preparing linking"
+msgstr "Error al intentar cargar «%s»."
+
+#: ../src/ld.c:356
+#, fuzzy, c-format
+msgid "cannot open linker script '%s'"
+msgstr "%P%F: no se puede abrir el fichero de guión del enlazador %s: %E\n"
+
+#: ../src/ld.c:397
+#, fuzzy, c-format
+msgid "-( without matching -)"
+msgstr "Se encontró '~%c' sin su '~%c' correspondiente."
+
+#: ../src/ld.c:572
+#: ../src/ld.c:610
+#, fuzzy, c-format
+msgid "only one option of -G and -r is allowed"
+msgstr "Solamente root puede usar esta opción"
+
+#: ../src/ld.c:594
+#, fuzzy, c-format
+msgid "more than one '-m' parameter"
+msgstr "Se ha especificado más de una fecha tope"
+
+#: ../src/ld.c:604
+#: ../src/ld.c:1013
+#, fuzzy, c-format
+msgid "unknown option `-%c %s'"
+msgstr "El parámetro '%s' es desconocido"
+
+#: ../src/ld.c:646
+#, fuzzy, c-format
+msgid "invalid page size value '%s': ignored"
+msgstr "Valor inválido %d para el tamaño de memoria"
+
+#: ../src/ld.c:687
+#, fuzzy, c-format
+msgid "invalid hash style '%s'"
+msgstr "algoritmo de distribución inválido `%s'\n"
+
+#: ../src/ld.c:697
+#, fuzzy, c-format
+msgid "invalid build-ID style '%s'"
+msgstr "estilo de numeración de cuerpo inválido: %s"
+
+#: ../src/ld.c:785
+#, c-format
+msgid "More than one output file name given."
+msgstr "Se ha dado más de un nombre de arhivo de salido. "
+
+#: ../src/ld.c:802
+#, fuzzy, c-format
+msgid "Invalid optimization level `%s'"
+msgstr "[%s:%u] Nivel de log inválido '%s'."
+
+#: ../src/ld.c:850
+#, fuzzy, c-format
+msgid "nested -( -) groups are not allowed"
+msgstr "No se permiten órdenes de administrador\n"
+
+#: ../src/ld.c:869
+#, fuzzy, c-format
+msgid "-) without matching -("
+msgstr "Se encontró '~%c' sin su '~%c' correspondiente."
+
+#: ../src/ld.c:1046
+#, fuzzy, c-format
+msgid "unknown option '-%c %s'"
+msgstr "El parámetro '%s' es desconocido"
+
+#: ../src/ld.c:1150
+#, c-format
+msgid "could not find input file to determine output file format"
+msgstr "no se ha podido encontrar un archivo de entrada que determine el formato del archivo de salida"
+
+#: ../src/ld.c:1152
+#, fuzzy, c-format
+msgid "try again with an appropriate '-m' parameter"
+msgstr "Inténtelo con una contraseña diferente."
+
+#: ../src/ld.c:1446
+#, fuzzy, c-format
+msgid "cannot read version script '%s'"
+msgstr "Lee la información de la versión del guión"
+
+#. The symbol is already defined and now again
+#. in the linker script. This is an error.
+#: ../src/ld.c:1512
+#: ../src/ld.c:1551
+#, c-format
+msgid "duplicate definition of '%s' in linker script"
+msgstr ""
+
+#: ../src/ldgeneric.c:209
+#: ../src/ldgeneric.c:5151
+#, fuzzy, c-format
+msgid "cannot create string table"
+msgstr "<índice de la tabla de cadenas: %3ld>"
+
+#: ../src/ldgeneric.c:255
+#, fuzzy, c-format
+msgid "cannot load ld backend library '%s': %s"
+msgstr "no se ha podido cargar la librería ld backend '%s': %s"
+
+#: ../src/ldgeneric.c:265
+#, fuzzy, c-format
+msgid "cannot find init function in ld backend library '%s': %s"
+msgstr "no se ha podido encontrar la función init en la librería ld backend '%s': %s"
+
+#: ../src/ldgeneric.c:310
+#, c-format
+msgid "%s listed more than once as input"
+msgstr "%s listado más de una vez como entrada"
+
+#: ../src/ldgeneric.c:424
+#, fuzzy, c-format
+msgid "%s (for -l%s)\n"
+msgstr "durante"
+
+#: ../src/ldgeneric.c:425
+#, fuzzy, c-format
+msgid "%s (for DT_NEEDED %s)\n"
+msgstr "Se necesita IPv4 para NFS"
+
+#: ../src/ldgeneric.c:573
+#, fuzzy, c-format
+msgid "Warning: type of `%s' changed from %s in %s to %s in %s"
+msgstr "Aviso: el tipo del símbolo `%s' cambió de %d a %d en %B"
+
+#: ../src/ldgeneric.c:586
+#, fuzzy, c-format
+msgid "Warning: size of `%s' changed from %<PRIu64> in %s to %<PRIu64> in %s"
+msgstr "Aviso: el tamaño del símbolo `%s' cambió de %lu en %B a %lu en %B"
+
+#: ../src/ldgeneric.c:677
+#, fuzzy, c-format
+msgid "(%s+%#<PRIx64>): multiple definition of %s `%s'\n"
+msgstr "Definición del IU combinado"
+
+#: ../src/ldgeneric.c:700
+#, fuzzy, c-format
+msgid "(%s+%#<PRIx64>): first defined here\n"
+msgstr "%Hse requirió primero el método sintetizado %qD aquí "
+
+#: ../src/ldgeneric.c:819
+#, fuzzy, c-format
+msgid "%s: cannot get section group data: %s"
+msgstr "no se puede obtener el grupo de login de un UID numérico"
+
+#. If we come here no section group contained the given section
+#. despite the SHF_GROUP flag. This is an error in the input
+#. file.
+#: ../src/ldgeneric.c:840
+#, fuzzy, c-format
+msgid "%s: section '%s' with group flag set does not belong to any group"
+msgstr "%s: la sección '%s' con el grupo definir marca no pertenece a ningún grupo"
+
+#: ../src/ldgeneric.c:885
+#, c-format
+msgid "%s: section [%2d] '%s' is not in the correct section group"
+msgstr "%s: la sección [%2d] '%s' no se encuentra en el grupo de sección correcto"
+
+#. This should never happen.
+#: ../src/ldgeneric.c:1156
+#: ../src/ldgeneric.c:1413
+#: ../src/ldgeneric.c:1422
+#: ../src/ldgeneric.c:1481
+#: ../src/ldgeneric.c:1490
+#: ../src/ldgeneric.c:1753
+#: ../src/ldgeneric.c:2005
+#, fuzzy, c-format
+msgid "%s: invalid ELF file (%s:%d)\n"
+msgstr "Versión de ABI del fichero ELF inválida"
+
+#: ../src/ldgeneric.c:1250
+#, c-format
+msgid "%s: only files of type ET_REL might contain section groups"
+msgstr "%s: solo archivos de tipo ET_REL pueden contener grupos de sección"
+
+#: ../src/ldgeneric.c:1302
+#, c-format
+msgid "%s: cannot determine signature of section group [%2zd] '%s': %s"
+msgstr "%s: no es posible determinar la firma del grupo de sección [%2zd] '%s': %s "
+
+#: ../src/ldgeneric.c:1314
+#, c-format
+msgid "%s: cannot get content of section group [%2zd] '%s': %s'"
+msgstr "%s: no es posible obtener el contenido de la sección del grupo [%2zd] '%s': %s'"
+
+#: ../src/ldgeneric.c:1328
+#, c-format
+msgid "%s: group member %zu of section group [%2zd] '%s' has too high index: %<PRIu32>"
+msgstr "%s el miembro del grupo %zu del grupo de sección [%2zd] '%s' posee el índice demsiado alto: %<PRIu32>"
+
+#: ../src/ldgeneric.c:1350
+#, fuzzy, c-format
+msgid "%s: section '%s' has unknown type: %d"
+msgstr "%s tiene un tipo de fichero desconocido"
+
+#: ../src/ldgeneric.c:1729
+#, c-format
+msgid "cannot get descriptor for ELF file (%s:%d): %s\n"
+msgstr "no es posible obtener descriptor para el archivo ELF (%s:%d): %s\n"
+
+#: ../src/ldgeneric.c:1899
+#, fuzzy, c-format
+msgid "cannot read archive `%s': %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/ldgeneric.c:2020
+#, fuzzy, c-format
+msgid "file of type %s cannot be linked in\n"
+msgstr "El archivo de zona no puede ser removido desde este tipo de zona."
+
+#: ../src/ldgeneric.c:2032
+#, c-format
+msgid "%s: input file incompatible with ELF machine type %s\n"
+msgstr "%s: el archivo ingresado es incompatible con una máquina ELF tipo %s\n"
+
+#: ../src/ldgeneric.c:2044
+#, c-format
+msgid "%s: cannot get section header string table index: %s\n"
+msgstr "%s: no se ha podido obtener un índice para la tabla de la cadena del encabezado de la sección: %s\n"
+
+#: ../src/ldgeneric.c:2073
+#, c-format
+msgid "cannot use DSO '%s' when generating relocatable object file"
+msgstr "no es posible utilizar DSO '%s' al general un archivo de objeto realojable"
+
+#: ../src/ldgeneric.c:2158
+#, fuzzy, c-format
+msgid "input file '%s' ignored"
+msgstr "; el resto del fichero no se tiene en cuenta"
+
+#. XXX The error message should get better. It should use
+#. the debugging information if present to tell where in the
+#. sources the undefined reference is.
+#: ../src/ldgeneric.c:2372
+#, fuzzy, c-format
+msgid "undefined symbol `%s' in %s"
+msgstr "símbolo indefinido `%s' en la operación"
+
+#: ../src/ldgeneric.c:2702
+#, c-format
+msgid "cannot create ELF descriptor for output file: %s"
+msgstr "no es posible crear un descriptor ELF para el archivo de salida: %s"
+
+#: ../src/ldgeneric.c:2709
+#, c-format
+msgid "could not create ELF header for output file: %s"
+msgstr "no es posible crear un encabezado ELF para el archivo de salida: %s"
+
+#: ../src/ldgeneric.c:3224
+#: ../src/ldgeneric.c:3294
+#: ../src/ldgeneric.c:3330
+#: ../src/ldgeneric.c:4457
+#: ../src/ldgeneric.c:4506
+#: ../src/ldgeneric.c:4538
+#: ../src/ldgeneric.c:4773
+#: ../src/ldgeneric.c:4828
+#: ../src/ldgeneric.c:5075
+#: ../src/ldgeneric.c:5131
+#: ../src/ldgeneric.c:5600
+#: ../src/ldgeneric.c:5612
+#, fuzzy, c-format
+msgid "cannot create section for output file: %s"
+msgstr "no se puede crear el fichero de salida `%s' para la categoría `%s'"
+
+#: ../src/ldgeneric.c:3444
+#, fuzzy, c-format
+msgid "address computation expression contains variable '%s'"
+msgstr "las expresiones de dirección en lenguaje de computación contienen la variable '%s'"
+
+#: ../src/ldgeneric.c:3489
+#, fuzzy, c-format
+msgid "argument '%<PRIuMAX>' of ALIGN in address computation expression is no power of two"
+msgstr "el argumento '%<PRIuMAX>' de ALIGN en direcciones de expresiones computacionales es no más poderoso que dos "
+
+#: ../src/ldgeneric.c:3684
+#, fuzzy, c-format
+msgid "cannot find entry symbol '%s': defaulting to %#0*<PRIx64>"
+msgstr "%P: aviso: no se puede encontrar el símbolo de entrada %s; se usa por defecto %V\n"
+
+#: ../src/ldgeneric.c:3690
+#, c-format
+msgid "no entry symbol specified: defaulting to %#0*<PRIx64>"
+msgstr "no se ha especificado una entrada de símbolo: estableciendo por defecto a %#0*<PRIx64>"
+
+#: ../src/ldgeneric.c:3920
+#, fuzzy, c-format
+msgid "cannot create GNU hash table section for output file: %s"
+msgstr "no es posible crear una sección para la tabla GNU hash del archivo de salida: %s"
+
+#: ../src/ldgeneric.c:4071
+#, c-format
+msgid "cannot create hash table section for output file: %s"
+msgstr "no es posible crear una sección para la tabla hash del archivo de salida: %s"
+
+#: ../src/ldgeneric.c:4114
+#, fuzzy, c-format
+msgid "cannot create build ID section: %s"
+msgstr "%F%P: no se puede crear la tabla de división de secciones para %s\n"
+
+#: ../src/ldgeneric.c:4191
+#, c-format
+msgid "cannot convert section data to file format: %s"
+msgstr "no es posible convertir los datos de la sección en formato de archivo: %s"
+
+#: ../src/ldgeneric.c:4200
+#, c-format
+msgid "cannot convert section data to memory format: %s"
+msgstr "no es posible convertir datos de la sección en formato de memoria: %s"
+
+#: ../src/ldgeneric.c:4261
+#, c-format
+msgid "cannot read enough data for UUID"
+msgstr "no es posible leer suficientes datos para el UUID"
+
+#: ../src/ldgeneric.c:4358
+#: ../src/ldgeneric.c:4379
+#: ../src/ldgeneric.c:4408
+#: ../src/ldgeneric.c:6062
+#, c-format
+msgid "cannot create symbol table for output file: %s"
+msgstr "no es posible crear tabla de símbolo para el comando de salida: %s"
+
+#: ../src/ldgeneric.c:5300
+#: ../src/ldgeneric.c:5852
+#, fuzzy, c-format
+msgid "section index too large in dynamic symbol table"
+msgstr "el índice de la sección es demasiado extenso en la tabla dinámica de símbolo"
+
+#: ../src/ldgeneric.c:5745
+#, fuzzy, c-format
+msgid "cannot create versioning section: %s"
+msgstr "%F%P: no se puede crear la tabla de división de secciones para %s\n"
+
+#: ../src/ldgeneric.c:5818
+#, c-format
+msgid "cannot create dynamic symbol table for output file: %s"
+msgstr "no es posible crear tabla dinámica de símbolo para el archivo de salida: %s"
+
+#: ../src/ldgeneric.c:5994
+#, fuzzy, c-format
+msgid "cannot create versioning data: %s"
+msgstr "no se pueden crear las estructuras de datos TLS"
+
+#: ../src/ldgeneric.c:6094
+#: ../src/ldgeneric.c:6107
+#: ../src/ldgeneric.c:6171
+#: ../src/ldgeneric.c:6179
+#, fuzzy, c-format
+msgid "cannot create section header string section: %s"
+msgstr "falló la asignación de la tabla de cadenas de cabeceras de sección"
+
+#: ../src/ldgeneric.c:6101
+#, fuzzy, c-format
+msgid "cannot create section header string section"
+msgstr "falló la asignación de la tabla de cadenas de cabeceras de sección"
+
+#: ../src/ldgeneric.c:6259
+#, fuzzy, c-format
+msgid "cannot create program header: %s"
+msgstr "no se puede asignar memoria para la cabecera del programa"
+
+#: ../src/ldgeneric.c:6267
+#, fuzzy, c-format
+msgid "while determining file layout: %s"
+msgstr "Error al crear el archivo %B."
+
+#: ../src/ldgeneric.c:6388
+#, fuzzy, c-format
+msgid "internal error: non-nobits section follows nobits section"
+msgstr "error interno: sección non-nobits a continuación de sección nobits"
+
+#: ../src/ldgeneric.c:6925
+#, fuzzy, c-format
+msgid "cannot get header of 0th section: %s"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/ldgeneric.c:6941
+#: ../src/unstrip.c:1807
+#, fuzzy, c-format
+msgid "cannot update ELF header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/ldgeneric.c:6972
+#, c-format
+msgid "linker backend didn't specify function to relocate section"
+msgstr ""
+
+#: ../src/ldgeneric.c:6984
+#, fuzzy, c-format
+msgid "while writing output file: %s"
+msgstr "Ocurrió un error al escribir el archivo de salida."
+
+#: ../src/ldgeneric.c:6989
+#, fuzzy, c-format
+msgid "while finishing output file: %s"
+msgstr "error al cerrar el fichero de salida"
+
+#: ../src/ldgeneric.c:6995
+#, fuzzy, c-format
+msgid "cannot stat output file"
+msgstr "no se puede generar el fichero de salida"
+
+#: ../src/ldgeneric.c:7011
+#, c-format
+msgid "WARNING: temporary output file overwritten before linking finished"
+msgstr "AVISO: archivo de salida temporar sobreescrito antes que haya concluido el enlazamiento"
+
+#. This cannot be implemented generally. There should have been a
+#. machine dependent implementation and we should never have arrived
+#. here.
+#: ../src/ldgeneric.c:7064
+#: ../src/ldgeneric.c:7075
+#: ../src/ldgeneric.c:7086
+#: ../src/ldgeneric.c:7097
+#: ../src/ldgeneric.c:7116
+#: ../src/ldgeneric.c:7129
+#: ../src/ldgeneric.c:7141
+#, fuzzy, c-format
+msgid "no machine specific '%s' implementation"
+msgstr " no hay opciones específicas de emulación.\n"
+
+#: ../src/i386_ld.c:210
+#, fuzzy, c-format
+msgid "cannot allocate PLT section: %s"
+msgstr "No se puede asignar espacio para el búfer"
+
+#: ../src/i386_ld.c:232
+#, fuzzy, c-format
+msgid "cannot allocate PLTREL section: %s"
+msgstr "No se puede asignar espacio para el búfer"
+
+#: ../src/i386_ld.c:253
+#, fuzzy, c-format
+msgid "cannot allocate GOT section: %s"
+msgstr "No se puede asignar espacio para el búfer"
+
+#: ../src/i386_ld.c:274
+#, fuzzy, c-format
+msgid "cannot allocate GOTPLT section: %s"
+msgstr "No se puede asignar espacio para el búfer"
+
+#: ../src/i386_ld.c:661
+#, fuzzy, c-format
+msgid "initial-executable TLS relocation cannot be used "
+msgstr "no es posible utilizar el realojamiento del TLS ejecutable en el inicio"
+
+#: ../src/ldscript.y:178
+#, fuzzy
+msgid "mode for segment invalid\n"
+msgstr "modo inválido para dlopen()"
+
+#: ../src/ldscript.y:465
+#, fuzzy, c-format
+msgid "while reading version script '%s': %s at line %d"
+msgstr "Se encontró fin de archivo en la línea %d, antes de terminar de leer los datos."
+
+#: ../src/ldscript.y:466
+#, fuzzy, c-format
+msgid "while reading linker script '%s': %s at line %d"
+msgstr "Se encontró fin de archivo en la línea %d, antes de terminar de leer los datos."
+
+#: ../src/ldscript.y:745
+#, fuzzy, c-format
+msgid "symbol '%s' in declared both local and global for unnamed version"
+msgstr "el símbolo '%s' en declarado tanto local como global para la versión no identificada"
+
+#: ../src/ldscript.y:747
+#, fuzzy, c-format
+msgid "symbol '%s' in declared both local and global for version '%s'"
+msgstr "el símbolo '%s' en declarado tanto local como global para la versión '%s'"
+
+#: ../src/ldscript.y:767
+#: ../src/ldscript.y:774
+#, fuzzy, c-format
+msgid "default visibility set as local and global"
+msgstr "la visibilidad establecida por defecto está definida tanto local como global"
+
+#: ../src/elflint.c:71
+msgid "Be extremely strict, flag level 2 features."
+msgstr "Sea extremadamente estricto, recursos de marca de nivel 2."
+
+#: ../src/elflint.c:72
+msgid "Do not print anything if successful"
+msgstr "No imprime nada si es exitoso"
+
+#: ../src/elflint.c:73
+#, fuzzy
+msgid "Binary is a separate debuginfo file"
+msgstr "Binario es un archivo debuginfo diferente "
+
+#: ../src/elflint.c:75
+#, fuzzy
+msgid "Binary has been created with GNU ld and is therefore known to be broken in certain ways"
+msgstr "Binario ha sido creado con GNU Id y por lo tanto es sabido que puede ser roto de determinadas maneras"
+
+#. Short description of program.
+#: ../src/elflint.c:81
+msgid "Pedantic checking of ELF files compliance with gABI/psABI spec."
+msgstr ""
+
+#: ../src/elflint.c:165
+#, fuzzy, c-format
+msgid "cannot generate Elf descriptor: %s\n"
+msgstr "no se puede crear un descriptor interno"
+
+#: ../src/elflint.c:184
+#, fuzzy, c-format
+msgid "error while closing Elf descriptor: %s\n"
+msgstr "error al cerrar el fichero de salida"
+
+#: ../src/elflint.c:188
+#, fuzzy
+msgid "No errors"
+msgstr " NO SE HAN ENCONTRADO ERRORES\n"
+
+#: ../src/elflint.c:301
+#, fuzzy, c-format
+msgid " error while freeing sub-ELF descriptor: %s\n"
+msgstr " error al intentar liberar descriptor sub-ELF: %s\n"
+
+#. We cannot do anything.
+#: ../src/elflint.c:309
+#, fuzzy, c-format
+msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
+msgstr "No es un fichero ELF - tiene los bytes mágicos erróneos en el inicio\n"
+
+#: ../src/elflint.c:368
+#, c-format
+msgid "e_ident[%d] == %d is no known class\n"
+msgstr "e_ident[%d] == %d es una clase desconocida\n"
+
+#: ../src/elflint.c:373
+#, c-format
+msgid "e_ident[%d] == %d is no known data encoding\n"
+msgstr "e_ident[%d] == %d es una codificación de datos desconocida\n"
+
+#: ../src/elflint.c:377
+#, c-format
+msgid "unknown ELF header version number e_ident[%d] == %d\n"
+msgstr "número de versión de encabezado ELF desconocido e_ident[%d] == %d\n"
+
+#: ../src/elflint.c:382
+#, fuzzy, c-format
+msgid "unsupported OS ABI e_ident[%d] == '%s'\n"
+msgstr "ABI del OS del fichero ELF inválida"
+
+#: ../src/elflint.c:388
+#, fuzzy, c-format
+msgid "unsupport ABI version e_ident[%d] == %d\n"
+msgstr "No hubo coincidencia en el número de versión ABI %d.%d.x (necesitaba %d.%d.x)"
+
+#: ../src/elflint.c:393
+#, fuzzy, c-format
+msgid "e_ident[%zu] is not zero\n"
+msgstr "El 'resize_inode' no está habilitado, pero el nodo-i de cambio del tamaño no es cero. "
+
+#: ../src/elflint.c:398
+#, fuzzy, c-format
+msgid "unknown object file type %d\n"
+msgstr "%s: Tipo de fichero desconocido; no se tendrá en cuenta"
+
+#: ../src/elflint.c:405
+#, fuzzy, c-format
+msgid "unknown machine type %d\n"
+msgstr "Error interno: Tipo de máquina desconocido: %d"
+
+#: ../src/elflint.c:409
+#, fuzzy, c-format
+msgid "unknown object file version\n"
+msgstr "encabezado del fichero BFD versión %s\n"
+
+#: ../src/elflint.c:415
+#, fuzzy, c-format
+msgid "invalid program header offset\n"
+msgstr "Operando inválido para `OFFSET'"
+
+#: ../src/elflint.c:417
+#, fuzzy, c-format
+msgid "executables and DSOs cannot have zero program header offset\n"
+msgstr "tanto los ejecutables como los DSOs no pueden tener offset de encabezado de programa cero\n"
+
+#: ../src/elflint.c:421
+#, c-format
+msgid "invalid number of program header entries\n"
+msgstr "cantidad no válida de entradas del encabezado del programa\n"
+
+#: ../src/elflint.c:429
+#, fuzzy, c-format
+msgid "invalid section header table offset\n"
+msgstr "falló la asignación de la tabla de cadenas de cabeceras de sección"
+
+#: ../src/elflint.c:432
+#, c-format
+msgid "section header table must be present\n"
+msgstr "debe encontrarse presente una tabla de encabezado de sección\n"
+
+#: ../src/elflint.c:446
+#, c-format
+msgid "invalid number of section header table entries\n"
+msgstr "cantidad no válida de entradas en la tabla del encabezado de sección\n"
+
+#: ../src/elflint.c:463
+#, fuzzy, c-format
+msgid "invalid section header index\n"
+msgstr " Índice de tabla de cadenas de sección de encabezado: %ld"
+
+#: ../src/elflint.c:468
+#, fuzzy, c-format
+msgid "invalid machine flags: %s\n"
+msgstr "%P%F: sintaxis inválida en los interruptores\n"
+
+#: ../src/elflint.c:475
+#: ../src/elflint.c:492
+#, c-format
+msgid "invalid ELF header size: %hd\n"
+msgstr "tamaño inválido del encabezado ELF: %hd\n"
+
+#: ../src/elflint.c:478
+#: ../src/elflint.c:495
+#, c-format
+msgid "invalid program header size: %hd\n"
+msgstr "tamaño inválido del encabezado del programa: %hd\n"
+
+#: ../src/elflint.c:481
+#: ../src/elflint.c:498
+#, c-format
+msgid "invalid program header position or size\n"
+msgstr "tamaño o posición no válidos del encabezado del programa\n"
+
+#: ../src/elflint.c:484
+#: ../src/elflint.c:501
+#, c-format
+msgid "invalid section header size: %hd\n"
+msgstr "tamaño inválido del encabezado de sección: %hd\n"
+
+#: ../src/elflint.c:487
+#: ../src/elflint.c:504
+#, c-format
+msgid "invalid section header position or size\n"
+msgstr "tamaño o posición no válidos del encabezado de sección\n"
+
+#: ../src/elflint.c:548
+#, fuzzy, c-format
+msgid "section [%2d] '%s': section with SHF_GROUP flag set not part of a section group\n"
+msgstr "sección [%2d] '%s': sección definida con la marca SHF_GROUP no es parte de una sección de grupo\n"
+
+#: ../src/elflint.c:552
+#, fuzzy, c-format
+msgid "section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n"
+msgstr "sección [%2d] '%s': el grupo de sección [%2zu] '%s' no precede a ningún miembro de grupo\n"
+
+#: ../src/elflint.c:568
+#: ../src/elflint.c:1393
+#: ../src/elflint.c:1443
+#: ../src/elflint.c:1552
+#: ../src/elflint.c:2146
+#: ../src/elflint.c:2660
+#: ../src/elflint.c:2821
+#: ../src/elflint.c:2951
+#: ../src/elflint.c:3123
+#: ../src/elflint.c:4020
+#, fuzzy, c-format
+msgid "section [%2d] '%s': cannot get section data\n"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/elflint.c:581
+#: ../src/elflint.c:1559
+#, c-format
+msgid "section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n"
+msgstr "sección [%2d] '%s': está referenciado como una tabla de cadena para la sección [%2d] '%s' pero no es de tipo SHT_STRTAB\n"
+
+#: ../src/elflint.c:604
+#, c-format
+msgid "section [%2d] '%s': symbol table cannot have more than one extended index section\n"
+msgstr "sección [%2d] '%s': la tabla de símbolo no puede tener más de una sección de índice extendido\n"
+
+#: ../src/elflint.c:615
+#, c-format
+msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
+msgstr "sección [%2u] '%s': el tamaño de la entrada no cincide con ElfXX_Sym\n"
+
+#: ../src/elflint.c:624
+#, fuzzy, c-format
+msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
+msgstr "no se puede definir el símbolo `%s' en la sección absoluta"
+
+#: ../src/elflint.c:629
+#: ../src/elflint.c:632
+#: ../src/elflint.c:635
+#: ../src/elflint.c:638
+#: ../src/elflint.c:641
+#: ../src/elflint.c:644
+#, fuzzy, 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 igual cero\n"
+
+#: ../src/elflint.c:647
+#, fuzzy, 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 igual cero\n"
+
+#: ../src/elflint.c:657
+#, 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:666
+#, 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:679
+#, fuzzy, c-format
+msgid "section [%2d] '%s': symbol %zu: too large section index but no extended section index section\n"
+msgstr "sección [%2d] '%s': símbolo %zu: el índice de sección es demasiado extenso, y no no existe una sección para índice de sección extendido\n"
+
+#: ../src/elflint.c:685
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in st_shndx (%<PRIu32>)\n"
+msgstr "sección [%2d] '%s': símbolol %zu: XINDEX es utilizado para índice que pueda caber en st_shndx (%<PRIu32>)\n"
+
+#. || sym->st_shndx > SHN_HIRESERVE always false
+#: ../src/elflint.c:697
+#, 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:705
+#, 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:709
+#, 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:717
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
+msgstr "sección [%2d] '%s': símbolo %zu: COMMON solo es permitido en archivos realojables\n"
+
+#: ../src/elflint.c:721
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
+msgstr ""
+
+#: ../src/elflint.c:725
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
+msgstr ""
+
+#: ../src/elflint.c:757
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:763
+#: ../src/elflint.c:788
+#: ../src/elflint.c:831
+#, c-format
+msgid "section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:772
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have SHF_TLS flag set\n"
+msgstr ""
+
+#: ../src/elflint.c:782
+#: ../src/elflint.c:824
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:809
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
+msgstr ""
+
+#: ../src/elflint.c:817
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:844
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: local symbol outside range described in sh_info\n"
+msgstr ""
+
+#: ../src/elflint.c:851
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: non-local symbol outside range described in sh_info\n"
+msgstr ""
+
+#: ../src/elflint.c:858
+#, c-format
+msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
+msgstr ""
+
+#: ../src/elflint.c:908
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%2d]\n"
+msgstr ""
+
+#: ../src/elflint.c:915
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%s'\n"
+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:931
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not match %s section address %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:938
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not match %s section size %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:946
+#, c-format
+msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got section\n"
+msgstr ""
+
+#: ../src/elflint.c:962
+#, c-format
+msgid "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic segment address %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:969
+#, c-format
+msgid "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic segment size %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:1020
+#, c-format
+msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
+msgstr ""
+
+#: ../src/elflint.c:1029
+#: ../src/elflint.c:1081
+#, c-format
+msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
+msgstr ""
+
+#: ../src/elflint.c:1054
+#: ../src/elflint.c:1106
+#, c-format
+msgid "section [%2d] '%s': relative relocations after index %d as specified by DT_RELCOUNT\n"
+msgstr ""
+
+#: ../src/elflint.c:1060
+#: ../src/elflint.c:1112
+#, c-format
+msgid "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT specified %d relative relocations\n"
+msgstr ""
+
+#: ../src/elflint.c:1072
+#, c-format
+msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
+msgstr ""
+
+#: ../src/elflint.c:1154
+#, fuzzy, c-format
+msgid "section [%2d] '%s': invalid destination section index\n"
+msgstr "%B: enlace %lu inválido para la sección de reubicación %s (índice %u)"
+
+#: ../src/elflint.c:1167
+#, c-format
+msgid "section [%2d] '%s': invalid destination section type\n"
+msgstr ""
+
+#: ../src/elflint.c:1175
+#, c-format
+msgid "section [%2d] '%s': sh_info should be zero\n"
+msgstr ""
+
+#: ../src/elflint.c:1182
+#, c-format
+msgid "section [%2d] '%s': no relocations for merge-able sections possible\n"
+msgstr ""
+
+#: ../src/elflint.c:1189
+#, c-format
+msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
+msgstr ""
+
+#: ../src/elflint.c:1249
+#, c-format
+msgid "text relocation flag set but there is no read-only segment\n"
+msgstr ""
+
+#: ../src/elflint.c:1276
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: invalid type\n"
+msgstr ""
+
+#: ../src/elflint.c:1284
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: relocation type invalid for the file type\n"
+msgstr ""
+
+#: ../src/elflint.c:1292
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
+msgstr ""
+
+#: ../src/elflint.c:1310
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can be used with %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1327
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1342
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: copy relocation against symbol of type %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1363
+#, c-format
+msgid "section [%2d] '%s': relocation %zu: read-only section modified but text relocation flag not set\n"
+msgstr ""
+
+#: ../src/elflint.c:1378
+#, c-format
+msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
+msgstr ""
+
+#: ../src/elflint.c:1417
+#: ../src/elflint.c:1467
+#, c-format
+msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1547
+#, fuzzy, c-format
+msgid "more than one dynamic section present\n"
+msgstr "Existe más de una entrada de disco completo.\n"
+
+#: ../src/elflint.c:1565
+#, c-format
+msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
+msgstr ""
+
+#: ../src/elflint.c:1570
+#: ../src/elflint.c:1862
+#, c-format
+msgid "section [%2d] '%s': sh_info not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:1580
+#, c-format
+msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1588
+#, c-format
+msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
+msgstr ""
+
+#: ../src/elflint.c:1595
+#, c-format
+msgid "section [%2d] '%s': entry %zu: unknown tag\n"
+msgstr ""
+
+#: ../src/elflint.c:1606
+#, c-format
+msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1616
+#, c-format
+msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
+msgstr ""
+
+#: ../src/elflint.c:1634
+#, c-format
+msgid "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
+msgstr ""
+
+#: ../src/elflint.c:1656
+#, 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:1699
+#, c-format
+msgid "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
+msgstr ""
+
+#: ../src/elflint.c:1714
+#, c-format
+msgid "section [%2d] '%s': entry %zu: %s value must be valid offset in section [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:1734
+#: ../src/elflint.c:1762
+#, c-format
+msgid "section [%2d] '%s': contains %s entry but not %s\n"
+msgstr ""
+
+#: ../src/elflint.c:1746
+#, c-format
+msgid "section [%2d] '%s': mandatory tag %s not present\n"
+msgstr ""
+
+#: ../src/elflint.c:1755
+#, c-format
+msgid "section [%2d] '%s': no hash section present\n"
+msgstr ""
+
+#: ../src/elflint.c:1770
+#: ../src/elflint.c:1777
+#, c-format
+msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
+msgstr ""
+
+#: ../src/elflint.c:1787
+#: ../src/elflint.c:1791
+#, c-format
+msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
+msgstr ""
+
+#: ../src/elflint.c:1797
+#, c-format
+msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
+msgstr ""
+
+#: ../src/elflint.c:1808
+#: ../src/elflint.c:1812
+#: ../src/elflint.c:1816
+#: ../src/elflint.c:1820
+#, c-format
+msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
+msgstr ""
+
+#: ../src/elflint.c:1832
+#, c-format
+msgid "section [%2d] '%s': only relocatable files can have extended section index\n"
+msgstr ""
+
+#: ../src/elflint.c:1842
+#, c-format
+msgid "section [%2d] '%s': extended section index section not for symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:1847
+#, c-format
+msgid "cannot get data for symbol section\n"
+msgstr ""
+
+#: ../src/elflint.c:1850
+#, c-format
+msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
+msgstr ""
+
+#: ../src/elflint.c:1857
+#, c-format
+msgid "section [%2d] '%s': extended index table too small for symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:1872
+#, c-format
+msgid "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to same symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:1883
+#, c-format
+msgid "symbol 0 should have zero extended section index\n"
+msgstr ""
+
+#: ../src/elflint.c:1895
+#, c-format
+msgid "cannot get data for symbol %zu\n"
+msgstr ""
+
+#: ../src/elflint.c:1900
+#, c-format
+msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
+msgstr ""
+
+#: ../src/elflint.c:1916
+#: ../src/elflint.c:1957
+#, c-format
+msgid "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
+msgstr ""
+
+#: ../src/elflint.c:1928
+#: ../src/elflint.c:1969
+#, c-format
+msgid "section [%2d] '%s': chain array too large\n"
+msgstr ""
+
+#: ../src/elflint.c:1937
+#: ../src/elflint.c:1978
+#, c-format
+msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1943
+#, c-format
+msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1984
+#, c-format
+msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:1999
+#, c-format
+msgid "section [%2d] '%s': bitmask size not power of 2: %u\n"
+msgstr ""
+
+#: ../src/elflint.c:2010
+#, c-format
+msgid "section [%2d] '%s': hash table section is too small (is %ld, expected at least%ld)\n"
+msgstr ""
+
+#: ../src/elflint.c:2018
+#, c-format
+msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
+msgstr ""
+
+#: ../src/elflint.c:2050
+#, c-format
+msgid "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
+msgstr ""
+
+#: ../src/elflint.c:2071
+#, c-format
+msgid "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is undefined\n"
+msgstr ""
+
+#: ../src/elflint.c:2082
+#, c-format
+msgid "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
+msgstr ""
+
+#: ../src/elflint.c:2113
+#, c-format
+msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:2118
+#, c-format
+msgid "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
+msgstr ""
+
+#: ../src/elflint.c:2124
+#, c-format
+msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
+msgstr ""
+
+#: ../src/elflint.c:2137
+#, c-format
+msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
+msgstr ""
+
+#: ../src/elflint.c:2155
+#, c-format
+msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:2163
+#, c-format
+msgid "section [%2d] '%s': hash table entry size incorrect\n"
+msgstr ""
+
+#: ../src/elflint.c:2168
+#, c-format
+msgid "section [%2d] '%s': not marked to be allocated\n"
+msgstr ""
+
+#: ../src/elflint.c:2173
+#, c-format
+msgid "section [%2d] '%s': hash table has not even room for initial administrative entries\n"
+msgstr ""
+
+#: ../src/elflint.c:2221
+#, c-format
+msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
+msgstr ""
+
+#: ../src/elflint.c:2299
+#: ../src/elflint.c:2303
+#, c-format
+msgid "section [%2zu] '%s': reference to symbol index 0\n"
+msgstr ""
+
+#: ../src/elflint.c:2310
+#, 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:2322
+#, 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:2338
+#, c-format
+msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
+msgstr ""
+
+#: ../src/elflint.c:2358
+#, c-format
+msgid "section [%2d] '%s': section groups only allowed in relocatable object files\n"
+msgstr ""
+
+#: ../src/elflint.c:2369
+#, c-format
+msgid "section [%2d] '%s': cannot get symbol table: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:2374
+#, c-format
+msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
+msgstr ""
+
+#: ../src/elflint.c:2380
+#, c-format
+msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
+msgstr ""
+
+#: ../src/elflint.c:2385
+#, c-format
+msgid "section [%2d] '%s': sh_flags not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:2392
+#, c-format
+msgid "section [%2d] '%s': cannot get symbol for signature\n"
+msgstr ""
+
+#: ../src/elflint.c:2397
+#, c-format
+msgid "section [%2d] '%s': signature symbol canot be empty string\n"
+msgstr ""
+
+#: ../src/elflint.c:2403
+#, c-format
+msgid "section [%2d] '%s': sh_flags not set correctly\n"
+msgstr ""
+
+#: ../src/elflint.c:2409
+#, fuzzy, c-format
+msgid "section [%2d] '%s': cannot get data: %s\n"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/elflint.c:2418
+#, c-format
+msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
+msgstr ""
+
+#: ../src/elflint.c:2423
+#, c-format
+msgid "section [%2d] '%s': section group without flags word\n"
+msgstr ""
+
+#: ../src/elflint.c:2429
+#, c-format
+msgid "section [%2d] '%s': section group without member\n"
+msgstr ""
+
+#: ../src/elflint.c:2433
+#, c-format
+msgid "section [%2d] '%s': section group with only one member\n"
+msgstr ""
+
+#: ../src/elflint.c:2444
+#, c-format
+msgid "section [%2d] '%s': unknown section group flags\n"
+msgstr ""
+
+#: ../src/elflint.c:2456
+#, c-format
+msgid "section [%2d] '%s': section index %Zu out of range\n"
+msgstr ""
+
+#: ../src/elflint.c:2465
+#, c-format
+msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:2472
+#, c-format
+msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:2478
+#, c-format
+msgid "section [%2d] '%s': element %Zu references section [%2d] '%s' without SHF_GROUP flag set\n"
+msgstr ""
+
+#: ../src/elflint.c:2485
+#, c-format
+msgid "section [%2d] '%s' is contained in more than one section group\n"
+msgstr ""
+
+#: ../src/elflint.c:2674
+#, 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:2685
+#, c-format
+msgid "section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:2701
+#, c-format
+msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
+msgstr ""
+
+#: ../src/elflint.c:2717
+#, c-format
+msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
+msgstr ""
+
+#: ../src/elflint.c:2725
+#, c-format
+msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
+msgstr ""
+
+#: ../src/elflint.c:2739
+#, c-format
+msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
+msgstr ""
+
+#: ../src/elflint.c:2744
+#, c-format
+msgid "section [%2d] '%s': symbol %d: version index %d is for defined version\n"
+msgstr ""
+
+#: ../src/elflint.c:2754
+#, c-format
+msgid "section [%2d] '%s': symbol %d: version index %d is for requested version\n"
+msgstr ""
+
+#: ../src/elflint.c:2806
+#, c-format
+msgid "more than one version reference section present\n"
+msgstr ""
+
+#: ../src/elflint.c:2814
+#: ../src/elflint.c:2943
+#, c-format
+msgid "section [%2d] '%s': sh_link does not link to string table\n"
+msgstr ""
+
+#: ../src/elflint.c:2837
+#: ../src/elflint.c:2995
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong version %d\n"
+msgstr ""
+
+#: ../src/elflint.c:2843
+#: ../src/elflint.c:3001
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
+msgstr ""
+
+#: ../src/elflint.c:2851
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid file reference\n"
+msgstr ""
+
+#: ../src/elflint.c:2859
+#, c-format
+msgid "section [%2d] '%s': entry %d references unknown dependency\n"
+msgstr ""
+
+#: ../src/elflint.c:2871
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
+msgstr ""
+
+#: ../src/elflint.c:2878
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name reference\n"
+msgstr ""
+
+#: ../src/elflint.c:2885
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %#x, expected %#x\n"
+msgstr ""
+
+#: ../src/elflint.c:2895
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version name '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:2906
+#, c-format
+msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
+msgstr ""
+
+#: ../src/elflint.c:2922
+#: ../src/elflint.c:3080
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
+msgstr ""
+
+#: ../src/elflint.c:2935
+#, c-format
+msgid "more than one version definition section present\n"
+msgstr ""
+
+#: ../src/elflint.c:2980
+#, c-format
+msgid "section [%2d] '%s': more than one BASE definition\n"
+msgstr ""
+
+#: ../src/elflint.c:2984
+#, c-format
+msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
+msgstr ""
+
+#: ../src/elflint.c:2990
+#, c-format
+msgid "section [%2d] '%s': entry %d has unknown flag\n"
+msgstr ""
+
+#: ../src/elflint.c:3014
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid name reference\n"
+msgstr ""
+
+#: ../src/elflint.c:3021
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
+msgstr ""
+
+#: ../src/elflint.c:3030
+#, c-format
+msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:3049
+#, c-format
+msgid "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
+msgstr ""
+
+#: ../src/elflint.c:3064
+#, c-format
+msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
+msgstr ""
+
+#: ../src/elflint.c:3086
+#, c-format
+msgid "section [%2d] '%s': no BASE definition\n"
+msgstr ""
+
+#: ../src/elflint.c:3102
+#, c-format
+msgid "section [%2d] '%s': unknown parent version '%s'\n"
+msgstr ""
+
+#: ../src/elflint.c:3115
+#, c-format
+msgid "section [%2d] '%s': empty object attributes section\n"
+msgstr ""
+
+#: ../src/elflint.c:3136
+#, c-format
+msgid "section [%2d] '%s': unrecognized attribute format\n"
+msgstr ""
+
+#: ../src/elflint.c:3152
+#, c-format
+msgid "section [%2d] '%s': offset %zu: zero length field in attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3161
+#, c-format
+msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3173
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n"
+msgstr ""
+
+#: ../src/elflint.c:3190
+#, c-format
+msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
+msgstr ""
+
+#: ../src/elflint.c:3199
+#, c-format
+msgid "section [%2d] '%s': offset %zu: truncated attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3208
+#, c-format
+msgid "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
+msgstr ""
+
+#: ../src/elflint.c:3221
+#, c-format
+msgid "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
+msgstr ""
+
+#. Tag_File
+#: ../src/elflint.c:3232
+#, c-format
+msgid "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
+msgstr ""
+
+#: ../src/elflint.c:3250
+#, c-format
+msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"
+msgstr ""
+
+#: ../src/elflint.c:3261
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n"
+msgstr ""
+
+#: ../src/elflint.c:3274
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"
+msgstr ""
+
+#: ../src/elflint.c:3278
+#, c-format
+msgid "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3288
+#, c-format
+msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n"
+msgstr ""
+
+#: ../src/elflint.c:3294
+#, c-format
+msgid "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
+msgstr ""
+
+#: ../src/elflint.c:3383
+#, fuzzy, c-format
+msgid "cannot get section header of zeroth section\n"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/elflint.c:3387
+#, c-format
+msgid "zeroth section has nonzero name\n"
+msgstr ""
+
+#: ../src/elflint.c:3389
+#, c-format
+msgid "zeroth section has nonzero type\n"
+msgstr ""
+
+#: ../src/elflint.c:3391
+#, c-format
+msgid "zeroth section has nonzero flags\n"
+msgstr ""
+
+#: ../src/elflint.c:3393
+#, fuzzy, c-format
+msgid "zeroth section has nonzero address\n"
+msgstr "%X%P:%S: la sección tiene tanto una dirección de carga como una región de carga\n"
+
+#: ../src/elflint.c:3395
+#, c-format
+msgid "zeroth section has nonzero offset\n"
+msgstr ""
+
+#: ../src/elflint.c:3397
+#, c-format
+msgid "zeroth section has nonzero info field\n"
+msgstr ""
+
+#: ../src/elflint.c:3399
+#, c-format
+msgid "zeroth section has nonzero align value\n"
+msgstr ""
+
+#: ../src/elflint.c:3401
+#, c-format
+msgid "zeroth section has nonzero entry size value\n"
+msgstr ""
+
+#: ../src/elflint.c:3404
+#, c-format
+msgid "zeroth section has nonzero size value while ELF header has nonzero shnum value\n"
+msgstr ""
+
+#: ../src/elflint.c:3408
+#, c-format
+msgid "zeroth section has nonzero link value while ELF header does not signal overflow in shstrndx\n"
+msgstr ""
+
+#: ../src/elflint.c:3425
+#, c-format
+msgid "cannot get section header for section [%2zu] '%s': %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3434
+#, fuzzy, c-format
+msgid "section [%2zu]: invalid name\n"
+msgstr "ftpfs: Nombre de máquina incorrecto"
+
+#: ../src/elflint.c:3461
+#, c-format
+msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3477
+#, c-format
+msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3494
+#, c-format
+msgid "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
+msgstr ""
+
+#: ../src/elflint.c:3512
+#, c-format
+msgid "section [%2zu] '%s' present in object file\n"
+msgstr ""
+
+#: ../src/elflint.c:3518
+#: ../src/elflint.c:3550
+#, c-format
+msgid "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
+msgstr ""
+
+#: ../src/elflint.c:3523
+#: ../src/elflint.c:3555
+#, c-format
+msgid "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n"
+msgstr ""
+
+#: ../src/elflint.c:3531
+#, c-format
+msgid "section [%2zu] '%s' is extension section index table in non-object file\n"
+msgstr ""
+
+#: ../src/elflint.c:3574
+#, fuzzy, c-format
+msgid "section [%2zu] '%s': size not multiple of entry size\n"
+msgstr "Aviso, el tamaño de la sección .pdata (%ld) no es un múltiplo de %d\n"
+
+#: ../src/elflint.c:3579
+#, fuzzy, c-format
+msgid "cannot get section header\n"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/elflint.c:3589
+#, c-format
+msgid "section [%2zu] '%s' has unsupported type %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3603
+#, c-format
+msgid "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3610
+#, c-format
+msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3618
+#, c-format
+msgid "section [%2zu] '%s': thread-local data sections address not zero\n"
+msgstr ""
+
+#: ../src/elflint.c:3626
+#, c-format
+msgid "section [%2zu] '%s': invalid section reference in link value\n"
+msgstr ""
+
+#: ../src/elflint.c:3631
+#, c-format
+msgid "section [%2zu] '%s': invalid section reference in info value\n"
+msgstr ""
+
+#: ../src/elflint.c:3638
+#, c-format
+msgid "section [%2zu] '%s': strings flag set without merge flag\n"
+msgstr ""
+
+#: ../src/elflint.c:3643
+#, c-format
+msgid "section [%2zu] '%s': merge flag set but entry size is zero\n"
+msgstr ""
+
+#: ../src/elflint.c:3661
+#, c-format
+msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n"
+msgstr ""
+
+#: ../src/elflint.c:3670
+#, c-format
+msgid "section [%2zu] '%s' is both executable and writable\n"
+msgstr ""
+
+#: ../src/elflint.c:3697
+#, c-format
+msgid "section [%2zu] '%s' not fully contained in segment of program header entry %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3705
+#, 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:3714
+#, 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:3725
+#, c-format
+msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3735
+#, c-format
+msgid "section [%2zu] '%s' is writable in unwritable segment %d\n"
+msgstr ""
+
+#: ../src/elflint.c:3745
+#, c-format
+msgid "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
+msgstr ""
+
+#: ../src/elflint.c:3751
+#, 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:3759
+#, c-format
+msgid "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
+msgstr ""
+
+#: ../src/elflint.c:3810
+#, c-format
+msgid "more than one version symbol table present\n"
+msgstr ""
+
+#: ../src/elflint.c:3833
+#, c-format
+msgid "INTERP program header entry but no .interp section\n"
+msgstr ""
+
+#: ../src/elflint.c:3844
+#, c-format
+msgid "loadable segment [%u] is executable but contains no executable sections\n"
+msgstr ""
+
+#: ../src/elflint.c:3850
+#, c-format
+msgid "loadable segment [%u] is writable but contains no writable sections\n"
+msgstr ""
+
+#: ../src/elflint.c:3861
+#, c-format
+msgid "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section exist\n"
+msgstr ""
+
+#: ../src/elflint.c:3874
+#, fuzzy, c-format
+msgid "duplicate version index %d\n"
+msgstr "%X%P: marca de versión `%s' duplicada\n"
+
+#: ../src/elflint.c:3888
+#, c-format
+msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n"
+msgstr ""
+
+#: ../src/elflint.c:3937
+#, c-format
+msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n"
+msgstr ""
+
+#: ../src/elflint.c:3941
+#, c-format
+msgid "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n"
+msgstr ""
+
+#: ../src/elflint.c:3963
+#, c-format
+msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n"
+msgstr ""
+
+#: ../src/elflint.c:3967
+#, c-format
+msgid "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n"
+msgstr ""
+
+#: ../src/elflint.c:3984
+#, c-format
+msgid "phdr[%d]: no note entries defined for the type of file\n"
+msgstr ""
+
+#: ../src/elflint.c:4003
+#, c-format
+msgid "phdr[%d]: cannot get content of note section: %s\n"
+msgstr ""
+
+#: ../src/elflint.c:4006
+#, c-format
+msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
+msgstr ""
+
+#: ../src/elflint.c:4027
+#, c-format
+msgid "section [%2d] '%s': no note entries defined for the type of file\n"
+msgstr ""
+
+#: ../src/elflint.c:4034
+#, c-format
+msgid "section [%2d] '%s': cannot get content of note section\n"
+msgstr ""
+
+#: ../src/elflint.c:4037
+#, c-format
+msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
+msgstr ""
+
+#: ../src/elflint.c:4055
+#, c-format
+msgid "only executables, shared objects, and core files can have program headers\n"
+msgstr ""
+
+#: ../src/elflint.c:4070
+#, fuzzy, c-format
+msgid "cannot get program header entry %d: %s\n"
+msgstr "no se puede asignar memoria para la cabecera del programa"
+
+#: ../src/elflint.c:4079
+#, c-format
+msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
+msgstr ""
+
+#: ../src/elflint.c:4090
+#, c-format
+msgid "more than one INTERP entry in program header\n"
+msgstr ""
+
+#: ../src/elflint.c:4098
+#, c-format
+msgid "more than one TLS entry in program header\n"
+msgstr ""
+
+#: ../src/elflint.c:4105
+#, c-format
+msgid "static executable cannot have dynamic sections\n"
+msgstr ""
+
+#: ../src/elflint.c:4119
+#, c-format
+msgid "dynamic section reference in program header has wrong offset\n"
+msgstr ""
+
+#: ../src/elflint.c:4122
+#, c-format
+msgid "dynamic section size mismatch in program and section header\n"
+msgstr ""
+
+#: ../src/elflint.c:4132
+#, c-format
+msgid "more than one GNU_RELRO entry in program header\n"
+msgstr ""
+
+#: ../src/elflint.c:4153
+#, c-format
+msgid "loadable segment GNU_RELRO applies to is not writable\n"
+msgstr ""
+
+#: ../src/elflint.c:4156
+#, c-format
+msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
+msgstr ""
+
+#: ../src/elflint.c:4164
+#: ../src/elflint.c:4187
+#, fuzzy, c-format
+msgid "%s segment not contained in a loaded segment\n"
+msgstr "no se encuentra dentro de la partición %s\n"
+
+#: ../src/elflint.c:4193
+#, c-format
+msgid "program header offset in ELF header and PHDR entry do not match"
+msgstr ""
+
+#: ../src/elflint.c:4217
+#, c-format
+msgid "call frame search table reference in program header has wrong offset\n"
+msgstr ""
+
+#: ../src/elflint.c:4220
+#, c-format
+msgid "call frame search table size mismatch in program and section header\n"
+msgstr ""
+
+#: ../src/elflint.c:4233
+#, c-format
+msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"
+msgstr ""
+
+#: ../src/elflint.c:4241
+#, c-format
+msgid "call frame search table must be allocated\n"
+msgstr ""
+
+#: ../src/elflint.c:4244
+#, fuzzy, c-format
+msgid "section [%2zu] '%s' must be allocated\n"
+msgstr "%B: la sección `%A' no se puede asignar en el segmento %d"
+
+#: ../src/elflint.c:4248
+#, c-format
+msgid "call frame search table must not be writable\n"
+msgstr ""
+
+#: ../src/elflint.c:4251
+#, c-format
+msgid "section [%2zu] '%s' must not be writable\n"
+msgstr ""
+
+#: ../src/elflint.c:4256
+#, c-format
+msgid "call frame search table must not be executable\n"
+msgstr ""
+
+#: ../src/elflint.c:4259
+#, c-format
+msgid "section [%2zu] '%s' must not be executable\n"
+msgstr ""
+
+#: ../src/elflint.c:4270
+#, c-format
+msgid "program header entry %d: file size greater than memory size\n"
+msgstr ""
+
+#: ../src/elflint.c:4277
+#, c-format
+msgid "program header entry %d: alignment not a power of 2\n"
+msgstr ""
+
+#: ../src/elflint.c:4280
+#, c-format
+msgid "program header entry %d: file offset and virtual address not module of alignment\n"
+msgstr ""
+
+#: ../src/elflint.c:4293
+#, 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:4327
+#, fuzzy, c-format
+msgid "cannot read ELF header: %s\n"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/elflint.c:4353
+#, c-format
+msgid "text relocation flag set but not needed\n"
+msgstr ""
+
+#: ../src/addr2line.c:66
+#, fuzzy
+msgid "Output selection options:"
+msgstr "Opciones de selección de archivo"
+
+#: ../src/addr2line.c:67
+msgid "Show only base names of source files"
+msgstr ""
+
+#: ../src/addr2line.c:69
+msgid "Show absolute file names using compilation directory"
+msgstr ""
+
+#: ../src/addr2line.c:70
+#, fuzzy
+msgid "Also show function names"
+msgstr "Mostrar los nombres de las áreas de trabajo en lugar del contenido"
+
+#: ../src/addr2line.c:71
+msgid "Also show symbol or section names"
+msgstr ""
+
+#: ../src/addr2line.c:73
+msgid "Treat addresses as offsets relative to NAME section."
+msgstr ""
+
+#. Short description of program.
+#: ../src/addr2line.c:84
+msgid "Locate source files and line information for ADDRs (in a.out by default)."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/addr2line.c:88
+#, fuzzy
+msgid "[ADDR...]"
+msgstr " Dir: "
+
+#: ../src/addr2line.c:405
+#, c-format
+msgid "Section syntax requires exactly one module"
+msgstr ""
+
+#: ../src/addr2line.c:428
+#, c-format
+msgid "offset %#<PRIxMAX> lies outside section '%s'"
+msgstr ""
+
+#: ../src/addr2line.c:461
+#, fuzzy, c-format
+msgid "cannot find symbol '%s'"
+msgstr "no se puede encontrar el preprocesador de C: %s \n"
+
+#: ../src/addr2line.c:466
+#, c-format
+msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
+msgstr ""
+
+#: ../src/findtextrel.c:70
+#, fuzzy
+msgid "Input Selection:"
+msgstr "Copiar selección"
+
+#: ../src/findtextrel.c:71
+#, fuzzy
+msgid "Prepend PATH to all file names"
+msgstr "Agrega el nombre del cpu al inicio de todos los nombres de símbolo públicos"
+
+#: ../src/findtextrel.c:73
+msgid "Use PATH as root of debuginfo hierarchy"
+msgstr ""
+
+#. Short description of program.
+#: ../src/findtextrel.c:80
+msgid "Locate source of text relocations in FILEs (a.out by default)."
+msgstr ""
+
+#: ../src/findtextrel.c:236
+#: ../src/elfcmp.c:578
+#: ../src/ranlib.c:186
+#, fuzzy, c-format
+msgid "cannot create ELF descriptor for '%s': %s"
+msgstr "no se puede crear el descriptor del objeto compartido"
+
+#: ../src/findtextrel.c:246
+#, fuzzy, c-format
+msgid "cannot get ELF header '%s': %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/findtextrel.c:257
+#, fuzzy, c-format
+msgid "'%s' is not a DSO or PIE"
+msgstr "el valor is_stmt no es 0 ó 1"
+
+#: ../src/findtextrel.c:274
+#, c-format
+msgid "getting get section header of section %zu: %s"
+msgstr ""
+
+#: ../src/findtextrel.c:292
+#, fuzzy, c-format
+msgid "cannot read dynamic section: %s"
+msgstr "reubicación dinámica en la sección de sólo lectura"
+
+#: ../src/findtextrel.c:307
+#, fuzzy, c-format
+msgid "no text relocations reported in '%s'"
+msgstr ""
+"\n"
+"No hay reubicaciones en este fichero.\n"
+
+#: ../src/findtextrel.c:319
+#, fuzzy, c-format
+msgid "while reading ELF file"
+msgstr "Error al leer archivo."
+
+#: ../src/findtextrel.c:328
+#: ../src/findtextrel.c:345
+#, c-format
+msgid "cannot get program header index at offset %d: %s"
+msgstr ""
+
+#: ../src/findtextrel.c:397
+#, fuzzy, c-format
+msgid "cannot get section header of section %Zu: %s"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/findtextrel.c:409
+#, c-format
+msgid "cannot get symbol table section %zu in '%s': %s"
+msgstr ""
+
+#: ../src/findtextrel.c:429
+#: ../src/findtextrel.c:452
+#, c-format
+msgid "cannot get relocation at index %d in section %zu in '%s': %s"
+msgstr ""
+
+#: ../src/findtextrel.c:517
+#, fuzzy, c-format
+msgid "%s not compiled with -fpic/-fPIC\n"
+msgstr "%B: ¿Compilado probablemente sin -fPIC?"
+
+#: ../src/findtextrel.c:570
+#, c-format
+msgid "the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:577
+#: ../src/findtextrel.c:597
+#, c-format
+msgid "the file containing the function '%s' might not be compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:585
+#, c-format
+msgid "either the file containing the function '%s' or the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
+msgstr ""
+
+#: ../src/findtextrel.c:605
+#, c-format
+msgid "a relocation modifies memory at offset %llu in a write-protected segment\n"
+msgstr ""
+
+#: ../src/elfcmp.c:69
+#, fuzzy
+msgid "Control options:"
+msgstr "Las siguientes opciones controlan las optimizaciones"
+
+#: ../src/elfcmp.c:70
+msgid "Control treatment of gaps in loadable segments [ignore|match] (default: ignore)"
+msgstr ""
+
+#: ../src/elfcmp.c:72
+msgid "Ignore permutation of buckets in SHT_HASH section"
+msgstr ""
+
+#: ../src/elfcmp.c:73
+#, fuzzy
+msgid "Output nothing; yield exit status only"
+msgstr "-s --quiet --silent No muestra nada, sólo da un código de salida."
+
+#. Short description of program.
+#: ../src/elfcmp.c:80
+msgid "Compare relevant parts of two ELF files for equality."
+msgstr ""
+
+#. Strings for arguments in help texts.
+#: ../src/elfcmp.c:84
+#, fuzzy
+msgid "FILE1 FILE2"
+msgstr "mv <archivo1> <archivo2>"
+
+#: ../src/elfcmp.c:140
+#, fuzzy
+msgid "Invalid number of parameters.\n"
+msgstr "Número de dispositivo inválido"
+
+#: ../src/elfcmp.c:168
+#: ../src/elfcmp.c:173
+#, fuzzy, c-format
+msgid "cannot get ELF header of '%s': %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/elfcmp.c:190
+#, fuzzy, c-format
+msgid "%s %s diff: ELF header"
+msgstr "cabecera ELF inválida"
+
+#: ../src/elfcmp.c:248
+#, fuzzy, c-format
+msgid "%s %s differ: section header"
+msgstr ""
+"\n"
+"Encabezado Auxiliar de Ejecución\n"
+
+#: ../src/elfcmp.c:276
+#: ../src/elfcmp.c:282
+#, c-format
+msgid "cannot get content of section %zu in '%s': %s"
+msgstr ""
+
+#: ../src/elfcmp.c:298
+#: ../src/elfcmp.c:304
+#, fuzzy, c-format
+msgid "cannot get symbol in '%s': %s"
+msgstr "no se puede definir el símbolo `%s' en la sección absoluta"
+
+#: ../src/elfcmp.c:325
+#, fuzzy, c-format
+msgid "%s %s differ: symbol table [%zu]"
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../src/elfcmp.c:328
+#, fuzzy, c-format
+msgid "%s %s differ: symbol table [%zu,%zu]"
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../src/elfcmp.c:376
+#, c-format
+msgid "%s %s differ: section [%zu] '%s' content"
+msgstr ""
+
+#: ../src/elfcmp.c:380
+#, c-format
+msgid "%s %s differ: section [%zu,%zu] '%s' content"
+msgstr ""
+
+#: ../src/elfcmp.c:396
+#, c-format
+msgid "%s %s differ: unequal amount of important sections"
+msgstr ""
+
+#: ../src/elfcmp.c:430
+#: ../src/elfcmp.c:435
+#, fuzzy, c-format
+msgid "cannot load data of '%s': %s"
+msgstr "no se pueden cargar los datos de `profiling'"
+
+#: ../src/elfcmp.c:454
+#: ../src/elfcmp.c:460
+#, fuzzy, c-format
+msgid "cannot get program header entry %d of '%s': %s"
+msgstr "no se puede asignar memoria para la cabecera del programa"
+
+#: ../src/elfcmp.c:466
+#, fuzzy, c-format
+msgid "%s %s differ: program header %d"
+msgstr ""
+"\n"
+"Encabezado Auxiliar de Ejecución\n"
+
+#: ../src/elfcmp.c:491
+#, fuzzy, c-format
+msgid "%s %s differ: gap"
+msgstr "Porcentaje del hueco"
+
+#: ../src/elfcmp.c:550
+#, fuzzy, c-format
+msgid "Invalid value '%s' for --gaps parameter."
+msgstr "Valor inválido %d para el tamaño de memoria"
+
+#: ../src/elfcmp.c:583
+#, fuzzy, c-format
+msgid "cannot create EBL descriptor for '%s'"
+msgstr "no se puede crear el descriptor del objeto compartido"
+
+#: ../src/elfcmp.c:601
+#, fuzzy, c-format
+msgid "cannot get section header of section %zu: %s"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/elfcmp.c:611
+#, fuzzy, c-format
+msgid "cannot get content of section %zu: %s"
+msgstr "%C: No se puede obtener el contenido de la sección - excepción de auto-importación\n"
+
+#: ../src/elfcmp.c:621
+#: ../src/elfcmp.c:635
+#, fuzzy, c-format
+msgid "cannot get relocation: %s"
+msgstr "No se puede obtener el nombre de la máquina (hostname)"
+
+#. Short description of program.
+#: ../src/ranlib.c:74
+#, fuzzy
+msgid "Generate an index to speed access to archives."
+msgstr " Generar un índice para acelerar el acceso a los archivos\n"
+
+#. Strings for arguments in help texts.
+#: ../src/ranlib.c:77
+#, fuzzy
+msgid "ARCHIVE"
+msgstr "ARCHIVO"
+
+#: ../src/ranlib.c:116
+#, fuzzy, c-format
+msgid "Archive name required"
+msgstr "%s: se requiere un nombre de señalador\n"
+
+#: ../src/ranlib.c:194
+#, fuzzy, c-format
+msgid "'%s' is no archive"
+msgstr "%s: no hay un archivo abierto\n"
+
+#: ../src/ranlib.c:229
+#, c-format
+msgid "error while freeing sub-ELF descriptor: %s"
+msgstr ""
+
+#: ../src/strings.c:70
+#, fuzzy
+msgid "Output Selection:"
+msgstr "Selección del resultado:"
+
+#: ../src/strings.c:71
+msgid "Scan entire file, not only loaded sections"
+msgstr ""
+
+#: ../src/strings.c:73
+msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed"
+msgstr ""
+
+#: ../src/strings.c:74
+msgid "Select character size and endianess: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit"
+msgstr ""
+
+#: ../src/strings.c:78
+msgid "Print name of the file before each string."
+msgstr ""
+
+#: ../src/strings.c:80
+msgid "Print location of the string in base 8, 10, or 16 respectively."
+msgstr ""
+
+#: ../src/strings.c:81
+#, fuzzy
+msgid "Alias for --radix=o"
+msgstr "Introduzca un alias para %s."
+
+#. Short description of program.
+#: ../src/strings.c:88
+msgid "Print the strings of printable characters in files."
+msgstr ""
+
+#: ../src/strings.c:268
+#: ../src/strings.c:303
+#, fuzzy, c-format
+msgid "invalid value '%s' for %s parameter"
+msgstr "Valor inválido para la opción %s: «%s»"
+
+#: ../src/strings.c:314
+#, c-format
+msgid "invalid minimum length of matched string size"
+msgstr ""
+
+#: ../src/strings.c:601
+#, fuzzy, c-format
+msgid "lseek64 failed"
+msgstr "Error en bifurcación de proceso (fork)"
+
+#: ../src/strings.c:616
+#: ../src/strings.c:680
+#, fuzzy, c-format
+msgid "re-mmap failed"
+msgstr "falló la operación `mmap' sobre el fichero de caché.\n"
+
+#: ../src/strings.c:653
+#, fuzzy, c-format
+msgid "mprotect failed"
+msgstr "Error en bifurcación de proceso (fork)"
+
+#: ../src/unstrip.c:77
+msgid "Match MODULE against file names, not module names"
+msgstr ""
+
+#: ../src/unstrip.c:78
+#, fuzzy
+msgid "Silently skip unfindable files"
+msgstr "omitir archivos con el componente inicial <path>"
+
+#: ../src/unstrip.c:81
+#, fuzzy
+msgid "Place output into FILE"
+msgstr " -o <fichero> Coloca la salida en el <fichero>\n"
+
+#: ../src/unstrip.c:83
+#, fuzzy
+msgid "Create multiple output files under DIRECTORY"
+msgstr "no se puede crear el directorio para los ficheros de salida"
+
+#: ../src/unstrip.c:84
+msgid "Use module rather than file names"
+msgstr ""
+
+#: ../src/unstrip.c:86
+msgid "Create output for modules that have no separate debug information"
+msgstr ""
+
+#: ../src/unstrip.c:89
+msgid "Apply relocations to section contents in ET_REL files"
+msgstr ""
+
+#: ../src/unstrip.c:91
+msgid "Only list module and file names, build IDs"
+msgstr ""
+
+#: ../src/unstrip.c:133
+#, fuzzy, c-format
+msgid "-d option specified twice"
+msgstr "se desconoce la opción -m%s= especificada: '%s'"
+
+#: ../src/unstrip.c:165
+#, fuzzy, c-format
+msgid "only one of -o or -d allowed"
+msgstr "Sólo está permitido usar uno de -s, -g, -r, o -l\n"
+
+#: ../src/unstrip.c:174
+#, c-format
+msgid "-n cannot be used with explicit files or -o or -d"
+msgstr ""
+
+#: ../src/unstrip.c:189
+#, fuzzy, c-format
+msgid "output directory '%s'"
+msgstr "Crear directorio"
+
+#: ../src/unstrip.c:198
+#, c-format
+msgid "exactly two file arguments are required"
+msgstr ""
+
+#: ../src/unstrip.c:204
+#, c-format
+msgid "-m, -a, -R, and -i options not allowed with explicit files"
+msgstr ""
+
+#: ../src/unstrip.c:217
+#, c-format
+msgid "-o or -d is required when using implicit files"
+msgstr ""
+
+#: ../src/unstrip.c:253
+#, fuzzy, c-format
+msgid "cannot create ELF header: %s"
+msgstr "no se puede crear el encabezado precompilado %s: %m"
+
+#: ../src/unstrip.c:258
+#, fuzzy, c-format
+msgid "cannot copy ELF header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/unstrip.c:263
+#: ../src/unstrip.c:1816
+#, fuzzy, c-format
+msgid "cannot create program headers: %s"
+msgstr " Número de encabezados de programa: %ld\n"
+
+#: ../src/unstrip.c:269
+#, fuzzy, c-format
+msgid "cannot copy program header: %s"
+msgstr "no se puede asignar memoria para la cabecera del programa"
+
+#: ../src/unstrip.c:279
+#, fuzzy, c-format
+msgid "cannot copy section header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/unstrip.c:282
+#: ../src/unstrip.c:1504
+#, fuzzy, c-format
+msgid "cannot get section data: %s"
+msgstr "Establece la dirección de la sección .data"
+
+#: ../src/unstrip.c:284
+#: ../src/unstrip.c:1506
+#, fuzzy, c-format
+msgid "cannot copy section data: %s"
+msgstr "Establece la dirección de la sección .data"
+
+#: ../src/unstrip.c:308
+#, fuzzy, c-format
+msgid "cannot create directory '%s'"
+msgstr "%s: no se puede crear el directorio %s\n"
+
+#: ../src/unstrip.c:348
+#: ../src/unstrip.c:762
+#: ../src/unstrip.c:1539
+#, fuzzy, c-format
+msgid "cannot get symbol table entry: %s"
+msgstr "%P: aviso: no se puede encontrar el símbolo de entrada %s; se usa por defecto %V\n"
+
+#: ../src/unstrip.c:364
+#: ../src/unstrip.c:579
+#: ../src/unstrip.c:600
+#: ../src/unstrip.c:612
+#: ../src/unstrip.c:1560
+#: ../src/unstrip.c:1690
+#: ../src/unstrip.c:1714
+#, fuzzy, c-format
+msgid "cannot update symbol table: %s"
+msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n"
+
+#: ../src/unstrip.c:381
+#: ../src/unstrip.c:431
+#: ../src/unstrip.c:561
+#: ../src/unstrip.c:1208
+#: ../src/unstrip.c:1524
+#: ../src/unstrip.c:1719
+#: ../src/unstrip.c:1790
+#, fuzzy, c-format
+msgid "cannot update section header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/unstrip.c:407
+#: ../src/unstrip.c:418
+#, fuzzy, c-format
+msgid "cannot update relocation: %s"
+msgstr "%s: no se puede actualizar el fichero %s\n"
+
+#: ../src/unstrip.c:506
+#, fuzzy, c-format
+msgid "cannot get symbol version: %s"
+msgstr "Crea la versión de símbolo por defecto"
+
+#: ../src/unstrip.c:518
+#, c-format
+msgid "unexpected section type in [%Zu] with sh_link to symtab"
+msgstr ""
+
+#: ../src/unstrip.c:768
+#, c-format
+msgid "invalid string offset in symbol [%Zu]"
+msgstr ""
+
+#: ../src/unstrip.c:910
+#: ../src/unstrip.c:1247
+#, fuzzy, c-format
+msgid "cannot read section [%Zu] name: %s"
+msgstr "%F%P: no se puede crear la tabla de división de secciones para %s\n"
+
+#: ../src/unstrip.c:951
+#: ../src/unstrip.c:970
+#: ../src/unstrip.c:1003
+#, c-format
+msgid "cannot read '.gnu.prelink_undo' section: %s"
+msgstr ""
+
+#: ../src/unstrip.c:991
+#, fuzzy, c-format
+msgid "invalid contents in '%s' section"
+msgstr "La sección BOUNDS en el archivo no es válida."
+
+#: ../src/unstrip.c:1046
+#: ../src/unstrip.c:1369
+#, c-format
+msgid "cannot find matching section for [%Zu] '%s'"
+msgstr ""
+
+#: ../src/unstrip.c:1170
+#: ../src/unstrip.c:1185
+#: ../src/unstrip.c:1450
+#, c-format
+msgid "cannot add section name to string table: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1194
+#, c-format
+msgid "cannot update section header string table data: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1222
+#: ../src/unstrip.c:1226
+#, c-format
+msgid "cannot get section header string table section index: %s"
+msgstr ""
+
+#: ../src/unstrip.c:1230
+#: ../src/unstrip.c:1234
+#: ../src/unstrip.c:1465
+#, fuzzy, c-format
+msgid "cannot get section count: %s"
+msgstr "No se puede obtener el nombre oficial de la máquina (hostname)"
+
+#: ../src/unstrip.c:1292
+#: ../src/unstrip.c:1384
+#, fuzzy, c-format
+msgid "cannot read section header string table: %s"
+msgstr "falló la asignación de la tabla de cadenas de cabeceras de sección"
+
+#: ../src/unstrip.c:1444
+#, fuzzy, c-format
+msgid "cannot add new section: %s"
+msgstr "No se puede añadir un contacto nuevo"
+
+#: ../src/unstrip.c:1547
+#, fuzzy, c-format
+msgid "symbol [%Zu] has invalid section index"
+msgstr "%s(%s): la reubicación %d tiene un índice de símbolo %ld inválido"
+
+#: ../src/unstrip.c:1799
+#, fuzzy, c-format
+msgid "cannot get ELF header: %s"
+msgstr "no se puede leer la cabecera del archivo"
+
+#: ../src/unstrip.c:1826
+#, fuzzy, c-format
+msgid "cannot update program header: %s"
+msgstr "no se puede asignar memoria para la cabecera del programa"
+
+#: ../src/unstrip.c:1831
+#: ../src/unstrip.c:1910
+#, fuzzy, c-format
+msgid "cannot write output file: %s"
+msgstr "no se puede escribir al fichero de salida"
+
+#: ../src/unstrip.c:1879
+#, c-format
+msgid "DWARF data not adjusted for prelinking bias; consider prelink -u"
+msgstr ""
+
+#: ../src/unstrip.c:1882
+#, c-format
+msgid "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"
+msgstr ""
+
+#: ../src/unstrip.c:1901
+#: ../src/unstrip.c:1941
+#: ../src/unstrip.c:1953
+#: ../src/unstrip.c:2033
+#, fuzzy, c-format
+msgid "cannot create ELF descriptor: %s"
+msgstr "no se puede crear un descriptor interno"
+
+#: ../src/unstrip.c:1959
+#, fuzzy, c-format
+msgid "'%s' and '%s' do not seem to match"
+msgstr "Al parecer no tiene permisos para acceder a %s."
+
+#: ../src/unstrip.c:1990
+#, c-format
+msgid "cannot find stripped file for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:1994
+#, fuzzy, c-format
+msgid "cannot open stripped file '%s' for module '%s': %s"
+msgstr "¡No se puede abrir el archivo para impresión PostScript!"
+
+#: ../src/unstrip.c:2009
+#, c-format
+msgid "cannot find debug file for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:2013
+#, fuzzy, c-format
+msgid "cannot open debug file '%s' for module '%s': %s"
+msgstr "¡No se puede abrir el archivo para impresión PostScript!"
+
+#: ../src/unstrip.c:2026
+#, fuzzy, c-format
+msgid "module '%s' file '%s' is not stripped"
+msgstr "El fichero '%s' abierto en %C no es un fichero de módulo GFORTRAN"
+
+#: ../src/unstrip.c:2057
+#, c-format
+msgid "cannot cache section addresses for module '%s': %s"
+msgstr ""
+
+#: ../src/unstrip.c:2190
+#, fuzzy, c-format
+msgid "no matching modules found"
+msgstr "No se encontraron usuarios que coincidan"
+
+#: ../src/unstrip.c:2199
+#, fuzzy, c-format
+msgid "matched more than one module"
+msgstr "Se ha especificado más de una fecha tope"
+
+#: ../src/unstrip.c:2246
+#, fuzzy
+msgid ""
+"STRIPPED-FILE DEBUG-FILE\n"
+"[MODULE...]"
+msgstr "|FICHERO|carga módulo de extensiones FICHERO"
+
+#: ../src/unstrip.c:2247
+msgid ""
+"Combine stripped files with separate symbols and debug information.\vThe first form puts the result in DEBUG-FILE if -o was not given.\n"
+"\n"
+"MODULE arguments give file name patterns matching modules to process.\n"
+"With -f these match the file name of the main (stripped) file (slashes are never special), otherwise they match the simple module names. With no arguments, process all modules found.\n"
+"\n"
+"Multiple modules are written to files under OUTPUT-DIRECTORY, creating subdirectories as needed. With -m these files have simple module names, otherwise they have the name of the main file complete with directory underneath OUTPUT-DIRECTORY.\n"
+"\n"
+"With -n no files are written, but one line to standard output for each module:\n"
+"\tSTART+SIZE BUILDID FILE DEBUGFILE MODULENAME\n"
+"START and SIZE are hexadecimal giving the address bounds of the module. BUILDID is hexadecimal for the build ID bits, or - if no ID is known; the hexadecimal may be followed by @0xADDR giving the address where the ID resides if that is known. FILE is the file name found for the module, or - if none was found, or . if an ELF image is available but not from any named file. DEBUGFILE is the separate debuginfo file name, or - if no debuginfo was found, or . if FILE contains the debug information."
+msgstr ""
+
+#: ../src/objdump.c:61
+#, fuzzy
+msgid "Mode selection:"
+msgstr "Modo de selección"
+
+#: ../src/objdump.c:62
+#, fuzzy
+msgid "Display relocation information."
+msgstr "Mostrar la información de la versión."
+
+#: ../src/objdump.c:64
+msgid "Display the full contents of all sections requested"
+msgstr ""
+
+#: ../src/objdump.c:66
+msgid "Display assembler code of executable sections"
+msgstr ""
+
+#: ../src/objdump.c:68
+#, fuzzy
+msgid "Output option selection:"
+msgstr "Modo de empleo: %s [OPCIÓN]... [ENTRADA [SALIDA]]\n"
+
+#: ../src/objdump.c:70
+msgid "Only display information for section NAME."
+msgstr ""
+
+#. Short description of program.
+#: ../src/objdump.c:76
+msgid "Show information from FILEs (a.out by default)."
+msgstr ""
+
+#: ../src/objdump.c:274
+#: ../src/objdump.c:286
+#, fuzzy, c-format
+msgid "while close `%s'"
+msgstr "Cerrar Todo"
+
+#: ../src/objdump.c:510
+#, fuzzy, c-format
+msgid ""
+"\n"
+"RELOCATION RECORDS FOR [%s]:\n"
+"%-*s TYPE VALUE\n"
+msgstr "valor inválido «%s» para el tipo de icono"
+
+#: ../src/objdump.c:513
+#, fuzzy
+msgid "OFFSET"
+msgstr "Desplazamiento en X"
+
+#: ../src/objdump.c:576
+#, fuzzy, c-format
+msgid "Contents of section %s:\n"
+msgstr "Contenido de la sección %s:\n"
+
+#: ../src/objdump.c:676
+#, fuzzy, c-format
+msgid "cannot disassemble"
+msgstr "No se puede ejecutar «%s»"
+
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 00000000..86d05f9b
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,394 @@
+# translation of python-fedora.devel.python-fedora.it.po to Italiano
+# Translations template for python-fedora.
+# This file is distributed under the same license as the python-fedora project.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: python-fedora.devel.python-fedora.it\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-03-20 00:04-0700\n"
+"PO-Revision-Date: 2009-04-30 04:24+0200\n"
+"Last-Translator: \n"
+"Language-Team: Italiano <fedora-trans-it@redhat.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.4\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: fedora/release.py:9
+msgid "Python modules for interacting with Fedora Services"
+msgstr ""
+
+#: fedora/release.py:10
+msgid ""
+"\n"
+"The Fedora Project runs many different services. These services help us "
+"to\n"
+"package software, develop new programs, and generally put together the "
+"distro.\n"
+"This package contains software that helps us do that.\n"
+msgstr ""
+
+#: fedora/accounts/fas2.py:8
+msgid ""
+"fedora.accounts.fas2 has moved to fedora.client.fas2. This location will"
+" disappear in 0.4"
+msgstr ""
+
+#: fedora/client/baseclient.py:84 fedora/client/baseclient.py:203
+#: fedora/client/baseclient.py:222 fedora/client/baseclient.py:234
+msgid "session_cookie is deprecated, use session_id instead"
+msgstr ""
+
+#: fedora/client/baseclient.py:102
+#, python-format
+msgid "Unable to load session from %(file)s"
+msgstr ""
+
+#: fedora/client/baseclient.py:119
+#, python-format
+msgid "Unable to create %(dir)s: %(error)s"
+msgstr ""
+
+#: fedora/client/baseclient.py:131
+#, python-format
+msgid "Unable to write to session file %(session)s: %(error)s"
+msgstr ""
+
+#: fedora/client/baseclient.py:153
+#, python-format
+msgid "No session cached for \"%s\""
+msgstr ""
+
+#: fedora/client/baseclient.py:275
+#, python-format
+msgid "send_request() got an unexpected keyword argument \"%s\""
+msgstr ""
+
+#: fedora/client/baseclient.py:279
+msgid "send_request() got an unexpected keyword argument \"input\""
+msgstr ""
+
+#: fedora/client/baseclient.py:283
+msgid "send_request() got an unexpected keyword argument"
+msgstr ""
+
+#: fedora/client/baseclient.py:287
+msgid "send_request(input) is deprecated. Use send_request(req_params) instead"
+msgstr ""
+
+#: fedora/client/baseclient.py:303
+msgid ""
+"Auth was requested but no way to perform auth was given. Please set "
+"username and password or session_id before calling this function with "
+"auth=True"
+msgstr ""
+
+#: fedora/client/bodhi.py:190
+msgid "You must specify a username"
+msgstr ""
+
+#: fedora/client/bodhi.py:259
+#, python-format
+msgid "Reading from %s "
+msgstr ""
+
+#: fedora/client/fas2.py:187
+#, python-format
+msgid "FAS server unable to retrieve group %s"
+msgstr ""
+
+#: fedora/client/fas2.py:299
+msgid "key must be one of \"id\", \"username\", or \"email\""
+msgstr ""
+
+#: fedora/client/fas2.py:305
+#, python-format
+msgid "%(field)s is not a valid field to filter"
+msgstr ""
+
+#: fedora/client/fas2.py:354
+msgid ""
+"people_by_id() is deprecated and will be removed in 0.4. Please port "
+"your code to use people_by_key(key='id', fields=['human_name', 'email', "
+"'username', 'bugzilla_email']) instead"
+msgstr ""
+
+#: fedora/client/fas2.py:507
+msgid "FAS server unable to retrieve group members"
+msgstr ""
+
+#: fedora/client/fas2.py:529
+msgid "FAS server unable to retrieve user information"
+msgstr ""
+
+#: fedora/client/pkgdb.py:188
+#, python-format
+msgid "PackageDB returned an error creating %(pkg)s: %(msg)s"
+msgstr ""
+
+#: fedora/client/pkgdb.py:193
+#, python-format
+msgid ""
+"Package %(pkg)s does not exist and we do not have enough information to "
+"create it."
+msgstr ""
+
+#: fedora/client/pkgdb.py:230
+#, python-format
+msgid "Unable to save all information for %(pkg)s: %(msg)s"
+msgstr ""
+
+#: fedora/client/pkgdb.py:256
+#, python-format
+msgid "Collection abbreviation %(collection)s is unknown. Use F, FC, EL, or OLPC"
+msgstr ""
+
+#: fedora/client/proxyclient.py:104
+msgid "proxyclient.__init__:entered"
+msgstr ""
+
+#: fedora/client/proxyclient.py:113
+msgid ""
+"Returning cookies from send_request() is deprecated and will be removed "
+"in 0.4. Please port your code to use a session_id instead by calling the"
+" ProxyClient constructor with session_as_cookie=False"
+msgstr ""
+
+#: fedora/client/proxyclient.py:119
+msgid "proxyclient.__init__:exited"
+msgstr ""
+
+#: fedora/client/proxyclient.py:186
+msgid "proxyclient.send_request: entered"
+msgstr ""
+
+#: fedora/client/proxyclient.py:195
+msgid ""
+"Giving a cookie to send_request() to authenticate is deprecated and will "
+"be removed in 0.4. Please port your code to use session_id instead."
+msgstr ""
+
+#: fedora/client/proxyclient.py:205
+msgid "username and password must both be set in auth_params"
+msgstr ""
+
+#: fedora/client/proxyclient.py:208
+msgid ""
+"No known authentication methods specified: set \"cookie\" in auth_params "
+"or set both username and password in auth_params"
+msgstr ""
+
+#: fedora/client/proxyclient.py:269
+#, python-format
+msgid "Creating request %(url)s"
+msgstr ""
+
+#: fedora/client/proxyclient.py:270
+#, python-format
+msgid "Headers: %(header)s"
+msgstr ""
+
+#: fedora/client/proxyclient.py:274
+#, python-format
+msgid "Data: %(data)s"
+msgstr ""
+
+#: fedora/client/proxyclient.py:286
+msgid "Authentication failed logging in"
+msgstr ""
+
+#: fedora/client/proxyclient.py:287
+msgid ""
+"Unable to log into server. Invalid authentication tokens. Send new "
+"username and password"
+msgstr ""
+
+#: fedora/client/proxyclient.py:293
+msgid "Unknown HTTP Server Response"
+msgstr ""
+
+#: fedora/client/proxyclient.py:313
+#, python-format
+msgid "Error returned from simplejson while processing %(url)s: %(err)s"
+msgstr ""
+
+#: fedora/client/proxyclient.py:329
+msgid "proxyclient.send_request: exited"
+msgstr ""
+
+#: fedora/client/wiki.py:56
+#, python-format
+msgid "Login failed: %s"
+msgstr ""
+
+#: fedora/client/wiki.py:64
+#, python-format
+msgid "From %(then)s to %(now)s"
+msgstr ""
+
+#: fedora/client/wiki.py:67
+#, python-format
+msgid "%d wiki changes in the past week"
+msgstr ""
+
+#: fedora/client/wiki.py:69
+msgid ""
+"Warning: Number of changes reaches the API return limit.\n"
+"You will not get the complete list of changes unless\n"
+"you run this script using a 'bot' account."
+msgstr ""
+
+#: fedora/client/wiki.py:79
+msgid ""
+"\n"
+"== Most active wiki users =="
+msgstr ""
+
+#: fedora/client/wiki.py:86
+msgid ""
+"\n"
+"== Most edited pages =="
+msgstr ""
+
+#: fedora/django/auth/models.py:48
+msgid "Loading FAS groups..."
+msgstr ""
+
+#: fedora/django/auth/models.py:55
+msgid "Unable to load FAS groups. Did you set FAS_USERNAME and FAS_PASSWORD?"
+msgstr ""
+
+#: fedora/django/auth/models.py:62
+msgid "FAS groups loaded. Don't forget to unset FAS_USERNAME and FAS_PASSWORD."
+msgstr ""
+
+#: fedora/tg/client.py:8
+msgid ""
+"fedora.tg.client has moved to fedora.client. This location will "
+"disappear in 0.4"
+msgstr ""
+
+#: fedora/tg/controllers.py:58
+#, python-format
+msgid "Welcome, %s"
+msgstr ""
+
+#: fedora/tg/controllers.py:67
+msgid ""
+"The credentials you supplied were not correct or did not grant access to "
+"this resource."
+msgstr ""
+
+#: fedora/tg/controllers.py:70
+msgid "You must provide your credentials before accessing this resource."
+msgstr ""
+
+#: fedora/tg/controllers.py:73
+msgid "Please log in."
+msgstr ""
+
+#: fedora/tg/controllers.py:98
+msgid "You have successfully logged out."
+msgstr ""
+
+#: fedora/tg/util.py:106
+msgid "url() expects a dictionary for query parameters"
+msgstr ""
+
+#: fedora/tg/identity/jsonfasprovider1.py:226
+#: fedora/tg/identity/jsonfasprovider2.py:392
+#, python-format
+msgid "Error logging in %(user)s: %(error)s"
+msgstr ""
+
+#: fedora/tg/identity/jsonfasprovider2.py:59
+msgid ""
+"Cannot enable ssl certificate auth via identity.ssl without setting "
+"fas.usernamme and fas.password for authorization"
+msgstr ""
+
+#: fedora/tg/identity/jsonfasprovider2.py:155
+#, python-format
+msgid "jsonfasprovider, ssl, returned errors from send_request: %s"
+msgstr ""
+
+#: fedora/tg/identity/jsonfasprovider2.py:167
+#, python-format
+msgid "jsonfasprovider returned errors from send_request: %s"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:10
+msgid "Log In"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:14
+msgid "User Name:"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:17
+msgid "Password:"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:21
+#: fedora/tg/templates/genshi/login.html:84
+msgid "Login"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:28
+msgid "CSRF attacks"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:29
+msgid ""
+" are a means for a malicious website to make a request of another\n"
+" web server as the user who contacted the malicious web site. The"
+"\n"
+" purpose of this page is to help protect your account and this "
+"server\n"
+" from attacks from such malicious web sites. By clicking below, "
+"you are\n"
+" proving that you are a person rather than just the web browser\n"
+" forwarding your authentication cookies on behalf of a malicious\n"
+" website."
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:36
+msgid "I am a human"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:41
+msgid "Forgot Password?"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:42
+msgid "Sign Up"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:60
+msgid "Welcome"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:82
+msgid "You are not logged in"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:89
+msgid "CSRF protected"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:91
+msgid "Verify Login"
+msgstr ""
+
+#: fedora/tg/templates/genshi/login.html:97
+msgid "Logout"
+msgstr ""
+
+#: fedora/tg/visit/jsonfasvisit1.py:109 fedora/tg/visit/jsonfasvisit2.py:110
+#, python-format
+msgid "updating visit (%s)"
+msgstr ""
+
diff --git a/src/ChangeLog b/src/ChangeLog
index f4af164b..49b72037 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,171 @@
+2009-04-23 Ulrich Drepper <drepper@redhat.com>
+
+ * Makefile [BUILD_STATIC] (libdw): Add $(zip_LIBS).
+
+2009-04-20 Roland McGrath <roland@redhat.com>
+
+ * addr2line.c (print_dwarf_function): Honor -s and -A for file names
+ of inline call sites.
+
+ * addr2line.c (just_section): New variable.
+ (adjust_to_section): New function, broken out of ...
+ (handle_address): ... here.
+ (options, parse_opt): Add -j/--section=NAME to set it.
+
+2009-04-15 Roland McGrath <roland@redhat.com>
+
+ * readelf.c (print_debug_frame_section): Check for DW_CIE_ID_64 in
+ 64-bit format header, DW_CIE_ID_32 in 32-bit format header.
+
+2009-04-14 Roland McGrath <roland@redhat.com>
+
+ * readelf.c (print_attributes): Treat SHT_ARM_ATTRIBUTES on EM_ARM
+ like SHT_GNU_ATTRIBUTES.
+
+ * readelf.c (handle_core_registers): Fix error message.
+
+ * strip.c (handle_elf: check_preserved): Don't note any change when
+ .debug_data is already filled from a previous pass.
+
+2009-02-05 Ulrich Drepper <drepper@redhat.com>
+
+ * objdump.c (show_relocs_x): Minor cleanups.
+
+ * readelf.c (print_cfa_program): Correct a few labels.
+ Print first DW_CFA_expression and DW_CFA_val_expression parameter
+ as register.
+
+2009-02-01 Ulrich Drepper <drepper@redhat.com>
+
+ * objdump.c (show_relocs_rel, show_relocs_rela): Split common parts
+ into ...
+ (show_relocs_x): ...here. New function.
+ (show_relocs): Better spacing in output.
+
+ * objdump.c (show_relocs_rela): Show offsets as signed values.
+
+ * ar.c (main): Fix recognition of invalid modes for a, b, i modifiers.
+ Improve some error messages.
+ Use program_invocation_short_name instead of AR macro.
+ * Makefile.am (CFLAGS_ar): Remove.
+ * elflint.c (parse_opt): ARGP_HELP_EXIT_ERR does nothing for argp_help.
+ * objdump.c (parse_opt): Likewise.
+ * readelf.c (parse_opt): Likewise.
+
+2009-01-27 Roland McGrath <roland@redhat.com>
+
+ * readelf.c (print_ops): Notice short length, don't overrun buffer
+ (still need to fix LEB128).
+
+ * readelf.c (print_ops): Fix DW_OP_call[24] decoding.
+
+ * readelf.c (print_ops): Print (empty)\n when LEN == 0.
+
+2009-01-24 Ulrich Drepper <drepper@redhat.com>
+
+ * readelf.c (print_debug_frame_section): Fix computation of vma_base
+ for PC-relative mode.
+
+2009-01-23 Ulrich Drepper <drepper@redhat.com>
+
+ * size.c (process_file): When handling archive, close file descriptor
+ here. For unknown file format also close file descriptor.
+ (handle_ar): Don't close file descriptor here.
+
+ * readelf.c (parse_opt): Move code to add to dump_data_sections and
+ string_sections list in local function add_dump_section. Adjust 'x'
+ key handling. For 'a' key add .strtab, .dynstr, and .comment section
+ to string_sections list.
+
+2009-01-22 Roland McGrath <roland@redhat.com>
+
+ * readelf.c (print_phdr): Don't print section mapping when no sections.
+
+ * Makefile.am (AM_CFLAGS): Pass -Wno-format for *_no_Wformat.
+
+ * readelf.c (print_debug_frame_section): Initialize IS_SIGNED to false
+ and reset it only for the 'true' cases.
+
+ * Makefile.am (addr2line_no_Wformat): New variable.
+
+ * readelf.c (print_debug_frame_section): Use t instead of j formats
+ for ptrdiff_t OFFSET.
+
+2009-01-21 Ulrich Drepper <drepper@redhat.com>
+
+ * elflint.c (check_program_header): Fix typo in .eh_frame_hdr section
+ test. Handle debuginfo files.
+ (check_exception_data): First sanity test.
+
+2009-01-17 Ulrich Drepper <drepper@redhat.com>
+
+ * readelf.c (print_debug_exception_table): Show target of ar_disp
+ field.
+
+ * elflint.c (check_program_header): Add most consistency checks for
+ PT_GNU_EH_FRAME entry.
+
+ * addr2line.c: Use ARGP_PROGRAM_VERSION_HOOK_DEF and
+ ARGP_PROGRAM_BUG_ADDRESS_DEF.
+ * ar.c: Likewise.
+ * elfcmp.c: Likewise.
+ * elflint.c: Likewise.
+ * findtextrel.c: Likewise.
+ * ld.c: Likewise.
+ * nm.c: Likewise.
+ * objdump.c: Likewise.
+ * ranlib.c: Likewise.
+ * readelf.c: Likewise.
+
+ * size.c: Likewise.
+ * strings.c: Likewise.
+ * strip.c: Likewise.
+ * unstrip.c: Likewise.
+
+2009-01-16 Ulrich Drepper <drepper@redhat.com>
+
+ * elflint.c (check_program_header): Check that PT_GNU_EH_FRAME entry
+ matches .eh_frame_hdr section, if it is available. Also check that
+ the segment is allocated, not writable, not executable.
+
+ * readelf.c: Add -e option. Dump exception and unwind related
+ sections. Add -e to -a.
+ (print_encoding_base): Handle DW_EH_PE_omit.
+ (print_debug_exception_table): Beginning of support.
+ (print_debug): Hook up print_debug_exception_table for
+ .gcc_except_table sections.
+
+ * readelf.c (print_debug_frame_section): Some fixes for last change.
+
+2009-01-15 Ulrich Drepper <drepper@redhat.com>
+
+ * readelf.c (print_encoding): Now a toplevel function.
+ (print_relinfo): Likewise.
+ (print_encoding_base): Broken out of print_debug_frame_section.
+ (print_debug_frame_section): Print different header for .eh_frame
+ sections. Fix recognition of matching CIEs in .debug_frame sections.
+ Print absolute offset for PC-relative FDE locations. Don't print
+ table header for FDEs if the table is empty.
+ (read_encoded): New function.
+ (print_debug_frame_hdr_section): New function.
+ (print_debug): Hook up print_debug_frame_hdr_section for .eh_frame_hdr
+ sections.
+
+ * readelf.c (handle_relocs_rel): Print section number.
+ (print_debug_abbrev_section): Likewise.
+ (print_debug_aranges_section): Likewise.
+ (print_debug_ranges_section): Likewise.
+ (print_debug_info_section): Likewise.
+ (print_debug_line_section): Likewise.
+ (print_debug_loc_section): Likewise.
+ (print_debug_macinfo_section): Likewise.
+ (print_debug_pubnames_section): Likewise.
+ (print_debug_str_section): Likewise.
+
+2009-01-10 Ulrich Drepper <drepper@redhat.com>
+
+ * strings.c (read_block): Fix typo in error message string.
+
2009-01-07 Ulrich Drepper <drepper@redhat.com>
* ld.c (ld_new_searchdir): Fix adding to search path list.
@@ -6,6 +174,11 @@
* readelf.c: Implement call frame debug section dumping.
+2009-01-05 Roland McGrath <roland@redhat.com>
+
+ * elfcmp.c: Exit with status 2 for errors (like cmp, diff, grep).
+ Status 1 (aka EXIT_FAILURE) is only for completed OK but not equal.
+
2009-01-01 Ulrich Drepper <drepper@redhat.com>
* addr2line.c: Update copyright year.
diff --git a/src/Makefile.am b/src/Makefile.am
index f72bb458..c644a062 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to create Makefile.in
##
-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
+## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007, 2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -34,7 +34,7 @@ endif
AM_CFLAGS += -Wall -Wshadow -std=gnu99 $(native_ld_cflags) \
$(if $($(*F)_no_Werror),,-Werror) \
$(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
- $(if $($(*F)_no_Wformat),,-Wformat=2) $(CFLAGS_$(*F))
+ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $(CFLAGS_$(*F))
INCLUDES = -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
-I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \
@@ -95,7 +95,7 @@ endif
if BUILD_STATIC
libasm = ../libasm/libasm.a
-libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl
+libdw = ../libdw/libdw.a $(zip_LIBS) $(libelf) $(libebl) -ldl
libelf = ../libelf/libelf.a
else
libasm = ../libasm/libasm.so
@@ -108,6 +108,7 @@ libeu = ../lib/libeu.a
nm_no_Wformat = yes
size_no_Wformat = yes
strings_no_Wformat = yes
+addr2line_no_Wformat = yes
# XXX While the file is not finished, don't warn about this
ldgeneric_no_Wunused = yes
@@ -129,7 +130,6 @@ objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap)
strings_LDADD = $(libelf) $(libeu) $(libmudflap)
ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap)
-CFLAGS_ar = -DAR=\"$(shell echo ar|sed '$(transform)')\"
unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl
ldlex.o: ldscript.c
diff --git a/src/addr2line.c b/src/addr2line.c
index 7141e269..99264b01 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -46,13 +46,15 @@
#include <string.h>
#include <unistd.h>
+#include <system.h>
+
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
@@ -67,6 +69,8 @@ static const struct argp_option options[] =
N_("Show absolute file names using compilation directory"), 0 },
{ "functions", 'f', NULL, 0, N_("Also show function names"), 0 },
{ "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 },
+ { "section", 'j', "NAME", 0,
+ N_("Treat addresses as offsets relative to NAME section."), 0 },
{ NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
/* Unsupported options. */
@@ -111,6 +115,9 @@ static bool show_functions;
/* True if ELF symbol or section info should be shown. */
static bool show_symbols;
+/* If non-null, take address parameters as relative to named section. */
+static const char *just_section;
+
int
main (int argc, char *argv[])
@@ -186,8 +193,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
/* Handle program arguments. */
static error_t
-parse_opt (int key, char *arg __attribute__ ((unused)),
- struct argp_state *state)
+parse_opt (int key, char *arg, struct argp_state *state)
{
switch (key)
{
@@ -217,6 +223,10 @@ parse_opt (int key, char *arg __attribute__ ((unused)),
show_symbols = true;
break;
+ case 'j':
+ just_section = arg;
+ break;
+
default:
return ARGP_ERR_UNKNOWN;
}
@@ -274,15 +284,35 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
DW_AT_call_column,
&attr_mem), &val) == 0)
colno = val;
- if (lineno == 0)
+
+ const char *comp_dir = "";
+ const char *comp_dir_sep = "";
+
+ if (file == NULL)
+ file = "???";
+ else if (only_basenames)
+ file = basename (file);
+ else if (use_comp_dir && file[0] != '/')
{
- if (file != NULL)
- printf (" from %s", file);
+ const char *const *dirs;
+ size_t ndirs;
+ if (dwarf_getsrcdirs (files, &dirs, &ndirs) == 0
+ && dirs[0] != NULL)
+ {
+ comp_dir = dirs[0];
+ comp_dir_sep = "/";
+ }
}
+
+ if (lineno == 0)
+ printf (" from %s%s%s",
+ comp_dir, comp_dir_sep, file);
else if (colno == 0)
- printf (" at %s:%u", file, lineno);
+ printf (" at %s%s%s:%u",
+ comp_dir, comp_dir_sep, file, lineno);
else
- printf (" at %s:%u:%u", file, lineno, colno);
+ printf (" at %s%s%s:%u:%u",
+ comp_dir, comp_dir_sep, file, lineno, colno);
}
}
printf (" in ");
@@ -364,6 +394,49 @@ find_symbol (Dwfl_Module *mod,
return DWARF_CB_OK;
}
+static bool
+adjust_to_section (const char *name, uintmax_t *addr, Dwfl *dwfl)
+{
+ /* It was (section)+offset. This makes sense if there is
+ only one module to look in for a section. */
+ Dwfl_Module *mod = NULL;
+ if (dwfl_getmodules (dwfl, &see_one_module, &mod, 0) != 0
+ || mod == NULL)
+ error (EXIT_FAILURE, 0, gettext ("Section syntax requires"
+ " exactly one module"));
+
+ int nscn = dwfl_module_relocations (mod);
+ for (int i = 0; i < nscn; ++i)
+ {
+ GElf_Word shndx;
+ const char *scn = dwfl_module_relocation_info (mod, i, &shndx);
+ if (unlikely (scn == NULL))
+ break;
+ if (!strcmp (scn, name))
+ {
+ /* Found the section. */
+ GElf_Shdr shdr_mem;
+ GElf_Addr shdr_bias;
+ GElf_Shdr *shdr = gelf_getshdr
+ (elf_getscn (dwfl_module_getelf (mod, &shdr_bias), shndx),
+ &shdr_mem);
+ if (unlikely (shdr == NULL))
+ break;
+
+ if (*addr >= shdr->sh_size)
+ error (0, 0,
+ gettext ("offset %#" PRIxMAX " lies outside"
+ " section '%s'"),
+ *addr, scn);
+
+ *addr += shdr->sh_addr + shdr_bias;
+ return true;
+ }
+ }
+
+ return false;
+}
+
static int
handle_address (const char *string, Dwfl *dwfl)
{
@@ -376,45 +449,7 @@ handle_address (const char *string, Dwfl *dwfl)
char *name = NULL;
if (sscanf (string, "(%m[^)])%" PRIiMAX "%n", &name, &addr, &n) == 2
&& string[n] == '\0')
- {
- /* It was (section)+offset. This makes sense if there is
- only one module to look in for a section. */
- Dwfl_Module *mod = NULL;
- if (dwfl_getmodules (dwfl, &see_one_module, &mod, 0) != 0
- || mod == NULL)
- error (EXIT_FAILURE, 0, gettext ("Section syntax requires"
- " exactly one module"));
-
- int nscn = dwfl_module_relocations (mod);
- for (int i = 0; i < nscn; ++i)
- {
- GElf_Word shndx;
- const char *scn = dwfl_module_relocation_info (mod, i, &shndx);
- if (unlikely (scn == NULL))
- break;
- if (!strcmp (scn, name))
- {
- /* Found the section. */
- GElf_Shdr shdr_mem;
- GElf_Addr shdr_bias;
- GElf_Shdr *shdr = gelf_getshdr
- (elf_getscn (dwfl_module_getelf (mod, &shdr_bias), shndx),
- &shdr_mem);
- if (unlikely (shdr == NULL))
- break;
-
- if (addr >= shdr->sh_size)
- error (0, 0,
- gettext ("offset %#" PRIxMAX " lies outside"
- " section '%s'"),
- addr, scn);
-
- addr += shdr->sh_addr + shdr_bias;
- parsed = true;
- break;
- }
- }
- }
+ parsed = adjust_to_section (name, &addr, dwfl);
else if (sscanf (string, "%m[^-+]%" PRIiMAX "%n", &name, &addr, &n) == 2
&& string[n] == '\0')
{
@@ -440,6 +475,9 @@ handle_address (const char *string, Dwfl *dwfl)
if (!parsed)
return 1;
}
+ else if (just_section != NULL
+ && !adjust_to_section (just_section, &addr, dwfl))
+ return 1;
Dwfl_Module *mod = dwfl_addrmodule (dwfl, addr);
diff --git a/src/ar.c b/src/ar.c
index 961db241..2d11b1ef 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -55,7 +55,8 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+
/* Prototypes for local functions. */
static int do_oper_extract (int oper, const char *arfname, char **argv,
int argc, long int instance);
@@ -66,7 +67,7 @@ static int do_oper_insert (int oper, const char *arfname, char **argv,
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
@@ -187,14 +188,16 @@ main (int argc, char *argv[])
if (ipos != ipos_none)
{
/* Only valid for certain operations. */
- if (operation == oper_extract && operation == oper_delete)
+ if (operation != oper_move && operation != oper_replace)
error (1, 0, gettext ("\
'a', 'b', and 'i' are only allowed with the 'm' and 'r' options"));
if (remaining == argc)
{
- error (0, 0, gettext ("MEMBER parameter required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
+ error (0, 0, gettext ("\
+MEMBER parameter required for 'a', 'b', and 'i' modifiers"));
+ argp_help (&argp, stderr, ARGP_HELP_USAGE | ARGP_HELP_SEE,
+ program_invocation_short_name);
exit (EXIT_FAILURE);
}
@@ -213,7 +216,8 @@ main (int argc, char *argv[])
if (remaining == argc)
{
error (0, 0, gettext ("COUNT parameter required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
+ argp_help (&argp, stderr, ARGP_HELP_SEE,
+ program_invocation_short_name);
exit (EXIT_FAILURE);
}
@@ -236,8 +240,8 @@ main (int argc, char *argv[])
/* There must at least be one more parameter specifying the archive. */
if (remaining == argc)
{
- error (0, 0, gettext ("Archive name required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
+ error (0, 0, gettext ("archive name required"));
+ argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name);
exit (EXIT_FAILURE);
}
@@ -308,7 +312,8 @@ parse_opt (int key, char *arg __attribute__ ((unused)),
if (operation != oper_none)
{
error (0, 0, gettext ("More than one operation specified"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
+ argp_help (&argp, stderr, ARGP_HELP_SEE,
+ program_invocation_short_name);
exit (EXIT_FAILURE);
}
@@ -1097,7 +1102,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
if (fd == -1)
{
if (!suppress_create_msg)
- fprintf (stderr, "%s: creating %s\n", AR, arfname);
+ fprintf (stderr, "%s: creating %s\n",
+ program_invocation_short_name, arfname);
goto no_old;
}
@@ -1211,7 +1217,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
if (found[cnt] == NULL)
{
fprintf (stderr, gettext ("%s: no entry %s in archive!\n"),
- AR, argv[cnt]);
+ program_invocation_short_name, argv[cnt]);
status = 1;
}
diff --git a/src/elfcmp.c b/src/elfcmp.c
index 8903efb1..7f871ecf 100644
--- a/src/elfcmp.c
+++ b/src/elfcmp.c
@@ -41,6 +41,7 @@
#include <string.h>
#include <unistd.h>
+#include <system.h>
#include "../libelf/elf-knowledge.h"
#include "../libebl/libeblP.h"
@@ -53,10 +54,10 @@ static int regioncompare (const void *p1, const void *p2);
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
#define OPT_GAPS 0x100
@@ -164,12 +165,12 @@ main (int argc, char *argv[])
GElf_Ehdr ehdr1_mem;
GElf_Ehdr *ehdr1 = gelf_getehdr (elf1, &ehdr1_mem);
if (ehdr1 == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get ELF header of '%s': %s"),
+ error (2, 0, gettext ("cannot get ELF header of '%s': %s"),
fname1, elf_errmsg (-1));
GElf_Ehdr ehdr2_mem;
GElf_Ehdr *ehdr2 = gelf_getehdr (elf2, &ehdr2_mem);
if (ehdr2 == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get ELF header of '%s': %s"),
+ error (2, 0, gettext ("cannot get ELF header of '%s': %s"),
fname2, elf_errmsg (-1));
/* Compare the ELF headers. */
@@ -271,13 +272,13 @@ main (int argc, char *argv[])
Elf_Data *data1 = elf_getdata (scn1, NULL);
if (data1 == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get content of section %zu in '%s': %s"),
elf_ndxscn (scn1), fname1, elf_errmsg (-1));
Elf_Data *data2 = elf_getdata (scn2, NULL);
if (data2 == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get content of section %zu in '%s': %s"),
elf_ndxscn (scn2), fname2, elf_errmsg (-1));
@@ -293,13 +294,13 @@ main (int argc, char *argv[])
GElf_Sym sym1_mem;
GElf_Sym *sym1 = gelf_getsym (data1, ndx, &sym1_mem);
if (sym1 == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get symbol in '%s': %s"),
fname1, elf_errmsg (-1));
GElf_Sym sym2_mem;
GElf_Sym *sym2 = gelf_getsym (data2, ndx, &sym2_mem);
if (sym2 == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get symbol in '%s': %s"),
fname2, elf_errmsg (-1));
@@ -426,12 +427,12 @@ main (int argc, char *argv[])
{
raw1 = elf_rawfile (elf1, &size1);
if (raw1 == NULL )
- error (EXIT_FAILURE, 0, gettext ("cannot load data of '%s': %s"),
+ error (2, 0, gettext ("cannot load data of '%s': %s"),
fname1, elf_errmsg (-1));
raw2 = elf_rawfile (elf2, &size2);
if (raw2 == NULL )
- error (EXIT_FAILURE, 0, gettext ("cannot load data of '%s': %s"),
+ error (2, 0, gettext ("cannot load data of '%s': %s"),
fname2, elf_errmsg (-1));
for (size_t cnt = 0; cnt < nregions; ++cnt)
@@ -449,13 +450,13 @@ main (int argc, char *argv[])
GElf_Phdr phdr1_mem;
GElf_Phdr *phdr1 = gelf_getphdr (elf1, ndx, &phdr1_mem);
if (ehdr1 == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get program header entry %d of '%s': %s"),
ndx, fname1, elf_errmsg (-1));
GElf_Phdr phdr2_mem;
GElf_Phdr *phdr2 = gelf_getphdr (elf2, ndx, &phdr2_mem);
if (ehdr2 == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get program header entry %d of '%s': %s"),
ndx, fname2, elf_errmsg (-1));
@@ -570,15 +571,15 @@ open_file (const char *fname, int *fdp, Ebl **eblp)
{
int fd = open (fname, O_RDONLY);
if (unlikely (fd == -1))
- error (EXIT_FAILURE, errno, gettext ("cannot open '%s'"), fname);
+ error (2, errno, gettext ("cannot open '%s'"), fname);
Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
if (elf == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot create ELF descriptor for '%s': %s"),
fname, elf_errmsg (-1));
Ebl *ebl = ebl_openbackend (elf);
if (ebl == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot create EBL descriptor for '%s'"), fname);
*fdp = fd;
@@ -596,7 +597,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx)
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
if (shdr == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get section header of section %zu: %s"),
elf_ndxscn (scn), elf_errmsg (-1));
@@ -606,7 +607,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx)
Elf_Data *data = elf_getdata (scn, NULL);
if (data == NULL)
- error (EXIT_FAILURE, 0,
+ error (2, 0,
gettext ("cannot get content of section %zu: %s"),
elf_ndxscn (scn), elf_errmsg (-1));
@@ -617,7 +618,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx)
GElf_Rel rel_mem;
GElf_Rel *rel = gelf_getrel (data, ndx, &rel_mem);
if (rel == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get relocation: %s"),
+ error (2, 0, gettext ("cannot get relocation: %s"),
elf_errmsg (-1));
if ((int) GELF_R_SYM (rel->r_info) == symndx
@@ -631,7 +632,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx)
GElf_Rela rela_mem;
GElf_Rela *rela = gelf_getrela (data, ndx, &rela_mem);
if (rela == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get relocation: %s"),
+ error (2, 0, gettext ("cannot get relocation: %s"),
elf_errmsg (-1));
if ((int) GELF_R_SYM (rela->r_info) == symndx
diff --git a/src/elflint.c b/src/elflint.c
index 23b0f496..c04ae57f 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -56,10 +56,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
#define ARGP_strict 300
#define ARGP_gnuld 301
@@ -67,7 +67,6 @@ const char *argp_program_bug_address = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
{
-
{ "strict", ARGP_strict, NULL, 0,
N_("Be extremely strict, flag level 2 features."), 0 },
{ "quiet", 'q', NULL, 0, N_("Do not print anything if successful"), 0 },
@@ -221,9 +220,8 @@ parse_opt (int key, char *arg __attribute__ ((unused)),
case ARGP_KEY_NO_ARGS:
fputs (gettext ("Missing file name.\n"), stderr);
- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
- program_invocation_short_name);
- exit (1);
+ argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name);
+ exit (EXIT_FAILURE);
default:
return ARGP_ERR_UNKNOWN;
@@ -978,6 +976,17 @@ section [%2d] '%s': _DYNAMIC symbol size %" PRIu64 " does not match dynamic segm
}
}
}
+
+ if (GELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
+ && shdr->sh_type == SHT_DYNSYM)
+ ERROR (gettext ("\
+section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-default visibility\n"),
+ idx, section_name (ebl, idx), cnt);
+ if ((sym->st_other ^ GELF_ST_VISIBILITY (sym->st_other)) != 0)
+ ERROR (gettext ("\
+section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"),
+ idx, section_name (ebl, idx), cnt);
+
}
}
@@ -3359,6 +3368,13 @@ static const struct
&& !memcmp (special_sections[idx].name, string, \
sizeof string - (prefix ? 1 : 0)))
+
+/* Indeces of some sections we need later. */
+static size_t eh_frame_hdr_scnndx;
+static size_t eh_frame_scnndx;
+static size_t gcc_except_table_scnndx;
+
+
static void
check_sections (Ebl *ebl, GElf_Ehdr *ehdr)
{
@@ -3555,6 +3571,14 @@ section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n
break;
}
+
+ /* Remember a few special sections for later. */
+ if (strcmp (scnname, ".eh_frame_hdr") == 0)
+ eh_frame_hdr_scnndx = cnt;
+ else if (strcmp (scnname, ".eh_frame") == 0)
+ eh_frame_scnndx = cnt;
+ else if (strcmp (scnname, ".gcc_except_table") == 0)
+ gcc_except_table_scnndx = cnt;
}
if (shdr->sh_entsize != 0 && shdr->sh_size % shdr->sh_entsize)
@@ -3962,6 +3986,7 @@ section [%2d] '%s': unknown object file note type %" PRIu32
return last_offset;
}
+
static void
check_note (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Phdr *phdr, int cnt)
{
@@ -3993,6 +4018,7 @@ phdr[%d]: no note entries defined for the type of file\n"),
cnt, phdr->p_filesz - notes_size);
}
+
static void
check_note_section (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
{
@@ -4024,6 +4050,11 @@ section [%2d] '%s': no note entries defined for the type of file\n"),
idx, section_name (ebl, idx), shdr->sh_size - notes_size);
}
+
+/* Index of the PT_GNU_EH_FRAME program eader entry. */
+static int pt_gnu_eh_frame_pndx;
+
+
static void
check_program_header (Ebl *ebl, GElf_Ehdr *ehdr)
{
@@ -4132,7 +4163,7 @@ more than one GNU_RELRO entry in program header\n"));
if ((phdr2->p_flags & PF_W) == 0)
ERROR (gettext ("\
loadable segment GNU_RELRO applies to is not writable\n"));
- if ((phdr2->p_flags &~ PF_W) != (phdr->p_flags &~ PF_W))
+ if ((phdr2->p_flags & ~PF_W) != (phdr->p_flags & ~PF_W))
ERROR (gettext ("\
loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"),
cnt, inner);
@@ -4173,6 +4204,77 @@ loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"),
ERROR (gettext ("\
program header offset in ELF header and PHDR entry do not match"));
}
+ else if (phdr->p_type == PT_GNU_EH_FRAME)
+ {
+ /* If there is an .eh_frame_hdr section it must be
+ referenced by this program header entry. */
+ Elf_Scn *scn = NULL;
+ GElf_Shdr shdr_mem;
+ GElf_Shdr *shdr = NULL;
+ bool any = false;
+ while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
+ {
+ any = true;
+ shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr != NULL
+ && shdr->sh_type == (is_debuginfo
+ ? SHT_NOBITS : SHT_PROGBITS)
+ && ! strcmp (".eh_frame_hdr",
+ elf_strptr (ebl->elf, shstrndx, shdr->sh_name)))
+ {
+ if (! is_debuginfo)
+ {
+ if (phdr->p_offset != shdr->sh_offset)
+ ERROR (gettext ("\
+call frame search table reference in program header has wrong offset\n"));
+ if (phdr->p_memsz != shdr->sh_size)
+ ERROR (gettext ("\
+call frame search table size mismatch in program and section header\n"));
+ }
+ break;
+ }
+ }
+
+ if (scn == NULL)
+ {
+ /* If there is no section header table we don't
+ complain. But if there is one there should be an
+ entry for .eh_frame_hdr. */
+ if (any)
+ ERROR (gettext ("\
+PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n"));
+ }
+ else
+ {
+ /* The section must be allocated and not be writable and
+ executable. */
+ if ((phdr->p_flags & PF_R) == 0)
+ ERROR (gettext ("\
+call frame search table must be allocated\n"));
+ else if (shdr != NULL && (shdr->sh_flags & SHF_ALLOC) == 0)
+ ERROR (gettext ("\
+section [%2zu] '%s' must be allocated\n"), elf_ndxscn (scn), ".eh_frame_hdr");
+
+ if ((phdr->p_flags & PF_W) != 0)
+ ERROR (gettext ("\
+call frame search table must not be writable\n"));
+ else if (shdr != NULL && (shdr->sh_flags & SHF_WRITE) != 0)
+ ERROR (gettext ("\
+section [%2zu] '%s' must not be writable\n"),
+ elf_ndxscn (scn), ".eh_frame_hdr");
+
+ if ((phdr->p_flags & PF_X) != 0)
+ ERROR (gettext ("\
+call frame search table must not be executable\n"));
+ else if (shdr != NULL && (shdr->sh_flags & SHF_EXECINSTR) != 0)
+ ERROR (gettext ("\
+section [%2zu] '%s' must not be executable\n"),
+ elf_ndxscn (scn), ".eh_frame_hdr");
+ }
+
+ /* Remember which entry this is. */
+ pt_gnu_eh_frame_pndx = cnt;
+ }
if (phdr->p_filesz > phdr->p_memsz
&& (phdr->p_memsz != 0 || phdr->p_type != PT_NOTE))
@@ -4193,6 +4295,17 @@ program header entry %d: file offset and virtual address not module of alignment
}
+static void
+check_exception_data (Ebl *ebl __attribute__ ((unused)),
+ GElf_Ehdr *ehdr __attribute__ ((unused)))
+{
+ if ((ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN)
+ && pt_gnu_eh_frame_pndx == 0 && eh_frame_hdr_scnndx != 0)
+ ERROR (gettext ("executable/DSO with .eh_frame_hdr section does not have "
+ "a PT_GNU_EH_FRAME program header entry"));
+}
+
+
/* Process one file. */
static void
process_elf_file (Elf *elf, const char *prefix, const char *suffix,
@@ -4241,6 +4354,11 @@ process_elf_file (Elf *elf, const char *prefix, const char *suffix,
headers at all. */
check_sections (ebl, ehdr);
+ /* Check the exception handling data, if it exists. */
+ if (pt_gnu_eh_frame_pndx != 0 || eh_frame_hdr_scnndx != 0
+ || eh_frame_scnndx != 0 || gcc_except_table_scnndx != 0)
+ check_exception_data (ebl, ehdr);
+
/* Report if no relocation section needed the text relocation flag. */
if (textrel && !needed_textrel)
ERROR (gettext ("text relocation flag set but not needed\n"));
diff --git a/src/findtextrel.c b/src/findtextrel.c
index 2fd99c96..9d10982f 100644
--- a/src/findtextrel.c
+++ b/src/findtextrel.c
@@ -44,6 +44,8 @@
#include <string.h>
#include <unistd.h>
+#include <system.h>
+
struct segments
{
@@ -54,10 +56,10 @@ struct segments
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
#define OPT_DEBUGINFO 0x100
diff --git a/src/ld.c b/src/ld.c
index b4cc6cc7..989bfaba 100644
--- a/src/ld.c
+++ b/src/ld.c
@@ -48,10 +48,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the various options. */
diff --git a/src/nm.c b/src/nm.c
index 8b8f547f..8833948a 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -58,10 +58,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
diff --git a/src/objdump.c b/src/objdump.c
index 55d3ae2e..af8abf78 100644
--- a/src/objdump.c
+++ b/src/objdump.c
@@ -49,10 +49,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
@@ -234,9 +234,9 @@ parse_opt (int key, char *arg,
if (! any_control_option)
{
fputs (gettext ("No operation specified.\n"), stderr);
- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
+ argp_help (&argp, stderr, ARGP_HELP_SEE,
program_invocation_short_name);
- exit (1);
+ exit (EXIT_FAILURE);
}
default:
@@ -358,11 +358,66 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
static void
+show_relocs_x (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *symdata,
+ Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx,
+ GElf_Addr r_offset, GElf_Xword r_info, GElf_Sxword r_addend)
+{
+ int elfclass = gelf_getclass (ebl->elf);
+ char buf[128];
+
+ printf ("%0*" PRIx64 " %-20s ",
+ elfclass == ELFCLASS32 ? 8 : 16, r_offset,
+ ebl_reloc_type_name (ebl, GELF_R_TYPE (r_info), buf, sizeof (buf)));
+
+ Elf32_Word xndx;
+ GElf_Sym symmem;
+ GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (r_info),
+ &symmem, &xndx);
+
+ if (sym == NULL)
+ printf ("<%s %ld>",
+ gettext ("INVALID SYMBOL"), (long int) GELF_R_SYM (r_info));
+ else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
+ printf ("%s",
+ elf_strptr (ebl->elf, symstrndx, sym->st_name));
+ else
+ {
+ GElf_Shdr destshdr_mem;
+ GElf_Shdr *destshdr;
+ destshdr = gelf_getshdr (elf_getscn (ebl->elf,
+ sym->st_shndx == SHN_XINDEX
+ ? xndx : sym->st_shndx),
+ &destshdr_mem);
+
+ if (shdr == NULL)
+ printf ("<%s %ld>",
+ gettext ("INVALID SECTION"),
+ (long int) (sym->st_shndx == SHN_XINDEX
+ ? xndx : sym->st_shndx));
+ else
+ printf ("%s",
+ elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
+ }
+
+ if (r_addend != 0)
+ {
+ char sign = '+';
+ if (r_addend < 0)
+ {
+ sign = '-';
+ r_addend = -r_addend;
+ }
+ printf ("%c%#" PRIx64, sign, r_addend);
+ }
+ putchar ('\n');
+}
+
+
+static void
show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data,
Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx,
size_t shstrndx)
{
- int elfclass = gelf_getclass (ebl->elf);
int nentries = shdr->sh_size / shdr->sh_entsize;
for (int cnt = 0; cnt < nentries; ++cnt)
@@ -372,60 +427,8 @@ show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data,
rel = gelf_getrel (data, cnt, &relmem);
if (rel != NULL)
- {
- char buf[128];
- GElf_Sym symmem;
- GElf_Sym *sym;
- Elf32_Word xndx;
-
- sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (rel->r_info),
- &symmem, &xndx);
- if (sym == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
- else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- printf ("%0*" PRIx64 " %-20s %s\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, symstrndx, sym->st_name));
- else
- {
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr;
- destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx),
- &destshdr_mem);
-
- if (shdr == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SECTION"),
- (long int) (sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx));
- else
- printf ("%0*" PRIx64 " %-20s %s\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
- }
- }
+ show_relocs_x (ebl, shdr, symdata, xndxdata, symstrndx, shstrndx,
+ rel->r_offset, rel->r_info, 0);
}
}
@@ -435,7 +438,6 @@ show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data,
Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx,
size_t shstrndx)
{
- int elfclass = gelf_getclass (ebl->elf);
int nentries = shdr->sh_size / shdr->sh_entsize;
for (int cnt = 0; cnt < nentries; ++cnt)
@@ -445,64 +447,8 @@ show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data,
rel = gelf_getrela (data, cnt, &relmem);
if (rel != NULL)
- {
- char buf[128];
- GElf_Sym symmem;
- GElf_Sym *sym;
- Elf32_Word xndx;
-
- sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (rel->r_info),
- &symmem, &xndx);
- if (sym == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
- else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- printf ("%0*" PRIx64 " %-20s %s",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, symstrndx, sym->st_name));
- else
- {
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr;
- destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx),
- &destshdr_mem);
-
- if (shdr == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SECTION"),
- (long int) (sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx));
- else
- printf ("%0*" PRIx64 " %-20s %s",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
- }
-
- if (rel->r_addend != 0)
- printf ("+%#" PRIx64, rel->r_addend);
- putchar ('\n');
- }
+ show_relocs_x (ebl, shdr, symdata, xndxdata, symstrndx, shstrndx,
+ rel->r_offset, rel->r_info, rel->r_addend);
}
}
@@ -561,7 +507,7 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx)
shdr->sh_info),
&destshdr_mem);
- printf (gettext ("RELOCATION RECORDS FOR [%s]:\n"
+ printf (gettext ("\nRELOCATION RECORDS FOR [%s]:\n"
"%-*s TYPE VALUE\n"),
elf_strptr (ebl->elf, shstrndx, destshdr->sh_name),
elfclass == ELFCLASS32 ? 8 : 16, gettext ("OFFSET"));
@@ -601,11 +547,11 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx)
else
show_relocs_rela (ebl, shdr, data, symdata, xndxdata,
symshdr->sh_link, shstrndx);
+
+ putchar ('\n');
}
}
- fputs_unlocked ("\n\n", stdout);
-
return 0;
}
diff --git a/src/ranlib.c b/src/ranlib.c
index f456b997..e92dc89b 100644
--- a/src/ranlib.c
+++ b/src/ranlib.c
@@ -58,10 +58,10 @@ static int handle_file (const char *fname);
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
diff --git a/src/readelf.c b/src/readelf.c
index 2041983d..1c790650 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -61,16 +61,16 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
{
{ NULL, 0, NULL, 0, N_("Output selection:"), 0 },
- { "all", 'a', NULL, 0, N_("Equivalent to: -h -l"), 0 },
+ { "all", 'a', NULL, 0, N_("Equivalent to: -e -h -l"), 0 },
{ "dynamic", 'd', NULL, 0, N_("Display the dynamic segment"), 0 },
{ "file-header", 'h', NULL, 0, N_("Display the ELF file header"), 0 },
{ "histogram", 'I', NULL, 0,
@@ -84,8 +84,8 @@ static const struct argp_option options[] =
{ "version-info", 'V', NULL, 0, N_("Display versioning information"), 0 },
{ "debug-dump", 'w', "SECTION", OPTION_ARG_OPTIONAL,
N_("Display DWARF section content. SECTION can be one of abbrev, "
- "aranges, frame, info, loc, line, ranges, pubnames, str, or macinfo."),
- 0 },
+ "aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, "
+ "or exception"), 0 },
{ "notes", 'n', NULL, 0, N_("Display the core notes"), 0 },
{ "arch-specific", 'A', NULL, 0,
N_("Display architecture specific information (if any)"), 0 },
@@ -96,6 +96,8 @@ static const struct argp_option options[] =
{ "string-dump", 'p', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 },
{ "archive-index", 'c', NULL, 0,
N_("Display the symbol index of an archive"), 0 },
+ { "exception", 'e', NULL, 0, N_("Display sections for exception handling"),
+ 0 },
{ NULL, 0, NULL, 0, N_("Output control:"), 0 },
@@ -166,20 +168,21 @@ static bool any_control_option;
/* Select printing of debugging sections. */
static enum section_e
{
- section_abbrev = 1, /* .debug_abbrev */
- section_aranges = 2, /* .debug_aranges */
- section_frame = 4, /* .debug_frame or .eh_frame */
- section_info = 8, /* .debug_info */
- section_line = 16, /* .debug_line */
- section_loc = 32, /* .debug_loc */
- section_pubnames = 64,/* .debug_pubnames */
- section_str = 128, /* .debug_str */
- section_macinfo = 256,/* .debug_macinfo */
- section_ranges = 512, /* .debug_ranges */
+ section_abbrev = 1, /* .debug_abbrev */
+ section_aranges = 2, /* .debug_aranges */
+ section_frame = 4, /* .debug_frame or .eh_frame & al. */
+ section_info = 8, /* .debug_info */
+ section_line = 16, /* .debug_line */
+ section_loc = 32, /* .debug_loc */
+ section_pubnames = 64, /* .debug_pubnames */
+ section_str = 128, /* .debug_str */
+ section_macinfo = 256, /* .debug_macinfo */
+ section_ranges = 512, /* .debug_ranges */
+ section_exception = 1024, /* .eh_frame & al. */
section_all = (section_abbrev | section_aranges | section_frame
| section_info | section_line | section_loc
| section_pubnames | section_str | section_macinfo
- | section_ranges)
+ | section_ranges | section_exception)
} print_debug_sections;
/* Select hex dumping of sections. */
@@ -272,6 +275,17 @@ static error_t
parse_opt (int key, char *arg,
struct argp_state *state __attribute__ ((unused)))
{
+ void add_dump_section (const char *name)
+ {
+ struct section_argument *a = xmalloc (sizeof *a);
+ a->arg = name;
+ a->next = NULL;
+ struct section_argument ***tailp
+ = key == 'x' ? &dump_data_sections_tail : &string_sections_tail;
+ **tailp = a;
+ *tailp = &a->next;
+ }
+
switch (key)
{
case 'a':
@@ -286,6 +300,10 @@ parse_opt (int key, char *arg,
print_histogram = true;
print_arch = true;
print_notes = true;
+ print_debug_sections |= section_exception;
+ add_dump_section (".strtab");
+ add_dump_section (".dynstr");
+ add_dump_section (".comment");
any_control_option = true;
break;
case 'A':
@@ -296,6 +314,10 @@ parse_opt (int key, char *arg,
print_dynamic_table = true;
any_control_option = true;
break;
+ case 'e':
+ print_debug_sections |= section_exception;
+ any_control_option = true;
+ break;
case 'g':
print_section_groups = true;
any_control_option = true;
@@ -358,6 +380,8 @@ parse_opt (int key, char *arg,
print_debug_sections |= section_str;
else if (strcmp (arg, "macinfo") == 0)
print_debug_sections |= section_macinfo;
+ else if (strcmp (arg, "exception") == 0)
+ print_debug_sections |= section_exception;
else
{
fprintf (stderr, gettext ("Unknown DWARF debug section `%s'.\n"),
@@ -377,15 +401,7 @@ parse_opt (int key, char *arg,
}
/* Fall through. */
case 'x':
- {
- struct section_argument *a = xmalloc (sizeof *a);
- a->arg = arg;
- a->next = NULL;
- struct section_argument ***tailp
- = key == 'x' ? &dump_data_sections_tail : &string_sections_tail;
- **tailp = a;
- *tailp = &a->next;
- }
+ add_dump_section (arg);
any_control_option = true;
break;
case ARGP_KEY_NO_ARGS:
@@ -396,9 +412,9 @@ parse_opt (int key, char *arg,
{
fputs (gettext ("No operation specified.\n"), stderr);
do_argp_help:
- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
+ argp_help (&argp, stderr, ARGP_HELP_SEE,
program_invocation_short_name);
- exit (1);
+ exit (EXIT_FAILURE);
}
break;
default:
@@ -966,6 +982,10 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
}
}
+ if (ehdr->e_shnum == 0)
+ /* No sections in the file. Punt. */
+ return;
+
/* Get the section header string table index. */
size_t shstrndx;
if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
@@ -1495,11 +1515,11 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
if (shdr->sh_info != 0)
printf (ngettext ("\
-\nRelocation section [%2u] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
+\nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
"\
-\nRelocation section [%2u] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n",
+\nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n",
nentries),
- (unsigned int) elf_ndxscn (scn),
+ elf_ndxscn (scn),
elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
(unsigned int) shdr->sh_info,
elf_strptr (ebl->elf, shstrndx, destshdr->sh_name),
@@ -2804,7 +2824,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr)
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL || shdr->sh_type != SHT_GNU_ATTRIBUTES)
+ if (shdr == NULL || (shdr->sh_type != SHT_GNU_ATTRIBUTES
+ && (shdr->sh_type != SHT_ARM_ATTRIBUTES
+ || ehdr->e_machine != EM_ARM)))
continue;
printf (gettext ("\
@@ -2851,8 +2873,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr)
printf (gettext (" %-13s %4" PRIu32 "\n"), name, len);
- if (q - name == sizeof "gnu"
- && !memcmp (name, "gnu", sizeof "gnu"))
+ if (shdr->sh_type != SHT_GNU_ATTRIBUTES
+ || (q - name == sizeof "gnu"
+ && !memcmp (name, "gnu", sizeof "gnu")))
while (q < p)
{
const unsigned char *const sub = q;
@@ -3765,6 +3788,14 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
[DW_OP_bit_piece] = "bit_piece",
};
+ if (len == 0)
+ {
+ printf ("%*s(empty)\n", indent, "");
+ return;
+ }
+
+#define NEED(n) if (len < n) goto invalid;
+
Dwarf_Word offset = 0;
while (len-- > 0)
{
@@ -3776,6 +3807,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
case DW_OP_addr:;
/* Address operand. */
Dwarf_Word addr;
+ NEED (addrsize);
if (addrsize == 4)
addr = read_4ubyte_unaligned (dbg, data);
else
@@ -3805,6 +3837,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
case DW_OP_pick:
case DW_OP_const1u:
// XXX value might be modified by relocation
+ NEED (1);
printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 "\n",
indent, "", (uintmax_t) offset,
known[op], *((uint8_t *) data));
@@ -3814,6 +3847,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const2u:
+ NEED (2);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n",
indent, "", (uintmax_t) offset,
@@ -3824,6 +3858,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const4u:
+ NEED (4);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n",
indent, "", (uintmax_t) offset,
@@ -3834,6 +3869,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const8u:
+ NEED (8);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 "\n",
indent, "", (uintmax_t) offset,
@@ -3844,6 +3880,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const1s:
+ NEED (1);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRId8 "\n",
indent, "", (uintmax_t) offset,
@@ -3854,6 +3891,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const2s:
+ NEED (2);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRId16 "\n",
indent, "", (uintmax_t) offset,
@@ -3864,6 +3902,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const4s:
+ NEED (4);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRId32 "\n",
indent, "", (uintmax_t) offset,
@@ -3874,6 +3913,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_const8s:
+ NEED (8);
// XXX value might be modified by relocation
printf ("%*s[%4" PRIuMAX "] %s %" PRId64 "\n",
indent, "", (uintmax_t) offset,
@@ -3889,7 +3929,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
case DW_OP_constu:;
const unsigned char *start = data;
unsigned int uleb;
- get_uleb128 (uleb, data);
+ get_uleb128 (uleb, data); /* XXX check overrun */
printf ("%*s[%4" PRIuMAX "] %s %u\n",
indent, "", (uintmax_t) offset, known[op], uleb);
len -= data - start;
@@ -3899,8 +3939,8 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
case DW_OP_bit_piece:
start = data;
unsigned int uleb2;
- get_uleb128 (uleb, data);
- get_uleb128 (uleb2, data);
+ get_uleb128 (uleb, data); /* XXX check overrun */
+ get_uleb128 (uleb2, data); /* XXX check overrun */
printf ("%*s[%4" PRIuMAX "] %s %u, %u\n",
indent, "", (uintmax_t) offset, known[op], uleb, uleb2);
len -= data - start;
@@ -3912,7 +3952,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
case DW_OP_consts:
start = data;
unsigned int sleb;
- get_sleb128 (sleb, data);
+ get_sleb128 (sleb, data); /* XXX check overrun */
printf ("%*s[%4" PRIuMAX "] %s %d\n",
indent, "", (uintmax_t) offset, known[op], sleb);
len -= data - start;
@@ -3921,8 +3961,8 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
case DW_OP_bregx:
start = data;
- get_uleb128 (uleb, data);
- get_sleb128 (sleb, data);
+ get_uleb128 (uleb, data); /* XXX check overrun */
+ get_sleb128 (sleb, data); /* XXX check overrun */
printf ("%*s[%4" PRIuMAX "] %s %u %d\n",
indent, "", (uintmax_t) offset, known[op], uleb, sleb);
len -= data - start;
@@ -3930,9 +3970,26 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
break;
case DW_OP_call2:
+ NEED (2);
+ printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n",
+ indent, "", (uintmax_t) offset, known[op],
+ read_2ubyte_unaligned (dbg, data));
+ len -= 2;
+ offset += 3;
+ break;
+
case DW_OP_call4:
+ NEED (4);
+ printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n",
+ indent, "", (uintmax_t) offset, known[op],
+ read_4ubyte_unaligned (dbg, data));
+ len -= 4;
+ offset += 5;
+ break;
+
case DW_OP_skip:
case DW_OP_bra:
+ NEED (2);
printf ("%*s[%4" PRIuMAX "] %s %" PRIuMAX "\n",
indent, "", (uintmax_t) offset, known[op],
(uintmax_t) (offset + read_2sbyte_unaligned (dbg, data)));
@@ -3954,6 +4011,12 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
}
indent = indentrest;
+ continue;
+
+ invalid:
+ printf (gettext ("%*s[%4" PRIuMAX "] %s <TRUNCATED>\n"),
+ indent, "", (uintmax_t) offset, known[op]);
+ break;
}
}
@@ -3962,12 +4025,11 @@ static void
print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
Ebl *ebl __attribute__ ((unused)),
GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
+ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
{
- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"
+ printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"
" [ Code]\n"),
- ".debug_abbrev", (uint64_t) shdr->sh_offset);
+ elf_ndxscn (scn), ".debug_abbrev", (uint64_t) shdr->sh_offset);
Dwarf_Off offset = 0;
while (offset < shdr->sh_size)
@@ -4033,8 +4095,7 @@ print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
static void
print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
+ GElf_Ehdr *ehdr, Elf_Scn *scn,
GElf_Shdr *shdr, Dwarf *dbg)
{
Dwarf_Aranges *aranges;
@@ -4047,11 +4108,11 @@ print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
}
printf (ngettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entry:\n",
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entry:\n",
"\
-\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entries:\n",
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entries:\n",
cnt),
- ".debug_aranges", (uint64_t) shdr->sh_offset, cnt);
+ elf_ndxscn (scn), ".debug_aranges", (uint64_t) shdr->sh_offset, cnt);
/* Compute floor(log16(cnt)). */
size_t tmp = cnt;
@@ -4103,8 +4164,8 @@ print_debug_ranges_section (Dwfl_Module *dwflmod,
}
printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_ranges", (uint64_t) shdr->sh_offset);
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), ".debug_ranges", (uint64_t) shdr->sh_offset);
size_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8;
@@ -4244,7 +4305,7 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp,
// XXX overflow check
get_uleb128 (op1, readp);
get_uleb128 (op2, readp);
- printf (" same_value r%" PRIu64 " (%s) in r%" PRIu64 " (%s)\n",
+ printf (" register r%" PRIu64 " (%s) in r%" PRIu64 " (%s)\n",
op1, regname (op1), op2, regname (op2));
break;
case DW_CFA_remember_state:
@@ -4274,16 +4335,16 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp,
case DW_CFA_def_cfa_expression:
// XXX overflow check
get_uleb128 (op1, readp); /* Length of DW_FORM_block. */
- printf (" val_expression %" PRIu64 "\n", op1);
+ printf (" def_cfa_expression %" PRIu64 "\n", op1);
print_ops (dwflmod, dbg, 10, 10, ptr_size, op1, readp);
readp += op1;
- error (1,0,"need to implement BLOCK reading");
break;
case DW_CFA_expression:
// XXX overflow check
get_uleb128 (op1, readp);
get_uleb128 (op2, readp); /* Length of DW_FORM_block. */
- printf (" val_expression %" PRIu64 "\n", op1);
+ printf (" expression r%" PRIu64 " (%s) \n",
+ op1, regname (op1));
print_ops (dwflmod, dbg, 10, 10, ptr_size, op2, readp);
readp += op2;
break;
@@ -4318,24 +4379,25 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp,
// XXX overflow check
get_uleb128 (op1, readp);
get_sleb128 (sop2, readp);
- printf (" val_offset %" PRIu64 " at offset %" PRId64 "\n",
+ printf (" val_offset_sf %" PRIu64 " at offset %" PRId64 "\n",
op1, sop2 * data_align);
break;
case DW_CFA_val_expression:
// XXX overflow check
get_uleb128 (op1, readp);
get_uleb128 (op2, readp); /* Length of DW_FORM_block. */
- printf (" val_expression %" PRIu64 "\n", op1);
+ printf (" val_expression r%" PRIu64 " (%s)\n",
+ op1, regname (op1));
print_ops (dwflmod, dbg, 10, 10, ptr_size, op2, readp);
readp += op2;
break;
case DW_CFA_MIPS_advance_loc8:
op1 = read_8ubyte_unaligned_inc (dbg, readp);
- printf (" advance_loc2 %" PRIu64 " to %#" PRIx64 "\n",
+ printf (" MIPS_advance_loc8 %" PRIu64 " to %#" PRIx64 "\n",
op1, pc += op1 * code_align);
break;
case DW_CFA_GNU_window_save:
- puts (" window_save");
+ puts (" GNU_window_save");
break;
case DW_CFA_GNU_args_size:
// XXX overflow check
@@ -4381,6 +4443,159 @@ encoded_ptr_size (int encoding, unsigned int ptr_size)
}
+static unsigned int
+print_encoding (unsigned int val)
+{
+ switch (val & 0xf)
+ {
+ case DW_EH_PE_absptr:
+ fputs ("absptr", stdout);
+ break;
+ case DW_EH_PE_uleb128:
+ fputs ("uleb128", stdout);
+ break;
+ case DW_EH_PE_udata2:
+ fputs ("udata2", stdout);
+ break;
+ case DW_EH_PE_udata4:
+ fputs ("udata4", stdout);
+ break;
+ case DW_EH_PE_udata8:
+ fputs ("udata8", stdout);
+ break;
+ case DW_EH_PE_sleb128:
+ fputs ("sleb128", stdout);
+ break;
+ case DW_EH_PE_sdata2:
+ fputs ("sdata2", stdout);
+ break;
+ case DW_EH_PE_sdata4:
+ fputs ("sdata4", stdout);
+ break;
+ case DW_EH_PE_sdata8:
+ fputs ("sdata8", stdout);
+ break;
+ default:
+ /* We did not use any of the bits after all. */
+ return val;
+ }
+
+ return val & ~0xf;
+}
+
+
+static unsigned int
+print_relinfo (unsigned int val)
+{
+ switch (val & 0x70)
+ {
+ case DW_EH_PE_pcrel:
+ fputs ("pcrel", stdout);
+ break;
+ case DW_EH_PE_textrel:
+ fputs ("textrel", stdout);
+ break;
+ case DW_EH_PE_datarel:
+ fputs ("datarel", stdout);
+ break;
+ case DW_EH_PE_funcrel:
+ fputs ("funcrel", stdout);
+ break;
+ case DW_EH_PE_aligned:
+ fputs ("aligned", stdout);
+ break;
+ default:
+ return val;
+ }
+
+ return val & ~0x70;
+}
+
+
+static void
+print_encoding_base (const char *pfx, unsigned int fde_encoding)
+{
+ printf ("(%s", pfx);
+
+ if (fde_encoding == DW_EH_PE_omit)
+ puts ("omit)");
+ else
+ {
+ unsigned int w = fde_encoding;
+
+ if (w & 0xf)
+ w = print_encoding (w);
+
+ if (w & 0x70)
+ {
+ if (w != fde_encoding)
+ fputc_unlocked (' ', stdout);
+
+ w = print_relinfo (w);
+ }
+
+ if (w != 0)
+ printf ("%s%x", w != fde_encoding ? " " : "", w);
+
+ puts (")");
+ }
+}
+
+
+static const unsigned char *
+read_encoded (unsigned int encoding, const unsigned char *readp,
+ const unsigned char *const endp, uint64_t *res, Dwarf *dbg)
+{
+ switch (encoding & 0xf)
+ {
+ case DW_EH_PE_uleb128:
+ // XXX buffer overrun check
+ get_uleb128 (*res, readp);
+ break;
+ case DW_EH_PE_sleb128:
+ // XXX buffer overrun check
+ get_sleb128 (*res, readp);
+ break;
+ case DW_EH_PE_udata2:
+ if (readp + 2 > endp)
+ goto invalid;
+ *res = read_2ubyte_unaligned_inc (dbg, readp);
+ break;
+ case DW_EH_PE_udata4:
+ if (readp + 4 > endp)
+ goto invalid;
+ *res = read_4ubyte_unaligned_inc (dbg, readp);
+ break;
+ case DW_EH_PE_udata8:
+ if (readp + 8 > endp)
+ goto invalid;
+ *res = read_8ubyte_unaligned_inc (dbg, readp);
+ break;
+ case DW_EH_PE_sdata2:
+ if (readp + 2 > endp)
+ goto invalid;
+ *res = read_2sbyte_unaligned_inc (dbg, readp);
+ break;
+ case DW_EH_PE_sdata4:
+ if (readp + 4 > endp)
+ goto invalid;
+ *res = read_4sbyte_unaligned_inc (dbg, readp);
+ break;
+ case DW_EH_PE_sdata8:
+ if (readp + 8 > endp)
+ goto invalid;
+ *res = read_8sbyte_unaligned_inc (dbg, readp);
+ break;
+ default:
+ invalid:
+ error (1, 0,
+ gettext ("invalid encoding"));
+ }
+
+ return readp;
+}
+
+
static void
print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
@@ -4398,10 +4613,16 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
scnname, elf_errmsg (-1));
return;
}
+ bool is_eh_frame = strcmp (scnname, ".eh_frame") == 0;
- printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- scnname, (uint64_t) shdr->sh_offset);
+ if (is_eh_frame)
+ printf (gettext ("\
+\nCall frame information section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), scnname, (uint64_t) shdr->sh_offset);
+ else
+ printf (gettext ("\
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), scnname, (uint64_t) shdr->sh_offset);
struct cieinfo
{
@@ -4410,20 +4631,16 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
unsigned int code_alignment_factor;
unsigned int data_alignment_factor;
unsigned int fde_encoding;
+ unsigned int lsda_encoding;
struct cieinfo *next;
} *cies = NULL;
const unsigned char *readp = data->d_buf;
const unsigned char *const dataend = ((unsigned char *) data->d_buf
+ data->d_size);
- bool is_eh_frame = strcmp (scnname, ".eh_frame") == 0;
while (readp < dataend)
{
- /* At the beginning there must be a CIE. There can be multiple,
- hence we test tis in a loop. */
- ptrdiff_t offset = readp - (unsigned char *) data->d_buf;
-
- if (unlikely (readp + 12 > dataend))
+ if (unlikely (readp + 4 > dataend))
{
invalid_data:
error (0, 0, gettext ("invalid data in section [%zu] '%s'"),
@@ -4431,36 +4648,52 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
return;
}
- unsigned int ptr_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8;
+ /* At the beginning there must be a CIE. There can be multiple,
+ hence we test tis in a loop. */
+ ptrdiff_t offset = readp - (unsigned char *) data->d_buf;
Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, readp);
unsigned int length = 4;
if (unlikely (unit_length == 0xffffffff))
{
+ if (unlikely (readp + 8 > dataend))
+ goto invalid_data;
+
unit_length = read_8ubyte_unaligned_inc (dbg, readp);
length = 8;
+ }
- if (unlikely (readp + 12 > dataend))
- goto invalid_data;
+ if (unlikely (unit_length == 0))
+ {
+ printf (gettext ("\n [%6tx] Zero terminator\n"), offset);
+ continue;
}
+
+ unsigned int ptr_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8;
+
ptrdiff_t start = readp - (unsigned char *) data->d_buf;
const unsigned char *const cieend = readp + unit_length;
- if (unlikely (cieend > dataend))
+ if (unlikely (cieend > dataend || readp + 8 > dataend))
goto invalid_data;
- Dwarf_Word cie_id;
+ Dwarf_Off cie_id;
if (length == 4)
- cie_id = read_4ubyte_unaligned_inc (dbg, readp);
+ {
+ cie_id = read_4ubyte_unaligned_inc (dbg, readp);
+ if (!is_eh_frame && cie_id == DW_CIE_ID_32)
+ cie_id = DW_CIE_ID_64;
+ }
else
cie_id = read_8ubyte_unaligned_inc (dbg, readp);
unsigned int code_alignment_factor;
int data_alignment_factor;
unsigned int fde_encoding = 0;
+ unsigned int lsda_encoding = 0;
Dwarf_Word initial_location = 0;
+ Dwarf_Word vma_base = 0;
- if ((is_eh_frame && cie_id == 0)
- || (! is_eh_frame && cie_id == DW_CIE_ID))
+ if (cie_id == (is_eh_frame ? 0 : DW_CIE_ID_64))
{
uint_fast8_t version = *readp++;
const char *const augmentation = (const char *) readp;
@@ -4484,7 +4717,7 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
// XXX Check overflow
get_uleb128 (return_address_register, readp);
- printf (" [%6jx] CIE length=%" PRIu64 "\n"
+ printf ("\n [%6tx] CIE length=%" PRIu64 "\n"
" CIE_id: %" PRIu64 "\n"
" version: %u\n"
" augmentation: \"%s\"\n"
@@ -4497,71 +4730,6 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
if (augmentation[0] == 'z')
{
- unsigned int print_encoding (unsigned int val)
- {
- switch (val & 0xf)
- {
- case DW_EH_PE_absptr:
- fputs ("absptr", stdout);
- break;
- case DW_EH_PE_uleb128:
- fputs ("uleb128", stdout);
- break;
- case DW_EH_PE_udata2:
- fputs ("udata2", stdout);
- break;
- case DW_EH_PE_udata4:
- fputs ("udata4", stdout);
- break;
- case DW_EH_PE_udata8:
- fputs ("udata8", stdout);
- break;
- case DW_EH_PE_sleb128:
- fputs ("sleb128", stdout);
- break;
- case DW_EH_PE_sdata2:
- fputs ("sdata2", stdout);
- break;
- case DW_EH_PE_sdata4:
- fputs ("sdata4", stdout);
- break;
- case DW_EH_PE_sdata8:
- fputs ("sdata8", stdout);
- break;
- default:
- /* We did not use any of the bits after all. */
- return val;
- }
-
- return val & ~0xf;
- }
-
- unsigned int print_relinfo (unsigned int val)
- {
- switch (val & 0x70)
- {
- case DW_EH_PE_pcrel:
- fputs ("pcrel", stdout);
- break;
- case DW_EH_PE_textrel:
- fputs ("textrel", stdout);
- break;
- case DW_EH_PE_datarel:
- fputs ("datarel", stdout);
- break;
- case DW_EH_PE_funcrel:
- fputs ("funcrel", stdout);
- break;
- case DW_EH_PE_aligned:
- fputs ("aligned", stdout);
- break;
- default:
- return val;
- }
-
- return val & ~0x70;
- }
-
unsigned int augmentationlen;
get_uleb128 (augmentationlen, readp);
@@ -4574,39 +4742,30 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
if (*cp == 'R')
{
- putchar_unlocked ('(');
-
- unsigned int w = fde_encoding = *readp++;
-
- if (w & 0xf)
- w = print_encoding (w);
-
- if (w & 0x70)
- {
- if (w != fde_encoding)
- fputc_unlocked (' ', stdout);
-
- w = print_relinfo (w);
- }
-
- if (w != 0)
- printf ("(%s%x", w != fde_encoding ? " " : "", w);
-
- puts (")");
+ fde_encoding = *readp++;
+ print_encoding_base (gettext ("FDE address encoding: "),
+ fde_encoding);
+ }
+ else if (*cp == 'L')
+ {
+ lsda_encoding = *readp++;
+ print_encoding_base (gettext ("LSDA pointer encoding: "),
+ lsda_encoding);
}
else if (*cp == 'P')
{
+ /* Personality. This field usually has a relocation
+ attached pointing to __gcc_personality_v0. */
const unsigned char *startp = readp;
unsigned int encoding = *readp++;
uint64_t val = 0;
int64_t sval = 0;
- bool is_signed;
+ bool is_signed = false;
switch (encoding & 0xf)
{
case DW_EH_PE_uleb128:
get_uleb128 (val, readp);
- is_signed = false;
break;
case DW_EH_PE_sleb128:
get_sleb128 (sval, readp);
@@ -4614,15 +4773,12 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
break;
case DW_EH_PE_udata2:
val = read_2ubyte_unaligned_inc (dbg, readp);
- is_signed = false;
break;
case DW_EH_PE_udata4:
val = read_4ubyte_unaligned_inc (dbg, readp);
- is_signed = false;
break;
case DW_EH_PE_udata8:
val = read_8ubyte_unaligned_inc (dbg, readp);
- is_signed = false;
break;
case DW_EH_PE_sdata2:
val = read_2sbyte_unaligned_inc (dbg, readp);
@@ -4654,13 +4810,13 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
++cp;
}
- readp += augmentationlen;
}
struct cieinfo *newp = alloca (sizeof (*newp));
newp->cie_offset = offset;
newp->augmentation = augmentation;
newp->fde_encoding = fde_encoding;
+ newp->lsda_encoding = lsda_encoding;
newp->code_alignment_factor = code_alignment_factor;
newp->data_alignment_factor = data_alignment_factor;
newp->next = cies;
@@ -4670,7 +4826,9 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
{
struct cieinfo *cie = cies;
while (cie != NULL)
- if (start - (ptrdiff_t) cie_id == cie->cie_offset)
+ if (is_eh_frame
+ ? start - (ptrdiff_t) cie_id == cie->cie_offset
+ : (ptrdiff_t) cie_id == cie->cie_offset)
break;
else
cie = cie->next;
@@ -4681,45 +4839,85 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
}
/* Initialize from CIE data. */
- ptr_size = encoded_ptr_size (cie->fde_encoding, ptr_size);
+ fde_encoding = cie->fde_encoding;
+ lsda_encoding = cie->lsda_encoding;
+ ptr_size = encoded_ptr_size (fde_encoding, ptr_size);
code_alignment_factor = cie->code_alignment_factor;
data_alignment_factor = cie->data_alignment_factor;
- fde_encoding = cie->fde_encoding;
+ const unsigned char *base = readp;
+ // XXX There are sometimes relocations for this value
initial_location = read_ubyte_unaligned_inc (ptr_size, dbg, readp);
Dwarf_Word address_range
= read_ubyte_unaligned_inc (ptr_size, dbg, readp);
- printf ("\n [%6jx] FDE length=%" PRIu64 " cie=[%6jx]\n"
+ printf ("\n [%6tx] FDE length=%" PRIu64 " cie=[%6tx]\n"
" CIE_pointer: %" PRIu64 "\n"
- " initial_location: %#" PRIx64 "\n"
- " address_range: %#" PRIx64 "\n",
+ " initial_location: %#" PRIx64,
offset, (uint64_t) unit_length,
cie->cie_offset, (uint64_t) cie_id,
- (uint64_t) initial_location, (uint64_t) address_range);
+ (uint64_t) initial_location);
+ if ((fde_encoding & 0x70) == DW_EH_PE_pcrel)
+ {
+ vma_base = (((uint64_t) shdr->sh_offset
+ + (base - (const unsigned char *) data->d_buf)
+ + (uint64_t) initial_location)
+ & (ptr_size == 4
+ ? UINT64_C (0xffffffff)
+ : UINT64_C (0xffffffffffffffff)));
+ printf (gettext (" (offset: %#" PRIx64 ")"),
+ (uint64_t) vma_base);
+ }
+
+ printf ("\n address_range: %#" PRIx64,
+ (uint64_t) address_range);
+ if ((fde_encoding & 0x70) == DW_EH_PE_pcrel)
+ printf (gettext (" (end offset: %#" PRIx64 ")"),
+ ((uint64_t) vma_base + (uint64_t) address_range)
+ & (ptr_size == 4
+ ? UINT64_C (0xffffffff)
+ : UINT64_C (0xffffffffffffffff)));
+ putchar ('\n');
if (cie->augmentation[0] == 'z')
{
unsigned int augmentationlen;
get_uleb128 (augmentationlen, readp);
- const char *hdr = "Augmentation data:";
- const char *cp = cie->augmentation + 1;
- for (unsigned int u = 0; u < augmentationlen; ++cp, ++u)
+ if (augmentationlen > 0)
{
- printf (" %-26s%#x (", hdr, readp[u]);
- hdr = "";
+ const char *hdr = "Augmentation data:";
+ const char *cp = cie->augmentation + 1;
+ unsigned int u = 0;
+ while (*cp != '\0')
+ {
+ if (*cp == 'L')
+ {
+ uint64_t lsda_pointer;
+ const unsigned char *p
+ = read_encoded (lsda_encoding, &readp[u],
+ &readp[augmentationlen],
+ &lsda_pointer, dbg);
+ u = p - readp;
+ printf (gettext ("\
+ %-26sLSDA pointer: %#" PRIx64 "\n"),
+ hdr, lsda_pointer);
+ hdr = "";
+ }
+ ++cp;
+ }
+
+ while (u < augmentationlen)
+ {
+ printf (" %-26s%#x\n", hdr, readp[u++]);
+ hdr = "";
+ }
}
+
+ readp += augmentationlen;
}
}
- /* To print correct addresses compute the base address. */
- Dwarf_Word vma_base;
- if ((fde_encoding & 0x70) == DW_EH_PE_pcrel && ehdr->e_type != ET_REL)
- vma_base = shdr->sh_addr + initial_location;
- else
- vma_base = 0;
-
/* Handle the initialization instructions. */
print_cfa_program (readp, cieend, vma_base, code_alignment_factor,
data_alignment_factor, ptr_size, dwflmod, ebl, dbg);
@@ -4947,12 +5145,12 @@ static void
print_debug_info_section (Dwfl_Module *dwflmod,
Ebl *ebl __attribute__ ((unused)),
GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
+ Elf_Scn *scn,
GElf_Shdr *shdr, Dwarf *dbg)
{
printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n [Offset]\n"),
- ".debug_info", (uint64_t) shdr->sh_offset);
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n [Offset]\n"),
+ elf_ndxscn (scn), ".debug_info", (uint64_t) shdr->sh_offset);
/* If the section is empty we don't have to do anything. */
if (shdr->sh_size == 0)
@@ -5072,8 +5270,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl,
Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
{
printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_line", (uint64_t) shdr->sh_offset);
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), ".debug_line", (uint64_t) shdr->sh_offset);
if (shdr->sh_size == 0)
return;
@@ -5504,11 +5702,8 @@ advance address by fixed value %u to %s\n"),
static void
print_debug_loc_section (Dwfl_Module *dwflmod,
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr,
- Dwarf *dbg __attribute__ ((unused)))
+ Ebl *ebl __attribute__ ((unused)), GElf_Ehdr *ehdr,
+ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
{
Elf_Data *data = elf_rawdata (scn, NULL);
@@ -5520,8 +5715,8 @@ print_debug_loc_section (Dwfl_Module *dwflmod,
}
printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_loc", (uint64_t) shdr->sh_offset);
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), ".debug_loc", (uint64_t) shdr->sh_offset);
size_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8;
@@ -5615,8 +5810,8 @@ print_debug_macinfo_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
{
printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_macinfo", (uint64_t) shdr->sh_offset);
+\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), ".debug_macinfo", (uint64_t) shdr->sh_offset);
putc_unlocked ('\n', stdout);
/* There is no function in libdw to iterate over the raw content of
@@ -5784,11 +5979,10 @@ static void
print_debug_pubnames_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
Ebl *ebl __attribute__ ((unused)),
GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
+ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
{
- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_pubnames", (uint64_t) shdr->sh_offset);
+ printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"),
+ elf_ndxscn (scn), ".debug_pubnames", (uint64_t) shdr->sh_offset);
int n = 0;
(void) dwarf_getpubnames (dbg, print_pubnames, &n, 0);
@@ -5799,8 +5993,7 @@ static void
print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
Ebl *ebl __attribute__ ((unused)),
GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
+ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
{
/* Compute floor(log16(shdr->sh_size)). */
GElf_Addr tmp = shdr->sh_size;
@@ -5812,8 +6005,9 @@ print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
}
digits = MAX (4, digits);
- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"
+ printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"
" %*s String\n"),
+ elf_ndxscn (scn),
".debug_str", (uint64_t) shdr->sh_offset,
/* TRANS: the debugstr| prefix makes the string unique. */
digits + 2, sgettext ("debugstr|Offset"));
@@ -5836,6 +6030,268 @@ print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
}
}
+
+/* Print the content of the call frame search table section
+ '.eh_frame_hdr'. */
+static void
+print_debug_frame_hdr_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
+ Ebl *ebl __attribute__ ((unused)),
+ GElf_Ehdr *ehdr __attribute__ ((unused)),
+ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
+{
+ printf (gettext ("\
+\nCall frame search table section [%2zu] '.eh_frame_hdr':\n"),
+ elf_ndxscn (scn));
+
+ Elf_Data *data = elf_rawdata (scn, NULL);
+
+ if (unlikely (data == NULL))
+ {
+ error (0, 0, gettext ("cannot get %s content: %s"),
+ ".eh_frame_hdr", elf_errmsg (-1));
+ return;
+ }
+
+ const unsigned char *readp = data->d_buf;
+ const unsigned char *const dataend = ((unsigned char *) data->d_buf
+ + data->d_size);
+
+ if (unlikely (readp + 4 > dataend))
+ {
+ invalid_data:
+ error (0, 0, gettext ("invalid data"));
+ return;
+ }
+
+ unsigned int version = *readp++;
+ unsigned int eh_frame_ptr_enc = *readp++;
+ unsigned int fde_count_enc = *readp++;
+ unsigned int table_enc = *readp++;
+
+ printf (" version: %u\n"
+ " eh_frame_ptr_enc: %#x ",
+ version, eh_frame_ptr_enc);
+ print_encoding_base ("", eh_frame_ptr_enc);
+ printf (" fde_count_enc: %#x ", fde_count_enc);
+ print_encoding_base ("", fde_count_enc);
+ printf (" table_enc: %#x ", table_enc);
+ print_encoding_base ("", table_enc);
+
+ uint64_t eh_frame_ptr = 0;
+ if (eh_frame_ptr_enc != DW_EH_PE_omit)
+ {
+ readp = read_encoded (eh_frame_ptr_enc, readp, dataend, &eh_frame_ptr,
+ dbg);
+ if (unlikely (readp == NULL))
+ goto invalid_data;
+
+ printf (" eh_frame_ptr: %#" PRIx64, eh_frame_ptr);
+ if ((eh_frame_ptr_enc & 0x70) == DW_EH_PE_pcrel)
+ printf (" (offset: %#" PRIx64 ")",
+ /* +4 because of the 4 byte header of the section. */
+ (uint64_t) shdr->sh_offset + 4 + eh_frame_ptr);
+
+ putchar_unlocked ('\n');
+ }
+
+ uint64_t fde_count = 0;
+ if (fde_count_enc != DW_EH_PE_omit)
+ {
+ readp = read_encoded (fde_count_enc, readp, dataend, &fde_count, dbg);
+ if (unlikely (readp == NULL))
+ goto invalid_data;
+
+ printf (" fde_count: %" PRIu64 "\n", fde_count);
+ }
+
+ if (fde_count == 0 || table_enc == DW_EH_PE_omit)
+ return;
+
+ puts (" Table:");
+
+ /* Optimize for the most common case. */
+ if (table_enc == (DW_EH_PE_datarel | DW_EH_PE_sdata4))
+ while (fde_count > 0 && readp + 8 <= dataend)
+ {
+ int32_t initial_location = read_4sbyte_unaligned_inc (dbg, readp);
+ uint64_t initial_offset = ((uint64_t) shdr->sh_offset
+ + (int64_t) initial_location);
+ int32_t address = read_4sbyte_unaligned_inc (dbg, readp);
+ // XXX Possibly print symbol name or section offset for initial_offset
+ printf (" %#" PRIx32 " (offset: %#6" PRIx64 ") -> %#" PRIx32
+ " fde=[%6" PRIx64 "]\n",
+ initial_location, initial_offset,
+ address, address - (eh_frame_ptr + 4));
+ }
+ else
+ while (0 && readp < dataend)
+ {
+
+ }
+}
+
+
+/* Print the content of the exception handling table section
+ '.eh_frame_hdr'. */
+static void
+print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)),
+ Ebl *ebl __attribute__ ((unused)),
+ GElf_Ehdr *ehdr __attribute__ ((unused)),
+ Elf_Scn *scn,
+ GElf_Shdr *shdr __attribute__ ((unused)),
+ Dwarf *dbg __attribute__ ((unused)))
+{
+ printf (gettext ("\
+\nException handling table section [%2zu] '.gcc_except_table':\n"),
+ elf_ndxscn (scn));
+
+ Elf_Data *data = elf_rawdata (scn, NULL);
+
+ if (unlikely (data == NULL))
+ {
+ error (0, 0, gettext ("cannot get %s content: %s"),
+ ".gcc_except_table", elf_errmsg (-1));
+ return;
+ }
+
+ const unsigned char *readp = data->d_buf;
+ const unsigned char *const dataend = readp + data->d_size;
+
+ if (unlikely (readp + 1 > dataend))
+ {
+ invalid_data:
+ error (0, 0, gettext ("invalid data"));
+ return;
+ }
+ unsigned int lpstart_encoding = *readp++;
+ printf (gettext (" LPStart encoding: %#x "), lpstart_encoding);
+ print_encoding_base ("", lpstart_encoding);
+ if (lpstart_encoding != DW_EH_PE_omit)
+ {
+ uint64_t lpstart;
+ readp = read_encoded (lpstart_encoding, readp, dataend, &lpstart, dbg);
+ printf (" LPStart: %#" PRIx64 "\n", lpstart);
+ }
+
+ if (unlikely (readp + 1 > dataend))
+ goto invalid_data;
+ unsigned int ttype_encoding = *readp++;
+ printf (gettext (" TType encoding: %#x "), ttype_encoding);
+ print_encoding_base ("", ttype_encoding);
+ const unsigned char *ttype_base = NULL;
+ if (ttype_encoding != DW_EH_PE_omit)
+ {
+ unsigned int ttype_base_offset;
+ get_uleb128 (ttype_base_offset, readp);
+ printf (" TType base offset: %#x\n", ttype_base_offset);
+ ttype_base = readp + ttype_base_offset;
+ }
+
+ if (unlikely (readp + 1 > dataend))
+ goto invalid_data;
+ unsigned int call_site_encoding = *readp++;
+ printf (gettext (" Call site encoding: %#x "), call_site_encoding);
+ print_encoding_base ("", call_site_encoding);
+ unsigned int call_site_table_len;
+ get_uleb128 (call_site_table_len, readp);
+
+ const unsigned char *const action_table = readp + call_site_table_len;
+ if (unlikely (action_table > dataend))
+ goto invalid_data;
+ unsigned int u = 0;
+ unsigned int max_action = 0;
+ while (readp < action_table)
+ {
+ if (u == 0)
+ puts (gettext ("\n Call site table:"));
+
+ uint64_t call_site_start;
+ readp = read_encoded (call_site_encoding, readp, dataend,
+ &call_site_start, dbg);
+ uint64_t call_site_length;
+ readp = read_encoded (call_site_encoding, readp, dataend,
+ &call_site_length, dbg);
+ uint64_t landing_pad;
+ readp = read_encoded (call_site_encoding, readp, dataend,
+ &landing_pad, dbg);
+ unsigned int action;
+ get_uleb128 (action, readp);
+ max_action = MAX (action, max_action);
+ printf (gettext (" [%4u] Call site start: %#" PRIx64 "\n"
+ " Call site length: %" PRIu64 "\n"
+ " Landing pad: %#" PRIx64 "\n"
+ " Action: %u\n"),
+ u++, call_site_start, call_site_length, landing_pad, action);
+ }
+ assert (readp == action_table);
+
+ unsigned int max_ar_filter = 0;
+ if (max_action > 0)
+ {
+ puts ("\n Action table:");
+
+ const unsigned char *const action_table_end
+ = action_table + max_action + 1;
+
+ u = 0;
+ do
+ {
+ int ar_filter;
+ get_sleb128 (ar_filter, readp);
+ if (ar_filter > 0 && (unsigned int) ar_filter > max_ar_filter)
+ max_ar_filter = ar_filter;
+ int ar_disp;
+ get_sleb128 (ar_disp, readp);
+
+ printf (" [%4u] ar_filter: % d\n"
+ " ar_disp: % -5d",
+ u, ar_filter, ar_disp);
+ if (abs (ar_disp) & 1)
+ printf (" -> [%4u]\n", u + (ar_disp + 1) / 2);
+ else if (ar_disp != 0)
+ puts (" -> ???");
+ else
+ putchar_unlocked ('\n');
+ ++u;
+ }
+ while (readp < action_table_end);
+ }
+
+ if (max_ar_filter > 0)
+ {
+ puts ("\n TType table:");
+
+ // XXX Not *4, size of encoding;
+ switch (ttype_encoding & 7)
+ {
+ case DW_EH_PE_udata2:
+ case DW_EH_PE_sdata2:
+ readp = ttype_base - max_ar_filter * 2;
+ break;
+ case DW_EH_PE_udata4:
+ case DW_EH_PE_sdata4:
+ readp = ttype_base - max_ar_filter * 4;
+ break;
+ case DW_EH_PE_udata8:
+ case DW_EH_PE_sdata8:
+ readp = ttype_base - max_ar_filter * 8;
+ break;
+ default:
+ error (1, 0, gettext ("invalid TType encoding"));
+ }
+
+ do
+ {
+ uint64_t ttype;
+ readp = read_encoded (ttype_encoding, readp, ttype_base, &ttype,
+ dbg);
+ printf (" [%4u] %#" PRIx64 "\n", max_ar_filter--, ttype);
+ }
+ while (readp < ttype_base);
+ }
+}
+
+
static void
print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
{
@@ -5884,7 +6340,12 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
NEW_SECTION (str),
NEW_SECTION (macinfo),
NEW_SECTION (ranges),
- { ".eh_frame", section_frame, print_debug_frame_section }
+ { ".eh_frame", section_frame | section_exception,
+ print_debug_frame_section },
+ { ".eh_frame_hdr", section_frame | section_exception,
+ print_debug_frame_hdr_section },
+ { ".gcc_except_table", section_frame | section_exception,
+ print_debug_exception_table }
};
const int ndebug_sections = (sizeof (debug_sections)
/ sizeof (debug_sections[0]));
@@ -6468,7 +6929,7 @@ handle_core_registers (Ebl *ebl, Elf *core, const void *desc,
ssize_t maxnreg = ebl_register_info (ebl, 0, NULL, 0, NULL, NULL, NULL, NULL);
if (maxnreg <= 0)
error (EXIT_FAILURE, 0,
- gettext ("cannot register info: %s"), elf_errmsg (-1));
+ gettext ("cannot get register info: %s"), elf_errmsg (-1));
struct register_info regs[maxnreg];
memset (regs, 0, sizeof regs);
diff --git a/src/size.c b/src/size.c
index 9f59cceb..4698c350 100644
--- a/src/size.c
+++ b/src/size.c
@@ -50,10 +50,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
@@ -319,13 +319,23 @@ process_file (const char *fname)
return 0;
}
else if (likely (elf_kind (elf) == ELF_K_AR))
- return handle_ar (fd, elf, NULL, fname);
+ {
+ int result = handle_ar (fd, elf, NULL, fname);
+
+ if (unlikely (close (fd) != 0))
+ error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
+
+ return result;
+ }
/* We cannot handle this type. Close the descriptor anyway. */
if (unlikely (elf_end (elf) != 0))
INTERNAL_ERROR (fname);
}
+ if (unlikely (close (fd) != 0))
+ error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
+
error (0, 0, gettext ("%s: file format not recognized"), fname);
return 1;
@@ -396,9 +406,6 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *fname)
if (unlikely (elf_end (elf) != 0))
INTERNAL_ERROR (fname);
- if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
-
return result;
}
diff --git a/src/strings.c b/src/strings.c
index fb7f0b16..b69f2ad2 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -59,10 +59,10 @@ static int read_elf (Elf *elf, int fd, const char *fname, off64_t fdlen);
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
@@ -677,7 +677,7 @@ read_block (int fd, const char *fname, off64_t fdlen, off64_t from, off64_t to)
if (mmap64 (remap_base, read_now, PROT_READ,
MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, handled_to)
== MAP_FAILED)
- error (EXIT_FAILURE, errno, gettext ("re=mmap failed"));
+ error (EXIT_FAILURE, errno, gettext ("re-mmap failed"));
elfmap_off = handled_to;
process_chunk (fname, remap_base - to_keep,
diff --git a/src/strip.c b/src/strip.c
index 3ca047af..d788ebf2 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -55,10 +55,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Values for the parameters which have no short form. */
@@ -437,7 +437,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
int debug_fd = -1;
/* Get the EBL handling. The -g option is currently the only reason
- we need EBL so dont open the backend unless necessary. */
+ we need EBL so don't open the backend unless necessary. */
Ebl *ebl = NULL;
if (remove_debug)
{
@@ -835,7 +835,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
inline void check_preserved (size_t i)
{
- if (i != 0 && shdr_info[i].idx != 0)
+ if (i != 0 && shdr_info[i].idx != 0
+ && shdr_info[i].debug_data == NULL)
{
if (shdr_info[i].data == NULL)
shdr_info[i].data = elf_getdata (shdr_info[i].scn, NULL);
diff --git a/src/unstrip.c b/src/unstrip.c
index 4a6fd197..97b73c6f 100644
--- a/src/unstrip.c
+++ b/src/unstrip.c
@@ -64,11 +64,10 @@
/* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *)
- = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 25f271f1..f1fd512b 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,14 @@
+2009-04-23 Ulrich Drepper <drepper@redhat.com>
+
+ * Makefile [BUILD_STATIC] (libdw): Add $(zip_LIBS).
+ (rdwrmmap_LDADD): Add $(libmudflap).
+
+2009-04-21 Roland McGrath <roland@redhat.com>
+
+ * testfile50.bz2: New data file.
+ * Makefile.am (EXTRA_DIST): Add it.
+ * run-dwfl-addr-sect.sh: Add a case using it.
+
2008-12-31 Ulrich Drepper <drepper@redhat.com>
* testfile44.S.bz2: Add tests for dppd, dpps, insertps, movntdqa,
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b533521c..9f4ccddb 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to create Makefile.in
##
-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
+## Copyright (C) 1996-2009 Red Hat, Inc.
## This file is part of Red Hat elfutils.
##
## Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -141,7 +141,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \
testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \
testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \
- testfile49.bz2
+ testfile49.bz2 testfile50.bz2
installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \
bindir=$(DESTDIR)$(bindir) \
@@ -160,7 +160,7 @@ installcheck-local:
endif !STANDALONE
if MUDFLAP
-static_build=yes
+static_build = yes
libmudflap = -lmudflap
endif
@@ -171,7 +171,7 @@ libasm = -lasm
libebl = -lebl
else !STANDALONE
if BUILD_STATIC
-libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl
+libdw = ../libdw/libdw.a $(zip_LIBS) $(libelf) $(libebl) -ldl
libelf = ../libelf/libelf.a
libasm = ../libasm/libasm.a
else
@@ -225,7 +225,7 @@ asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-rdwrmmap_LDADD = $(libelf)
+rdwrmmap_LDADD = $(libelf) $(libmudflap)
dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
arls_LDADD = $(libelf) $(libmudflap)
dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
diff --git a/tests/run-dwfl-addr-sect.sh b/tests/run-dwfl-addr-sect.sh
index 98666f37..f33a6e42 100755
--- a/tests/run-dwfl-addr-sect.sh
+++ b/tests/run-dwfl-addr-sect.sh
@@ -1,5 +1,5 @@
#! /bin/sh
-# Copyright (C) 2007, 2008 Red Hat, Inc.
+# Copyright (C) 2007-2009 Red Hat, Inc.
# This file is part of Red Hat elfutils.
#
# Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -25,7 +25,7 @@
. $srcdir/test-subr.sh
-testfiles testfile43
+testfiles testfile43 testfile50
testrun_compare ./dwfl-addr-sect -e testfile43 0x64 0x8 0x98 <<\EOF
address 0x64 => module "" section 4 + 0
@@ -33,4 +33,8 @@ address 0x8 => module "" section 1 + 0x8
address 0x98 => module "" section 7 + 0
EOF
+testrun_compare ./dwfl-addr-sect -e testfile50 0x1 <<\EOF
+address 0x1 => module "" section 1 + 0x1
+EOF
+
exit 0
diff --git a/tests/testfile50.bz2 b/tests/testfile50.bz2
new file mode 100644
index 00000000..fce43321
--- /dev/null
+++ b/tests/testfile50.bz2
Binary files differ