diff options
172 files changed, 10208 insertions, 5222 deletions
@@ -26,6 +26,7 @@ config.h.in config.log config.status config/ar-lib +config/compile config/config.guess config/config.sub config/depcomp @@ -1,3 +1,42 @@ +2014-12-18 Mark Wielaard <[email protected]> + + * configure.ac: Set version to 0.161. + * NEWS: Add dwarf.h additions. + +2014-12-15 Josh Stone <[email protected]> + + * .gitignore: Add config/compile as installed by automake 1.14. + +2014-11-27 Mark Wielaard <[email protected]> + + * configure.ac: Add --disable-textrelcheck. + +2014-10-06 Mark Wielaard <[email protected]> + + * NEWS: New section 0.161. Add dwarf_peel_type. + +2014-08-25 Mark Wielaard <[email protected]> + + * configure.ac: Set version to 0.160. + * NEWS: Add removal of DW_TAG_mutable_type, LZMA .ko.xz kernel + module support, ARM THUMB functions and ppc64le ELFv2 abi backends. + +2014-08-15 Mark Wielaard <[email protected]> + + * NEWS: Add dwarf_cu_die. + +2014-08-15 Mark Wielaard <[email protected]> + + * NEWS: Add dwarf_cu_getdwarf. + +2014-07-18 Mark Wielaard <[email protected]> + + * configure.ac (AC_CHECK_TYPE): Test for struct user_regs_struct. + +2014-05-26 Mark Wielaard <[email protected]> + + * NEWS: New section 0.160. Add unstrip --force. + 2014-05-17 Mark Wielaard <[email protected]> * configure.ac: Set version to 0.159. @@ -1,3 +1,27 @@ +Version 0.161 + +libdw: New function dwarf_peel_type. dwarf_aggregate_size now uses + dwarf_peel_type to also provide the sizes of qualified types. + dwarf_getmacros will now serve either of .debug_macro and + .debug_macinfo transparently. New interfaces + dwarf_getmacros_off, dwarf_macro_getsrcfiles, + dwarf_macro_getparamcnt, and dwarf_macro_param are available + for more generalized inspection of macros and their parameters. + dwarf.h: Add DW_AT_GNU_deleted, DW_AT_noreturn, DW_LANG_C11, + DW_LANG_C_plus_plus_11 and DW_LANG_C_plus_plus_14. + +Version 0.160 + +libdw: New functions dwarf_cu_getdwarf, dwarf_cu_die. + dwarf.h remove non-existing DW_TAG_mutable_type. + +libdwfl: Handle LZMA .ko.xz compressed kernel modules. + +unstrip: New option -F, --force to combining files even if some ELF headers + don't seem to match. + +backends: Handle ARM THUMB functions. Add support for ppc64le ELFv2 abi. + Version 0.159 stack: New option -d, --debugname to lookup DWARF debuginfo name for frame. diff --git a/backends/ChangeLog b/backends/ChangeLog index bc5b8434..e800d16b 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,72 @@ +2014-12-18 Ulrich Drepper <[email protected]> + + * Makefile.am: Suppress output of textrel_check command. + +2014-11-22 Mark Wielaard <[email protected]> + + * ppc64_symbol.c (ppc64_bss_plt_p): Remove ehdr argument. + * ppc_symbol.c (find_dyn_got): Likewise. Use elf_getphdrnum. + (ppc_check_special_symbol): Call find_dyn_got without ehdr. + (ppc_bss_plt_p): Remove ehdr argument. + +2014-11-17 Mark Wielaard <[email protected]> + + * ppc64_init.c (ppc64_init): Check section name is not NULL. + +2014-10-06 Mark Wielaard <[email protected]> + + * libebl_CPU.h (dwarf_peel_type): Removed. + (dwarf_peeled_die_type): Use libdw dwarf_peel_type. + +2014-07-18 Kyle McMartin <[email protected]> + Mark Wielaard <[email protected]> + + * aarch64_initreg.c: Check HAVE_SYS_USER_REGS. + (aarch64_set_initial_registers_tid): Use user_regs_struct and + user_fpsimd_struct. + * arm_initreg.c: Check HAVE_SYS_USER_REGS. + (arm_set_initial_registers_tid): Use user_regs_struct in compat mode. + +2014-07-04 Menanteau Guy <[email protected]> + Mark Wielaard <[email protected]> + + * ppc64_init.c (ppc64_init): Hook check_st_other_bits. + * ppc64_reloc.def: TLSGD, TLSLD, TOCSAVE, ADDR16_HIGH, ADDR16_HIGHA, + TPREL16_HIGH, TPREL16_HIGHA, DTPREL16_HIGH, DTPREL16_HIGHA, JMP_IREL, + IRELATIVE, REL16, REL16_LO, REL16_HI and REL16_HA. + * ppc64_symbol.c (ppc64_dynamic_tag_name): Recognize DT_PPC64_OPT. + (ppc64_dynamic_tag_check): Likewise. + (ppc64_check_st_other_bits): New function. + +2014-07-04 Mark Wielaard <[email protected]> + + * aarch64_retval.c (aarch64_return_value_location): Handle + DW_ATE_boolean. + +2014-06-18 Mark Wielaard <[email protected]> + + * libebl_CPU.h (dwarf_peel_type): Remove DW_TAG_mutable_type + handling. + +2014-06-17 Mark Wielaard <[email protected]> + + * arm_init.c (arm_init): Set func_addr_mask. + +2014-06-20 Petr Machata <[email protected]> + + * alpha_retval.c (alpha_return_value_location): Call + dwarf_peeled_die_type instead of inlining equivalent code. + * arm_retval.c (arm_return_value_location): Likewise. + * i386_retval.c (i386_return_value_location): Likewise. + * ia64_retval.c (ia64_return_value_location): Likewise. + * ppc64_retval.c (ppc64_return_value_location): Likewise. + * ppc_retval.c (ppc_return_value_location): Likewise. + * s390_retval.c (s390_return_value_location): Likewise. + * sh_retval.c (sh_return_value_location): Likewise. + * sparc_retval.c (sparc_return_value_location): Likewise. + * tilegx_retval.c (tilegx_return_value_location): Likewise. + * x86_64_retval.c (x86_64_return_value_location): Likewise. + 2014-05-19 Mark Wielaard <[email protected]> * arm_init.c (arm_init): Hook check_reloc_target_type. diff --git a/backends/Makefile.am b/backends/Makefile.am index e3645566..1e55d166 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -146,7 +146,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) -Wl,--whole-archive $< $(cpu_$*) -Wl,--no-whole-archive \ -Wl,--version-script,$(@:.so=.map) \ -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) - $(textrel_check) + @$(textrel_check) libebl_i386.so: $(cpu_i386) libebl_x86_64.so: $(cpu_x86_64) diff --git a/backends/aarch64_initreg.c b/backends/aarch64_initreg.c index 2492d561..9706205e 100644 --- a/backends/aarch64_initreg.c +++ b/backends/aarch64_initreg.c @@ -1,5 +1,5 @@ /* Fetch live process registers from TID. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -36,6 +36,11 @@ # include <linux/uio.h> # include <sys/user.h> # include <sys/ptrace.h> +/* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ +# ifndef HAVE_SYS_USER_REGS +# define user_regs_struct user_pt_regs +# define user_fpsimd_struct user_fpsimd_state +# endif #endif #define BACKEND aarch64_ @@ -51,7 +56,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), #else /* __aarch64__ */ /* General registers. */ - struct user_pt_regs gregs; + struct user_regs_struct gregs; struct iovec iovec; iovec.iov_base = &gregs; iovec.iov_len = sizeof (gregs); @@ -69,7 +74,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), /* ELR cannot be found. */ /* FP registers (only 64bits are used). */ - struct user_fpsimd_state fregs; + struct user_fpsimd_struct fregs; iovec.iov_base = &fregs; iovec.iov_len = sizeof (fregs); if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec) != 0) diff --git a/backends/aarch64_retval.c b/backends/aarch64_retval.c index 0ed7d561..68de307e 100644 --- a/backends/aarch64_retval.c +++ b/backends/aarch64_retval.c @@ -357,6 +357,7 @@ aarch64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) size of the argument is less than or equal to 8 bytes [...] the argument is copied to the least significant bits in x[NGRN]. */ + case DW_ATE_boolean: case DW_ATE_signed: case DW_ATE_unsigned: case DW_ATE_unsigned_char: diff --git a/backends/alpha_retval.c b/backends/alpha_retval.c index 6dfa6944..53dbfa45 100644 --- a/backends/alpha_retval.c +++ b/backends/alpha_retval.c @@ -1,5 +1,5 @@ /* Function return value location for Alpha ELF ABI. - Copyright (C) 2005, 2007 Red Hat, Inc. + Copyright (C) 2005, 2007, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -67,27 +67,10 @@ alpha_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; switch (tag) { @@ -97,6 +80,7 @@ alpha_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -108,6 +92,7 @@ alpha_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_pointer_type: case DW_TAG_ptr_to_member_type: { + Dwarf_Attribute attr_mem; Dwarf_Word size; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, &attr_mem), &size) != 0) diff --git a/backends/arm_init.c b/backends/arm_init.c index 92e6cd51..3283c978 100644 --- a/backends/arm_init.c +++ b/backends/arm_init.c @@ -69,5 +69,8 @@ arm_init (elf, machine, eh, ehlen) eh->frame_nregs = 16; HOOK (eh, set_initial_registers_tid); + /* Bit zero encodes whether an function address is THUMB or ARM. */ + eh->func_addr_mask = ~(GElf_Addr)1; + return MODVERSION; } diff --git a/backends/arm_initreg.c b/backends/arm_initreg.c index 5837383a..a0a9be94 100644 --- a/backends/arm_initreg.c +++ b/backends/arm_initreg.c @@ -40,6 +40,10 @@ # include <linux/uio.h> # include <sys/user.h> # include <sys/ptrace.h> +/* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ +# ifndef HAVE_SYS_USER_REGS +# define user_regs_struct user_pt_regs +# endif #endif #define BACKEND arm_ @@ -67,7 +71,7 @@ arm_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), #elif defined __aarch64__ /* Compat mode: arm compatible code running on aarch64 */ int i; - struct user_pt_regs gregs; + struct user_regs_struct gregs; struct iovec iovec; iovec.iov_base = &gregs; iovec.iov_len = sizeof (gregs); diff --git a/backends/arm_retval.c b/backends/arm_retval.c index 222f7555..7aced742 100644 --- a/backends/arm_retval.c +++ b/backends/arm_retval.c @@ -1,5 +1,5 @@ /* Function return value location for ARM EABI. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -63,27 +63,10 @@ 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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -94,6 +77,7 @@ arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -104,24 +88,27 @@ arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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; + { + Dwarf_Attribute attr_mem; + 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: diff --git a/backends/i386_retval.c b/backends/i386_retval.c index 90678c32..9da797d5 100644 --- a/backends/i386_retval.c +++ b/backends/i386_retval.c @@ -1,5 +1,5 @@ /* Function return value location for Linux/i386 ABI. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -67,27 +67,10 @@ i386_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; switch (tag) { @@ -97,6 +80,7 @@ i386_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -109,6 +93,7 @@ i386_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_ptr_to_member_type: { Dwarf_Word size; + Dwarf_Attribute attr_mem; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, &attr_mem), &size) != 0) { diff --git a/backends/ia64_retval.c b/backends/ia64_retval.c index ac0d8c3d..b5928c58 100644 --- a/backends/ia64_retval.c +++ b/backends/ia64_retval.c @@ -1,5 +1,5 @@ /* Function return value location for IA64 ABI. - Copyright (C) 2006-2010 Red Hat, Inc. + Copyright (C) 2006-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -238,27 +238,10 @@ ia64_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_OR_RETURN (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 (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = DWARF_TAG_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -269,6 +252,7 @@ ia64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -279,16 +263,21 @@ ia64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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 = 8; - else - return -1; - } + { + Dwarf_Attribute attr_mem; + 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 = 8; + else + return -1; + } + } + if (tag == DW_TAG_base_type) { + Dwarf_Attribute attr_mem; Dwarf_Word encoding; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, &attr_mem), diff --git a/backends/libebl_CPU.h b/backends/libebl_CPU.h index 3ad92588..ef2b922b 100644 --- a/backends/libebl_CPU.h +++ b/backends/libebl_CPU.h @@ -1,5 +1,5 @@ /* Common interface for libebl modules. - Copyright (C) 2000, 2001, 2002, 2003, 2005, 2013 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2005, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -53,23 +53,6 @@ extern bool (*generic_debugscn_p) (const char *) attribute_hidden; if (_die == NULL) return -1; \ dwarf_tag (_die); }) -/* Follow typedefs and qualifiers to get to the actual type. */ -static inline int -dwarf_peel_type (Dwarf_Die *typediep, Dwarf_Attribute *attrp) -{ - int tag = DWARF_TAG_OR_RETURN (typediep); - 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) - { - attrp = dwarf_attr_integrate (typediep, DW_AT_type, attrp); - typediep = dwarf_formref_die (attrp, typediep); - tag = DWARF_TAG_OR_RETURN (typediep); - } - - return tag; -} - /* Get a type die corresponding to DIE. Peel CV qualifiers off it. */ static inline int @@ -84,7 +67,10 @@ dwarf_peeled_die_type (Dwarf_Die *die, Dwarf_Die *result) if (dwarf_formref_die (attr, result) == NULL) return -1; - return dwarf_peel_type (result, attr); + if (dwarf_peel_type (result, result) != 0) + return -1; + + return DWARF_TAG_OR_RETURN (result); } #endif /* libebl_CPU.h */ diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c index e52231c9..56e1828e 100644 --- a/backends/ppc64_init.c +++ b/backends/ppc64_init.c @@ -61,6 +61,7 @@ ppc64_init (elf, machine, eh, ehlen) HOOK (eh, machine_flag_check); HOOK (eh, copy_reloc_p); HOOK (eh, check_special_symbol); + HOOK (eh, check_st_other_bits); HOOK (eh, bss_plt_p); HOOK (eh, return_value_location); HOOK (eh, register_info); @@ -89,13 +90,16 @@ ppc64_init (elf, machine, eh, ehlen) if (opd_shdr != NULL && (opd_shdr->sh_flags & SHF_ALLOC) != 0 && opd_shdr->sh_type == SHT_PROGBITS - && opd_shdr->sh_size > 0 - && strcmp (elf_strptr (elf, ehdr->e_shstrndx, - opd_shdr->sh_name), ".opd") == 0) + && opd_shdr->sh_size > 0) { - eh->fd_addr = opd_shdr->sh_addr; - eh->fd_data = elf_getdata (scn, NULL); - break; + const char *name = elf_strptr (elf, ehdr->e_shstrndx, + opd_shdr->sh_name); + if (name != NULL && strcmp (name, ".opd") == 0) + { + eh->fd_addr = opd_shdr->sh_addr; + eh->fd_data = elf_getdata (scn, NULL); + break; + } } } } diff --git a/backends/ppc64_reloc.def b/backends/ppc64_reloc.def index 6366f46e..3a693cf6 100644 --- a/backends/ppc64_reloc.def +++ b/backends/ppc64_reloc.def @@ -132,6 +132,21 @@ RELOC_TYPE (DTPREL16_HIGHER, REL) RELOC_TYPE (DTPREL16_HIGHERA, REL) RELOC_TYPE (DTPREL16_HIGHEST, REL) RELOC_TYPE (DTPREL16_HIGHESTA, REL) +RELOC_TYPE (TLSGD, REL) +RELOC_TYPE (TLSLD, REL) +RELOC_TYPE (TOCSAVE, REL) +RELOC_TYPE (ADDR16_HIGH, REL) +RELOC_TYPE (ADDR16_HIGHA, REL) +RELOC_TYPE (TPREL16_HIGH, REL) +RELOC_TYPE (TPREL16_HIGHA, REL) +RELOC_TYPE (DTPREL16_HIGH, REL) +RELOC_TYPE (DTPREL16_HIGHA, REL) +RELOC_TYPE (JMP_IREL, REL) +RELOC_TYPE (IRELATIVE, REL) +RELOC_TYPE (REL16, REL) +RELOC_TYPE (REL16_LO, REL) +RELOC_TYPE (REL16_HI, REL) +RELOC_TYPE (REL16_HA, REL) /* Notes from Alan Modra: diff --git a/backends/ppc64_retval.c b/backends/ppc64_retval.c index c5c3b6fe..a2519839 100644 --- a/backends/ppc64_retval.c +++ b/backends/ppc64_retval.c @@ -1,5 +1,5 @@ /* Function return value location for Linux/PPC64 ABI. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -77,27 +77,10 @@ ppc64_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -108,6 +91,7 @@ ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -118,16 +102,21 @@ ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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 = 8; - else - return -1; + { + Dwarf_Attribute attr_mem; + 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 = 8; + else + return -1; } + } + if (tag == DW_TAG_base_type) { + Dwarf_Attribute attr_mem; Dwarf_Word encoding; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, &attr_mem), @@ -162,6 +151,7 @@ ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_array_type: { + Dwarf_Attribute attr_mem; bool is_vector; if (dwarf_formflag (dwarf_attr_integrate (typedie, DW_AT_GNU_vector, &attr_mem), &is_vector) == 0 @@ -179,6 +169,7 @@ ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) if (tag == DW_TAG_array_type) { /* Check if it's a character array. */ + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c index 212d4145..0feddcee 100644 --- a/backends/ppc64_symbol.c +++ b/backends/ppc64_symbol.c @@ -72,6 +72,8 @@ ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)), return "PPC64_OPD"; case DT_PPC64_OPDSZ: return "PPC64_OPDSZ"; + case DT_PPC64_OPT: + return "PPC64_OPT"; default: break; } @@ -84,7 +86,8 @@ ppc64_dynamic_tag_check (int64_t tag) { return (tag == DT_PPC64_GLINK || tag == DT_PPC64_OPD - || tag == DT_PPC64_OPDSZ); + || tag == DT_PPC64_OPDSZ + || tag == DT_PPC64_OPT); } @@ -105,8 +108,7 @@ ppc64_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, /* Check if backend uses a bss PLT in this file. */ bool -ppc64_bss_plt_p (Elf *elf __attribute__ ((unused)), - GElf_Ehdr *ehdr __attribute__ ((unused))) +ppc64_bss_plt_p (Elf *elf __attribute__ ((unused))) { return true; } @@ -120,3 +122,9 @@ ppc64_machine_flag_check (GElf_Word flags) { return flags == 0 || flags == 1 || flags == 2; } + +bool +ppc64_check_st_other_bits (unsigned char st_other) +{ + return (PPC64_LOCAL_ENTRY_OFFSET (st_other) != 0); +} diff --git a/backends/ppc_retval.c b/backends/ppc_retval.c index 7ca0c185..b14a99f1 100644 --- a/backends/ppc_retval.c +++ b/backends/ppc_retval.c @@ -1,5 +1,5 @@ /* Function return value location for Linux/PPC ABI. - Copyright (C) 2005, 2006, 2007, 2010 Red Hat, Inc. + Copyright (C) 2005, 2006, 2007, 2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -89,27 +89,10 @@ ppc_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -120,6 +103,7 @@ ppc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -130,18 +114,23 @@ ppc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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; - } + { + Dwarf_Attribute attr_mem; + 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 <= 8) { if (tag == DW_TAG_base_type) { + Dwarf_Attribute attr_mem; Dwarf_Word encoding; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, @@ -165,6 +154,7 @@ ppc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_array_type: { + Dwarf_Attribute attr_mem; bool is_vector; if (dwarf_formflag (dwarf_attr_integrate (typedie, DW_AT_GNU_vector, &attr_mem), &is_vector) == 0 diff --git a/backends/ppc_symbol.c b/backends/ppc_symbol.c index 220f243e..c17ab374 100644 --- a/backends/ppc_symbol.c +++ b/backends/ppc_symbol.c @@ -1,5 +1,5 @@ /* PPC specific symbolic name handling. - Copyright (C) 2004, 2005, 2007 Red Hat, Inc. + Copyright (C) 2004, 2005, 2007, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2004. @@ -81,9 +81,13 @@ ppc_dynamic_tag_check (int64_t tag) /* Look for DT_PPC_GOT. */ static bool -find_dyn_got (Elf *elf, GElf_Ehdr *ehdr, GElf_Addr *addr) +find_dyn_got (Elf *elf, GElf_Addr *addr) { - for (int i = 0; i < ehdr->e_phnum; ++i) + size_t phnum; + if (elf_getphdrnum (elf, &phnum) != 0) + return false; + + for (size_t i = 0; i < phnum; ++i) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); @@ -127,7 +131,7 @@ ppc_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym, { /* In -msecure-plt mode, DT_PPC_GOT is present and must match. */ GElf_Addr gotaddr; - if (find_dyn_got (elf, ehdr, &gotaddr)) + if (find_dyn_got (elf, &gotaddr)) return sym->st_value == gotaddr; /* In -mbss-plt mode, any place in the section is valid. */ @@ -154,8 +158,8 @@ ppc_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym, /* Check if backend uses a bss PLT in this file. */ bool -ppc_bss_plt_p (Elf *elf, GElf_Ehdr *ehdr) +ppc_bss_plt_p (Elf *elf) { GElf_Addr addr; - return ! find_dyn_got (elf, ehdr, &addr); + return ! find_dyn_got (elf, &addr); } diff --git a/backends/s390_retval.c b/backends/s390_retval.c index b671ee86..a927d46a 100644 --- a/backends/s390_retval.c +++ b/backends/s390_retval.c @@ -1,5 +1,5 @@ /* Function return value location for S/390 ABI. - Copyright (C) 2006, 2007 Red Hat, Inc. + Copyright (C) 2006, 2007, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -68,27 +68,10 @@ s390_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -99,6 +82,7 @@ s390_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -115,6 +99,7 @@ s390_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) if (dwarf_diecu (typedie, &cudie, &asize, NULL) == NULL) return -1; + Dwarf_Attribute attr_mem; if (dwarf_formudata (dwarf_attr (typedie, DW_AT_byte_size, &attr_mem), &size) != 0) { diff --git a/backends/sh_retval.c b/backends/sh_retval.c index 11662318..d44f2601 100644 --- a/backends/sh_retval.c +++ b/backends/sh_retval.c @@ -1,5 +1,5 @@ /* Function return value location for Linux/SH ABI. - Copyright (C) 2010 Red Hat, Inc. + Copyright (C) 2010, 2014 Red Hat, Inc. This file is part of elfutils. Contributed by Matt Fleming <[email protected]>. @@ -65,27 +65,10 @@ sh_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -96,6 +79,7 @@ sh_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -106,18 +90,23 @@ sh_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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; - } + { + Dwarf_Attribute attr_mem; + 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 <= 8) { if (tag == DW_TAG_base_type) { + Dwarf_Attribute attr_mem; Dwarf_Word encoding; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, diff --git a/backends/sparc_retval.c b/backends/sparc_retval.c index dcd37859..e1b17753 100644 --- a/backends/sparc_retval.c +++ b/backends/sparc_retval.c @@ -1,5 +1,5 @@ /* Function return value location for SPARC. - Copyright (C) 2006-2010 Red Hat, Inc. + Copyright (C) 2006-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -72,27 +72,10 @@ sparc_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -103,6 +86,7 @@ sparc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -113,19 +97,24 @@ sparc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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) - { - uint8_t asize; - Dwarf_Die cudie; - if ((tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) - && dwarf_diecu (typedie, &cudie, &asize, NULL) != NULL) - size = asize; - else - return -1; - } + { + Dwarf_Attribute attr_mem; + if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, + &attr_mem), &size) != 0) + { + uint8_t asize; + Dwarf_Die cudie; + if ((tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) + && dwarf_diecu (typedie, &cudie, &asize, NULL) != NULL) + size = asize; + else + return -1; + } + } + if (tag == DW_TAG_base_type) { + Dwarf_Attribute attr_mem; Dwarf_Word encoding; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, &attr_mem), diff --git a/backends/tilegx_retval.c b/backends/tilegx_retval.c index e14cc512..db81a20b 100644 --- a/backends/tilegx_retval.c +++ b/backends/tilegx_retval.c @@ -1,5 +1,6 @@ /* Function return value location for Linux/TILE-Gx ABI. Copyright (C) 2012 Tilera Corporation + Copyright (C) 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -59,27 +60,10 @@ tilegx_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -90,6 +74,7 @@ tilegx_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -100,22 +85,25 @@ tilegx_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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 = 8; - else - return -1; - } - if (tag == DW_TAG_base_type) - { - Dwarf_Word encoding; - if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, - &attr_mem), - &encoding) != 0) - return -1; - } + { + Dwarf_Attribute attr_mem; + 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 = 8; + else + return -1; + } + if (tag == DW_TAG_base_type) + { + Dwarf_Word encoding; + if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, + &attr_mem), + &encoding) != 0) + return -1; + } + } /* Small enough structs are passed directly in registers R0 ... R7. */ if (size <= 8) @@ -139,6 +127,7 @@ tilegx_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) { if (tag == DW_TAG_array_type) { + Dwarf_Attribute attr_mem, *attr; /* Check if it's a character array. */ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); diff --git a/backends/x86_64_retval.c b/backends/x86_64_retval.c index f3e9f2be..b3799ae0 100644 --- a/backends/x86_64_retval.c +++ b/backends/x86_64_retval.c @@ -1,5 +1,5 @@ /* Function return value location for Linux/x86-64 ABI. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -81,27 +81,10 @@ x86_64_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_OR_RETURN (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_OR_RETURN (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; Dwarf_Word size; switch (tag) @@ -112,6 +95,7 @@ x86_64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) case DW_TAG_subrange_type: if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) { + Dwarf_Attribute attr_mem, *attr; attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); typedie = dwarf_formref_die (attr, &die_mem); tag = DWARF_TAG_OR_RETURN (typedie); @@ -122,16 +106,21 @@ x86_64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) 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 = 8; - else - return -1; - } + { + Dwarf_Attribute attr_mem; + 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 = 8; + else + return -1; + } + } + if (tag == DW_TAG_base_type) { + Dwarf_Attribute attr_mem; Dwarf_Word encoding; if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, &attr_mem), diff --git a/config/ChangeLog b/config/ChangeLog index b4718c7e..1b4e8960 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,16 @@ +2014-12-18 Mark Wielaard <[email protected]> + + * elfutils.spec.in: Update for 0.161. + +2014-11-27 Mark Wielaard <[email protected]> + + * eu.am: Define textrel_msg, textrel_found and textrel_check based + on FATAL_TEXTREL. + +2014-08-25 Mark Wielaard <[email protected]> + + * elfutils.spec.in: Update for 0.160. + 2014-05-17 Mark Wielaard <[email protected]> * elfutils.spec.in: Update for 0.159. diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 70f62b20..06f73fc9 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -196,6 +196,25 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Thu Dec 18 2014 Mark Wielaard <[email protected]> 0.161-1 +- libdw: New function dwarf_peel_type. dwarf_aggregate_size now uses + dwarf_peel_type to also provide the sizes of qualified types. + dwarf_getmacros will now serve either of .debug_macro and + .debug_macinfo transparently. New interfaces dwarf_getmacros_off, + dwarf_macro_getsrcfiles, dwarf_macro_getparamcnt, and + dwarf_macro_param are available for more generalized inspection of + macros and their parameters. + dwarf.h: Add DW_AT_GNU_deleted, DW_AT_noreturn, DW_LANG_C11, + DW_LANG_C_plus_plus_11 and DW_LANG_C_plus_plus_14. + +* Mon Aug 25 2014 Mark Wielaard <[email protected]> 0.160-1 +- libdw: New functions dwarf_cu_getdwarf, dwarf_cu_die. + dwarf.h remove non-existing DW_TAG_mutable_type. +- libdwfl: Handle LZMA .ko.xz compressed kernel modules. +- unstrip: New option -F, --force to combining files even if some ELF + headers don't seem to match. +- backends: Handle ARM THUMB functions. Add support for ppc64le ELFv2 abi. + * Sat May 17 2014 Mark Wielaard <[email protected]> 0.159-1 - stack: New option -d, --debugname to lookup DWARF debuginfo name for frame. New option -i, --inlines to show inlined frames diff --git a/config/eu.am b/config/eu.am index c3b00e08..faf8add4 100644 --- a/config/eu.am +++ b/config/eu.am @@ -52,4 +52,10 @@ endif CLEANFILES = *.gcno *.gcda -textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_msg = echo "WARNING: TEXTREL found in '$@'" +if FATAL_TEXTREL +textrel_found = $(textrel_msg); exit 1 +else +textrel_found = $(textrel_msg) +endif +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then $(textrel_found); fi diff --git a/configure.ac b/configure.ac index 1d79597a..0e67a792 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <http://www.gnu.org/licenses/>. -AC_INIT([elfutils],[0.159],[https://bugzilla.redhat.com/],[elfutils]) +AC_INIT([elfutils],[0.161],[https://bugzilla.redhat.com/],[elfutils]) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_FILES([config/Makefile]) @@ -212,6 +212,11 @@ AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])]) AM_CONDITIONAL(DEMANGLE, test "$ac_cv_lib_stdcpp___cxa_demangle" = yes) +AC_ARG_ENABLE([textrelcheck], +AS_HELP_STRING([--disable-textrelcheck], + [Disable textrelcheck being a fatal error])) +AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"]) + dnl The directories with content. dnl Documentation. @@ -301,6 +306,19 @@ eu_version=$(( (eu_version + 999) / 1000 )) AC_CHECK_SIZEOF(long) +# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead +# of the user_regs_struct from sys/user.h. They are structurally the same +# but we get either one or the other. +AC_CHECK_TYPE([struct user_regs_struct], + [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no], + [[#include <sys/ptrace.h>] + [#include <sys/time.h>] + [#include <sys/user.h>]]) +if test "$sys_user_has_user_regs" = "yes"; then + AC_DEFINE(HAVE_SYS_USER_REGS, 1, + [Define to 1 if <sys/user.h> defines struct user_regs_struct]) +fi + # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. # Likewise in a 32-bit build on a host where $CC -m64 works. utrace_BIARCH diff --git a/libasm/ChangeLog b/libasm/ChangeLog index 2613610f..9b25af99 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,3 +1,11 @@ +2014-12-18 Ulrich Drepper <[email protected]> + + * Makefile.am: Suppress output of textrel_check command. + +2014-11-27 Mark Wielaard <[email protected]> + + * Makefile.am (libasm.so): Use textrel_check. + 2014-04-13 Mark Wielaard <[email protected]> * Makefile.am: Remove !MUDFLAP conditions. diff --git a/libasm/Makefile.am b/libasm/Makefile.am index 89be3e9c..0ac4ac6f 100644 --- a/libasm/Makefile.am +++ b/libasm/Makefile.am @@ -67,7 +67,7 @@ libasm.so$(EXEEXT): libasm_pic.a libasm.map -Wl,--version-script,$(srcdir)/libasm.map,--no-undefined \ -Wl,--soname,$@.$(VERSION) \ ../libebl/libebl.a ../libelf/libelf.so $(libasm_so_LDLIBS) - if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi + @$(textrel_check) ln -fs $@ $@.$(VERSION) install: install-am libasm.so diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 780b34d0..abc2d71a 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,300 @@ +2014-12-18 Ulrich Drepper <[email protected]> + + * Makefile.am: Suppress output of textrel_check command. + +2014-12-16 Mark Wielaard <[email protected]> + + * dwarf_getsrclines.c (read_srclines): Check diridx is valid under + DW_LNE_define_file. + +2014-12-16 Mark Wielaard <[email protected]> + + * dwarf_getpubnames.c (dwarf_getpubnames): Make sure there is enough + space to read die offset. + +2014-12-16 Mark Wielaard <[email protected]> + + * dwarf_getsrclines.c (read_srclines): Correct overflow check for + unit_length. + +2014-12-15 Mark Wielaard <[email protected]> + + * dwarf_getpubnames.c (get_offsets): Make sure whole unit fall inside + section data. Set error to DWARF_E_NO_ENTRY if cnt is zero. + (dwarf_getpubnames): Make sure section data contains string zero + terminator. + +2014-12-16 Mark Wielaard <[email protected]> + + * memory-access.h (__libdw_get_sleb128): Unroll the first step to help + the compiler optimize for the common single-byte case. + +2014-12-15 Josh Stone <[email protected]> + + * memory-access.h (__libdw_max_len_leb128): New. + (__libdw_get_uleb128): Use __libdw_max_len_leb128. + (__libdw_get_sleb128): Likewise. + +2014-12-14 Mark Wielaard <[email protected]> + + * cfi.c (execute_cfi): Add program bounds checks. + * dwarf_child.c (__libdw_find_attr): Add attrp bounds checks. + * dwarf_formblock.c (dwarf_formblock): Call get_uleb128 with endp. + * dwarf_formref.c (__libdw_formref): Add datap bounds checks. + * dwarf_formsdata.c (dwarf_formsdata): Likewise. + * dwarf_formudata.c (dwarf_formudata): Likewise. + * dwarf_frame_register.c (dwarf_frame_register): Call get_uleb128 + with end of data buf. + * dwarf_getabbrev.c (__libdw_getabbrev): Add abbrevp bounds checks. + * dwarf_getabbrevattr.c (dwarf_getabbrevattr): Assume get_uleb128 + call gets enough data. + * dwarf_getattrs,c (dwarf_getattrs): Call get_uleb128 with endp. + * dwarf_getlocation.c (store_implicit_value): Call get_uleb128 + with enough data. + (__libdw_intern_expression): Call get_uleb128/get_sleb128 with + end_data. + * dwarf_getmacros.c (get_table_for_offset): Add nforms bounds check. + * dwarf_getsrclines.c (read_srclines): Bounds check linep and call + get_uleb128 with lineendp. + * dwarf_hasattr.c (dwarf_hasattr): Bounds check attrp and call + get_uleb128 with endp. + * dwarf_next_cfi.c (dwarf_next_cfi): Bounds check bytes and call + get_uleb128/get_sleb128 with limit. + * encoded-value.h (read_encoded_value): Assume get_uleb128 and + get_sleb128 get called with enough data. + * fde.c (intern_fde): Call get_uleb128 with instructions_end. + * libdwP.h (__libdw_dieabbrev): Call get_uleb128 with die->cu->endp. + * libdw_form.c (__libdw_form_val_compute_len): Call get_uleb128 with + endp. + * memory-access.h (__libdw_get_uleb128): Take an extra endp. + Don't call get_uleb128_step if out of data. + (__libdw_get_sleb128): Likewise for get_sleb128_step. + +2014-12-12 Mark Wielaard <[email protected]> + + * libdwP.h (struct Dwarf): Add fake_loc_cu. + (cu_data): Removed. + (DIE_OFFSET_FROM_CU_OFFSET): Don't use cu_data, use cu_sec_idx. + (__libdw_form_val_compute_len): Drop dbg and endp arguments. + (__libdw_form_val_len): Likewise. + * libdw_form.c (__libdw_form_val_compute_len): Likewise. + * libdw_findcu.c (__libdw_intern_next_unit): Don't use cu_data, use + the already found data buffer directly. + * dwarf_begin_elf.c (valid_p): Setup fake_loc_cu. + * dwarf_end.c (dwarf_end): Free fake_loc_cu. + * dwarf_child.c (__libdw_find_attr): Call __libdw_form_val_len with + just cu. + * dwarf_getattrs.c (dwarf_getattrs): Likewise. + * dwarf_formblock.c (dwarf_formblock): Add bounds checking. + * dwarf_getlocation_attr.c (attr_form_cu): New function. + (dwarf_getlocation_attr): Use attr_form_cu to set result->cu. + (getlocation): Handle empty blocks immediately. + * dwarf_getlocation_implicit_pointer.c (empty_cu): New static var. + (__libdw_empty_loc_attr): Drop cu argument, use empty_cu. + (dwarf_getlocation_implicit_pointer): Call __libdw_empty_loc_attr with + one argument. + * dwarf_getmacros.c (read_macros): Also setup startp and endp for + fake_cu. Call __libdw_form_val_len with just fake_cu. + * dwarf_formref_die.c (dwarf_formref_die): Don't use cu_data, get + datap and size directly from cu startp and endp. + +2014-12-11 Mark Wielaard <[email protected]> + + * libdw_findcu.c (__libdw_intern_next_unit): Sanity check offset. + +2014-12-13 Mark Wielaard <[email protected]> + + * dwarf_getaranges.c (compare_aranges): Make sure Dwarf_Addr + difference doesn't wrap around before returning as int. + +2014-12-11 Josh Stone <[email protected]> + + * dwarf_getsrclines.c (struct linelist): Add sequence. + (compare_lines): Take linelists, and break ties by sequence. + (read_srclines): Use linelists for sorting. + (read_srclines::add_new_line): Set sequence. + +2014-12-10 Josh Stone <[email protected]> + + * libdwP.h (Dwarf_CU): Add startp and endp boundaries. + * libdw_findcu.c (__libdw_intern_next_unit): Set startp and endp. + * dwarf_child.c (dwarf_child): Use cu->endp. + * dwarf_cuoffset.c (dwarf_cuoffset): Use cu->startp. + * dwarf_dieoffset.c (dwarf_dieoffset): Use cu->startp. + * dwarf_siblingof.c (dwarf_siblingof): Use both. + +2014-12-10 Josh Stone <[email protected]> + + * dwarf_hasattr.c (dwarf_hasattr): Just walk abbrev for presence. + +2014-12-10 Josh Stone <[email protected]> + + * libdwP.h (__libdw_dieabbrev): New die->abbrev lookup function. + * dwarf_child.c (__libdw_find_attr, dwarf_child): Use it. + * dwarf_getattrs.c (dwarf_getattrs): Likewise. + * dwarf_haschildren.c (dwarf_haschildren): Likewise. + * dwarf_tag.c (dwarf_tag): Likewise. + +2014-12-04 Mark Wielaard <[email protected]> + + * libdwP.h (__libdw_form_val_compute_len): Add endp argument. + (__libdw_form_val_len): Likewise and check len doesn't overflow. + * libdw_form.c (__libdw_form_val_compute_len): Likewise. + * dwarf_child.c (__libdw_find_attr): Call __libdw_form_val_len + with endp. + * dwarf_getattrs.c (dwarf_getattrs): Likewise. + * dwarf_getmacros.c (read_macros): Likewise and check for errors. + +2014-12-02 Petr Machata <[email protected]> + + * dwarf_getmacros.c (token_from_offset, offset_from_token): New + helper functions. + (do_dwarf_getmacros_die): Merge into dwarf_getmacros. + * libdw.h (DWARF_GETMACROS_START): New macro. + +2014-11-27 Mark Wielaard <[email protected]> + + * Makefile.am (libdw.so): Use textrel_check. + +2014-11-27 Mark Wielaard <[email protected]> + + * dwarf_getcfi_elf.c (getcfi_gnu_eh_frame): Initialize + search_table_entries and search_table_encoding. + +2014-11-24 Mark Wielaard <[email protected]> + + * dwarf_getsrclines.c (read_srclines): Check line_range is not zero + before usage. + +2014-11-23 Mark Wielaard <[email protected]> + + * dwarf_attr.c (dwarf_attr): Check __libdw_find_attr return value. + * dwarf_hasattr.c (dwarf_hasattr): Likewise. + * dwarf_siblingof.c (dwarf_siblingof): Likewise. + +2014-11-23 Mark Wielaard <[email protected]> + + * dwarf_getabbrev.c (__libdw_getabbrev): Don't assert on bad DWARF. + Set libdw errno and return NULL. + +2014-11-24 Mark Wielaard <[email protected]> + + * dwarf.h (DW_LANG_C_plus_plus_11): Added. + (DW_LANG_C11): Likewise. + (DW_LANG_C_plus_plus_14): Likewise. + * dwarf_aggregate_size.c (array_size): Handle DW_LANG_C11, + DW_LANG_C_plus_plus_11, DW_LANG_C_plus_plus_14 and DW_LANG_Go + lower bound. + * dwarf_getfuncs.c (dwarf_getfuncs): Set c_cu to true for + DW_LANG_C11. + +2014-11-26 Mark Wielaard <[email protected]> + + * dwarf.h (DW_AT_noreturn): Added. + +2014-11-11 Mark Wielaard <[email protected]> + + * dwarf_getsrclines.c (read_srclines): Do address_size comparison + explicitly as uint8_t. + (__libdw_getsrclines): Add internal_function to declaration. + +2014-09-10 Petr Machata <[email protected]> + + * dwarf_macro_getparamcnt.c: New file. + * dwarf_macro_param.c: New file. + * dwarf_macro_getsrcfiles.c: New file. + * Makefile.am (libdw_a_SOURCES): Add the new files. + * libdwP.h (struct files_lines_s): New structure. + (DWARF_E_INVALID_OPCODE): New enumerator. + (struct Dwarf): New fields macro_ops, files_lines. + (Dwarf_Macro_Op_Proto, Dwarf_Macro_Op_Table): New structures for + keeping macro opcode prototypes in. + (Dwarf_Macro_s): Redefine from scratch. + (__libdw_getsrclines, __libdw_getcompdir, libdw_macro_nforms): New + internal interfaces. + * dwarf_error.c (errmsgs): Add a message for + DWARF_E_INVALID_OPCODE. + * dwarf_end.c (dwarf_end): Destroy struct Dwarf.macro_ops and + files_lines. + * libdw.h (dwarf_getmacros_off, dwarf_macro_getparamcnt) + (dwarf_macro_getsrcfiles, dwarf_macro_param): New public + interfaces. + * dwarf_getmacros.c (dwarf_getmacros_off): New function, + (get_offset_from, macro_op_compare, build_table) + (init_macinfo_table, get_macinfo_table, get_table_for_offset) + (cache_op_table, read_macros, gnu_macros_getmacros_off) + (macro_info_getmacros_off, do_dwarf_getmacros_die): New helper + functions. + (dwarf_getmacros): Adjust to dispatch to the new interfaces. + * dwarf_getsrclines.c (read_srclines): New function with guts + taken from dwarf_getsrclines. + (__libdw_getsrclines): Likewise. + (__libdw_getcompdir, files_lines_compare): New functions. + (dwarf_getsrclines): Make it dispatch to the new interfaces. + * dwarf_macro_param1.c (dwarf_macro_param1): Adjust to dispatch to + the new interfaces. + * dwarf_macro_param2.c (dwarf_macro_param2): Likewise. + * libdw.map (ELFUTILS_0.161): New. Add dwarf_getmacros_off, + dwarf_macro_getsrcfiles, dwarf_macro_getparamcnt, dwarf_macro_param. + +2014-10-06 Mark Wielaard <[email protected]> + + * Makefile.am (libdw_a_SOURCES): Add dwarf_peel_type.c. + * dwarf_aggregate_size.c (get_type): Use dwarf_peel_type. + (aggregate_size): Likewise. Add old and new version. + * dwarf_peel_type.c: New file. + * libdw.h (dwarf_peel_type): New function declaration. + * libdwP.h (dwarf_peel_type): New internal declaration. + * libdw.map (ELFUTILS_0.161): New section. + +2014-10-15 Petr Machata <[email protected]> + + * libdwP.h (struct Dwarf_Files_s.cu): Drop field. + * dwarf_getsrclines.c (dwarf_getsrclines): Don't set it. + +2014-10-05 Mark Wielaard <[email protected]> + + * dwarf.h: Add DW_AT_GNU_deleted. + +2014-10-02 Mark Wielaard <[email protected]> + + * dwarf_aggregate_size.c (aggregate_size): Return CU address_size + for sizeless DW_TAG_pointer_type, DW_TAG_reference_type or + DW_TAG_rvalue_reference_type. + +2014-09-12 Petr Machata <[email protected]> + + * memory-access.h (read_ubyte_unaligned_inc): Allow only 4- and + 8-byte quantities. Consequently, rename to... + (read_addr_unaligned_inc): ... this. + (read_sbyte_unaligned_inc, read_ubyte_unaligned): Drop. + (read_sbyte_unaligned): Drop. + +2014-09-10 Petr Machata <[email protected]> + + * dwarf_getlocation.c (attr_ok): Also accept + DW_AT_GNU_call_site_value, DW_AT_GNU_call_site_data_value, + DW_AT_GNU_call_site_target, DW_AT_GNU_call_site_target_clobbered. + +2014-08-15 Mark Wielaard <[email protected]> + + * dwarf_cu_die.c: New file. + * Makefile.am (libdw_a_SOURCES): Add dwarf_cu_die.c. + * libdw.h (dwarf_cu_die): New function declaration. + * libdw.map (ELFUTILS_0.160): Add dwarf_cu_die. + +2014-08-15 Mark Wielaard <[email protected]> + + * dwarf_cu_getdwarf.c: New file. + * Makefile.am (libdw_a_SOURCES): Add dwarf_cu_getdwarf.c. + * libdw.h (Dwarf_CU): New typedef. + (dwarf_cu_getdwarf): New function declaration. + * libdw.map (ELFUTILS_0.160): New. Add dwarf_cu_getdwarf. + +2014-06-18 Mark Wielaard <[email protected]> + + * dwarf.h: Remove DW_TAG_mutable_type. + 2014-05-02 Mark Wielaard <[email protected]> * libdwP.h (__check_build_id): Removed now unused. diff --git a/libdw/Makefile.am b/libdw/Makefile.am index 2b60b8a7..65f083a4 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 2002-2010, 2012 Red Hat, Inc. +## Copyright (C) 2002-2010, 2012, 2014 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -72,9 +72,11 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_getlocation.c dwarf_getstring.c dwarf_offabbrev.c \ dwarf_getaranges.c dwarf_onearange.c dwarf_getarangeinfo.c \ dwarf_getarange_addr.c dwarf_getattrs.c dwarf_formflag.c \ - dwarf_getmacros.c dwarf_macro_opcode.c dwarf_macro_param1.c \ - dwarf_macro_param2.c dwarf_addrdie.c \ - dwarf_getfuncs.c \ + dwarf_getmacros.c dwarf_macro_getparamcnt.c \ + dwarf_macro_opcode.c dwarf_macro_param.c \ + dwarf_macro_param1.c dwarf_macro_param2.c \ + dwarf_macro_getsrcfiles.c \ + dwarf_addrdie.c dwarf_getfuncs.c \ dwarf_decl_file.c dwarf_decl_line.c dwarf_decl_column.c \ dwarf_func_inline.c dwarf_getsrc_file.c \ libdw_findcu.c libdw_form.c libdw_alloc.c \ @@ -87,7 +89,8 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_getcfi.c dwarf_getcfi_elf.c dwarf_cfi_end.c \ dwarf_aggregate_size.c dwarf_getlocation_implicit_pointer.c \ dwarf_getlocation_die.c dwarf_getlocation_attr.c \ - dwarf_getalt.c dwarf_setalt.c + dwarf_getalt.c dwarf_setalt.c dwarf_cu_getdwarf.c \ + dwarf_cu_die.c dwarf_peel_type.c # Minimal library with symbols needed by those libebl backends that we # ship statically. This is so that e.g. strip doesn't end up bringing @@ -128,7 +131,7 @@ libdw.so$(EXEEXT): $(srcdir)/libdw.map libdw_pic.a ../libdwelf/libdwelf_pic.a \ -Wl,--version-script,$<,--no-undefined \ -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ -ldl $(zip_LIBS) - if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi + @$(textrel_check) ln -fs $@ $@.$(VERSION) install: install-am libdw.so diff --git a/libdw/cfi.c b/libdw/cfi.c index a146f129..632e91d3 100644 --- a/libdw/cfi.c +++ b/libdw/cfi.c @@ -1,5 +1,5 @@ /* CFI program execution. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -132,12 +132,15 @@ execute_cfi (Dwarf_CFI *cache, break; case DW_CFA_advance_loc2: + cfi_assert (program + 2 <= end); operand = read_2ubyte_unaligned_inc (cache, program); goto advance_loc; case DW_CFA_advance_loc4: + cfi_assert (program + 4 <= end); operand = read_4ubyte_unaligned_inc (cache, program); goto advance_loc; case DW_CFA_MIPS_advance_loc8: + cfi_assert (program + 8 <= end); operand = read_8ubyte_unaligned_inc (cache, program); goto advance_loc; @@ -153,8 +156,9 @@ execute_cfi (Dwarf_CFI *cache, switch block for the row-copying (LOC-moving) cases above. */ case DW_CFA_def_cfa: - get_uleb128 (operand, program); - get_uleb128 (offset, program); + get_uleb128 (operand, program, end); + cfi_assert (program < end); + get_uleb128 (offset, program, end); def_cfa: fs->cfa_rule = cfa_offset; fs->cfa_val_reg = operand; @@ -165,32 +169,33 @@ execute_cfi (Dwarf_CFI *cache, continue; case DW_CFA_def_cfa_register: - get_uleb128 (regno, program); + get_uleb128 (regno, program, end); require_cfa_offset (); fs->cfa_val_reg = regno; continue; case DW_CFA_def_cfa_sf: - get_uleb128 (operand, program); - get_sleb128 (sf_offset, program); + get_uleb128 (operand, program, end); + cfi_assert (program < end); + get_sleb128 (sf_offset, program, end); offset = sf_offset * cie->data_alignment_factor; goto def_cfa; case DW_CFA_def_cfa_offset: - get_uleb128 (offset, program); + get_uleb128 (offset, program, end); def_cfa_offset: require_cfa_offset (); fs->cfa_val_offset = offset; continue; case DW_CFA_def_cfa_offset_sf: - get_sleb128 (sf_offset, program); + get_sleb128 (sf_offset, program, end); offset = sf_offset * cie->data_alignment_factor; goto def_cfa_offset; case DW_CFA_def_cfa_expression: /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ - get_uleb128 (operand, program); + get_uleb128 (operand, program, end); cfi_assert (operand <= (Dwarf_Word) (end - program)); fs->cfa_rule = cfa_expr; fs->cfa_data.expr.data = (unsigned char *) program; @@ -199,65 +204,71 @@ execute_cfi (Dwarf_CFI *cache, continue; case DW_CFA_undefined: - get_uleb128 (regno, program); + get_uleb128 (regno, program, end); register_rule (regno, undefined, 0); continue; case DW_CFA_same_value: - get_uleb128 (regno, program); + get_uleb128 (regno, program, end); register_rule (regno, same_value, 0); continue; case DW_CFA_offset_extended: - get_uleb128 (operand, program); + get_uleb128 (operand, program, end); + cfi_assert (program < end); case DW_CFA_offset + 0 ... DW_CFA_offset + CFI_PRIMARY_MAX: - get_uleb128 (offset, program); + get_uleb128 (offset, program, end); offset *= cie->data_alignment_factor; offset_extended: register_rule (operand, offset, offset); continue; case DW_CFA_offset_extended_sf: - get_uleb128 (operand, program); - get_sleb128 (sf_offset, program); + get_uleb128 (operand, program, end); + get_sleb128 (sf_offset, program, end); offset_extended_sf: offset = sf_offset * cie->data_alignment_factor; goto offset_extended; case DW_CFA_GNU_negative_offset_extended: /* GNU extension obsoleted by DW_CFA_offset_extended_sf. */ - get_uleb128 (operand, program); - get_uleb128 (offset, program); + get_uleb128 (operand, program, end); + cfi_assert (program < end); + get_uleb128 (offset, program, end); sf_offset = -offset; goto offset_extended_sf; case DW_CFA_val_offset: - get_uleb128 (operand, program); - get_uleb128 (offset, program); + get_uleb128 (operand, program, end); + cfi_assert (program < end); + get_uleb128 (offset, program, end); offset *= cie->data_alignment_factor; val_offset: register_rule (operand, val_offset, offset); continue; case DW_CFA_val_offset_sf: - get_uleb128 (operand, program); - get_sleb128 (sf_offset, program); + get_uleb128 (operand, program, end); + cfi_assert (program < end); + get_sleb128 (sf_offset, program, end); offset = sf_offset * cie->data_alignment_factor; goto val_offset; case DW_CFA_register: - get_uleb128 (regno, program); - get_uleb128 (operand, program); + get_uleb128 (regno, program, end); + cfi_assert (program < end); + get_uleb128 (operand, program, end); register_rule (regno, register, operand); continue; case DW_CFA_expression: /* Expression rule relies on section data, abi_cfi cannot use it. */ assert (! abi_cfi); - get_uleb128 (regno, program); + get_uleb128 (regno, program, end); offset = program - (const uint8_t *) cache->data->d.d_buf; /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ - get_uleb128 (operand, program); + cfi_assert (program < end); + get_uleb128 (operand, program, end); cfi_assert (operand <= (Dwarf_Word) (end - program)); program += operand; register_rule (regno, expression, offset); @@ -266,17 +277,17 @@ execute_cfi (Dwarf_CFI *cache, case DW_CFA_val_expression: /* Expression rule relies on section data, abi_cfi cannot use it. */ assert (! abi_cfi); - get_uleb128 (regno, program); + get_uleb128 (regno, program, end); /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ offset = program - (const uint8_t *) cache->data->d.d_buf; - get_uleb128 (operand, program); + get_uleb128 (operand, program, end); cfi_assert (operand <= (Dwarf_Word) (end - program)); program += operand; register_rule (regno, val_expression, offset); continue; case DW_CFA_restore_extended: - get_uleb128 (operand, program); + get_uleb128 (operand, program, end); case DW_CFA_restore + 0 ... DW_CFA_restore + CFI_PRIMARY_MAX: if (unlikely (abi_cfi) && likely (opcode == DW_CFA_restore)) @@ -347,7 +358,7 @@ execute_cfi (Dwarf_CFI *cache, case DW_CFA_GNU_args_size: /* XXX is this useful for anything? */ - get_uleb128 (operand, program); + get_uleb128 (operand, program, end); continue; default: diff --git a/libdw/dwarf.h b/libdw/dwarf.h index 41cae5bc..da8cf3a6 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-2011 Red Hat, Inc. + Copyright (C) 2000-2011, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -87,7 +87,7 @@ enum DW_TAG_unspecified_type = 0x3b, DW_TAG_partial_unit = 0x3c, DW_TAG_imported_unit = 0x3d, - DW_TAG_mutable_type = 0x3e, + /* 0x3e reserved. */ DW_TAG_condition = 0x3f, DW_TAG_shared_type = 0x40, DW_TAG_type_unit = 0x41, @@ -221,6 +221,9 @@ enum DW_AT_enum_class = 0x6d, DW_AT_linkage_name = 0x6e, + /* DWARF5 attribute values. */ + DW_AT_noreturn = 0x87, + DW_AT_lo_user = 0x2000, DW_AT_MIPS_fde = 0x2001, @@ -267,6 +270,7 @@ enum DW_AT_GNU_all_call_sites = 0x2117, DW_AT_GNU_all_source_call_sites = 0x2118, DW_AT_GNU_macros = 0x2119, + DW_AT_GNU_deleted = 0x211a, DW_AT_hi_user = 0x3fff }; @@ -582,6 +586,10 @@ enum DW_LANG_D = 0x0013, /* D */ DW_LANG_Python = 0x0014, /* Python */ DW_LANG_Go = 0x0016, /* Go */ + DW_LANG_C_plus_plus_11 = 0x001a, /* ISO C++:2011 */ + DW_LANG_C11 = 0x001d, /* ISO C:2011 */ + DW_LANG_C_plus_plus_14 = 0x0021, /* ISO C++:2014 */ + DW_LANG_lo_user = 0x8000, DW_LANG_Mips_Assembler = 0x8001, /* Assembler */ diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 07c53a22..667c2743 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -1,5 +1,5 @@ /* Compute size of an aggregate type from DWARF. - Copyright (C) 2010 Red Hat, Inc. + Copyright (C) 2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -37,8 +37,13 @@ static Dwarf_Die * get_type (Dwarf_Die *die, Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem) { - return INTUSE(dwarf_formref_die) + Dwarf_Die *type = INTUSE(dwarf_formref_die) (INTUSE(dwarf_attr_integrate) (die, DW_AT_type, attr_mem), type_mem); + + if (INTUSE(dwarf_peel_type) (type, type) != 0) + return NULL; + + return type; } static int @@ -98,12 +103,16 @@ array_size (Dwarf_Die *die, Dwarf_Word *size, case DW_LANG_C: case DW_LANG_C89: case DW_LANG_C99: + case DW_LANG_C11: case DW_LANG_C_plus_plus: + case DW_LANG_C_plus_plus_11: + case DW_LANG_C_plus_plus_14: case DW_LANG_ObjC: case DW_LANG_ObjC_plus_plus: case DW_LANG_Java: case DW_LANG_D: case DW_LANG_UPC: + case DW_LANG_Go: lower = 0; break; @@ -198,13 +207,20 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, Dwarf_Die *type_mem) switch (INTUSE(dwarf_tag) (die)) { - case DW_TAG_typedef: case DW_TAG_subrange_type: return aggregate_size (get_type (die, &attr_mem, type_mem), size, type_mem); /* Tail call. */ case DW_TAG_array_type: return array_size (die, size, &attr_mem, type_mem); + + /* Assume references and pointers have pointer size if not given an + explicit DW_AT_byte_size. */ + case DW_TAG_pointer_type: + case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: + *size = die->cu->address_size; + return 0; } /* Most types must give their size directly. */ @@ -217,6 +233,12 @@ dwarf_aggregate_size (die, size) Dwarf_Word *size; { Dwarf_Die type_mem; + + if (INTUSE (dwarf_peel_type) (die, die) != 0) + return -1; + return aggregate_size (die, size, &type_mem); } INTDEF (dwarf_aggregate_size) +OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144) +NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) diff --git a/libdw/dwarf_attr.c b/libdw/dwarf_attr.c index 97b08068..f247c1af 100644 --- a/libdw/dwarf_attr.c +++ b/libdw/dwarf_attr.c @@ -1,5 +1,5 @@ /* Return specific DWARF attribute of a DIE. - Copyright (C) 2003, 2005 Red Hat, Inc. + Copyright (C) 2003, 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -50,6 +50,6 @@ dwarf_attr (die, search_name, result) /* Always fill in the CU information. */ result->cu = die->cu; - return result->code == search_name ? result : NULL; + return result->valp != NULL && result->code == search_name ? result : NULL; } INTDEF(dwarf_attr) diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index 4c6346ae..4c49ce21 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -235,6 +235,28 @@ valid_p (Dwarf *result) result = NULL; } + if (result != NULL && result->sectiondata[IDX_debug_loc] != NULL) + { + result->fake_loc_cu = (Dwarf_CU *) calloc (1, sizeof (Dwarf_CU)); + if (unlikely (result->fake_loc_cu == NULL)) + { + __libdw_free_zdata (result); + Dwarf_Sig8_Hash_free (&result->sig8_hash); + __libdw_seterrno (DWARF_E_NOMEM); + free (result); + result = NULL; + } + else + { + result->fake_loc_cu->dbg = result; + result->fake_loc_cu->startp + = result->sectiondata[IDX_debug_loc]->d_buf; + result->fake_loc_cu->endp + = (result->sectiondata[IDX_debug_loc]->d_buf + + result->sectiondata[IDX_debug_loc]->d_size); + } + } + return result; } diff --git a/libdw/dwarf_child.c b/libdw/dwarf_child.c index 1d3a3371..58a438b5 100644 --- a/libdw/dwarf_child.c +++ b/libdw/dwarf_child.c @@ -1,5 +1,5 @@ /* Return child of current DIE. - Copyright (C) 2003-2011 Red Hat, Inc. + Copyright (C) 2003-2011, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -44,21 +44,11 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, unsigned int *codep, unsigned int *formp) { Dwarf *dbg = die->cu->dbg; - const unsigned char *readp = (unsigned char *) die->addr; - - /* First we have to get the abbreviation code so that we can decode - the data in the DIE. */ - unsigned int abbrev_code; - get_uleb128 (abbrev_code, readp); + const unsigned char *readp; /* Find the abbreviation entry. */ - Dwarf_Abbrev *abbrevp = die->abbrev; - if (abbrevp == NULL) - { - abbrevp = __libdw_findabbrev (die->cu, abbrev_code); - die->abbrev = abbrevp ?: DWARF_END_ABBREV; - } - if (unlikely (die->abbrev == DWARF_END_ABBREV)) + Dwarf_Abbrev *abbrevp = __libdw_dieabbrev (die, &readp); + if (unlikely (abbrevp == DWARF_END_ABBREV)) { invalid_dwarf: __libdw_seterrno (DWARF_E_INVALID_DWARF); @@ -70,21 +60,19 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, = ((unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf + dbg->sectiondata[IDX_debug_abbrev]->d_size); - const unsigned char *attrp = die->abbrev->attrp; + const unsigned char *attrp = abbrevp->attrp; while (1) { - /* Are we still in bounds? This test needs to be refined. */ - if (unlikely (attrp + 1 >= endp)) + /* Get attribute name and form. */ + if (unlikely (attrp >= endp)) goto invalid_dwarf; - - /* Get attribute name and form. - - XXX We don't check whether this reads beyond the end of the - section. */ unsigned int attr_name; - get_uleb128 (attr_name, attrp); + get_uleb128 (attr_name, attrp, endp); + + if (unlikely (attrp >= endp)) + goto invalid_dwarf; unsigned int attr_form; - get_uleb128 (attr_form, attrp); + get_uleb128 (attr_form, attrp, endp); /* We can stop if we found the attribute with value zero. */ if (attr_name == 0 && attr_form == 0) @@ -104,15 +92,14 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, /* Skip over the rest of this attribute (if there is any). */ if (attr_form != 0) { - size_t len = __libdw_form_val_len (dbg, die->cu, attr_form, readp); - + size_t len = __libdw_form_val_len (die->cu, attr_form, readp); if (unlikely (len == (size_t) -1l)) { readp = NULL; break; } - // XXX We need better boundary checks. + // __libdw_form_val_len will have done a bounds check. readp += len; } } @@ -136,33 +123,32 @@ dwarf_child (die, result) if (die == NULL) return -1; - /* Skip past the last attribute. */ - void *addr = NULL; - - /* If we already know there are no children do not search. */ - if (die->abbrev != DWARF_END_ABBREV - && (die->abbrev == NULL || die->abbrev->has_children)) - addr = __libdw_find_attr (die, INVALID, NULL, NULL); - if (unlikely (die->abbrev == (Dwarf_Abbrev *) -1l)) - return -1; + /* Find the abbreviation entry. */ + Dwarf_Abbrev *abbrevp = __libdw_dieabbrev (die, NULL); + if (unlikely (abbrevp == DWARF_END_ABBREV)) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } - /* Make sure the DIE really has children. */ - if (! die->abbrev->has_children) - /* There cannot be any children. */ + /* If there are no children, do not search. */ + if (! abbrevp->has_children) return 1; + /* Skip past the last attribute. */ + void *addr = __libdw_find_attr (die, INVALID, NULL, NULL); + if (addr == NULL) return -1; /* RESULT can be the same as DIE. So preserve what we need. */ struct Dwarf_CU *cu = die->cu; - Elf_Data *cu_sec = cu_data (cu); /* It's kosher (just suboptimal) to have a null entry first thing (7.5.3). So if this starts with ULEB128 of 0 (even with silly encoding of 0), it is a kosher null entry and we do not really have any children. */ const unsigned char *code = addr; - const unsigned char *endp = (cu_sec->d_buf + cu_sec->d_size); + const unsigned char *endp = cu->endp; while (1) { if (unlikely (code >= endp)) /* Truncated section. */ diff --git a/libdw/dwarf_cu_die.c b/libdw/dwarf_cu_die.c new file mode 100644 index 00000000..48f4176f --- /dev/null +++ b/libdw/dwarf_cu_die.c @@ -0,0 +1,68 @@ +/* Internal definitions for libdwarf. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stddef.h> +#include "libdwP.h" + + +Dwarf_Die * +dwarf_cu_die (cu, result, versionp, abbrev_offsetp, address_sizep, + offset_sizep, type_signaturep, type_offsetp) + Dwarf_CU *cu; + Dwarf_Die *result; + Dwarf_Half *versionp; + Dwarf_Off *abbrev_offsetp; + uint8_t *address_sizep; + uint8_t *offset_sizep; + uint64_t *type_signaturep; + Dwarf_Off *type_offsetp; +{ + if (cu == NULL) + return NULL; + + *result = CUDIE (cu); + + if (versionp != NULL) + *versionp = cu->version; + if (abbrev_offsetp != NULL) + *abbrev_offsetp = cu->orig_abbrev_offset; + if (address_sizep != NULL) + *address_sizep = cu->address_size; + if (offset_sizep != NULL) + *offset_sizep = cu->offset_size; + if (type_signaturep != NULL) + *type_signaturep = cu->type_sig8; + if (type_offsetp != NULL) + *type_offsetp = cu->type_offset; + + return result; +} diff --git a/libdw/dwarf_cu_getdwarf.c b/libdw/dwarf_cu_getdwarf.c new file mode 100644 index 00000000..f8a2e9b9 --- /dev/null +++ b/libdw/dwarf_cu_getdwarf.c @@ -0,0 +1,47 @@ +/* Retrieve Dwarf descriptor underlying a Dwarf_CU. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stddef.h> + +#include "libdwP.h" + + +Dwarf * +dwarf_cu_getdwarf (cu) + Dwarf_CU *cu; +{ + if (cu == NULL) + /* Some error occurred before. */ + return NULL; + + return cu->dbg; +} diff --git a/libdw/dwarf_cuoffset.c b/libdw/dwarf_cuoffset.c index 7aea3f91..3ceffdb0 100644 --- a/libdw/dwarf_cuoffset.c +++ b/libdw/dwarf_cuoffset.c @@ -1,5 +1,5 @@ /* Return offset of DIE in CU. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -41,5 +41,5 @@ dwarf_cuoffset (die) { return (die == NULL ? (Dwarf_Off) -1l - : (die->addr - cu_data (die->cu)->d_buf - die->cu->start)); + : (Dwarf_Off) (die->addr - die->cu->startp)); } diff --git a/libdw/dwarf_dieoffset.c b/libdw/dwarf_dieoffset.c index c92123ce..965b2c8d 100644 --- a/libdw/dwarf_dieoffset.c +++ b/libdw/dwarf_dieoffset.c @@ -1,5 +1,5 @@ /* Return offset of DIE. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -41,6 +41,6 @@ dwarf_dieoffset (die) { return (die == NULL ? ~0ul - : (Dwarf_Off) (die->addr - cu_data (die->cu)->d_buf)); + : (Dwarf_Off) (die->addr - die->cu->startp + die->cu->start)); } INTDEF(dwarf_dieoffset) diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c index 241a257a..922dc8f3 100644 --- a/libdw/dwarf_end.c +++ b/libdw/dwarf_end.c @@ -93,6 +93,12 @@ dwarf_end (dwarf) tdestroy (dwarf->cu_tree, cu_free); tdestroy (dwarf->tu_tree, cu_free); + /* Search tree for macro opcode tables. */ + tdestroy (dwarf->macro_ops, noop_free); + + /* Search tree for decoded .debug_lines units. */ + tdestroy (dwarf->files_lines, noop_free); + struct libdw_memblock *memp = dwarf->mem_tail; /* The first block is allocated together with the Dwarf object. */ while (memp->prev != NULL) @@ -111,6 +117,9 @@ dwarf_end (dwarf) if (dwarf->free_elf) elf_end (dwarf->elf); + /* Free the fake location list CU. */ + free (dwarf->fake_loc_cu); + /* Free the context descriptor. */ free (dwarf); } diff --git a/libdw/dwarf_error.c b/libdw/dwarf_error.c index 22929141..08b691aa 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, 2009 Red Hat, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2002. @@ -92,6 +92,7 @@ static const char *errmsgs[] = [DWARF_E_NO_DEBUG_RANGES] = N_(".debug_ranges section missing"), [DWARF_E_INVALID_CFI] = N_("invalid CFI section"), [DWARF_E_NO_ALT_DEBUGLINK] = N_("no alternative debug link found"), + [DWARF_E_INVALID_OPCODE] = N_("invalid opcode"), }; #define nerrmsgs (sizeof (errmsgs) / sizeof (errmsgs[0])) diff --git a/libdw/dwarf_formblock.c b/libdw/dwarf_formblock.c index 799d8776..3d56f222 100644 --- a/libdw/dwarf_formblock.c +++ b/libdw/dwarf_formblock.c @@ -1,5 +1,5 @@ /* Return block represented by attribute. - Copyright (C) 2004-2010 Red Hat, Inc. + Copyright (C) 2004-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2004. @@ -43,29 +43,37 @@ dwarf_formblock (attr, return_block) if (attr == NULL) return -1; - const unsigned char *datap; + const unsigned char *datap = attr->valp; + const unsigned char *endp = attr->cu->endp; switch (attr->form) { case DW_FORM_block1: + if (unlikely (endp - datap < 1)) + goto invalid; return_block->length = *(uint8_t *) attr->valp; return_block->data = attr->valp + 1; break; case DW_FORM_block2: + if (unlikely (endp - datap < 2)) + goto invalid; return_block->length = read_2ubyte_unaligned (attr->cu->dbg, attr->valp); return_block->data = attr->valp + 2; break; case DW_FORM_block4: + if (unlikely (endp - datap < 4)) + goto invalid; return_block->length = read_4ubyte_unaligned (attr->cu->dbg, attr->valp); return_block->data = attr->valp + 4; break; case DW_FORM_block: case DW_FORM_exprloc: - datap = attr->valp; - get_uleb128 (return_block->length, datap); + if (unlikely (endp - datap < 1)) + goto invalid; + get_uleb128 (return_block->length, datap, endp); return_block->data = (unsigned char *) datap; break; @@ -74,12 +82,10 @@ dwarf_formblock (attr, return_block) return -1; } - if (unlikely (cu_data (attr->cu)->d_size - - (return_block->data - - (unsigned char *) cu_data (attr->cu)->d_buf) - < return_block->length)) + if (unlikely (return_block->length > (size_t) (endp - return_block->data))) { /* Block does not fit. */ + invalid: __libdw_seterrno (DWARF_E_INVALID_DWARF); return -1; } diff --git a/libdw/dwarf_formref.c b/libdw/dwarf_formref.c index 86da7eae..25924371 100644 --- a/libdw/dwarf_formref.c +++ b/libdw/dwarf_formref.c @@ -1,5 +1,5 @@ /* Return reference offset represented by attribute. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -39,7 +39,8 @@ __libdw_formref (attr, return_offset) Dwarf_Attribute *attr; Dwarf_Off *return_offset; { - const unsigned char *datap; + const unsigned char *datap = attr->valp; + const unsigned char *endp = attr->cu->endp; if (attr->valp == NULL) { @@ -50,24 +51,37 @@ __libdw_formref (attr, return_offset) switch (attr->form) { case DW_FORM_ref1: + if (datap + 1 > endp) + { + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } *return_offset = *attr->valp; break; case DW_FORM_ref2: + if (datap + 2 > endp) + goto invalid; *return_offset = read_2ubyte_unaligned (attr->cu->dbg, attr->valp); break; case DW_FORM_ref4: + if (datap + 4 > endp) + goto invalid; *return_offset = read_4ubyte_unaligned (attr->cu->dbg, attr->valp); break; case DW_FORM_ref8: + if (datap + 8 > endp) + goto invalid; *return_offset = read_8ubyte_unaligned (attr->cu->dbg, attr->valp); break; case DW_FORM_ref_udata: - datap = attr->valp; - get_uleb128 (*return_offset, datap); + if (datap + 1 > endp) + goto invalid; + get_uleb128 (*return_offset, datap, endp); break; case DW_FORM_ref_addr: diff --git a/libdw/dwarf_formref_die.c b/libdw/dwarf_formref_die.c index b54e2166..63f66971 100644 --- a/libdw/dwarf_formref_die.c +++ b/libdw/dwarf_formref_die.c @@ -70,7 +70,8 @@ dwarf_formref_die (attr, result) return INTUSE(dwarf_offdie) (dbg_ret, offset, result); } - Elf_Data *data; + const unsigned char *datap; + size_t size; if (attr->form == DW_FORM_ref_sig8) { /* This doesn't have an offset, but instead a value we @@ -92,7 +93,8 @@ dwarf_formref_die (attr, result) } while (cu->type_sig8 != sig); - data = cu->dbg->sectiondata[IDX_debug_types]; + datap = cu->dbg->sectiondata[IDX_debug_types]->d_buf; + size = cu->dbg->sectiondata[IDX_debug_types]->d_size; offset = cu->type_offset; } else @@ -101,17 +103,18 @@ dwarf_formref_die (attr, result) if (unlikely (__libdw_formref (attr, &offset) != 0)) return NULL; - data = cu_data (cu); + datap = cu->startp; + size = cu->endp - cu->startp; } - if (unlikely (data->d_size - cu->start <= offset)) + if (unlikely (offset >= size)) { __libdw_seterrno (DWARF_E_INVALID_DWARF); return NULL; } memset (result, '\0', sizeof (Dwarf_Die)); - result->addr = (char *) data->d_buf + cu->start + offset; + result->addr = (char *) datap + offset; result->cu = cu; return result; } diff --git a/libdw/dwarf_formsdata.c b/libdw/dwarf_formsdata.c index 85621988..2380bf43 100644 --- a/libdw/dwarf_formsdata.c +++ b/libdw/dwarf_formsdata.c @@ -1,5 +1,5 @@ /* Return signed constant represented by attribute. - Copyright (C) 2003, 2005 Red Hat, Inc. + Copyright (C) 2003, 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -43,34 +43,49 @@ dwarf_formsdata (attr, return_sval) if (attr == NULL) return -1; - const unsigned char *datap; + const unsigned char *datap = attr->valp; + const unsigned char *endp = attr->cu->endp; switch (attr->form) { case DW_FORM_data1: + if (datap + 1 > endp) + { + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } *return_sval = *attr->valp; break; case DW_FORM_data2: + if (datap + 2 > endp) + goto invalid; *return_sval = read_2ubyte_unaligned (attr->cu->dbg, attr->valp); break; case DW_FORM_data4: + if (datap + 4 > endp) + goto invalid; *return_sval = read_4ubyte_unaligned (attr->cu->dbg, attr->valp); break; case DW_FORM_data8: + if (datap + 8 > endp) + goto invalid; *return_sval = read_8ubyte_unaligned (attr->cu->dbg, attr->valp); break; case DW_FORM_sdata: - datap = attr->valp; - get_sleb128 (*return_sval, datap); + if (datap + 1 > endp) + goto invalid; + get_sleb128 (*return_sval, datap, endp); break; case DW_FORM_udata: - datap = attr->valp; - get_uleb128 (*return_sval, datap); + if (datap + 1 > endp) + goto invalid; + get_uleb128 (*return_sval, datap, endp); break; default: diff --git a/libdw/dwarf_formudata.c b/libdw/dwarf_formudata.c index 41b09e1a..a01ff312 100644 --- a/libdw/dwarf_formudata.c +++ b/libdw/dwarf_formudata.c @@ -1,5 +1,5 @@ /* Return unsigned constant represented by attribute. - Copyright (C) 2003-2012 Red Hat, Inc. + Copyright (C) 2003-2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -101,15 +101,24 @@ dwarf_formudata (attr, return_uval) if (attr == NULL) return -1; - const unsigned char *datap; + const unsigned char *datap = attr->valp; + const unsigned char *endp = attr->cu->endp; switch (attr->form) { case DW_FORM_data1: + if (datap + 1 > endp) + { + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } *return_uval = *attr->valp; break; case DW_FORM_data2: + if (datap + 2 > endp) + goto invalid; *return_uval = read_2ubyte_unaligned (attr->cu->dbg, attr->valp); break; @@ -203,13 +212,15 @@ dwarf_formudata (attr, return_uval) break; case DW_FORM_sdata: - datap = attr->valp; - get_sleb128 (*return_uval, datap); + if (datap + 1 > endp) + goto invalid; + get_sleb128 (*return_uval, datap, endp); break; case DW_FORM_udata: - datap = attr->valp; - get_uleb128 (*return_uval, datap); + if (datap + 1 > endp) + goto invalid; + get_uleb128 (*return_uval, datap, endp); break; default: diff --git a/libdw/dwarf_frame_register.c b/libdw/dwarf_frame_register.c index 2bc5ff1c..10d2fe49 100644 --- a/libdw/dwarf_frame_register.c +++ b/libdw/dwarf_frame_register.c @@ -1,5 +1,5 @@ /* Get register location expression for frame. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -102,7 +102,9 @@ dwarf_frame_register (fs, regno, ops_mem, ops, nops) Dwarf_Block block; const uint8_t *p = fs->cache->data->d.d_buf + reg->value; - get_uleb128 (block.length, p); + const uint8_t *end = (fs->cache->data->d.d_buf + + fs->cache->data->d.d_size); + get_uleb128 (block.length, p, end); block.data = (void *) p; /* Parse the expression into internal form. */ diff --git a/libdw/dwarf_getabbrev.c b/libdw/dwarf_getabbrev.c index 87d89c1b..0efde45b 100644 --- a/libdw/dwarf_getabbrev.c +++ b/libdw/dwarf_getabbrev.c @@ -1,5 +1,5 @@ /* Get abbreviation at given offset. - Copyright (C) 2003, 2004, 2005, 2006 Red Hat, Inc. + Copyright (C) 2003, 2004, 2005, 2006, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -31,7 +31,6 @@ # include <config.h> #endif -#include <assert.h> #include <dwarf.h> #include "libdwP.h" @@ -78,9 +77,11 @@ __libdw_getabbrev (dbg, cu, offset, lengthp, result) consists of two parts. The first part is an unsigned LEB128 number representing the attribute's name. The second part is an unsigned LEB128 number representing the attribute's form. */ + const unsigned char *end = (dbg->sectiondata[IDX_debug_abbrev]->d_buf + + dbg->sectiondata[IDX_debug_abbrev]->d_size); const unsigned char *start_abbrevp = abbrevp; unsigned int code; - get_uleb128 (code, abbrevp); + get_uleb128 (code, abbrevp, end); /* Check whether this code is already in the hash table. */ bool foundit = false; @@ -97,7 +98,14 @@ __libdw_getabbrev (dbg, cu, offset, lengthp, result) { foundit = true; - assert (abb->offset == offset); + if (unlikely (abb->offset != offset)) + { + /* A duplicate abbrev code at a different offset, + that should never happen. */ + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return NULL; + } /* If the caller doesn't need the length we are done. */ if (lengthp == NULL) @@ -108,7 +116,11 @@ __libdw_getabbrev (dbg, cu, offset, lengthp, result) overwrite its content. This must not be a problem, since the content better be the same. */ abb->code = code; - get_uleb128 (abb->tag, abbrevp); + if (abbrevp >= end) + goto invalid; + get_uleb128 (abb->tag, abbrevp, end); + if (abbrevp + 1 >= end) + goto invalid; abb->has_children = *abbrevp++ == DW_CHILDREN_yes; abb->attrp = (unsigned char *) abbrevp; abb->offset = offset; @@ -119,8 +131,12 @@ __libdw_getabbrev (dbg, cu, offset, lengthp, result) unsigned int attrform; do { - get_uleb128 (attrname, abbrevp); - get_uleb128 (attrform, abbrevp); + if (abbrevp >= end) + goto invalid; + get_uleb128 (attrname, abbrevp, end); + if (abbrevp >= end) + goto invalid; + get_uleb128 (attrform, abbrevp, end); } while (attrname != 0 && attrform != 0 && ++abb->attrcnt); diff --git a/libdw/dwarf_getabbrevattr.c b/libdw/dwarf_getabbrevattr.c index 64668fe4..574467ce 100644 --- a/libdw/dwarf_getabbrevattr.c +++ b/libdw/dwarf_getabbrevattr.c @@ -1,5 +1,5 @@ /* Get specific attribute of abbreviation. - Copyright (C) 2003, 2004, 2005 Red Hat, Inc. + Copyright (C) 2003, 2004, 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -57,9 +57,10 @@ dwarf_getabbrevattr (abbrev, idx, namep, formp, offsetp) { start_attrp = attrp; - /* Attribute code and form are encoded as ULEB128 values. */ - get_uleb128 (name, attrp); - get_uleb128 (form, attrp); + /* Attribute code and form are encoded as ULEB128 values.i + XXX We have no way to bounds check. */ + get_uleb128 (name, attrp, attrp + len_leb128 (name)); + get_uleb128 (form, attrp, attrp + len_leb128 (form)); /* If both values are zero the index is out of range. */ if (name == 0 && form == 0) diff --git a/libdw/dwarf_getaranges.c b/libdw/dwarf_getaranges.c index 20ac7ec6..4953af53 100644 --- a/libdw/dwarf_getaranges.c +++ b/libdw/dwarf_getaranges.c @@ -48,7 +48,9 @@ compare_aranges (const void *a, const void *b) { struct arangelist *const *p1 = a, *const *p2 = b; struct arangelist *l1 = *p1, *l2 = *p2; - return l1->arange.addr - l2->arange.addr; + if (l1->arange.addr != l2->arange.addr) + return (l1->arange.addr < l2->arange.addr) ? -1 : 1; + return 0; } int diff --git a/libdw/dwarf_getattrs.c b/libdw/dwarf_getattrs.c index 82eb3f8f..0da8b5ba 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, 2009 Red Hat, Inc. + Copyright (C) 2004, 2005, 2008, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2004. @@ -44,17 +44,12 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), if (unlikely (offset == 1)) return 1; - const unsigned char *die_addr = die->addr; + const unsigned char *die_addr; - /* Get the abbreviation code. */ - unsigned int u128; - get_uleb128 (u128, die_addr); + /* Find the abbreviation entry. */ + Dwarf_Abbrev *abbrevp = __libdw_dieabbrev (die, &die_addr); - if (die->abbrev == NULL) - /* Find the abbreviation. */ - die->abbrev = __libdw_findabbrev (die->cu, u128); - - if (unlikely (die->abbrev == DWARF_END_ABBREV)) + if (unlikely (abbrevp == DWARF_END_ABBREV)) { invalid_dwarf: __libdw_seterrno (DWARF_E_INVALID_DWARF); @@ -62,26 +57,28 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), } /* This is where the attributes start. */ - const unsigned char *attrp = die->abbrev->attrp; - const unsigned char *const offset_attrp = die->abbrev->attrp + offset; + const unsigned char *attrp = abbrevp->attrp; + const unsigned char *const offset_attrp = abbrevp->attrp + offset; /* Go over the list of attributes. */ Dwarf *dbg = die->cu->dbg; + const unsigned char *endp; + endp = ((const unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf + + dbg->sectiondata[IDX_debug_abbrev]->d_size); while (1) { /* Are we still in bounds? */ - if (unlikely (attrp - >= ((unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf - + dbg->sectiondata[IDX_debug_abbrev]->d_size))) + if (unlikely (attrp >= endp)) goto invalid_dwarf; /* Get attribute name and form. */ Dwarf_Attribute attr; const unsigned char *remembered_attrp = attrp; - // XXX Fix bound checks - get_uleb128 (attr.code, attrp); - get_uleb128 (attr.form, attrp); + get_uleb128 (attr.code, attrp, endp); + if (unlikely (attrp >= endp)) + goto invalid_dwarf; + get_uleb128 (attr.form, attrp, endp); /* We can stop if we found the attribute with value zero. */ if (attr.code == 0 && attr.form == 0) @@ -104,20 +101,18 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), /* 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; + return remembered_attrp - abbrevp->attrp; } /* Skip over the rest of this attribute (if there is any). */ if (attr.form != 0) { - size_t len = __libdw_form_val_len (dbg, die->cu, attr.form, - die_addr); - + size_t len = __libdw_form_val_len (die->cu, attr.form, die_addr); if (unlikely (len == (size_t) -1l)) /* Something wrong with the file. */ return -1l; - // XXX We need better boundary checks. + // __libdw_form_val_len will have done a bounds check. die_addr += len; } } diff --git a/libdw/dwarf_getcfi_elf.c b/libdw/dwarf_getcfi_elf.c index a423ef3d..61ca60de 100644 --- a/libdw/dwarf_getcfi_elf.c +++ b/libdw/dwarf_getcfi_elf.c @@ -1,5 +1,5 @@ /* Get CFI from ELF file's exception-handling info. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -140,8 +140,8 @@ getcfi_gnu_eh_frame (Elf *elf, const GElf_Ehdr *ehdr, const GElf_Phdr *phdr) } Dwarf_Addr eh_frame_ptr; - size_t search_table_entries; - uint8_t search_table_encoding; + size_t search_table_entries = 0; + uint8_t search_table_encoding = 0; const uint8_t *search_table = parse_eh_frame_hdr (data->d_buf, phdr->p_filesz, phdr->p_vaddr, ehdr, &eh_frame_ptr, diff --git a/libdw/dwarf_getfuncs.c b/libdw/dwarf_getfuncs.c index 82894c98..f79b0a79 100644 --- a/libdw/dwarf_getfuncs.c +++ b/libdw/dwarf_getfuncs.c @@ -103,7 +103,8 @@ dwarf_getfuncs (Dwarf_Die *cudie, int (*callback) (Dwarf_Die *, void *), int lang = INTUSE(dwarf_srclang) (cudie); bool c_cu = (lang == DW_LANG_C89 || lang == DW_LANG_C - || lang == DW_LANG_C99); + || lang == DW_LANG_C99 + || lang == DW_LANG_C11); struct visitor_info v = { callback, arg, (void *) offset, NULL, c_cu }; struct Dwarf_Die_Chain chain = { .die = CUDIE (cudie->cu), diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c index 8dffb83f..068f3853 100644 --- a/libdw/dwarf_getlocation.c +++ b/libdw/dwarf_getlocation.c @@ -1,5 +1,5 @@ /* Return location expression list. - Copyright (C) 2000-2010, 2013 Red Hat, Inc. + Copyright (C) 2000-2010, 2013, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2000. @@ -57,6 +57,10 @@ attr_ok (Dwarf_Attribute *attr) case DW_AT_return_addr: case DW_AT_static_link: case DW_AT_segment: + case DW_AT_GNU_call_site_value: + case DW_AT_GNU_call_site_data_value: + case DW_AT_GNU_call_site_target: + case DW_AT_GNU_call_site_target_clobbered: break; default: @@ -100,7 +104,8 @@ store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op) struct loc_block_s *block = libdw_alloc (dbg, struct loc_block_s, sizeof (struct loc_block_s), 1); const unsigned char *data = (const unsigned char *) (uintptr_t) op->number2; - (void) __libdw_get_uleb128 (&data); // Ignored, equal to op->number. + // Ignored, equal to op->number. And data length already checked. + (void) __libdw_get_uleb128 (&data, data + len_leb128 (Dwarf_Word)); block->addr = op; block->data = (unsigned char *) data; block->length = op->number; @@ -390,28 +395,28 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, case DW_OP_piece: case DW_OP_GNU_convert: case DW_OP_GNU_reinterpret: - /* XXX Check size. */ - get_uleb128 (newloc->number, data); + get_uleb128 (newloc->number, data, end_data); break; case DW_OP_consts: case DW_OP_breg0 ... DW_OP_breg31: case DW_OP_fbreg: - /* XXX Check size. */ - get_sleb128 (newloc->number, data); + get_sleb128 (newloc->number, data, end_data); break; case DW_OP_bregx: - /* XXX Check size. */ - get_uleb128 (newloc->number, data); - get_sleb128 (newloc->number2, data); + get_uleb128 (newloc->number, data, end_data); + if (unlikely (data >= end_data)) + goto invalid; + get_sleb128 (newloc->number2, data, end_data); break; case DW_OP_bit_piece: case DW_OP_GNU_regval_type: - /* XXX Check size. */ - get_uleb128 (newloc->number, data); - get_uleb128 (newloc->number2, data); + get_uleb128 (newloc->number, data, end_data); + if (unlikely (data >= end_data)) + goto invalid; + get_uleb128 (newloc->number2, data, end_data); break; case DW_OP_implicit_value: @@ -422,8 +427,7 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, /* start of block inc. len. */ newloc->number2 = (Dwarf_Word) (uintptr_t) data; - /* XXX Check size. */ - get_uleb128 (newloc->number, data); /* Block length. */ + get_uleb128 (newloc->number, data, end_data); /* Block length. */ if (unlikely ((Dwarf_Word) (end_data - data) < newloc->number)) goto invalid; data += newloc->number; /* Skip the block. */ @@ -434,23 +438,22 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, if (__libdw_read_offset_inc (dbg, sec_index, &data, ref_size, &newloc->number, IDX_debug_info, 0)) return -1; - /* XXX Check size. */ - get_uleb128 (newloc->number2, data); /* Byte offset. */ + if (unlikely (data >= end_data)) + goto invalid; + get_uleb128 (newloc->number2, data, end_data); /* Byte offset. */ break; case DW_OP_GNU_deref_type: - if (unlikely (data >= end_data)) + if (unlikely (data + 1 >= end_data)) goto invalid; newloc->number = *data++; - get_uleb128 (newloc->number2, data); + get_uleb128 (newloc->number2, data, end_data); break; case DW_OP_GNU_const_type: { size_t size; - - /* XXX Check size. */ - get_uleb128 (newloc->number, data); + get_uleb128 (newloc->number, data, end_data); if (unlikely (data >= end_data)) goto invalid; @@ -551,6 +554,14 @@ static int getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, Dwarf_Op **llbuf, size_t *listlen, int sec_index) { + /* Empty location expressions don't have any ops to intern. + Note that synthetic empty_cu doesn't have an associated DWARF dbg. */ + if (block->length == 0) + { + *listlen = 0; + return 0; + } + return __libdw_intern_expression (cu->dbg, cu->dbg->other_byte_order, cu->address_size, (cu->version == 2 ? cu->address_size diff --git a/libdw/dwarf_getlocation_attr.c b/libdw/dwarf_getlocation_attr.c index cb290456..3229baf6 100644 --- a/libdw/dwarf_getlocation_attr.c +++ b/libdw/dwarf_getlocation_attr.c @@ -1,5 +1,5 @@ /* Return DWARF attribute associated with a location expression op. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -33,6 +33,24 @@ #include <dwarf.h> #include <libdwP.h> +static Dwarf_CU * +attr_form_cu (Dwarf_Attribute *attr) +{ + /* If the attribute has block/expr form the data comes from the + .debug_info from the same cu as the attr. Otherwise it comes from + the .debug_loc data section. */ + switch (attr->form) + { + case DW_FORM_block1: + case DW_FORM_block2: + case DW_FORM_block4: + case DW_FORM_block: + case DW_FORM_exprloc: + return attr->cu; + default: + return attr->cu->dbg->fake_loc_cu; + } +} int dwarf_getlocation_attr (attr, op, result) @@ -43,26 +61,27 @@ dwarf_getlocation_attr (attr, op, result) if (attr == NULL) return -1; - result->cu = attr->cu; - switch (op->atom) { case DW_OP_implicit_value: result->code = DW_AT_const_value; result->form = DW_FORM_block; result->valp = (unsigned char *) (uintptr_t) op->number2; + result->cu = attr_form_cu (attr); break; case DW_OP_GNU_entry_value: result->code = DW_AT_location; result->form = DW_FORM_exprloc; result->valp = (unsigned char *) (uintptr_t) op->number2; + result->cu = attr_form_cu (attr); break; case DW_OP_GNU_const_type: result->code = DW_AT_const_value; result->form = DW_FORM_block1; result->valp = (unsigned char *) (uintptr_t) op->number2; + result->cu = attr_form_cu (attr); break; case DW_OP_call2: @@ -74,7 +93,7 @@ dwarf_getlocation_attr (attr, op, result) return -1; if (INTUSE(dwarf_attr) (&die, DW_AT_location, result) == NULL) { - __libdw_empty_loc_attr (result, attr->cu); + __libdw_empty_loc_attr (result); return 0; } } @@ -88,7 +107,7 @@ dwarf_getlocation_attr (attr, op, result) if (INTUSE(dwarf_attr) (&die, DW_AT_location, result) == NULL && INTUSE(dwarf_attr) (&die, DW_AT_const_value, result) == NULL) { - __libdw_empty_loc_attr (result, attr->cu); + __libdw_empty_loc_attr (result); return 0; } } diff --git a/libdw/dwarf_getlocation_implicit_pointer.c b/libdw/dwarf_getlocation_implicit_pointer.c index f93d17ec..f1c16be7 100644 --- a/libdw/dwarf_getlocation_implicit_pointer.c +++ b/libdw/dwarf_getlocation_implicit_pointer.c @@ -35,15 +35,17 @@ static unsigned char empty_exprloc = 0; +static Dwarf_CU empty_cu = { .startp = &empty_exprloc, + .endp = &empty_exprloc + 1 }; void internal_function -__libdw_empty_loc_attr (Dwarf_Attribute *attr, struct Dwarf_CU *cu ) +__libdw_empty_loc_attr (Dwarf_Attribute *attr) { attr->code = DW_AT_location; attr->form = DW_FORM_exprloc; attr->valp = &empty_exprloc; - attr->cu = cu; + attr->cu = &empty_cu; } int @@ -69,7 +71,7 @@ dwarf_getlocation_implicit_pointer (attr, op, result) if (INTUSE(dwarf_attr) (&die, DW_AT_location, result) == NULL && INTUSE(dwarf_attr) (&die, DW_AT_const_value, result) == NULL) { - __libdw_empty_loc_attr (result, attr->cu); + __libdw_empty_loc_attr (result); return 0; } diff --git a/libdw/dwarf_getmacros.c b/libdw/dwarf_getmacros.c index a3d2c816..f9f29961 100644 --- a/libdw/dwarf_getmacros.c +++ b/libdw/dwarf_getmacros.c @@ -1,5 +1,5 @@ /* Get macro information. - Copyright (C) 2002-2009 Red Hat, Inc. + Copyright (C) 2002-2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2002. @@ -31,114 +31,518 @@ # include <config.h> #endif +#include <assert.h> #include <dwarf.h> +#include <search.h> +#include <stdlib.h> #include <string.h> #include <libdwP.h> +static int +get_offset_from (Dwarf_Die *die, int name, Dwarf_Word *retp) +{ + /* Get the appropriate attribute. */ + Dwarf_Attribute attr; + if (INTUSE(dwarf_attr) (die, name, &attr) == NULL) + return -1; -ptrdiff_t -dwarf_getmacros (die, callback, arg, offset) - Dwarf_Die *die; - int (*callback) (Dwarf_Macro *, void *); - void *arg; - ptrdiff_t offset; + /* Offset into the corresponding section. */ + return INTUSE(dwarf_formudata) (&attr, retp); +} + +static int +macro_op_compare (const void *p1, const void *p2) { - if (die == NULL) + const Dwarf_Macro_Op_Table *t1 = (const Dwarf_Macro_Op_Table *) p1; + const Dwarf_Macro_Op_Table *t2 = (const Dwarf_Macro_Op_Table *) p2; + + if (t1->offset < t2->offset) + return -1; + if (t1->offset > t2->offset) + return 1; + + if (t1->sec_index < t2->sec_index) return -1; + if (t1->sec_index > t2->sec_index) + return 1; + + return 0; +} + +static void +build_table (Dwarf_Macro_Op_Table *table, + Dwarf_Macro_Op_Proto op_protos[static 255]) +{ + unsigned ct = 0; + for (unsigned i = 1; i < 256; ++i) + if (op_protos[i - 1].forms != NULL) + table->table[table->opcodes[i - 1] = ct++] = op_protos[i - 1]; + else + table->opcodes[i - 1] = 0xff; +} + +#define MACRO_PROTO(NAME, ...) \ + Dwarf_Macro_Op_Proto NAME = ({ \ + static const uint8_t proto[] = {__VA_ARGS__}; \ + (Dwarf_Macro_Op_Proto) {sizeof proto, proto}; \ + }) + +enum { macinfo_data_size = offsetof (Dwarf_Macro_Op_Table, table[5]) }; +static unsigned char macinfo_data[macinfo_data_size] + __attribute__ ((aligned (__alignof (Dwarf_Macro_Op_Table)))); + +static __attribute__ ((constructor)) void +init_macinfo_table (void) +{ + MACRO_PROTO (p_udata_str, DW_FORM_udata, DW_FORM_string); + MACRO_PROTO (p_udata_udata, DW_FORM_udata, DW_FORM_udata); + MACRO_PROTO (p_none); + + Dwarf_Macro_Op_Proto op_protos[255] = + { + [DW_MACINFO_define - 1] = p_udata_str, + [DW_MACINFO_undef - 1] = p_udata_str, + [DW_MACINFO_vendor_ext - 1] = p_udata_str, + [DW_MACINFO_start_file - 1] = p_udata_udata, + [DW_MACINFO_end_file - 1] = p_none, + /* If you are adding more elements to this array, increase + MACINFO_DATA_SIZE above. */ + }; + + Dwarf_Macro_Op_Table *macinfo_table = (void *) macinfo_data; + memset (macinfo_table, 0, sizeof macinfo_data); + build_table (macinfo_table, op_protos); + macinfo_table->sec_index = IDX_debug_macinfo; +} + +static Dwarf_Macro_Op_Table * +get_macinfo_table (Dwarf *dbg, Dwarf_Word macoff, Dwarf_Die *cudie) +{ + assert (cudie != NULL); + + Dwarf_Attribute attr_mem, *attr + = INTUSE(dwarf_attr) (cudie, DW_AT_stmt_list, &attr_mem); + Dwarf_Off line_offset = (Dwarf_Off) -1; + if (attr != NULL) + INTUSE(dwarf_formudata) (attr, &line_offset); + + Dwarf_Macro_Op_Table *table = libdw_alloc (dbg, Dwarf_Macro_Op_Table, + macinfo_data_size, 1); + memcpy (table, macinfo_data, macinfo_data_size); + + table->offset = macoff; + table->sec_index = IDX_debug_macinfo; + table->line_offset = line_offset; + table->is_64bit = cudie->cu->address_size == 8; + table->comp_dir = __libdw_getcompdir (cudie); + + return table; +} + +static Dwarf_Macro_Op_Table * +get_table_for_offset (Dwarf *dbg, Dwarf_Word macoff, + const unsigned char *readp, + const unsigned char *const endp, + Dwarf_Die *cudie) +{ + const unsigned char *startp = readp; + + /* Request at least 3 bytes for header. */ + if (readp + 3 > endp) + { + invalid_dwarf: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return NULL; + } + + uint16_t version = read_2ubyte_unaligned_inc (dbg, readp); + if (version != 4) + { + __libdw_seterrno (DWARF_E_INVALID_VERSION); + return NULL; + } - Elf_Data *d = die->cu->dbg->sectiondata[IDX_debug_macinfo]; - if (unlikely (d == NULL) || unlikely (d->d_buf == NULL)) + uint8_t flags = *readp++; + bool is_64bit = (flags & 0x1) != 0; + + Dwarf_Off line_offset = (Dwarf_Off) -1; + if ((flags & 0x2) != 0) + { + line_offset = read_addr_unaligned_inc (is_64bit ? 8 : 4, dbg, readp); + if (readp > endp) + goto invalid_dwarf; + } + else if (cudie != NULL) + { + Dwarf_Attribute attr_mem, *attr + = INTUSE(dwarf_attr) (cudie, DW_AT_stmt_list, &attr_mem); + if (attr != NULL) + INTUSE(dwarf_formudata) (attr, &line_offset); + } + + /* """The macinfo entry types defined in this standard may, but + might not, be described in the table""". + + I.e. these may be present. It's tempting to simply skip them, + but it's probably more correct to tolerate that a producer tweaks + the way certain opcodes are encoded, for whatever reasons. */ + + MACRO_PROTO (p_udata_str, DW_FORM_udata, DW_FORM_string); + MACRO_PROTO (p_udata_strp, DW_FORM_udata, DW_FORM_strp); + MACRO_PROTO (p_udata_udata, DW_FORM_udata, DW_FORM_udata); + MACRO_PROTO (p_secoffset, DW_FORM_sec_offset); + MACRO_PROTO (p_none); + + Dwarf_Macro_Op_Proto op_protos[255] = + { + [DW_MACRO_GNU_define - 1] = p_udata_str, + [DW_MACRO_GNU_undef - 1] = p_udata_str, + [DW_MACRO_GNU_define_indirect - 1] = p_udata_strp, + [DW_MACRO_GNU_undef_indirect - 1] = p_udata_strp, + [DW_MACRO_GNU_start_file - 1] = p_udata_udata, + [DW_MACRO_GNU_end_file - 1] = p_none, + [DW_MACRO_GNU_transparent_include - 1] = p_secoffset, + /* N.B. DW_MACRO_undef_indirectx, DW_MACRO_define_indirectx + should be added when 130313.1 is supported. */ + }; + + if ((flags & 0x4) != 0) + { + unsigned count = *readp++; + for (unsigned i = 0; i < count; ++i) + { + unsigned opcode = *readp++; + + Dwarf_Macro_Op_Proto e; + if (readp >= endp) + goto invalid; + get_uleb128 (e.nforms, readp, endp); + e.forms = readp; + op_protos[opcode - 1] = e; + + readp += e.nforms; + if (readp > endp) + { + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return NULL; + } + } + } + + size_t ct = 0; + for (unsigned i = 1; i < 256; ++i) + if (op_protos[i - 1].forms != NULL) + ++ct; + + /* We support at most 0xfe opcodes defined in the table, as 0xff is + a value that means that given opcode is not stored at all. But + that should be fine, as opcode 0 is not allocated. */ + assert (ct < 0xff); + + size_t macop_table_size = offsetof (Dwarf_Macro_Op_Table, table[ct]); + + Dwarf_Macro_Op_Table *table = libdw_alloc (dbg, Dwarf_Macro_Op_Table, + macop_table_size, 1); + + *table = (Dwarf_Macro_Op_Table) { + .offset = macoff, + .sec_index = IDX_debug_macro, + .line_offset = line_offset, + .header_len = readp - startp, + .version = version, + .is_64bit = is_64bit, + + /* NULL if CUDIE is NULL or DW_AT_comp_dir is absent. */ + .comp_dir = __libdw_getcompdir (cudie), + }; + build_table (table, op_protos); + + return table; +} + +static Dwarf_Macro_Op_Table * +cache_op_table (Dwarf *dbg, int sec_index, Dwarf_Off macoff, + const unsigned char *startp, + const unsigned char *const endp, + Dwarf_Die *cudie) +{ + Dwarf_Macro_Op_Table fake = { .offset = macoff, .sec_index = sec_index }; + Dwarf_Macro_Op_Table **found = tfind (&fake, &dbg->macro_ops, + macro_op_compare); + if (found != NULL) + return *found; + + Dwarf_Macro_Op_Table *table = sec_index == IDX_debug_macro + ? get_table_for_offset (dbg, macoff, startp, endp, cudie) + : get_macinfo_table (dbg, macoff, cudie); + + if (table == NULL) + return NULL; + + Dwarf_Macro_Op_Table **ret = tsearch (table, &dbg->macro_ops, + macro_op_compare); + if (unlikely (ret == NULL)) + { + __libdw_seterrno (DWARF_E_NOMEM); + return NULL; + } + + return *ret; +} + +static ptrdiff_t +read_macros (Dwarf *dbg, int sec_index, + Dwarf_Off macoff, int (*callback) (Dwarf_Macro *, void *), + void *arg, ptrdiff_t offset, bool accept_0xff, + Dwarf_Die *cudie) +{ + Elf_Data *d = dbg->sectiondata[sec_index]; + if (unlikely (d == NULL || d->d_buf == NULL)) { __libdw_seterrno (DWARF_E_NO_ENTRY); return -1; } - if (offset == 0) + if (unlikely (macoff >= d->d_size)) { - /* Get the appropriate attribute. */ - Dwarf_Attribute attr; - if (INTUSE(dwarf_attr) (die, DW_AT_macro_info, &attr) == NULL) - return -1; + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } - /* Offset into the .debug_macinfo section. */ - Dwarf_Word macoff; - if (INTUSE(dwarf_formudata) (&attr, &macoff) != 0) - return -1; + const unsigned char *const startp = d->d_buf + macoff; + const unsigned char *const endp = d->d_buf + d->d_size; - offset = macoff; - } - if (unlikely (offset > (ptrdiff_t) d->d_size)) - goto invalid; + Dwarf_Macro_Op_Table *table = cache_op_table (dbg, sec_index, macoff, + startp, endp, cudie); + if (table == NULL) + return -1; - const unsigned char *readp = d->d_buf + offset; - const unsigned char *readendp = d->d_buf + d->d_size; + if (offset == 0) + offset = table->header_len; - if (readp == readendp) - return 0; + assert (offset >= 0); + assert (offset < endp - startp); + const unsigned char *readp = startp + offset; - while (readp < readendp) + while (readp < endp) { unsigned int opcode = *readp++; - unsigned int u128; - unsigned int u128_2 = 0; - const char *str = NULL; - const unsigned char *endp; + if (opcode == 0) + /* Nothing more to do. */ + return 0; - switch (opcode) + if (unlikely (opcode == 0xff && ! accept_0xff)) { - case DW_MACINFO_define: - case DW_MACINFO_undef: - case DW_MACINFO_vendor_ext: - /* For the first two opcodes the parameters are - line, string - For the latter - number, string. - We can treat these cases together. */ - get_uleb128 (u128, readp); - - endp = memchr (readp, '\0', readendp - readp); - if (endp == NULL) - goto invalid; + /* See comment below at dwarf_getmacros for explanation of + why we are doing this. */ + __libdw_seterrno (DWARF_E_INVALID_OPCODE); + return -1; + } - str = (char *) readp; - readp = endp + 1; - break; + unsigned int idx = table->opcodes[opcode - 1]; + if (idx == 0xff) + { + __libdw_seterrno (DWARF_E_INVALID_OPCODE); + return -1; + } - case DW_MACINFO_start_file: - /* The two parameters are line and file index. */ - get_uleb128 (u128, readp); - get_uleb128 (u128_2, readp); - break; + Dwarf_Macro_Op_Proto *proto = &table->table[idx]; - case DW_MACINFO_end_file: - /* No parameters for this one. */ - u128 = 0; - break; + /* A fake CU with bare minimum data to fool dwarf_formX into + doing the right thing with the attributes that we put out. + We arbitrarily pretend it's version 4. */ + Dwarf_CU fake_cu = { + .dbg = dbg, + .version = 4, + .offset_size = table->is_64bit ? 8 : 4, + .startp = (void *) startp + offset, + .endp = (void *) endp, + }; - case 0: - /* Nothing more to do. */ - return 0; + Dwarf_Attribute attributes[proto->nforms]; + for (Dwarf_Word i = 0; i < proto->nforms; ++i) + { + /* We pretend this is a DW_AT_GNU_macros attribute so that + DW_FORM_sec_offset forms get correctly interpreted as + offset into .debug_macro. */ + attributes[i].code = DW_AT_GNU_macros; + attributes[i].form = proto->forms[i]; + attributes[i].valp = (void *) readp; + attributes[i].cu = &fake_cu; - default: - goto invalid; + size_t len = __libdw_form_val_len (&fake_cu, proto->forms[i], readp); + if (len == (size_t) -1) + return -1; + + readp += len; } - Dwarf_Macro mac; - mac.opcode = opcode; - mac.param1 = u128; - if (str == NULL) - mac.param2.u = u128_2; - else - mac.param2.s = str; + Dwarf_Macro macro = { + .table = table, + .opcode = opcode, + .attributes = attributes, + }; + + if (callback (¯o, arg) != DWARF_CB_OK) + return readp - startp; + } + + return 0; +} + +/* Token layout: - if (callback (&mac, arg) != DWARF_CB_OK) - return readp - (const unsigned char *) d->d_buf; + - The highest bit is used for distinguishing between callers that + know that opcode 0xff may have one of two incompatible meanings. + The mask that we use for selecting this bit is + DWARF_GETMACROS_START. + + - The rest of the token (31 or 63 bits) encodes address inside the + macro unit. + + Besides, token value of 0 signals end of iteration and -1 is + reserved for signaling errors. That means it's impossible to + represent maximum offset of a .debug_macro unit to new-style + callers (which in practice decreases the permissible macro unit + size by another 1 byte). */ + +static ptrdiff_t +token_from_offset (ptrdiff_t offset, bool accept_0xff) +{ + if (offset == -1 || offset == 0) + return offset; + + /* Make sure the offset didn't overflow into the flag bit. */ + if ((offset & DWARF_GETMACROS_START) != 0) + { + __libdw_seterrno (DWARF_E_TOO_BIG); + return -1; + } + + if (accept_0xff) + offset |= DWARF_GETMACROS_START; + + return offset; +} + +static ptrdiff_t +offset_from_token (ptrdiff_t token, bool *accept_0xffp) +{ + *accept_0xffp = (token & DWARF_GETMACROS_START) != 0; + token &= ~DWARF_GETMACROS_START; + + return token; +} + +static ptrdiff_t +gnu_macros_getmacros_off (Dwarf *dbg, Dwarf_Off macoff, + int (*callback) (Dwarf_Macro *, void *), + void *arg, ptrdiff_t offset, bool accept_0xff, + Dwarf_Die *cudie) +{ + assert (offset >= 0); + + if (macoff >= dbg->sectiondata[IDX_debug_macro]->d_size) + { + __libdw_seterrno (DWARF_E_INVALID_OFFSET); + return -1; + } + + return read_macros (dbg, IDX_debug_macro, macoff, + callback, arg, offset, accept_0xff, cudie); +} + +static ptrdiff_t +macro_info_getmacros_off (Dwarf *dbg, Dwarf_Off macoff, + int (*callback) (Dwarf_Macro *, void *), + void *arg, ptrdiff_t offset, Dwarf_Die *cudie) +{ + assert (offset >= 0); + + return read_macros (dbg, IDX_debug_macinfo, macoff, + callback, arg, offset, true, cudie); +} + +ptrdiff_t +dwarf_getmacros_off (Dwarf *dbg, Dwarf_Off macoff, + int (*callback) (Dwarf_Macro *, void *), + void *arg, ptrdiff_t token) +{ + if (dbg == NULL) + { + __libdw_seterrno (DWARF_E_NO_DWARF); + return -1; + } + + bool accept_0xff; + ptrdiff_t offset = offset_from_token (token, &accept_0xff); + assert (accept_0xff); + + offset = gnu_macros_getmacros_off (dbg, macoff, callback, arg, offset, + accept_0xff, NULL); + + return token_from_offset (offset, accept_0xff); +} + +ptrdiff_t +dwarf_getmacros (cudie, callback, arg, token) + Dwarf_Die *cudie; + int (*callback) (Dwarf_Macro *, void *); + void *arg; + ptrdiff_t token; +{ + if (cudie == NULL) + { + __libdw_seterrno (DWARF_E_NO_DWARF); + return -1; + } + + /* This function might be called from a code that expects to see + DW_MACINFO_* opcodes, not DW_MACRO_{GNU_,}* ones. It is fine to + serve most DW_MACRO_{GNU_,}* opcodes to such code, because those + whose values are the same as DW_MACINFO_* ones also have the same + behavior. It is not very likely that a .debug_macro section + would only use the part of opcode space that it shares with + .debug_macinfo, but it is possible. Serving the opcodes that are + only valid in DW_MACRO_{GNU_,}* domain is OK as well, because + clients in general need to be ready that newer standards define + more opcodes, and have coping mechanisms for unfamiliar opcodes. + + The one exception to the above rule is opcode 0xff, which has + concrete semantics in .debug_macinfo, but falls into vendor block + in .debug_macro, and can be assigned to do whatever. There is + some small probability that the two opcodes would look + superficially similar enough that a client would be confused and + misbehave as a result. For this reason, we refuse to serve + through this interface 0xff's originating from .debug_macro + unless the TOKEN that we obtained indicates the call originates + from a new-style caller. See above for details on what + information is encoded into tokens. */ + + bool accept_0xff; + ptrdiff_t offset = offset_from_token (token, &accept_0xff); + + /* DW_AT_macro_info */ + if (dwarf_hasattr (cudie, DW_AT_macro_info)) + { + Dwarf_Word macoff; + if (get_offset_from (cudie, DW_AT_macro_info, &macoff) != 0) + return -1; + offset = macro_info_getmacros_off (cudie->cu->dbg, macoff, + callback, arg, offset, cudie); + } + else + { + /* DW_AT_GNU_macros, DW_AT_macros */ + Dwarf_Word macoff; + if (get_offset_from (cudie, DW_AT_GNU_macros, &macoff) != 0) + return -1; + offset = gnu_macros_getmacros_off (cudie->cu->dbg, macoff, + callback, arg, offset, accept_0xff, + cudie); } - /* If we come here the termination of the data for the CU is not - present. */ - invalid: - __libdw_seterrno (DWARF_E_INVALID_DWARF); - return -1; + return token_from_offset (offset, accept_0xff); } diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c index 12728a34..19f4eae1 100644 --- a/libdw/dwarf_getpubnames.c +++ b/libdw/dwarf_getpubnames.c @@ -88,9 +88,11 @@ get_offsets (Dwarf *dbg) /* Now we know the offset of the first offset/name pair. */ mem[cnt].set_start = readp + 2 + 2 * len_bytes - startp; mem[cnt].address_len = len_bytes; - if (mem[cnt].set_start >= dbg->sectiondata[IDX_debug_pubnames]->d_size) + size_t max_size = dbg->sectiondata[IDX_debug_pubnames]->d_size; + if (mem[cnt].set_start >= max_size + || len - (2 + 2 * len_bytes) > max_size - mem[cnt].set_start) /* Something wrong, the first entry is beyond the end of - the section. */ + the section. Or the length of the whole unit is too big. */ break; /* Read the version. It better be two for now. */ @@ -123,7 +125,7 @@ get_offsets (Dwarf *dbg) readp += len; } - if (mem == NULL) + if (mem == NULL || cnt == 0) { __libdw_seterrno (DWARF_E_NO_ENTRY); return -1; @@ -184,6 +186,8 @@ dwarf_getpubnames (dbg, callback, arg, offset) unsigned char *startp = (unsigned char *) dbg->sectiondata[IDX_debug_pubnames]->d_buf; + unsigned char *endp + = startp + dbg->sectiondata[IDX_debug_pubnames]->d_size; unsigned char *readp = startp + offset; while (1) { @@ -195,6 +199,8 @@ dwarf_getpubnames (dbg, callback, arg, offset) while (1) { /* READP points to the next offset/name pair. */ + if (readp + dbg->pubnames_sets[cnt].address_len > endp) + goto invalid_dwarf; if (dbg->pubnames_sets[cnt].address_len == 4) gl.die_offset = read_4ubyte_unaligned_inc (dbg, readp); else @@ -208,7 +214,14 @@ dwarf_getpubnames (dbg, callback, arg, offset) gl.die_offset += dbg->pubnames_sets[cnt].cu_offset; gl.name = (char *) readp; - readp = (unsigned char *) rawmemchr (gl.name, '\0') + 1; + readp = (unsigned char *) memchr (gl.name, '\0', endp - readp); + if (unlikely (readp == NULL)) + { + invalid_dwarf: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1l; + } + readp++; /* We found name and DIE offset. Report it. */ if (callback (dbg, &gl, arg) != DWARF_CB_OK) diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index 7b174cfc..053b30f2 100644 --- a/libdw/dwarf_getsrclines.c +++ b/libdw/dwarf_getsrclines.c @@ -1,5 +1,5 @@ /* Return line number information of CU. - Copyright (C) 2004-2010, 2013 Red Hat, Inc. + Copyright (C) 2004-2010, 2013, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2004. @@ -34,6 +34,8 @@ #include <assert.h> #include <stdlib.h> #include <string.h> +#include <search.h> + #include "dwarf.h" #include "libdwP.h" @@ -48,6 +50,7 @@ struct linelist { Dwarf_Line line; struct linelist *next; + size_t sequence; }; @@ -55,28 +58,36 @@ struct linelist static int compare_lines (const void *a, const void *b) { - Dwarf_Line *const *p1 = a; - Dwarf_Line *const *p2 = b; - - if ((*p1)->addr == (*p2)->addr) - /* An end_sequence marker precedes a normal record at the same address. */ - return (*p2)->end_sequence - (*p1)->end_sequence; - - return (*p1)->addr - (*p2)->addr; + struct linelist *const *p1 = a; + struct linelist *const *p2 = b; + struct linelist *list1 = *p1; + struct linelist *list2 = *p2; + Dwarf_Line *line1 = &list1->line; + Dwarf_Line *line2 = &list2->line; + + if (line1->addr != line2->addr) + return (line1->addr < line2->addr) ? -1 : 1; + + /* An end_sequence marker precedes a normal record at the same address. */ + if (line1->end_sequence != line2->end_sequence) + return line2->end_sequence - line1->end_sequence; + + /* Otherwise, the linelist sequence maintains a stable sort. */ + return (list1->sequence < list2->sequence) ? -1 + : (list1->sequence > list2->sequence) ? 1 + : 0; } -int -dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) +static int +read_srclines (Dwarf *dbg, + const unsigned char *linep, const unsigned char *lineendp, + const char *comp_dir, unsigned address_size, + Dwarf_Lines **linesp, Dwarf_Files **filesp) { - if (unlikely (cudie == NULL - || (INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit - && INTUSE(dwarf_tag) (cudie) != DW_TAG_partial_unit))) - return -1; - int res = -1; struct linelist *linelist = NULL; - unsigned int nlinelist = 0; + size_t nlinelist = 0; /* If there are a large number of lines don't blow up the stack. Keep track of the last malloced linelist record and free them @@ -84,675 +95,787 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) #define MAX_STACK_ALLOC 4096 struct linelist *malloc_linelist = NULL; - /* Get the information if it is not already known. */ - struct Dwarf_CU *const cu = cudie->cu; - if (cu->lines == NULL) + if (unlikely (linep + 4 > lineendp)) { - /* Failsafe mode: no data found. */ - cu->lines = (void *) -1l; - cu->files = (void *) -1l; - - /* The die must have a statement list associated. */ - Dwarf_Attribute stmt_list_mem; - Dwarf_Attribute *stmt_list = INTUSE(dwarf_attr) (cudie, DW_AT_stmt_list, - &stmt_list_mem); - - /* Get the offset into the .debug_line section. NB: this call - also checks whether the previous dwarf_attr call failed. */ - const unsigned char *lineendp; - const unsigned char *linep - = __libdw_formptr (stmt_list, IDX_debug_line, DWARF_E_NO_DEBUG_LINE, - (unsigned char **) &lineendp, NULL); - if (linep == NULL) - goto out; - - /* Get the compilation directory. */ - Dwarf_Attribute compdir_attr_mem; - Dwarf_Attribute *compdir_attr = INTUSE(dwarf_attr) (cudie, - DW_AT_comp_dir, - &compdir_attr_mem); - const char *comp_dir = INTUSE(dwarf_formstring) (compdir_attr); - - if (unlikely (linep + 4 > lineendp)) - { - invalid_data: - __libdw_seterrno (DWARF_E_INVALID_DEBUG_LINE); - goto out; - } - - Dwarf *dbg = cu->dbg; - Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, linep); - unsigned int length = 4; - if (unlikely (unit_length == DWARF3_LENGTH_64_BIT)) - { - if (unlikely (linep + 8 > lineendp)) - goto invalid_data; - unit_length = read_8ubyte_unaligned_inc (dbg, linep); - length = 8; - } + invalid_data: + __libdw_seterrno (DWARF_E_INVALID_DEBUG_LINE); + goto out; + } - /* Check whether we have enough room in the section. */ - if (unit_length < 2 + length + 5 * 1 - || unlikely (linep + unit_length > lineendp)) + Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, linep); + unsigned int length = 4; + if (unlikely (unit_length == DWARF3_LENGTH_64_BIT)) + { + if (unlikely (linep + 8 > lineendp)) goto invalid_data; - lineendp = linep + unit_length; - - /* The next element of the header is the version identifier. */ - uint_fast16_t version = read_2ubyte_unaligned_inc (dbg, linep); - if (unlikely (version < 2) || unlikely (version > 4)) - { - __libdw_seterrno (DWARF_E_VERSION); - goto out; - } - - /* Next comes the header length. */ - Dwarf_Word header_length; - if (length == 4) - header_length = read_4ubyte_unaligned_inc (dbg, linep); - else - header_length = read_8ubyte_unaligned_inc (dbg, linep); - const unsigned char *header_start = linep; + unit_length = read_8ubyte_unaligned_inc (dbg, linep); + length = 8; + } - /* Next the minimum instruction length. */ - uint_fast8_t minimum_instr_len = *linep++; + /* Check whether we have enough room in the section. */ + if (unlikely (unit_length > (size_t) (lineendp - linep) + || unit_length < 2 + length + 5 * 1)) + goto invalid_data; + lineendp = linep + unit_length; - /* Next the maximum operations per instruction, in version 4 format. */ - uint_fast8_t max_ops_per_instr = 1; - if (version >= 4) - { - if (unlikely (lineendp - linep < 5)) - goto invalid_data; - max_ops_per_instr = *linep++; - if (unlikely (max_ops_per_instr == 0)) - goto invalid_data; - } + /* The next element of the header is the version identifier. */ + uint_fast16_t version = read_2ubyte_unaligned_inc (dbg, linep); + if (unlikely (version < 2) || unlikely (version > 4)) + { + __libdw_seterrno (DWARF_E_VERSION); + goto out; + } - /* Then the flag determining the default value of the is_stmt - register. */ - uint_fast8_t default_is_stmt = *linep++; + /* Next comes the header length. */ + Dwarf_Word header_length; + if (length == 4) + header_length = read_4ubyte_unaligned_inc (dbg, linep); + else + header_length = read_8ubyte_unaligned_inc (dbg, linep); + const unsigned char *header_start = linep; - /* Now the line base. */ - int_fast8_t line_base = (int8_t) *linep++; + /* Next the minimum instruction length. */ + uint_fast8_t minimum_instr_len = *linep++; - /* And the line range. */ - uint_fast8_t line_range = *linep++; + /* Next the maximum operations per instruction, in version 4 format. */ + uint_fast8_t max_ops_per_instr = 1; + if (version >= 4) + { + if (unlikely (lineendp - linep < 5)) + goto invalid_data; + max_ops_per_instr = *linep++; + if (unlikely (max_ops_per_instr == 0)) + goto invalid_data; + } - /* The opcode base. */ - uint_fast8_t opcode_base = *linep++; + /* Then the flag determining the default value of the is_stmt + register. */ + uint_fast8_t default_is_stmt = *linep++; + + /* Now the line base. */ + int_fast8_t line_base = (int8_t) *linep++; + + /* And the line range. */ + uint_fast8_t line_range = *linep++; + + /* The opcode base. */ + uint_fast8_t opcode_base = *linep++; + + /* Remember array with the standard opcode length (-1 to account for + the opcode with value zero not being mentioned). */ + const uint8_t *standard_opcode_lengths = linep - 1; + if (unlikely (lineendp - linep < opcode_base - 1)) + goto invalid_data; + linep += opcode_base - 1; + + /* First comes the list of directories. Add the compilation + directory first since the index zero is used for it. */ + struct dirlist + { + const char *dir; + size_t len; + struct dirlist *next; + } comp_dir_elem = + { + .dir = comp_dir, + .len = comp_dir ? strlen (comp_dir) : 0, + .next = NULL + }; + struct dirlist *dirlist = &comp_dir_elem; + unsigned int ndirlist = 1; + + // XXX Directly construct array to conserve memory? + while (*linep != 0) + { + struct dirlist *new_dir = + (struct dirlist *) alloca (sizeof (*new_dir)); - /* Remember array with the standard opcode length (-1 to account for - the opcode with value zero not being mentioned). */ - const uint8_t *standard_opcode_lengths = linep - 1; - if (unlikely (lineendp - linep < opcode_base - 1)) + new_dir->dir = (char *) linep; + uint8_t *endp = memchr (linep, '\0', lineendp - linep); + if (endp == NULL) goto invalid_data; - linep += opcode_base - 1; - - /* First comes the list of directories. Add the compilation - directory first since the index zero is used for it. */ - struct dirlist - { - const char *dir; - size_t len; - struct dirlist *next; - } comp_dir_elem = - { - .dir = comp_dir, - .len = comp_dir ? strlen (comp_dir) : 0, - .next = NULL - }; - struct dirlist *dirlist = &comp_dir_elem; - unsigned int ndirlist = 1; - - // XXX Directly construct array to conserve memory? - while (*linep != 0) - { - struct dirlist *new_dir = - (struct dirlist *) alloca (sizeof (*new_dir)); + new_dir->len = endp - linep; + new_dir->next = dirlist; + dirlist = new_dir; + ++ndirlist; + linep = endp + 1; + } + /* Skip the final NUL byte. */ + ++linep; - new_dir->dir = (char *) linep; - uint8_t *endp = memchr (linep, '\0', lineendp - linep); - if (endp == NULL) - goto invalid_data; - new_dir->len = endp - linep; - new_dir->next = dirlist; - dirlist = new_dir; - ++ndirlist; - linep = endp + 1; - } - /* Skip the final NUL byte. */ - ++linep; + /* Rearrange the list in array form. */ + struct dirlist **dirarray + = (struct dirlist **) alloca (ndirlist * sizeof (*dirarray)); + for (unsigned int n = ndirlist; n-- > 0; dirlist = dirlist->next) + dirarray[n] = dirlist; - /* Rearrange the list in array form. */ - struct dirlist **dirarray - = (struct dirlist **) alloca (ndirlist * sizeof (*dirarray)); - for (unsigned int n = ndirlist; n-- > 0; dirlist = dirlist->next) - dirarray[n] = dirlist; + /* Now read the files. */ + struct filelist null_file = + { + .info = + { + .name = "???", + .mtime = 0, + .length = 0 + }, + .next = NULL + }; + struct filelist *filelist = &null_file; + unsigned int nfilelist = 1; + + if (unlikely (linep >= lineendp)) + goto invalid_data; + while (*linep != 0) + { + struct filelist *new_file = + (struct filelist *) alloca (sizeof (*new_file)); - /* Now read the files. */ - struct filelist null_file = - { - .info = - { - .name = "???", - .mtime = 0, - .length = 0 - }, - .next = NULL - }; - struct filelist *filelist = &null_file; - unsigned int nfilelist = 1; + /* First comes the file name. */ + char *fname = (char *) linep; + uint8_t *endp = memchr (fname, '\0', lineendp - linep); + if (endp == NULL) + goto invalid_data; + size_t fnamelen = endp - (uint8_t *) fname; + linep = endp + 1; + /* Then the index. */ + Dwarf_Word diridx; if (unlikely (linep >= lineendp)) goto invalid_data; - while (*linep != 0) + get_uleb128 (diridx, linep, lineendp); + if (unlikely (diridx >= ndirlist)) { - struct filelist *new_file = - (struct filelist *) alloca (sizeof (*new_file)); + __libdw_seterrno (DWARF_E_INVALID_DIR_IDX); + goto out; + } - /* First comes the file name. */ - char *fname = (char *) linep; - uint8_t *endp = memchr (fname, '\0', lineendp - linep); - if (endp == NULL) - goto invalid_data; - size_t fnamelen = endp - (uint8_t *) fname; - linep = endp + 1; + if (*fname == '/') + /* It's an absolute path. */ + new_file->info.name = fname; + else + { + new_file->info.name = libdw_alloc (dbg, char, 1, + dirarray[diridx]->len + 1 + + fnamelen + 1); + char *cp = new_file->info.name; - /* Then the index. */ - Dwarf_Word diridx; - get_uleb128 (diridx, linep); - if (unlikely (diridx >= ndirlist)) + if (dirarray[diridx]->dir != NULL) { - __libdw_seterrno (DWARF_E_INVALID_DIR_IDX); - goto out; + /* This value could be NULL in case the DW_AT_comp_dir + was not present. We cannot do much in this case. + The easiest thing is to convert the path in an + absolute path. */ + cp = stpcpy (cp, dirarray[diridx]->dir); } - - if (*fname == '/') - /* It's an absolute path. */ - new_file->info.name = fname; - else - { - new_file->info.name = libdw_alloc (dbg, char, 1, - dirarray[diridx]->len + 1 - + fnamelen + 1); - char *cp = new_file->info.name; - - if (dirarray[diridx]->dir != NULL) - { - /* This value could be NULL in case the DW_AT_comp_dir - was not present. We cannot do much in this case. - The easiest thing is to convert the path in an - absolute path. */ - cp = stpcpy (cp, dirarray[diridx]->dir); - } - *cp++ = '/'; - strcpy (cp, fname); - assert (strlen (new_file->info.name) - < dirarray[diridx]->len + 1 + fnamelen + 1); - } - - /* Next comes the modification time. */ - get_uleb128 (new_file->info.mtime, linep); - - /* Finally the length of the file. */ - get_uleb128 (new_file->info.length, linep); - - new_file->next = filelist; - filelist = new_file; - ++nfilelist; + *cp++ = '/'; + strcpy (cp, fname); + assert (strlen (new_file->info.name) + < dirarray[diridx]->len + 1 + fnamelen + 1); } - /* Skip the final NUL byte. */ - ++linep; - /* Consistency check. */ - if (unlikely (linep != header_start + header_length)) - { - __libdw_seterrno (DWARF_E_INVALID_DWARF); - goto out; - } + /* Next comes the modification time. */ + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (new_file->info.mtime, linep, lineendp); - /* We are about to process the statement program. Initialize the - state machine registers (see 6.2.2 in the v2.1 specification). */ - Dwarf_Word addr = 0; - unsigned int op_index = 0; - unsigned int file = 1; - int line = 1; - unsigned int column = 0; - uint_fast8_t is_stmt = default_is_stmt; - bool basic_block = false; - bool prologue_end = false; - bool epilogue_begin = false; - unsigned int isa = 0; - unsigned int discriminator = 0; - - /* Apply the "operation advance" from a special opcode - or DW_LNS_advance_pc (as per DWARF4 6.2.5.1). */ - inline void advance_pc (unsigned int op_advance) - { - addr += minimum_instr_len * ((op_index + op_advance) - / max_ops_per_instr); - op_index = (op_index + op_advance) % max_ops_per_instr; - } + /* Finally the length of the file. */ + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (new_file->info.length, linep, lineendp); - /* Process the instructions. */ + new_file->next = filelist; + filelist = new_file; + ++nfilelist; + } + /* Skip the final NUL byte. */ + ++linep; - /* Adds a new line to the matrix. - We cannot simply define a function because we want to use alloca. */ + /* Consistency check. */ + if (unlikely (linep != header_start + header_length)) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + goto out; + } + + /* We are about to process the statement program. Initialize the + state machine registers (see 6.2.2 in the v2.1 specification). */ + Dwarf_Word addr = 0; + unsigned int op_index = 0; + unsigned int file = 1; + int line = 1; + unsigned int column = 0; + uint_fast8_t is_stmt = default_is_stmt; + bool basic_block = false; + bool prologue_end = false; + bool epilogue_begin = false; + unsigned int isa = 0; + unsigned int discriminator = 0; + + /* Apply the "operation advance" from a special opcode or + DW_LNS_advance_pc (as per DWARF4 6.2.5.1). */ + inline void advance_pc (unsigned int op_advance) + { + addr += minimum_instr_len * ((op_index + op_advance) + / max_ops_per_instr); + op_index = (op_index + op_advance) % max_ops_per_instr; + } + + /* Process the instructions. */ + + /* Adds a new line to the matrix. + We cannot simply define a function because we want to use alloca. */ #define NEW_LINE(end_seq) \ - do { \ - struct linelist *ll = (nlinelist < MAX_STACK_ALLOC \ - ? alloca (sizeof (struct linelist)) \ - : malloc (sizeof (struct linelist))); \ - if (nlinelist >= MAX_STACK_ALLOC) \ - malloc_linelist = ll; \ - if (unlikely (add_new_line (ll, end_seq))) \ - goto invalid_data; \ - } while (0) - - inline bool add_new_line (struct linelist *new_line, bool end_sequence) - { - new_line->next = linelist; - linelist = new_line; - ++nlinelist; - - /* Set the line information. For some fields we use bitfields, - so we would lose information if the encoded values are too large. - Check just for paranoia, and call the data "invalid" if it - violates our assumptions on reasonable limits for the values. */ + do { \ + struct linelist *ll = (nlinelist < MAX_STACK_ALLOC \ + ? alloca (sizeof (struct linelist)) \ + : malloc (sizeof (struct linelist))); \ + if (nlinelist >= MAX_STACK_ALLOC) \ + malloc_linelist = ll; \ + if (unlikely (add_new_line (ll, end_seq))) \ + goto invalid_data; \ + } while (0) + + inline bool add_new_line (struct linelist *new_line, bool end_sequence) + { + new_line->next = linelist; + new_line->sequence = nlinelist; + linelist = new_line; + ++nlinelist; + + /* Set the line information. For some fields we use bitfields, + so we would lose information if the encoded values are too large. + Check just for paranoia, and call the data "invalid" if it + violates our assumptions on reasonable limits for the values. */ #define SET(field) \ - do { \ - new_line->line.field = field; \ - if (unlikely (new_line->line.field != field)) \ - return true; \ - } while (0) - - SET (addr); - SET (op_index); - SET (file); - SET (line); - SET (column); - SET (is_stmt); - SET (basic_block); - SET (end_sequence); - SET (prologue_end); - SET (epilogue_begin); - SET (isa); - SET (discriminator); + do { \ + new_line->line.field = field; \ + if (unlikely (new_line->line.field != field)) \ + return true; \ + } while (0) + + SET (addr); + SET (op_index); + SET (file); + SET (line); + SET (column); + SET (is_stmt); + SET (basic_block); + SET (end_sequence); + SET (prologue_end); + SET (epilogue_begin); + SET (isa); + SET (discriminator); #undef SET - return false; - } + return false; + } - while (linep < lineendp) + while (linep < lineendp) + { + unsigned int opcode; + unsigned int u128; + int s128; + + /* Read the opcode. */ + opcode = *linep++; + + /* Is this a special opcode? */ + if (likely (opcode >= opcode_base)) { - unsigned int opcode; - unsigned int u128; - int s128; + if (unlikely (line_range == 0)) + goto invalid_data; - /* Read the opcode. */ - opcode = *linep++; + /* Yes. Handling this is quite easy since the opcode value + is computed with - /* Is this a special opcode? */ - if (likely (opcode >= opcode_base)) - { - /* Yes. Handling this is quite easy since the opcode value - is computed with + opcode = (desired line increment - line_base) + + (line_range * address advance) + opcode_base + */ + int line_increment = (line_base + + (opcode - opcode_base) % line_range); - opcode = (desired line increment - line_base) - + (line_range * address advance) + opcode_base - */ - int line_increment = (line_base - + (opcode - opcode_base) % line_range); + /* Perform the increments. */ + line += line_increment; + advance_pc ((opcode - opcode_base) / line_range); - /* Perform the increments. */ - line += line_increment; - advance_pc ((opcode - opcode_base) / line_range); + /* Add a new line with the current state machine values. */ + NEW_LINE (0); - /* Add a new line with the current state machine values. */ - NEW_LINE (0); + /* Reset the flags. */ + basic_block = false; + prologue_end = false; + epilogue_begin = false; + discriminator = 0; + } + else if (opcode == 0) + { + /* This an extended opcode. */ + if (unlikely (lineendp - linep < 2)) + goto invalid_data; - /* Reset the flags. */ + /* The length. */ + uint_fast8_t len = *linep++; + + if (unlikely ((size_t) (lineendp - linep) < len)) + goto invalid_data; + + /* The sub-opcode. */ + opcode = *linep++; + + switch (opcode) + { + case DW_LNE_end_sequence: + /* Add a new line with the current state machine values. + The is the end of the sequence. */ + NEW_LINE (1); + + /* Reset the registers. */ + addr = 0; + op_index = 0; + file = 1; + line = 1; + column = 0; + is_stmt = default_is_stmt; basic_block = false; prologue_end = false; epilogue_begin = false; + isa = 0; discriminator = 0; - } - else if (opcode == 0) - { - /* This an extended opcode. */ - if (unlikely (lineendp - linep < 2)) - goto invalid_data; - - /* The length. */ - uint_fast8_t len = *linep++; - - if (unlikely ((size_t) (lineendp - linep) < len)) + break; + + case DW_LNE_set_address: + /* The value is an address. The size is defined as + apporiate for the target machine. We use the + address size field from the CU header. */ + op_index = 0; + if (unlikely (lineendp - linep < (uint8_t) address_size)) goto invalid_data; - - /* The sub-opcode. */ - opcode = *linep++; - - switch (opcode) - { - case DW_LNE_end_sequence: - /* Add a new line with the current state machine values. - The is the end of the sequence. */ - NEW_LINE (1); - - /* Reset the registers. */ - addr = 0; - op_index = 0; - file = 1; - line = 1; - column = 0; - is_stmt = default_is_stmt; - basic_block = false; - prologue_end = false; - epilogue_begin = false; - isa = 0; - discriminator = 0; - break; - - case DW_LNE_set_address: - /* The value is an address. The size is defined as - apporiate for the target machine. We use the - address size field from the CU header. */ - op_index = 0; - if (unlikely (lineendp - linep < cu->address_size)) + if (__libdw_read_address_inc (dbg, IDX_debug_line, &linep, + address_size, &addr)) + goto out; + break; + + case DW_LNE_define_file: + { + char *fname = (char *) linep; + uint8_t *endp = memchr (linep, '\0', lineendp - linep); + if (endp == NULL) + goto invalid_data; + size_t fnamelen = endp - linep; + linep = endp + 1; + + unsigned int diridx; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (diridx, linep, lineendp); + if (unlikely (diridx >= ndirlist)) + { + __libdw_seterrno (DWARF_E_INVALID_DIR_IDX); goto invalid_data; - if (__libdw_read_address_inc (dbg, IDX_debug_line, &linep, - cu->address_size, &addr)) - goto out; - break; - - case DW_LNE_define_file: + } + Dwarf_Word mtime; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (mtime, linep, lineendp); + Dwarf_Word filelength; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (filelength, linep, lineendp); + + struct filelist *new_file = + (struct filelist *) alloca (sizeof (*new_file)); + if (fname[0] == '/') + new_file->info.name = fname; + else { - char *fname = (char *) linep; - uint8_t *endp = memchr (linep, '\0', lineendp - linep); - if (endp == NULL) - goto invalid_data; - size_t fnamelen = endp - linep; - linep = endp + 1; - - unsigned int diridx; - get_uleb128 (diridx, linep); - Dwarf_Word mtime; - get_uleb128 (mtime, linep); - Dwarf_Word filelength; - get_uleb128 (filelength, linep); - - struct filelist *new_file = - (struct filelist *) alloca (sizeof (*new_file)); - if (fname[0] == '/') - new_file->info.name = fname; - else - { - new_file->info.name = - libdw_alloc (dbg, char, 1, (dirarray[diridx]->len + 1 - + fnamelen + 1)); - char *cp = new_file->info.name; - - if (dirarray[diridx]->dir != NULL) - /* This value could be NULL in case the - DW_AT_comp_dir was not present. We - cannot do much in this case. The easiest - thing is to convert the path in an - absolute path. */ - cp = stpcpy (cp, dirarray[diridx]->dir); - *cp++ = '/'; - strcpy (cp, fname); - } - - new_file->info.mtime = mtime; - new_file->info.length = filelength; - new_file->next = filelist; - filelist = new_file; - ++nfilelist; + new_file->info.name = + libdw_alloc (dbg, char, 1, (dirarray[diridx]->len + 1 + + fnamelen + 1)); + char *cp = new_file->info.name; + + if (dirarray[diridx]->dir != NULL) + /* This value could be NULL in case the + DW_AT_comp_dir was not present. We + cannot do much in this case. The easiest + thing is to convert the path in an + absolute path. */ + cp = stpcpy (cp, dirarray[diridx]->dir); + *cp++ = '/'; + strcpy (cp, fname); } - break; - case DW_LNE_set_discriminator: - /* Takes one ULEB128 parameter, the discriminator. */ - if (unlikely (standard_opcode_lengths[opcode] != 1)) - goto invalid_data; + new_file->info.mtime = mtime; + new_file->info.length = filelength; + new_file->next = filelist; + filelist = new_file; + ++nfilelist; + } + break; + + case DW_LNE_set_discriminator: + /* Takes one ULEB128 parameter, the discriminator. */ + if (unlikely (standard_opcode_lengths[opcode] != 1)) + goto invalid_data; - get_uleb128 (discriminator, linep); - break; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (discriminator, linep, lineendp); + break; - default: - /* Unknown, ignore it. */ - if (unlikely ((size_t) (lineendp - (linep - 1)) < len)) - goto invalid_data; - linep += len - 1; - break; - } + default: + /* Unknown, ignore it. */ + if (unlikely ((size_t) (lineendp - (linep - 1)) < len)) + goto invalid_data; + linep += len - 1; + break; } - else if (opcode <= DW_LNS_set_isa) + } + else if (opcode <= DW_LNS_set_isa) + { + /* This is a known standard opcode. */ + switch (opcode) { - /* This is a known standard opcode. */ - switch (opcode) - { - case DW_LNS_copy: - /* Takes no argument. */ - if (unlikely (standard_opcode_lengths[opcode] != 0)) - goto invalid_data; + case DW_LNS_copy: + /* Takes no argument. */ + if (unlikely (standard_opcode_lengths[opcode] != 0)) + goto invalid_data; - /* Add a new line with the current state machine values. */ - NEW_LINE (0); + /* Add a new line with the current state machine values. */ + NEW_LINE (0); - /* Reset the flags. */ - basic_block = false; - prologue_end = false; - epilogue_begin = false; - discriminator = 0; - break; + /* Reset the flags. */ + basic_block = false; + prologue_end = false; + epilogue_begin = false; + discriminator = 0; + break; - case DW_LNS_advance_pc: - /* Takes one uleb128 parameter which is added to the - address. */ - if (unlikely (standard_opcode_lengths[opcode] != 1)) - goto invalid_data; + case DW_LNS_advance_pc: + /* Takes one uleb128 parameter which is added to the + address. */ + if (unlikely (standard_opcode_lengths[opcode] != 1)) + goto invalid_data; - get_uleb128 (u128, linep); - advance_pc (u128); - break; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (u128, linep, lineendp); + advance_pc (u128); + break; + + case DW_LNS_advance_line: + /* Takes one sleb128 parameter which is added to the + line. */ + if (unlikely (standard_opcode_lengths[opcode] != 1)) + goto invalid_data; - case DW_LNS_advance_line: - /* Takes one sleb128 parameter which is added to the - line. */ - if (unlikely (standard_opcode_lengths[opcode] != 1)) - goto invalid_data; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_sleb128 (s128, linep, lineendp); + line += s128; + break; - get_sleb128 (s128, linep); - line += s128; - break; + case DW_LNS_set_file: + /* Takes one uleb128 parameter which is stored in file. */ + if (unlikely (standard_opcode_lengths[opcode] != 1)) + goto invalid_data; - case DW_LNS_set_file: - /* Takes one uleb128 parameter which is stored in file. */ - if (unlikely (standard_opcode_lengths[opcode] != 1)) - goto invalid_data; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (u128, linep, lineendp); + file = u128; + break; - get_uleb128 (u128, linep); - file = u128; - break; + case DW_LNS_set_column: + /* Takes one uleb128 parameter which is stored in column. */ + if (unlikely (standard_opcode_lengths[opcode] != 1)) + goto invalid_data; - case DW_LNS_set_column: - /* Takes one uleb128 parameter which is stored in column. */ - if (unlikely (standard_opcode_lengths[opcode] != 1)) - goto invalid_data; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (u128, linep, lineendp); + column = u128; + break; - get_uleb128 (u128, linep); - column = u128; - break; + case DW_LNS_negate_stmt: + /* Takes no argument. */ + if (unlikely (standard_opcode_lengths[opcode] != 0)) + goto invalid_data; - case DW_LNS_negate_stmt: - /* Takes no argument. */ - if (unlikely (standard_opcode_lengths[opcode] != 0)) - goto invalid_data; + is_stmt = 1 - is_stmt; + break; - is_stmt = 1 - is_stmt; - break; + case DW_LNS_set_basic_block: + /* Takes no argument. */ + if (unlikely (standard_opcode_lengths[opcode] != 0)) + goto invalid_data; - case DW_LNS_set_basic_block: - /* Takes no argument. */ - if (unlikely (standard_opcode_lengths[opcode] != 0)) - goto invalid_data; + basic_block = true; + break; - basic_block = true; - break; + case DW_LNS_const_add_pc: + /* Takes no argument. */ + if (unlikely (standard_opcode_lengths[opcode] != 0)) + goto invalid_data; - case DW_LNS_const_add_pc: - /* Takes no argument. */ - if (unlikely (standard_opcode_lengths[opcode] != 0)) - goto invalid_data; + if (unlikely (line_range == 0)) + goto invalid_data; - advance_pc ((255 - opcode_base) / line_range); - break; + advance_pc ((255 - opcode_base) / line_range); + break; - case DW_LNS_fixed_advance_pc: - /* Takes one 16 bit parameter which is added to the - address. */ - if (unlikely (standard_opcode_lengths[opcode] != 1) - || unlikely (lineendp - linep < 2)) - goto invalid_data; + case DW_LNS_fixed_advance_pc: + /* Takes one 16 bit parameter which is added to the + address. */ + if (unlikely (standard_opcode_lengths[opcode] != 1) + || unlikely (lineendp - linep < 2)) + goto invalid_data; - addr += read_2ubyte_unaligned_inc (dbg, linep); - op_index = 0; - break; + addr += read_2ubyte_unaligned_inc (dbg, linep); + op_index = 0; + break; - case DW_LNS_set_prologue_end: - /* Takes no argument. */ - if (unlikely (standard_opcode_lengths[opcode] != 0)) - goto invalid_data; + case DW_LNS_set_prologue_end: + /* Takes no argument. */ + if (unlikely (standard_opcode_lengths[opcode] != 0)) + goto invalid_data; - prologue_end = true; - break; + prologue_end = true; + break; - case DW_LNS_set_epilogue_begin: - /* Takes no argument. */ - if (unlikely (standard_opcode_lengths[opcode] != 0)) - goto invalid_data; + case DW_LNS_set_epilogue_begin: + /* Takes no argument. */ + if (unlikely (standard_opcode_lengths[opcode] != 0)) + goto invalid_data; - epilogue_begin = true; - break; + epilogue_begin = true; + break; - case DW_LNS_set_isa: - /* Takes one uleb128 parameter which is stored in isa. */ - if (unlikely (standard_opcode_lengths[opcode] != 1)) - goto invalid_data; + case DW_LNS_set_isa: + /* Takes one uleb128 parameter which is stored in isa. */ + if (unlikely (standard_opcode_lengths[opcode] != 1)) + goto invalid_data; - get_uleb128 (isa, linep); - break; - } - } - else - { - /* 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. */ - for (int n = standard_opcode_lengths[opcode]; n > 0; --n) - get_uleb128 (u128, linep); - - /* Next round, ignore this opcode. */ - continue; + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (isa, linep, lineendp); + break; } } - - /* Put all the files in an array. */ - Dwarf_Files *files = libdw_alloc (dbg, Dwarf_Files, - sizeof (Dwarf_Files) - + nfilelist * sizeof (Dwarf_Fileinfo) - + (ndirlist + 1) * sizeof (char *), - 1); - const char **dirs = (void *) &files->info[nfilelist]; - - files->nfiles = nfilelist; - while (nfilelist-- > 0) - { - files->info[nfilelist] = filelist->info; - filelist = filelist->next; - } - assert (filelist == NULL); - - /* Put all the directory strings in an array. */ - files->ndirs = ndirlist; - for (unsigned int i = 0; i < ndirlist; ++i) - dirs[i] = dirarray[i]->dir; - dirs[ndirlist] = NULL; - - /* Remember the referring CU. */ - files->cu = cu; - - /* Make the file data structure available through the CU. */ - cu->files = files; - - void *buf = libdw_alloc (dbg, Dwarf_Lines, (sizeof (Dwarf_Lines) - + (sizeof (Dwarf_Line) - * nlinelist)), 1); - - /* First use the buffer for the pointers, and sort the entries. - We'll write the pointers in the end of the buffer, and then - copy into the buffer from the beginning so the overlap works. */ - assert (sizeof (Dwarf_Line) >= sizeof (Dwarf_Line *)); - Dwarf_Line **sortlines = (buf + sizeof (Dwarf_Lines) - + ((sizeof (Dwarf_Line) - - sizeof (Dwarf_Line *)) * nlinelist)); - - /* The list is in LIFO order and usually they come in clumps with - ascending addresses. So fill from the back to probably start with - runs already in order before we sort. */ - unsigned int i = nlinelist; - while (i-- > 0) + else { - sortlines[i] = &linelist->line; - linelist = linelist->next; - } - assert (linelist == NULL); - - /* Sort by ascending address. */ - qsort (sortlines, nlinelist, sizeof sortlines[0], &compare_lines); + /* 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. */ + for (int n = standard_opcode_lengths[opcode]; n > 0; --n) + { + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (u128, linep, lineendp); + } - /* Now that they are sorted, put them in the final array. - The buffers overlap, so we've clobbered the early elements - of SORTLINES by the time we're reading the later ones. */ - cu->lines = buf; - cu->lines->nlines = nlinelist; - for (i = 0; i < nlinelist; ++i) - { - cu->lines->info[i] = *sortlines[i]; - cu->lines->info[i].files = files; + /* Next round, ignore this opcode. */ + continue; } + } - /* Make sure the highest address for the CU is marked as end_sequence. - This is required by the DWARF spec, but some compilers forget and - dwfl_module_getsrc depends on it. */ - if (nlinelist > 0) - cu->lines->info[nlinelist - 1].end_sequence = 1; + /* Put all the files in an array. */ + Dwarf_Files *files = libdw_alloc (dbg, Dwarf_Files, + sizeof (Dwarf_Files) + + nfilelist * sizeof (Dwarf_Fileinfo) + + (ndirlist + 1) * sizeof (char *), + 1); + const char **dirs = (void *) &files->info[nfilelist]; - /* Success. */ - res = 0; + files->nfiles = nfilelist; + while (nfilelist-- > 0) + { + files->info[nfilelist] = filelist->info; + filelist = filelist->next; + } + assert (filelist == NULL); + + /* Put all the directory strings in an array. */ + files->ndirs = ndirlist; + for (unsigned int i = 0; i < ndirlist; ++i) + dirs[i] = dirarray[i]->dir; + dirs[ndirlist] = NULL; + + /* Pass the file data structure to the caller. */ + if (filesp != NULL) + *filesp = files; + + size_t buf_size = (sizeof (Dwarf_Lines) + (sizeof (Dwarf_Line) * nlinelist)); + void *buf = libdw_alloc (dbg, Dwarf_Lines, buf_size, 1); + + /* First use the buffer for the pointers, and sort the entries. + We'll write the pointers in the end of the buffer, and then + copy into the buffer from the beginning so the overlap works. */ + assert (sizeof (Dwarf_Line) >= sizeof (struct linelist *)); + struct linelist **sortlines = (buf + buf_size + - sizeof (struct linelist **) * nlinelist); + + /* The list is in LIFO order and usually they come in clumps with + ascending addresses. So fill from the back to probably start with + runs already in order before we sort. */ + for (size_t i = nlinelist; i-- > 0; ) + { + sortlines[i] = linelist; + linelist = linelist->next; } - else if (cu->lines != (void *) -1l) - /* We already have the information. */ - res = 0; + assert (linelist == NULL); + + /* Sort by ascending address. */ + qsort (sortlines, nlinelist, sizeof sortlines[0], &compare_lines); - if (likely (res == 0)) + /* Now that they are sorted, put them in the final array. + The buffers overlap, so we've clobbered the early elements + of SORTLINES by the time we're reading the later ones. */ + Dwarf_Lines *lines = buf; + lines->nlines = nlinelist; + for (size_t i = 0; i < nlinelist; ++i) { - *lines = cu->lines; - *nlines = cu->lines->nlines; + lines->info[i] = sortlines[i]->line; + lines->info[i].files = files; } - out: + /* Make sure the highest address for the CU is marked as end_sequence. + This is required by the DWARF spec, but some compilers forget and + dwfl_module_getsrc depends on it. */ + if (nlinelist > 0) + lines->info[nlinelist - 1].end_sequence = 1; + + /* Pass the line structure back to the caller. */ + if (linesp != NULL) + *linesp = lines; + + /* Success. */ + res = 0; + + out: /* Free malloced line records, if any. */ - for (unsigned int i = MAX_STACK_ALLOC; i < nlinelist; i++) + for (size_t i = MAX_STACK_ALLOC; i < nlinelist; i++) { struct linelist *ll = malloc_linelist->next; free (malloc_linelist); malloc_linelist = ll; } + return res; +} + +static int +files_lines_compare (const void *p1, const void *p2) +{ + const struct files_lines_s *t1 = p1; + const struct files_lines_s *t2 = p2; + + if (t1->debug_line_offset < t2->debug_line_offset) + return -1; + if (t1->debug_line_offset > t2->debug_line_offset) + return 1; + + return 0; +} + +int +internal_function +__libdw_getsrclines (Dwarf *dbg, Dwarf_Off debug_line_offset, + const char *comp_dir, unsigned address_size, + Dwarf_Lines **linesp, Dwarf_Files **filesp) +{ + struct files_lines_s fake = { .debug_line_offset = debug_line_offset }; + struct files_lines_s **found = tfind (&fake, &dbg->files_lines, + files_lines_compare); + if (found == NULL) + { + Elf_Data *data = __libdw_checked_get_data (dbg, IDX_debug_line); + if (data == NULL + || __libdw_offset_in_section (dbg, IDX_debug_line, + debug_line_offset, 1) != 0) + return -1; + + const unsigned char *linep = data->d_buf + debug_line_offset; + const unsigned char *lineendp = data->d_buf + data->d_size; + + struct files_lines_s *node = libdw_alloc (dbg, struct files_lines_s, + sizeof *node, 1); + + if (read_srclines (dbg, linep, lineendp, comp_dir, address_size, + &node->lines, &node->files) != 0) + return -1; + + node->debug_line_offset = debug_line_offset; + + found = tsearch (node, &dbg->files_lines, files_lines_compare); + if (found == NULL) + { + __libdw_seterrno (DWARF_E_NOMEM); + return -1; + } + } + + if (linesp != NULL) + *linesp = (*found)->lines; + + if (filesp != NULL) + *filesp = (*found)->files; + + return 0; +} + +/* Get the compilation directory, if any is set. */ +const char * +__libdw_getcompdir (Dwarf_Die *cudie) +{ + Dwarf_Attribute compdir_attr_mem; + Dwarf_Attribute *compdir_attr = INTUSE(dwarf_attr) (cudie, + DW_AT_comp_dir, + &compdir_attr_mem); + return INTUSE(dwarf_formstring) (compdir_attr); +} + +int +dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) +{ + if (unlikely (cudie == NULL + || (INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit + && INTUSE(dwarf_tag) (cudie) != DW_TAG_partial_unit))) + return -1; + + /* Get the information if it is not already known. */ + struct Dwarf_CU *const cu = cudie->cu; + if (cu->lines == NULL) + { + /* Failsafe mode: no data found. */ + cu->lines = (void *) -1l; + cu->files = (void *) -1l; + + /* The die must have a statement list associated. */ + Dwarf_Attribute stmt_list_mem; + Dwarf_Attribute *stmt_list = INTUSE(dwarf_attr) (cudie, DW_AT_stmt_list, + &stmt_list_mem); + + /* Get the offset into the .debug_line section. NB: this call + also checks whether the previous dwarf_attr call failed. */ + Dwarf_Off debug_line_offset; + if (__libdw_formptr (stmt_list, IDX_debug_line, DWARF_E_NO_DEBUG_LINE, + NULL, &debug_line_offset) == NULL) + return -1; + + if (__libdw_getsrclines (cu->dbg, debug_line_offset, + __libdw_getcompdir (cudie), + cu->address_size, &cu->lines, &cu->files) < 0) + return -1; + } + else if (cu->lines == (void *) -1l) + return -1; + + *lines = cu->lines; + *nlines = cu->lines->nlines; + // XXX Eventually: unlocking here. - return res; + return 0; } INTDEF(dwarf_getsrclines) diff --git a/libdw/dwarf_hasattr.c b/libdw/dwarf_hasattr.c index 7933c1c3..812c09bc 100644 --- a/libdw/dwarf_hasattr.c +++ b/libdw/dwarf_hasattr.c @@ -1,5 +1,5 @@ /* Check whether given DIE has specific attribute. - Copyright (C) 2003, 2005 Red Hat, Inc. + Copyright (C) 2003, 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -43,10 +43,43 @@ dwarf_hasattr (die, search_name) if (die == NULL) return 0; - /* Search for the attribute with the given name. */ - unsigned int code; - (void) __libdw_find_attr (die, search_name, &code, NULL); + /* Find the abbreviation entry. */ + Dwarf_Abbrev *abbrevp = __libdw_dieabbrev (die, NULL); + if (unlikely (abbrevp == DWARF_END_ABBREV)) + { + invalid_dwarf: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return 0; + } - return code == search_name; + Dwarf *dbg = die->cu->dbg; + + /* Search the name attribute. */ + unsigned char *const endp + = ((unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf + + dbg->sectiondata[IDX_debug_abbrev]->d_size); + + const unsigned char *attrp = abbrevp->attrp; + while (1) + { + /* Are we still in bounds? This test needs to be refined. */ + if (unlikely (attrp >= endp)) + goto invalid_dwarf; + + /* Get attribute name and form. */ + unsigned int attr_name; + get_uleb128 (attr_name, attrp, endp); + unsigned int attr_form; + if (unlikely (attrp >= endp)) + goto invalid_dwarf; + get_uleb128 (attr_form, attrp, endp); + + /* We can stop if we found the attribute with value zero. */ + if (attr_name == 0 || attr_form == 0) + return 0; + + if (attr_name == search_name) + return 1; + } } INTDEF (dwarf_hasattr) diff --git a/libdw/dwarf_haschildren.c b/libdw/dwarf_haschildren.c index b2273982..d0ce51ea 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, 2008 Red Hat, Inc. + Copyright (C) 2003, 2005, 2008, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -40,25 +40,13 @@ dwarf_haschildren (die) Dwarf_Die *die; { /* Find the abbreviation entry. */ - Dwarf_Abbrev *abbrevp = die->abbrev; - if (abbrevp != DWARF_END_ABBREV) - { - const unsigned char *readp = (unsigned char *) die->addr; - - /* First we have to get the abbreviation code so that we can decode - the data in the DIE. */ - unsigned int abbrev_code; - get_uleb128 (abbrev_code, readp); - - abbrevp = __libdw_findabbrev (die->cu, abbrev_code); - die->abbrev = abbrevp ?: DWARF_END_ABBREV; - } - if (unlikely (die->abbrev == DWARF_END_ABBREV)) + Dwarf_Abbrev *abbrevp = __libdw_dieabbrev (die, NULL); + if (unlikely (abbrevp == DWARF_END_ABBREV)) { __libdw_seterrno (DWARF_E_INVALID_DWARF); return -1; } - return die->abbrev->has_children; + return abbrevp->has_children; } INTDEF (dwarf_haschildren) diff --git a/libdw/dwarf_macro_getparamcnt.c b/libdw/dwarf_macro_getparamcnt.c new file mode 100644 index 00000000..e218eb1d --- /dev/null +++ b/libdw/dwarf_macro_getparamcnt.c @@ -0,0 +1,43 @@ +/* Return number of parameters of a macro. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libdwP.h" + +int +dwarf_macro_getparamcnt (Dwarf_Macro *macro, size_t *paramcntp) +{ + if (macro == NULL) + return -1; + + *paramcntp = libdw_macro_nforms (macro); + return 0; +} diff --git a/libdw/dwarf_macro_getsrcfiles.c b/libdw/dwarf_macro_getsrcfiles.c new file mode 100644 index 00000000..cc190437 --- /dev/null +++ b/libdw/dwarf_macro_getsrcfiles.c @@ -0,0 +1,88 @@ +/* Find line information for a given macro. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libdwP.h" + +int +dwarf_macro_getsrcfiles (Dwarf *dbg, Dwarf_Macro *macro, + Dwarf_Files **files, size_t *nfiles) +{ + if (macro == NULL) + return -1; + + Dwarf_Macro_Op_Table *const table = macro->table; + if (table->files == NULL) + { + Dwarf_Off line_offset = table->line_offset; + if (line_offset == (Dwarf_Off) -1) + { + *files = NULL; + *nfiles = 0; + return 0; + } + + /* If TABLE->comp_dir is NULL that could mean any of the + following: + + - The macro unit is not bound to a CU. It's an auxiliary + unit used purely for import from other units. In that case + there's actually no COMP_DIR value that we could use. + + - The macro unit is bound to a CU, but there's no + DW_AT_comp_dir attribute at the CU DIE. + + - The macro unit is bound to a CU, but we don't know that, + likely because its iteration was requested through + dwarf_getmacros_off interface. This might be legitimate if + one macro unit imports another CU's macro unit, but that is + unlikely to happen in practice. Most probably this is not + legitimate use of the interfaces. + + So when the interfaces are used correctly, COMP_DIR value is + always right. That means that we can cache the parsed + .debug_line unit without fear that later on someone requests + the same unit through dwarf_getsrcfiles, and the file names + will be broken. */ + + if (__libdw_getsrclines (dbg, line_offset, table->comp_dir, + table->is_64bit ? 8 : 4, + NULL, &table->files) < 0) + table->files = (void *) -1; + } + + if (table->files == (void *) -1) + return -1; + + *files = table->files; + *nfiles = table->files->nfiles; + return 0; +} diff --git a/libdw/dwarf_macro_param.c b/libdw/dwarf_macro_param.c new file mode 100644 index 00000000..bd846a7f --- /dev/null +++ b/libdw/dwarf_macro_param.c @@ -0,0 +1,46 @@ +/* Return a given parameter of a macro. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libdwP.h" + +int +dwarf_macro_param (Dwarf_Macro *macro, size_t idx, Dwarf_Attribute *ret) +{ + if (macro == NULL) + return -1; + + if (idx >= libdw_macro_nforms (macro)) + return -1; + + *ret = macro->attributes[idx]; + return 0; +} diff --git a/libdw/dwarf_macro_param1.c b/libdw/dwarf_macro_param1.c index 35d4a718..87ce0035 100644 --- a/libdw/dwarf_macro_param1.c +++ b/libdw/dwarf_macro_param1.c @@ -1,5 +1,5 @@ /* Return first macro parameter. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2005. @@ -40,7 +40,9 @@ dwarf_macro_param1 (Dwarf_Macro *macro, Dwarf_Word *paramp) if (macro == NULL) return -1; - *paramp = macro->param1; + Dwarf_Attribute param; + if (dwarf_macro_param (macro, 0, ¶m) != 0) + return -1; - return 0; + return dwarf_formudata (¶m, paramp); } diff --git a/libdw/dwarf_macro_param2.c b/libdw/dwarf_macro_param2.c index b49e60ea..cc902c99 100644 --- a/libdw/dwarf_macro_param2.c +++ b/libdw/dwarf_macro_param2.c @@ -1,5 +1,5 @@ /* Return second macro parameter. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2005. @@ -40,10 +40,16 @@ dwarf_macro_param2 (Dwarf_Macro *macro, Dwarf_Word *paramp, const char **strp) if (macro == NULL) return -1; - if (paramp != NULL) - *paramp = macro->param2.u; - if (strp != NULL) - *strp = macro->param2.s; + Dwarf_Attribute param; + if (dwarf_macro_param (macro, 1, ¶m) != 0) + return -1; - return 0; + if (param.form == DW_FORM_string + || param.form == DW_FORM_strp) + { + *strp = dwarf_formstring (¶m); + return 0; + } + else + return dwarf_formudata (¶m, paramp); } diff --git a/libdw/dwarf_next_cfi.c b/libdw/dwarf_next_cfi.c index 80b7dfaa..b5af49e3 100644 --- a/libdw/dwarf_next_cfi.c +++ b/libdw/dwarf_next_cfi.c @@ -1,5 +1,5 @@ /* Advance to next CFI entry. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -170,11 +170,19 @@ dwarf_next_cfi (e_ident, data, eh_frame_p, off, next_off, entry) bytes += address_size; } - get_uleb128 (entry->cie.code_alignment_factor, bytes); - get_sleb128 (entry->cie.data_alignment_factor, bytes); + if (bytes >= limit) + goto invalid; + get_uleb128 (entry->cie.code_alignment_factor, bytes, limit); + + if (bytes >= limit) + goto invalid; + get_sleb128 (entry->cie.data_alignment_factor, bytes, limit); + + if (bytes >= limit) + goto invalid; if (version >= 3) /* DWARF 3+ */ - get_uleb128 (entry->cie.return_address_register, bytes); + get_uleb128 (entry->cie.return_address_register, bytes, limit); else /* DWARF 2 */ entry->cie.return_address_register = *bytes++; @@ -184,7 +192,9 @@ dwarf_next_cfi (e_ident, data, eh_frame_p, off, next_off, entry) bool sized_augmentation = *ap == 'z'; if (sized_augmentation) { - get_uleb128 (entry->cie.augmentation_data_size, bytes); + if (bytes >= limit) + goto invalid; + get_uleb128 (entry->cie.augmentation_data_size, bytes, limit); if ((Dwarf_Word) (limit - bytes) < entry->cie.augmentation_data_size) goto invalid; entry->cie.augmentation_data = bytes; diff --git a/libdw/dwarf_peel_type.c b/libdw/dwarf_peel_type.c new file mode 100644 index 00000000..a110bc54 --- /dev/null +++ b/libdw/dwarf_peel_type.c @@ -0,0 +1,74 @@ +/* Peel type aliases and qualifier tags from a type DIE. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libdwP.h" +#include <dwarf.h> +#include <string.h> + + +int +dwarf_peel_type (die, result) + Dwarf_Die *die; + Dwarf_Die *result; +{ + int tag; + + /* Ignore previous errors. */ + if (die == NULL) + return -1; + + *result = *die; + tag = INTUSE (dwarf_tag) (result); + while (tag == DW_TAG_typedef + || tag == DW_TAG_const_type + || tag == DW_TAG_volatile_type + || tag == DW_TAG_restrict_type) + { + Dwarf_Attribute attr_mem; + Dwarf_Attribute *attr = INTUSE (dwarf_attr_integrate) (die, DW_AT_type, + &attr_mem); + if (attr == NULL) + return 1; + + result = INTUSE (dwarf_formref_die) (attr, result); + if (result == NULL) + return -1; + + tag = INTUSE (dwarf_tag) (result); + } + + if (tag == DW_TAG_invalid) + return -1; + + return 0; +} +INTDEF(dwarf_peel_type) diff --git a/libdw/dwarf_siblingof.c b/libdw/dwarf_siblingof.c index c54b6c8d..27830ea4 100644 --- a/libdw/dwarf_siblingof.c +++ b/libdw/dwarf_siblingof.c @@ -1,5 +1,5 @@ /* Return sibling of given DIE. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -62,8 +62,7 @@ dwarf_siblingof (die, result) /* That's the address we start looking. */ unsigned char *addr = this_die.addr; /* End of the buffer. */ - unsigned char *endp - = ((unsigned char *) cu_data (sibattr.cu)->d_buf + sibattr.cu->end); + unsigned char *endp = sibattr.cu->endp; /* Search for the beginning of the next die on this level. We must not return the dies for children of the given die. */ @@ -72,7 +71,7 @@ dwarf_siblingof (die, result) /* Find the end of the DIE or the sibling attribute. */ addr = __libdw_find_attr (&this_die, DW_AT_sibling, &sibattr.code, &sibattr.form); - if (sibattr.code == DW_AT_sibling) + if (addr != NULL && sibattr.code == DW_AT_sibling) { Dwarf_Off offset; sibattr.valp = addr; @@ -81,8 +80,7 @@ dwarf_siblingof (die, result) return -1; /* Compute the next address. */ - addr = ((unsigned char *) cu_data (sibattr.cu)->d_buf - + sibattr.cu->start + offset); + addr = sibattr.cu->startp + offset; } else if (unlikely (addr == NULL) || unlikely (this_die.abbrev == DWARF_END_ABBREV)) diff --git a/libdw/dwarf_tag.c b/libdw/dwarf_tag.c index ff012cf4..0b1a4b08 100644 --- a/libdw/dwarf_tag.c +++ b/libdw/dwarf_tag.c @@ -1,5 +1,5 @@ /* Return tag of given DIE. - Copyright (C) 2003-2011 Red Hat, Inc. + Copyright (C) 2003-2011, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -82,24 +82,14 @@ int dwarf_tag (die) Dwarf_Die *die; { - /* Do we already know the abbreviation? */ - if (die->abbrev == NULL) - { - /* Get the abbreviation code. */ - unsigned int u128; - const unsigned char *addr = die->addr; - get_uleb128 (u128, addr); - - /* Find the abbreviation. */ - die->abbrev = __libdw_findabbrev (die->cu, u128); - } - - if (unlikely (die->abbrev == DWARF_END_ABBREV)) + /* Find the abbreviation entry. */ + Dwarf_Abbrev *abbrevp = __libdw_dieabbrev (die, NULL); + if (unlikely (abbrevp == DWARF_END_ABBREV)) { __libdw_seterrno (DWARF_E_INVALID_DWARF); return DW_TAG_invalid; } - return die->abbrev->tag; + return abbrevp->tag; } INTDEF(dwarf_tag) diff --git a/libdw/encoded-value.h b/libdw/encoded-value.h index 4b59f62f..ae9a38f9 100644 --- a/libdw/encoded-value.h +++ b/libdw/encoded-value.h @@ -1,5 +1,5 @@ /* DW_EH_PE_* support for libdw unwinder. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -163,11 +163,13 @@ read_encoded_value (const Dwarf_CFI *cache, uint8_t encoding, const uint8_t **p, break; case DW_EH_PE_uleb128: - get_uleb128 (value, *p); + // XXX we trust there is enough data. + get_uleb128 (value, *p, *p + len_leb128 (Dwarf_Addr)); break; case DW_EH_PE_sleb128: - get_sleb128 (value, *p); + // XXX we trust there is enough data. + get_sleb128 (value, *p, *p + len_leb128 (Dwarf_Addr)); break; default: diff --git a/libdw/fde.c b/libdw/fde.c index 91ce7327..18a522bd 100644 --- a/libdw/fde.c +++ b/libdw/fde.c @@ -1,5 +1,5 @@ /* FDE reading. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -97,7 +97,7 @@ intern_fde (Dwarf_CFI *cache, const Dwarf_FDE *entry) /* The CIE augmentation says the FDE has a DW_FORM_block before its actual instruction stream. */ Dwarf_Word len; - get_uleb128 (len, fde->instructions); + get_uleb128 (len, fde->instructions, fde->instructions_end); if ((Dwarf_Word) (fde->instructions_end - fde->instructions) < len) { free (fde); diff --git a/libdw/libdw.h b/libdw/libdw.h index a4654c44..b2b22828 100644 --- a/libdw/libdw.h +++ b/libdw/libdw.h @@ -1,5 +1,5 @@ /* Interfaces for libdw. - Copyright (C) 2002-2010, 2013 Red Hat, Inc. + Copyright (C) 2002-2010, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -32,6 +32,7 @@ #include <gelf.h> #include <stdbool.h> #include <stddef.h> +#include <stdint.h> #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) @@ -112,6 +113,7 @@ typedef struct Dwarf_Aranges_s Dwarf_Aranges; /* CU representation. */ struct Dwarf_CU; +typedef struct Dwarf_CU Dwarf_CU; /* Macro information. */ typedef struct Dwarf_Macro_s Dwarf_Macro; @@ -260,6 +262,12 @@ extern Dwarf *dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp); /* Retrieve ELF descriptor used for DWARF access. */ extern Elf *dwarf_getelf (Dwarf *dwarf); +/* Retieve DWARF descriptor used for a Dwarf_Die or Dwarf_Attribute. + A Dwarf_Die or a Dwarf_Attribute is associated with a particular + Dwarf_CU handle. This function returns the DWARF descriptor for + that Dwarf_CU. */ +extern Dwarf *dwarf_cu_getdwarf (Dwarf_CU *cu); + /* Retrieves the DWARF descriptor for debugaltlink data. Returns NULL if no alternate debug data has been supplied. */ extern Dwarf *dwarf_getalt (Dwarf *main); @@ -357,6 +365,23 @@ extern Dwarf_Die *dwarf_diecu (Dwarf_Die *die, Dwarf_Die *result, uint8_t *address_sizep, uint8_t *offset_sizep) __nonnull_attribute__ (2); +/* Return the CU DIE and the header info associated with a Dwarf_Die + or Dwarf_Attribute. A Dwarf_Die or a Dwarf_Attribute is associated + with a particular Dwarf_CU handle. This function returns the CU or + type unit DIE and header information for that Dwarf_CU. The + returned DIE is either a compile_unit, partial_unit or type_unit. + If it is a type_unit, then the type signature and type offset are + also provided, otherwise type_offset will be set to zero. See also + dwarf_diecu and dwarf_next_unit. */ +extern Dwarf_Die *dwarf_cu_die (Dwarf_CU *cu, Dwarf_Die *result, + Dwarf_Half *versionp, + Dwarf_Off *abbrev_offsetp, + uint8_t *address_sizep, + uint8_t *offset_sizep, + uint64_t *type_signaturep, + Dwarf_Off *type_offsetp) + __nonnull_attribute__ (2); + /* Return CU DIE containing given address. */ extern Dwarf_Die *dwarf_addrdie (Dwarf *dbg, Dwarf_Addr addr, Dwarf_Die *result) __nonnull_attribute__ (3); @@ -374,6 +399,24 @@ extern int dwarf_child (Dwarf_Die *die, Dwarf_Die *result) extern int dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result) __nonnull_attribute__ (2); +/* For type aliases and qualifier type DIEs follow the DW_AT_type + attribute (recursively) and return the underlying type Dwarf_Die. + Returns 0 when RESULT contains a Dwarf_Die (possibly equal to the + given DIE) that isn't a type alias or qualifier type. Returns 1 + when RESULT contains a type alias or qualifier Dwarf_Die that + couldn't be peeled further (it doesn't have a DW_TAG_type + attribute). Returns -1 when an error occured. + + The current DWARF specification defines one type alias tag + (DW_TAG_typedef) and three qualifier type tags (DW_TAG_const_type, + DW_TAG_volatile_type, DW_TAG_restrict_type). A future version of + this function might peel other alias or qualifier type tags if a + future DWARF version or GNU extension defines other type aliases or + qualifier type tags that don't modify or change the structural + layout of the underlying type. */ +extern int dwarf_peel_type (Dwarf_Die *die, Dwarf_Die *result) + __nonnull_attribute__ (2); + /* Check whether the DIE has children. */ extern int dwarf_haschildren (Dwarf_Die *die) __nonnull_attribute__ (1); @@ -802,26 +845,95 @@ extern int dwarf_func_inline_instances (Dwarf_Die *func, extern int dwarf_entry_breakpoints (Dwarf_Die *die, Dwarf_Addr **bkpts); -/* Call callback function for each of the macro information entry for - the CU. */ +/* Iterate through the macro unit referenced by CUDIE and call + CALLBACK for each macro information entry. To start the iteration, + one would pass DWARF_GETMACROS_START for TOKEN. + + The iteration continues while CALLBACK returns DWARF_CB_OK. If the + callback returns DWARF_CB_ABORT, the iteration stops and a + continuation token is returned, which can be used to restart the + iteration at the point where it ended. Returns -1 for errors or 0 + if there are no more macro entries. + + Note that the Dwarf_Macro pointer passed to the callback is only + valid for the duration of the callback invocation. + + For backward compatibility, a token of 0 is accepted for starting + the iteration as well, but in that case this interface will refuse + to serve opcode 0xff from .debug_macro sections. Such opcode would + be considered invalid and would cause dwarf_getmacros to return + with error. */ +#define DWARF_GETMACROS_START PTRDIFF_MIN extern ptrdiff_t dwarf_getmacros (Dwarf_Die *cudie, int (*callback) (Dwarf_Macro *, void *), - void *arg, ptrdiff_t offset) + void *arg, ptrdiff_t token) __nonnull_attribute__ (2); -/* Return macro opcode. */ +/* This is similar in operation to dwarf_getmacros, but selects the + unit to iterate through by offset instead of by CU, and always + iterates .debug_macro. This can be used for handling + DW_MACRO_GNU_transparent_include's or similar opcodes. + + TOKEN value of DWARF_GETMACROS_START can be used to start the + iteration. + + It is not appropriate to obtain macro unit offset by hand from a CU + DIE and then request iteration through this interface. The reason + for this is that if a dwarf_macro_getsrcfiles is later called, + there would be no way to figure out what DW_AT_comp_dir was present + on the CU DIE, and file names referenced in either the macro unit + itself, or the .debug_line unit that it references, might be wrong. + Use dwarf_getmacros. */ +extern ptrdiff_t dwarf_getmacros_off (Dwarf *dbg, Dwarf_Off macoff, + int (*callback) (Dwarf_Macro *, void *), + void *arg, ptrdiff_t token) + __nonnull_attribute__ (3); + +/* Get the source files used by the macro entry. You shouldn't assume + that Dwarf_Files references will remain valid after MACRO becomes + invalid. (Which is to say it's only valid within the + dwarf_getmacros* callback.) Returns 0 for success or a negative + value in case of an error. */ +extern int dwarf_macro_getsrcfiles (Dwarf *dbg, Dwarf_Macro *macro, + Dwarf_Files **files, size_t *nfiles) + __nonnull_attribute__ (2, 3, 4); + +/* Return macro opcode. That's a constant that can be either from + DW_MACINFO_* domain or DW_MACRO_GNU_* domain. The two domains have + compatible values, so it's OK to use either of them for + comparisons. The only differences is 0xff, which could be either + DW_MACINFO_vendor_ext or a vendor-defined DW_MACRO_* constant. One + would need to look if the CU DIE which the iteration was requested + for has attribute DW_AT_macro_info, or either of DW_AT_GNU_macros + or DW_AT_macros to differentiate the two interpretations. */ extern int dwarf_macro_opcode (Dwarf_Macro *macro, unsigned int *opcodep) __nonnull_attribute__ (2); -/* Return first macro parameter. */ +/* Get number of parameters of MACRO and store it to *PARAMCNTP. */ +extern int dwarf_macro_getparamcnt (Dwarf_Macro *macro, size_t *paramcntp); + +/* Get IDX-th parameter of MACRO (numbered from zero), and stores it + to *ATTRIBUTE. Returns 0 on success or -1 for errors. + + After a successful call, you can query ATTRIBUTE by dwarf_whatform + to determine which of the dwarf_formX calls to make to get actual + value out of ATTRIBUTE. Note that calling dwarf_whatattr is not + meaningful for pseudo-attributes formed this way. */ +extern int dwarf_macro_param (Dwarf_Macro *macro, size_t idx, + Dwarf_Attribute *attribute); + +/* Return macro parameter with index 0. This will return -1 if the + parameter is not an integral value. Use dwarf_macro_param for more + general access. */ extern int dwarf_macro_param1 (Dwarf_Macro *macro, Dwarf_Word *paramp) __nonnull_attribute__ (2); -/* Return second macro parameter. */ +/* Return macro parameter with index 1. This will return -1 if the + parameter is not an integral or string value. Use + dwarf_macro_param for more general access. */ extern int dwarf_macro_param2 (Dwarf_Macro *macro, Dwarf_Word *paramp, const char **strp); - /* Compute what's known about a call frame when the PC is at ADDRESS. Returns 0 for success or -1 for errors. On success, *FRAME is a malloc'd pointer. */ diff --git a/libdw/libdw.map b/libdw/libdw.map index 899e13e1..1d4cbb0c 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -301,3 +301,24 @@ ELFUTILS_0.159 { dwelf_elf_gnu_debuglink; dwelf_elf_gnu_build_id; } ELFUTILS_0.158; + +ELFUTILS_0.160 { + global: + dwarf_cu_getdwarf; + dwarf_cu_die; +} ELFUTILS_0.159; + +ELFUTILS_0.161 { + global: + dwarf_peel_type; + + # Replaced ELFUTILS_0.144 version. Both versions point to the + # same implementation, but users of the new symbol version can + # presume that it uses dwarf_peel_type. + dwarf_aggregate_size; + + dwarf_getmacros_off; + dwarf_macro_getsrcfiles; + dwarf_macro_getparamcnt; + dwarf_macro_param; +} ELFUTILS_0.160; diff --git a/libdw/libdwP.h b/libdw/libdwP.h index ce8a83d5..5ab72194 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -59,6 +59,14 @@ struct loc_block_s size_t length; }; +/* Already decoded .debug_line units. */ +struct files_lines_s +{ + Dwarf_Off debug_line_offset; + Dwarf_Files *files; + Dwarf_Lines *lines; +}; + /* Valid indeces for the section data. */ enum { @@ -118,7 +126,8 @@ enum DWARF_E_INVALID_OFFSET, DWARF_E_NO_DEBUG_RANGES, DWARF_E_INVALID_CFI, - DWARF_E_NO_ALT_DEBUGLINK + DWARF_E_NO_ALT_DEBUGLINK, + DWARF_E_INVALID_OPCODE, }; @@ -167,12 +176,22 @@ struct Dwarf Dwarf_Off next_tu_offset; Dwarf_Sig8_Hash sig8_hash; + /* Search tree for .debug_macro operator tables. */ + void *macro_ops; + + /* Search tree for decoded .debug_line units. */ + void *files_lines; + /* Address ranges. */ Dwarf_Aranges *aranges; /* Cached info from the CFI section. */ struct Dwarf_CFI_s *cfi; + /* Fake loc CU. Used when synthesizing attributes for Dwarf_Ops that + came from a location list entry in dwarf_getlocation_attr. */ + struct Dwarf_CU *fake_loc_cu; + /* Internal memory handling. This is basically a simplified reimplementation of obstacks. Unfortunately the standard obstack implementation is not usable in libraries. */ @@ -209,7 +228,6 @@ struct Dwarf_Abbrev /* Files in line information records. */ struct Dwarf_Files_s { - struct Dwarf_CU *cu; unsigned int ndirs; unsigned int nfiles; struct Dwarf_Fileinfo_s @@ -296,6 +314,10 @@ struct Dwarf_CU /* Known location lists. */ void *locs; + + /* Memory boundaries of this CU. */ + void *startp; + void *endp; }; /* Compute the offset of a CU's first DIE from its offset. This @@ -319,25 +341,65 @@ struct Dwarf_CU ((Dwarf_Die) \ { \ .cu = (fromcu), \ - .addr = ((char *) cu_data (fromcu)->d_buf \ + .addr = ((char *) fromcu->dbg->sectiondata[cu_sec_idx (fromcu)]->d_buf \ + DIE_OFFSET_FROM_CU_OFFSET ((fromcu)->start, \ (fromcu)->offset_size, \ (fromcu)->type_offset != 0)) \ }) \ -/* Macro information. */ +/* Prototype of a single .debug_macro operator. */ +typedef struct +{ + Dwarf_Word nforms; + unsigned char const *forms; +} Dwarf_Macro_Op_Proto; + +/* Prototype table. */ +typedef struct +{ + /* Offset of .debug_macro section. */ + Dwarf_Off offset; + + /* Offset of associated .debug_line section. */ + Dwarf_Off line_offset; + + /* The source file information. */ + Dwarf_Files *files; + + /* If this macro unit was opened through dwarf_getmacros or + dwarf_getmacros_die, this caches value of DW_AT_comp_dir, if + present. */ + const char *comp_dir; + + /* Header length. */ + Dwarf_Half header_len; + + uint16_t version; + bool is_64bit; + uint8_t sec_index; /* IDX_debug_macro or IDX_debug_macinfo. */ + + /* Shows where in TABLE each opcode is defined. Since opcode 0 is + never used, it stores index of opcode X in X-1'th element. The + value of 0xff means not stored at all. */ + unsigned char opcodes[255]; + + /* Individual opcode prototypes. */ + Dwarf_Macro_Op_Proto table[]; +} Dwarf_Macro_Op_Table; + struct Dwarf_Macro_s { - unsigned int opcode; - Dwarf_Word param1; - union - { - Dwarf_Word u; - const char *s; - } param2; + Dwarf_Macro_Op_Table *table; + Dwarf_Attribute *attributes; + uint8_t opcode; }; +static inline Dwarf_Word +libdw_macro_nforms (Dwarf_Macro *macro) +{ + return macro->table->table[macro->table->opcodes[macro->opcode - 1]].nforms; +} /* We have to include the file at this point because the inline functions access internals of the Dwarf structure. */ @@ -390,7 +452,7 @@ extern struct Dwarf_CU *__libdw_intern_next_unit (Dwarf *dbg, bool debug_types) extern struct Dwarf_CU *__libdw_findcu (Dwarf *dbg, Dwarf_Off offset, bool tu) __nonnull_attribute__ (1) internal_function; -/* Return tag of given DIE. */ +/* Get abbreviation with given code. */ extern Dwarf_Abbrev *__libdw_findabbrev (struct Dwarf_CU *cu, unsigned int code) __nonnull_attribute__ (1) internal_function; @@ -401,17 +463,40 @@ extern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu, Dwarf_Abbrev *result) __nonnull_attribute__ (1) internal_function; +/* Get abbreviation of given DIE, and optionally set *READP to the DIE memory + just past the abbreviation code. */ +static inline Dwarf_Abbrev * +__nonnull_attribute__ (1) +__libdw_dieabbrev (Dwarf_Die *die, const unsigned char **readp) +{ + /* Do we need to get the abbreviation, or need to read after the code? */ + if (die->abbrev == NULL || readp != NULL) + { + /* Get the abbreviation code. */ + unsigned int code; + const unsigned char *addr = die->addr; + get_uleb128 (code, addr, die->cu->endp); + if (readp != NULL) + *readp = addr; + + /* Find the abbreviation. */ + if (die->abbrev == NULL) + die->abbrev = __libdw_findabbrev (die->cu, code); + } + return die->abbrev; +} + /* Helper functions for form handling. */ -extern size_t __libdw_form_val_compute_len (Dwarf *dbg, struct Dwarf_CU *cu, +extern size_t __libdw_form_val_compute_len (struct Dwarf_CU *cu, unsigned int form, const unsigned char *valp) - __nonnull_attribute__ (1, 2, 4) internal_function; + __nonnull_attribute__ (1, 3) internal_function; /* Find the length of a form attribute. */ static inline size_t -__nonnull_attribute__ (1, 2, 4) -__libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, - unsigned int form, const unsigned char *valp) +__nonnull_attribute__ (1, 3) +__libdw_form_val_len (struct Dwarf_CU *cu, unsigned int form, + const unsigned char *valp) { /* Small lookup table of forms with fixed lengths. Absent indexes are initialized 0, so any truly desired 0 is set to 0x80 and masked. */ @@ -429,11 +514,20 @@ __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, { uint8_t len = form_lengths[form]; if (len != 0) - return len & 0x7f; /* Mask to allow 0x80 -> 0. */ + { + const unsigned char *endp = cu->endp; + len &= 0x7f; /* Mask to allow 0x80 -> 0. */ + if (unlikely (len > (size_t) (endp - valp))) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } + return len; + } } /* Other forms require some computation. */ - return __libdw_form_val_compute_len (dbg, cu, form, valp); + return __libdw_form_val_compute_len (cu, form, valp); } /* Helper function for DW_FORM_ref* handling. */ @@ -630,12 +724,6 @@ cu_sec_idx (struct Dwarf_CU *cu) return cu->type_offset == 0 ? IDX_debug_info : IDX_debug_types; } -static inline Elf_Data * -cu_data (struct Dwarf_CU *cu) -{ - return cu->dbg->sectiondata[cu_sec_idx (cu)]; -} - /* Read up begin/end pair and increment read pointer. - If it's normal range record, set up *BEGINP and *ENDP and return 0. - If it's base address selection record, set up *BASEP and return 1. @@ -653,9 +741,23 @@ unsigned char * __libdw_formptr (Dwarf_Attribute *attr, int sec_index, internal_function; /* Fills in the given attribute to point at an empty location expression. */ -void __libdw_empty_loc_attr (Dwarf_Attribute *attr, struct Dwarf_CU *cu) +void __libdw_empty_loc_attr (Dwarf_Attribute *attr) internal_function; +/* Load .debug_line unit at DEBUG_LINE_OFFSET. COMP_DIR is a value of + DW_AT_comp_dir or NULL if that attribute is not available. Caches + the loaded unit and optionally set *LINESP and/or *FILESP (if not + NULL) with loaded information. Returns 0 for success or a negative + value for failure. */ +int __libdw_getsrclines (Dwarf *dbg, Dwarf_Off debug_line_offset, + const char *comp_dir, unsigned address_size, + Dwarf_Lines **linesp, Dwarf_Files **filesp) + internal_function + __nonnull_attribute__ (1); + +/* Load and return value of DW_AT_comp_dir from CUDIE. */ +const char *__libdw_getcompdir (Dwarf_Die *cudie); + /* Aliases to avoid PLTs. */ INTDECL (dwarf_aggregate_size) @@ -690,6 +792,7 @@ INTDECL (dwarf_lowpc) INTDECL (dwarf_nextcu) INTDECL (dwarf_next_unit) INTDECL (dwarf_offdie) +INTDECL (dwarf_peel_type) INTDECL (dwarf_ranges) INTDECL (dwarf_setalt) INTDECL (dwarf_siblingof) diff --git a/libdw/libdw_findcu.c b/libdw/libdw_findcu.c index c0bff2af..d8da2e38 100644 --- a/libdw/libdw_findcu.c +++ b/libdw/libdw_findcu.c @@ -1,5 +1,5 @@ /* Find CU for given offset. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -94,6 +94,12 @@ __libdw_intern_next_unit (dbg, debug_types) return NULL; } + /* Invalid or truncated debug section data? */ + Elf_Data *data = dbg->sectiondata[debug_types + ? IDX_debug_types : IDX_debug_info]; + if (unlikely (*offsetp > data->d_size)) + *offsetp = data->d_size; + /* Create an entry for this CU. */ struct Dwarf_CU *newp = libdw_typed_alloc (dbg, struct Dwarf_CU); @@ -113,6 +119,9 @@ __libdw_intern_next_unit (dbg, debug_types) if (debug_types) Dwarf_Sig8_Hash_insert (&dbg->sig8_hash, type_sig8, newp); + newp->startp = data->d_buf + newp->start; + newp->endp = data->d_buf + newp->end; + /* Add the new entry to the search tree. */ if (tsearch (newp, tree, findcu_cb) == NULL) { diff --git a/libdw/libdw_form.c b/libdw/libdw_form.c index 53505564..72e2390c 100644 --- a/libdw/libdw_form.c +++ b/libdw/libdw_form.c @@ -1,5 +1,5 @@ /* Helper functions for form handling. - Copyright (C) 2003-2009 Red Hat, Inc. + Copyright (C) 2003-2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2003. @@ -39,10 +39,11 @@ size_t internal_function -__libdw_form_val_compute_len (Dwarf *dbg, struct Dwarf_CU *cu, - unsigned int form, const unsigned char *valp) +__libdw_form_val_compute_len (struct Dwarf_CU *cu, unsigned int form, + const unsigned char *valp) { - const unsigned char *saved; + const unsigned char *startp = valp; + const unsigned char *endp = cu->endp; Dwarf_Word u128; size_t result; @@ -66,49 +67,65 @@ __libdw_form_val_compute_len (Dwarf *dbg, struct Dwarf_CU *cu, break; case DW_FORM_block1: + if (unlikely ((size_t) (endp - startp) < 1)) + goto invalid; result = *valp + 1; break; case DW_FORM_block2: - result = read_2ubyte_unaligned (dbg, valp) + 2; + if (unlikely ((size_t) (endp - startp) < 2)) + goto invalid; + result = read_2ubyte_unaligned (cu->dbg, valp) + 2; break; case DW_FORM_block4: - result = read_4ubyte_unaligned (dbg, valp) + 4; + if (unlikely ((size_t) (endp - startp) < 4)) + goto invalid; + result = read_4ubyte_unaligned (cu->dbg, valp) + 4; break; case DW_FORM_block: case DW_FORM_exprloc: - saved = valp; - get_uleb128 (u128, valp); - result = u128 + (valp - saved); + get_uleb128 (u128, valp, endp); + result = u128 + (valp - startp); break; case DW_FORM_string: - result = strlen ((char *) valp) + 1; - break; + { + const unsigned char *endstrp = memchr (valp, '\0', + (size_t) (endp - startp)); + if (unlikely (endstrp == NULL)) + goto invalid; + result = (size_t) (endstrp - startp) + 1; + break; + } case DW_FORM_sdata: case DW_FORM_udata: case DW_FORM_ref_udata: - saved = valp; - get_uleb128 (u128, valp); - result = valp - saved; + get_uleb128 (u128, valp, endp); + result = valp - startp; break; case DW_FORM_indirect: - saved = valp; - get_uleb128 (u128, valp); + get_uleb128 (u128, valp, endp); // XXX Is this really correct? - result = __libdw_form_val_len (dbg, cu, u128, valp); + result = __libdw_form_val_len (cu, u128, valp); if (result != (size_t) -1) - result += valp - saved; + result += valp - startp; + else + return (size_t) -1; break; default: + goto invalid; + } + + if (unlikely (result > (size_t) (endp - startp))) + { + invalid: __libdw_seterrno (DWARF_E_INVALID_DWARF); - result = (size_t) -1l; - break; + result = (size_t) -1; } return result; diff --git a/libdw/memory-access.h b/libdw/memory-access.h index f41f783d..a53f7912 100644 --- a/libdw/memory-access.h +++ b/libdw/memory-access.h @@ -39,6 +39,14 @@ #define len_leb128(var) ((8 * sizeof (var) + 6) / 7) +static inline size_t +__libdw_max_len_leb128 (const unsigned char *addr, const unsigned char *end) +{ + const size_t type_len = len_leb128 (uint64_t); + const size_t pointer_len = likely (addr < end) ? end - addr : 0; + return likely (type_len <= pointer_len) ? type_len : pointer_len; +} + #define get_uleb128_step(var, addr, nth) \ do { \ unsigned char __b = *(addr)++; \ @@ -48,20 +56,24 @@ } while (0) static inline uint64_t -__libdw_get_uleb128 (const unsigned char **addrp) +__libdw_get_uleb128 (const unsigned char **addrp, const unsigned char *end) { uint64_t acc = 0; + /* Unroll the first step to help the compiler optimize for the common single-byte case. */ get_uleb128_step (acc, *addrp, 0); - for (unsigned int i = 1; i < len_leb128 (acc); ++i) + + const size_t max = __libdw_max_len_leb128 (*addrp - 1, end); + for (size_t i = 1; i < max; ++i) get_uleb128_step (acc, *addrp, i); /* Other implementations set VALUE to UINT_MAX in this case. So we better do this as well. */ return UINT64_MAX; } -#define get_uleb128(var, addr) ((var) = __libdw_get_uleb128 (&(addr))) +/* Note, addr needs to me smaller than end. */ +#define get_uleb128(var, addr, end) ((var) = __libdw_get_uleb128 (&(addr), end)) /* The signed case is similar, but we sign-extend the result. */ @@ -78,18 +90,23 @@ __libdw_get_uleb128 (const unsigned char **addrp) } while (0) static inline int64_t -__libdw_get_sleb128 (const unsigned char **addrp) +__libdw_get_sleb128 (const unsigned char **addrp, const unsigned char *end) { int64_t acc = 0; - /* Unrolling 0 like uleb128 didn't prove to benefit optimization. */ - for (unsigned int i = 0; i < len_leb128 (acc); ++i) + + /* Unroll the first step to help the compiler optimize + for the common single-byte case. */ + get_sleb128_step (acc, *addrp, 0); + + const size_t max = __libdw_max_len_leb128 (*addrp - 1, end); + for (size_t i = 1; i < max; ++i) get_sleb128_step (acc, *addrp, i); /* Other implementations set VALUE to INT_MAX in this case. So we better do this as well. */ return INT64_MAX; } -#define get_sleb128(var, addr) ((var) = __libdw_get_sleb128 (&(addr))) +#define get_sleb128(var, addr, end) ((var) = __libdw_get_sleb128 (&(addr), end)) /* We use simple memory access functions in case the hardware allows it. @@ -219,17 +236,6 @@ read_8sbyte_unaligned_1 (bool other_byte_order, const void *p) #endif /* allow unaligned */ -#define read_ubyte_unaligned(Nbytes, Dbg, Addr) \ - ((Nbytes) == 2 ? read_2ubyte_unaligned (Dbg, Addr) \ - : (Nbytes) == 4 ? read_4ubyte_unaligned (Dbg, Addr) \ - : read_8ubyte_unaligned (Dbg, Addr)) - -#define read_sbyte_unaligned(Nbytes, Dbg, Addr) \ - ((Nbytes) == 2 ? read_2sbyte_unaligned (Dbg, Addr) \ - : (Nbytes) == 4 ? read_4sbyte_unaligned (Dbg, Addr) \ - : read_8sbyte_unaligned (Dbg, Addr)) - - #define read_2ubyte_unaligned_inc(Dbg, Addr) \ ({ uint16_t t_ = read_2ubyte_unaligned (Dbg, Addr); \ Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 2); \ @@ -258,14 +264,9 @@ read_8sbyte_unaligned_1 (bool other_byte_order, const void *p) t_; }) -#define read_ubyte_unaligned_inc(Nbytes, Dbg, Addr) \ - ((Nbytes) == 2 ? read_2ubyte_unaligned_inc (Dbg, Addr) \ - : (Nbytes) == 4 ? read_4ubyte_unaligned_inc (Dbg, Addr) \ - : read_8ubyte_unaligned_inc (Dbg, Addr)) - -#define read_sbyte_unaligned_inc(Nbytes, Dbg, Addr) \ - ((Nbytes) == 2 ? read_2sbyte_unaligned_inc (Dbg, Addr) \ - : (Nbytes) == 4 ? read_4sbyte_unaligned_inc (Dbg, Addr) \ - : read_8sbyte_unaligned_inc (Dbg, Addr)) +#define read_addr_unaligned_inc(Nbytes, Dbg, Addr) \ + (assert ((Nbytes) == 4 || (Nbytes) == 8), \ + ((Nbytes) == 4 ? read_4ubyte_unaligned_inc (Dbg, Addr) \ + : read_8ubyte_unaligned_inc (Dbg, Addr))) #endif /* memory-access.h */ diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index 9f95ea81..342cb9cf 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,8 @@ +2014-11-14 Mark Wielaard <[email protected]> + + * dwelf_elf_gnu_debuglink.c (dwelf_elf_gnu_debuglink): Check d_buf + is not NULL. + 2014-04-30 Mark Wielaard <[email protected]> * Makefile.am (AM_CPPFLAGS): Add libdwfl and libebl include dirs. diff --git a/libdwelf/dwelf_elf_gnu_debuglink.c b/libdwelf/dwelf_elf_gnu_debuglink.c index 7b5fc93c..6e22cf67 100644 --- a/libdwelf/dwelf_elf_gnu_debuglink.c +++ b/libdwelf/dwelf_elf_gnu_debuglink.c @@ -60,7 +60,7 @@ dwelf_elf_gnu_debuglink (Elf *elf, GElf_Word *crc) /* Found the .gnu_debuglink section. Extract its contents. */ Elf_Data *rawdata = elf_rawdata (scn, NULL); - if (rawdata == NULL) + if (rawdata == NULL || rawdata->d_buf == NULL) return NULL; /* The CRC comes after the zero-terminated file name, diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 2fd2a1a3..69e59a6f 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,153 @@ +2014-12-19 Mark Wielaard <[email protected]> + + * dwfl_module_getdwarf.c (find_symtab): Always try find_dynsym last. + +2014-12-19 Mark Wielaard <[email protected]> + + * elf-from-memory.c (handle_segment): Remove palign sanity check. + +2014-12-18 Mark Wielaard <[email protected]> + + * relocate.c (resolve_symbol): Make sure symstrdata->d_buf != NULL. + +2014-12-13 Mark Wielaard <[email protected]> + + * dwfl_module_getdwarf.c (find_dynsym): elf_getdata_rawchunk takes + a size_t, make sure it doesn't overflow. + +2014-12-13 Mark Wielaard <[email protected]> + + * cu.c (cudie_offset): Make sure Dwarf_Off difference doesn't + wrap around before returning as int. + +2014-12-11 Josh Stone <[email protected]> + + * dwfl_module_getsrc.c (dwfl_module_getsrc): Return the *last* line + record <= addr, rather than returning immediately on matches. + +2014-12-09 Mark Wielaard <[email protected]> + + * dwfl_segment_report_module.c (handle_file_note): Check count doesn't + overflow. + +2014-12-07 Mark Wielaard <[email protected]> + + * relocate.c (relocate_section): Sanity check section overlap against + actually used ehsize, shentsize and phentsize. + +2014-12-07 Mark Wielaard <[email protected]> + + * offline.c (dwfl_offline_section_address): Assert shndx is not zero. + * relocate.c (__libdwfl_relocate_value): Don't relocate against + section zero. + +2014-11-29 Mark Wielaard <[email protected]> + + * relocate.c (relocate_section): Check relocation section and target + section data don't overlap any of the ELF headers. + (relocate): Check for offset + size overflow. + +2014-11-22 Mark Wielaard <[email protected]> + + * link_map.c (consider_executable): Use elf_getphdrnum. + (dwfl_link_map_report): Likewise. + +2014-11-18 Mark Wielaard <[email protected]> + + * dwfl_module_getdwarf.c (find_symtab): Sanity check the data buffer, + number of symbols and first_global before use. + +2014-11-14 Mark Wielaard <[email protected]> + + * dwfl_module_getdwarf.c (load_symtab): Don't use tables which have + a zero sh_entsize. + +2014-11-10 Mark Wielaard <[email protected]> + + * dwfl_module_getdwarf.c (find_dynsym): New inner function + translate_offs that takes an adjust argument. Try finding + the symbol table with and without adjusting to main_bias. + +2014-09-26 Jan Kratochvil <[email protected]> + + Support NT_FILE for locating files. + * core-file.c (dwfl_core_file_report): New variables note_file and + note_file_size, set them and pass them to dwfl_segment_report_module. + * dwfl_segment_report_module.c: Include common.h and fcntl.h. + (buf_has_data, buf_read_ulong, handle_file_note): New functions. + (invalid_elf): New function from code of dwfl_segment_report_module. + (dwfl_segment_report_module): Add parameters note_file and + note_file_size. New variables elf and fd, clean them up in finish. + Move some code to invalid_elf. Call handle_file_note, if it found + a name verify the file by invalid_elf. Protect elf and fd against + cleanup by finish if we found the file for new Dwfl_Module. + * libdwflP.h (dwfl_segment_report_module): Add parameters note_file and + note_file_size. + +2014-09-23 Mark Wielaard <[email protected]> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): + Extract ei_class, ei_data and e_type early and use the result. + +2014-09-18 Jan Kratochvil <[email protected]> + + * dwfl_build_id_find_elf.c (dwfl_build_id_find_elf): Use IS_EXECUTABLE. + * dwfl_segment_report_module.c (dwfl_segment_report_module): Set + IS_EXECUTABLE. + * libdwflP.h (struct Dwfl_Module): New field is_executable. + +2014-08-28 Jan Kratochvil <[email protected]> + + * dwfl_module_getdwarf.c (find_offsets): Add parameter main_bias, use + it. + (find_dynsym): Pass the new parameter main_bias. + +2014-08-14 Mark Wielaard <[email protected]> + + * linux-kernel-modules.c (check-suffix): Also TRY .ko.xz. + +2014-07-24 Jan Kratochvil <[email protected]> + + Fix report_r_debug for prelinked libraries. + * link_map.c (report_r_debug): Comment out variable l_addr. + Use instead new variable base recalculated from l_ld. + +2014-06-24 Kurt Roeckx <[email protected]> + + * linux-pid-attach.c: Make it build on non linux hosts. + +2014-06-17 Mark Wielaard <[email protected]> + + * frame_unwind.c (handle_cfi): Use ebl_func_addr_mask. + * dwfl_module_getsym.c (__libdwfl_getsym): Likewise. + +2014-06-15 Mark Wielaard <[email protected]> + + * linux-core-attach.c (core_memory_read): Use libdw/memory-access.h + macros read_4ubyte_unaligned_noncvt and read_8ubyte_unaligned_noncvt + to read possibly unaligned data. + (core_next_thread): Likewise. + (core_set_initial_registers): Likewise. + (dwfl_core_file_attach): Likewise. + +2014-06-11 Mark Wielaard <[email protected]> + + * dwfl_frame.c (__libdwfl_process_free): Reset dwfl->attacherr. + (dwfl_attach_state): Set dwfl->attacherr. + (dwfl_pid): Check and return dwfl->attacherr if set. + (dwfl_getthreads): Likewise. + (getthread): Likewise. + * libdwflP.h: Add DWFL_E_NO_CORE_FILE. + (struct Dwfl): Add attacherr field. + * linux-core-attach.c (dwfl_core_file_attach): Set dwfl->attacherr. + Don't assert if ELF file is not ET_CORE, just return error. + * linux-pid-attach.c (dwfl_linux_proc_attach): Set dwfl->attacherr. + +2014-06-10 Mark Wielaard <[email protected]> + + * argp-std.c (parse_opt): Ignore errors from dwfl_core_file_attach + or dwfl_linux_proc_attach. + 2014-05-15 Mark Wielaard <[email protected]> * linux-proc-maps.c (grovel_auxv): Close fd on error. diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c index 8d2bc6aa..42b7e783 100644 --- a/libdwfl/argp-std.c +++ b/libdwfl/argp-std.c @@ -171,10 +171,9 @@ parse_opt (int key, char *arg, struct argp_state *state) if (result != 0) return fail (dwfl, result, arg); - result = INTUSE(dwfl_linux_proc_attach) (dwfl, atoi (arg), false); - if (result != 0) - /* Non-fatal to not be able to attach to process. */ - failure (dwfl, result, _("cannot attach to process")); + /* Non-fatal to not be able to attach to process, ignore error. */ + INTUSE(dwfl_linux_proc_attach) (dwfl, atoi (arg), false); + opt->dwfl = dwfl; } else @@ -301,10 +300,8 @@ parse_opt (int key, char *arg, struct argp_state *state) return fail (dwfl, result, opt->core); } - result = INTUSE(dwfl_core_file_attach) (dwfl, core); - if (result < 0) - /* Non-fatal to not be able to attach to core. */ - failure (dwfl, result, _("cannot attach to core")); + /* Non-fatal to not be able to attach to core, ignore error. */ + INTUSE(dwfl_core_file_attach) (dwfl, core); /* From now we leak FD and CORE. */ diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index 4ce63c4e..50031aed 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -451,7 +451,9 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) /* Next, we should follow the chain from DT_DEBUG. */ const void *auxv = NULL; + const void *note_file = NULL; size_t auxv_size = 0; + size_t note_file_size = 0; if (likely (notes_phdr.p_type == PT_NOTE)) { /* PT_NOTE -> NT_AUXV -> AT_PHDR -> PT_DYNAMIC -> DT_DEBUG */ @@ -468,13 +470,19 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) size_t desc_pos; while ((pos = gelf_getnote (notes, pos, &nhdr, &name_pos, &desc_pos)) > 0) - if (nhdr.n_type == NT_AUXV - && nhdr.n_namesz == sizeof "CORE" + if (nhdr.n_namesz == sizeof "CORE" && !memcmp (notes->d_buf + name_pos, "CORE", sizeof "CORE")) { - auxv = notes->d_buf + desc_pos; - auxv_size = nhdr.n_descsz; - break; + if (nhdr.n_type == NT_AUXV) + { + auxv = notes->d_buf + desc_pos; + auxv_size = nhdr.n_descsz; + } + if (nhdr.n_type == NT_FILE) + { + note_file = notes->d_buf + desc_pos; + note_file_size = nhdr.n_descsz; + } } } } @@ -498,6 +506,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) int seg = dwfl_segment_report_module (dwfl, ndx, NULL, &dwfl_elf_phdr_memory_callback, elf, core_file_read_eagerly, elf, + note_file, note_file_size, &r_debug_info); if (unlikely (seg < 0)) { diff --git a/libdwfl/cu.c b/libdwfl/cu.c index 40b0201c..5ce531bd 100644 --- a/libdwfl/cu.c +++ b/libdwfl/cu.c @@ -162,7 +162,9 @@ cudie_offset (const struct dwfl_cu *cu) static int compare_cukey (const void *a, const void *b) { - return cudie_offset (a) - cudie_offset (b); + Dwarf_Off a_off = cudie_offset (a); + Dwarf_Off b_off = cudie_offset (b); + return (a_off < b_off) ? -1 : ((a_off > b_off) ? 1 : 0); } /* Intern the CU if necessary. */ diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c index 15550082..062aad1f 100644 --- a/libdwfl/dwfl_build_id_find_elf.c +++ b/libdwfl/dwfl_build_id_find_elf.c @@ -124,13 +124,12 @@ dwfl_build_id_find_elf (Dwfl_Module *mod, char **file_name, Elf **elfp) { *elfp = NULL; - if (modname != NULL && mod->dwfl->executable_for_core != NULL - && (strcmp (modname, "[exe]") == 0 || strcmp (modname, "[pie]") == 0)) + if (mod->is_executable && mod->dwfl->executable_for_core != NULL) { /* When dwfl_core_file_report was called with a non-NULL executable file name this callback will replace the Dwfl_Module main.name with the - recorded executable file when the modname is [exe] or [pie] (which - then triggers opening and reporting of the executable). */ + recorded executable file when MOD was identified as main executable + (which then triggers opening and reporting of the executable). */ int fd = open64 (mod->dwfl->executable_for_core, O_RDONLY); if (fd >= 0) { diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c index fd0b9aeb..f6f86c0d 100644 --- a/libdwfl/dwfl_frame.c +++ b/libdwfl/dwfl_frame.c @@ -1,5 +1,5 @@ /* Get Dwarf Frame state for target PID or core file. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -117,6 +117,7 @@ __libdwfl_process_free (Dwfl_Process *process) if (process->ebl_close) ebl_closebackend (process->ebl); free (process); + dwfl->attacherr = DWFL_E_NOERROR; } /* Allocate new Dwfl_Process for DWFL. */ @@ -134,17 +135,24 @@ bool dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, const Dwfl_Thread_Callbacks *thread_callbacks, void *arg) { - if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL - || thread_callbacks->set_initial_registers == NULL) + if (dwfl->process != NULL) { - __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT); + __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); return false; } - if (dwfl->process != NULL) + + /* Reset any previous error, we are just going to try again. */ + dwfl->attacherr = DWFL_E_NOERROR; + if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL + || thread_callbacks->set_initial_registers == NULL) { - __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); + dwfl->attacherr = DWFL_E_INVALID_ARGUMENT; + fail: + dwfl->attacherr = __libdwfl_canon_error (dwfl->attacherr); + __libdwfl_seterrno (dwfl->attacherr); return false; } + Ebl *ebl; bool ebl_close; if (elf != NULL) @@ -180,8 +188,8 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, if (ebl == NULL) { /* Not identified EBL from any of the modules. */ - __libdwfl_seterrno (DWFL_E_PROCESS_NO_ARCH); - return false; + dwfl->attacherr = DWFL_E_PROCESS_NO_ARCH; + goto fail; } process_alloc (dwfl); Dwfl_Process *process = dwfl->process; @@ -189,8 +197,8 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, { if (ebl_close) ebl_closebackend (ebl); - __libdwfl_seterrno (DWFL_E_NOMEM); - return false; + dwfl->attacherr = DWFL_E_NOMEM; + goto fail; } process->ebl = ebl; process->ebl_close = ebl_close; @@ -204,6 +212,12 @@ INTDEF(dwfl_attach_state) pid_t dwfl_pid (Dwfl *dwfl) { + if (dwfl->attacherr != DWFL_E_NOERROR) + { + __libdwfl_seterrno (dwfl->attacherr); + return -1; + } + if (dwfl->process == NULL) { __libdwfl_seterrno (DWFL_E_NO_ATTACH_STATE); @@ -238,6 +252,12 @@ int dwfl_getthreads (Dwfl *dwfl, int (*callback) (Dwfl_Thread *thread, void *arg), void *arg) { + if (dwfl->attacherr != DWFL_E_NOERROR) + { + __libdwfl_seterrno (dwfl->attacherr); + return -1; + } + Dwfl_Process *process = dwfl->process; if (process == NULL) { @@ -309,6 +329,12 @@ getthread (Dwfl *dwfl, pid_t tid, int (*callback) (Dwfl_Thread *thread, void *arg), void *arg) { + if (dwfl->attacherr != DWFL_E_NOERROR) + { + __libdwfl_seterrno (dwfl->attacherr); + return -1; + } + Dwfl_Process *process = dwfl->process; if (process == NULL) { diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c index 72599841..494407dd 100644 --- a/libdwfl/dwfl_module_getdwarf.c +++ b/libdwfl/dwfl_module_getdwarf.c @@ -575,6 +575,8 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, switch (shdr->sh_type) { case SHT_SYMTAB: + if (shdr->sh_entsize == 0) + break; symtab = true; *symscn = scn; *symfile = file; @@ -589,6 +591,8 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, if (symtab) break; /* Use this if need be, but keep looking for SHT_SYMTAB. */ + if (shdr->sh_entsize == 0) + break; *symscn = scn; *symfile = file; *strshndx = shdr->sh_link; @@ -621,7 +625,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, /* Translate addresses into file offsets. OFFS[*] start out zero and remain zero if unresolved. */ static void -find_offsets (Elf *elf, size_t phnum, size_t n, +find_offsets (Elf *elf, GElf_Addr main_bias, size_t phnum, size_t n, GElf_Addr addrs[n], GElf_Off offs[n]) { size_t unsolved = n; @@ -632,10 +636,10 @@ find_offsets (Elf *elf, size_t phnum, size_t n, if (phdr != NULL && phdr->p_type == PT_LOAD && phdr->p_memsz > 0) for (size_t j = 0; j < n; ++j) if (offs[j] == 0 - && addrs[j] >= phdr->p_vaddr - && addrs[j] - phdr->p_vaddr < phdr->p_filesz) + && addrs[j] >= phdr->p_vaddr + main_bias + && addrs[j] - (phdr->p_vaddr + main_bias) < phdr->p_filesz) { - offs[j] = addrs[j] - phdr->p_vaddr + phdr->p_offset; + offs[j] = addrs[j] - (phdr->p_vaddr + main_bias) + phdr->p_offset; if (--unsolved == 0) break; } @@ -718,113 +722,133 @@ find_dynsym (Dwfl_Module *mod) break; } - /* Translate pointers into file offsets. */ - GElf_Off offs[i_max] = { 0, }; - find_offsets (mod->main.elf, phnum, i_max, addrs, offs); - - /* Figure out the size of the symbol table. */ - if (offs[i_hash] != 0) - { - /* In the original format, .hash says the size of .dynsym. */ - - size_t entsz = SH_ENTSIZE_HASH (ehdr); - data = elf_getdata_rawchunk (mod->main.elf, - offs[i_hash] + entsz, entsz, - entsz == 4 ? ELF_T_WORD - : ELF_T_XWORD); - if (data != NULL) - mod->syments = (entsz == 4 - ? *(const GElf_Word *) data->d_buf - : *(const GElf_Xword *) data->d_buf); - } - if (offs[i_gnu_hash] != 0 && mod->syments == 0) - { - /* In the new format, we can derive it with some work. */ + /* Translate pointers into file offsets. ADJUST is either zero + in case the dynamic segment wasn't adjusted or mod->main_bias. */ + void translate_offs (GElf_Addr adjust) + { + GElf_Off offs[i_max] = { 0, }; + find_offsets (mod->main.elf, adjust, phnum, i_max, addrs, offs); - const struct + /* Figure out the size of the symbol table. */ + if (offs[i_hash] != 0) { - Elf32_Word nbuckets; - Elf32_Word symndx; - Elf32_Word maskwords; - Elf32_Word shift2; - } *header; - - data = elf_getdata_rawchunk (mod->main.elf, offs[i_gnu_hash], - sizeof *header, ELF_T_WORD); - if (data != NULL) - { - header = data->d_buf; - Elf32_Word nbuckets = header->nbuckets; - Elf32_Word symndx = header->symndx; - GElf_Off buckets_at = (offs[i_gnu_hash] + sizeof *header - + (gelf_getclass (mod->main.elf) - * sizeof (Elf32_Word) - * header->maskwords)); - - data = elf_getdata_rawchunk (mod->main.elf, buckets_at, - nbuckets * sizeof (Elf32_Word), - ELF_T_WORD); - if (data != NULL && symndx < nbuckets) - { - const Elf32_Word *const buckets = data->d_buf; - Elf32_Word maxndx = symndx; - for (Elf32_Word bucket = 0; bucket < nbuckets; ++bucket) - if (buckets[bucket] > maxndx) - maxndx = buckets[bucket]; - - GElf_Off hasharr_at = (buckets_at - + nbuckets * sizeof (Elf32_Word)); - hasharr_at += (maxndx - symndx) * sizeof (Elf32_Word); - do - { - data = elf_getdata_rawchunk (mod->main.elf, - hasharr_at, - sizeof (Elf32_Word), - ELF_T_WORD); - if (data != NULL - && (*(const Elf32_Word *) data->d_buf & 1u)) - { - mod->syments = maxndx + 1; - break; - } - ++maxndx; - hasharr_at += sizeof (Elf32_Word); - } while (data != NULL); - } - } - } - if (offs[i_strtab] > offs[i_symtab] && mod->syments == 0) - mod->syments = ((offs[i_strtab] - offs[i_symtab]) - / gelf_fsize (mod->main.elf, - ELF_T_SYM, 1, EV_CURRENT)); + /* In the original format, .hash says the size of .dynsym. */ + + size_t entsz = SH_ENTSIZE_HASH (ehdr); + data = elf_getdata_rawchunk (mod->main.elf, + offs[i_hash] + entsz, entsz, + entsz == 4 ? ELF_T_WORD + : ELF_T_XWORD); + if (data != NULL) + mod->syments = (entsz == 4 + ? *(const GElf_Word *) data->d_buf + : *(const GElf_Xword *) data->d_buf); + } + if (offs[i_gnu_hash] != 0 && mod->syments == 0) + { + /* In the new format, we can derive it with some work. */ - if (mod->syments > 0) - { - mod->symdata = elf_getdata_rawchunk (mod->main.elf, - offs[i_symtab], - gelf_fsize (mod->main.elf, - ELF_T_SYM, - mod->syments, - EV_CURRENT), - ELF_T_SYM); - if (mod->symdata != NULL) + const struct { - mod->symstrdata = elf_getdata_rawchunk (mod->main.elf, - offs[i_strtab], - strsz, - ELF_T_BYTE); - if (mod->symstrdata == NULL) - mod->symdata = NULL; - } - if (mod->symdata == NULL) - mod->symerr = DWFL_E (LIBELF, elf_errno ()); - else - { - mod->symfile = &mod->main; - mod->symerr = DWFL_E_NOERROR; - } - return; - } + Elf32_Word nbuckets; + Elf32_Word symndx; + Elf32_Word maskwords; + Elf32_Word shift2; + } *header; + + data = elf_getdata_rawchunk (mod->main.elf, offs[i_gnu_hash], + sizeof *header, ELF_T_WORD); + if (data != NULL) + { + header = data->d_buf; + Elf32_Word nbuckets = header->nbuckets; + Elf32_Word symndx = header->symndx; + GElf_Off buckets_at = (offs[i_gnu_hash] + sizeof *header + + (gelf_getclass (mod->main.elf) + * sizeof (Elf32_Word) + * header->maskwords)); + + // elf_getdata_rawchunk takes a size_t, make sure it + // doesn't overflow. +#if SIZE_MAX <= UINT32_MAX + if (nbuckets > SIZE_MAX / sizeof (Elf32_Word)) + data = NULL; + else +#endif + data + = elf_getdata_rawchunk (mod->main.elf, buckets_at, + nbuckets * sizeof (Elf32_Word), + ELF_T_WORD); + if (data != NULL && symndx < nbuckets) + { + const Elf32_Word *const buckets = data->d_buf; + Elf32_Word maxndx = symndx; + for (Elf32_Word bucket = 0; bucket < nbuckets; ++bucket) + if (buckets[bucket] > maxndx) + maxndx = buckets[bucket]; + + GElf_Off hasharr_at = (buckets_at + + nbuckets * sizeof (Elf32_Word)); + hasharr_at += (maxndx - symndx) * sizeof (Elf32_Word); + do + { + data = elf_getdata_rawchunk (mod->main.elf, + hasharr_at, + sizeof (Elf32_Word), + ELF_T_WORD); + if (data != NULL + && (*(const Elf32_Word *) data->d_buf & 1u)) + { + mod->syments = maxndx + 1; + break; + } + ++maxndx; + hasharr_at += sizeof (Elf32_Word); + } while (data != NULL); + } + } + } + if (offs[i_strtab] > offs[i_symtab] && mod->syments == 0) + mod->syments = ((offs[i_strtab] - offs[i_symtab]) + / gelf_fsize (mod->main.elf, + ELF_T_SYM, 1, EV_CURRENT)); + + if (mod->syments > 0) + { + mod->symdata = elf_getdata_rawchunk (mod->main.elf, + offs[i_symtab], + gelf_fsize (mod->main.elf, + ELF_T_SYM, + mod->syments, + EV_CURRENT), + ELF_T_SYM); + if (mod->symdata != NULL) + { + mod->symstrdata = elf_getdata_rawchunk (mod->main.elf, + offs[i_strtab], + strsz, + ELF_T_BYTE); + if (mod->symstrdata == NULL) + mod->symdata = NULL; + } + if (mod->symdata == NULL) + mod->symerr = DWFL_E (LIBELF, elf_errno ()); + else + { + mod->symfile = &mod->main; + mod->symerr = DWFL_E_NOERROR; + } + } + } + + /* First try unadjusted, like ELF files from disk, vdso. + Then try for already adjusted dynamic section, like ELF + from remote memory. */ + translate_offs (0); + if (mod->symfile == NULL) + translate_offs (mod->main_bias); + + return; } } } @@ -1060,14 +1084,14 @@ find_symtab (Dwfl_Module *mod) { elferr: mod->symerr = DWFL_E (LIBELF, elf_errno ()); - goto aux_cleanup; + goto aux_cleanup; /* This cleans up some more and tries find_dynsym. */ } /* Cache the data; MOD->syments and MOD->first_global were set above. */ mod->symstrdata = elf_getdata (elf_getscn (mod->symfile->elf, strshndx), NULL); - if (mod->symstrdata == NULL) + if (mod->symstrdata == NULL || mod->symstrdata->d_buf == NULL) goto elferr; if (xndxscn == NULL) @@ -1075,12 +1099,18 @@ find_symtab (Dwfl_Module *mod) else { mod->symxndxdata = elf_getdata (xndxscn, NULL); - if (mod->symxndxdata == NULL) + if (mod->symxndxdata == NULL || mod->symxndxdata->d_buf == NULL) goto elferr; } mod->symdata = elf_getdata (symscn, NULL); - if (mod->symdata == NULL) + if (mod->symdata == NULL || mod->symdata->d_buf == NULL) + goto elferr; + + // Sanity check number of symbols. + GElf_Shdr shdr_mem, *shdr = gelf_getshdr (symscn, &shdr_mem); + if (mod->syments > mod->symdata->d_size / shdr->sh_entsize + || (size_t) mod->first_global > mod->syments) goto elferr; /* Cache any auxiliary symbol info, when it fails, just ignore aux_sym. */ @@ -1094,13 +1124,16 @@ find_symtab (Dwfl_Module *mod) mod->aux_syments = 0; elf_end (mod->aux_sym.elf); mod->aux_sym.elf = NULL; + /* We thought we had something through shdrs, but it failed... + Last ditch, look for dynamic symbols without section headers. */ + find_dynsym (mod); return; } mod->aux_symstrdata = elf_getdata (elf_getscn (mod->aux_sym.elf, aux_strshndx), NULL); - if (mod->aux_symstrdata == NULL) + if (mod->aux_symstrdata == NULL || mod->aux_symstrdata->d_buf == NULL) goto aux_cleanup; if (aux_xndxscn == NULL) @@ -1108,12 +1141,19 @@ find_symtab (Dwfl_Module *mod) else { mod->aux_symxndxdata = elf_getdata (aux_xndxscn, NULL); - if (mod->aux_symxndxdata == NULL) + if (mod->aux_symxndxdata == NULL + || mod->aux_symxndxdata->d_buf == NULL) goto aux_cleanup; } mod->aux_symdata = elf_getdata (aux_symscn, NULL); - if (mod->aux_symdata == NULL) + if (mod->aux_symdata == NULL || mod->aux_symdata->d_buf == NULL) + goto aux_cleanup; + + // Sanity check number of aux symbols. + shdr = gelf_getshdr (aux_symscn, &shdr_mem); + if (mod->aux_syments > mod->aux_symdata->d_size / shdr->sh_entsize + || (size_t) mod->aux_first_global > mod->aux_syments) goto aux_cleanup; } } diff --git a/libdwfl/dwfl_module_getsrc.c b/libdwfl/dwfl_module_getsrc.c index cf8dc0fc..f6d88390 100644 --- a/libdwfl/dwfl_module_getsrc.c +++ b/libdwfl/dwfl_module_getsrc.c @@ -1,5 +1,5 @@ /* Find source location for PC address in module. - Copyright (C) 2005, 2008 Red Hat, Inc. + Copyright (C) 2005, 2008, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -42,32 +42,35 @@ dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr) error = __libdwfl_cu_getsrclines (cu); if (likely (error == DWFL_E_NOERROR)) { - /* Now we look at the module-relative address. */ - addr -= bias; - - /* The lines are sorted by address, so we can use binary search. */ - size_t l = 0, u = cu->die.cu->lines->nlines; - while (l < u) + Dwarf_Lines *lines = cu->die.cu->lines; + size_t nlines = lines->nlines; + if (nlines > 0) { - size_t idx = (l + u) / 2; - if (addr < cu->die.cu->lines->info[idx].addr) - u = idx; - else if (addr > cu->die.cu->lines->info[idx].addr) - l = idx + 1; - else - return &cu->lines->idx[idx]; - } + /* This is guaranteed for us by libdw read_srclines. */ + assert(lines->info[nlines - 1].end_sequence); - if (cu->die.cu->lines->nlines > 0) - assert (cu->die.cu->lines->info - [cu->die.cu->lines->nlines - 1].end_sequence); + /* Now we look at the module-relative address. */ + addr -= bias; - /* If none were equal, the closest one below is what we want. - We never want the last one, because it's the end-sequence - marker with an address at the high bound of the CU's code. */ - if (u > 0 && u < cu->die.cu->lines->nlines - && addr > cu->die.cu->lines->info[u - 1].addr) - return &cu->lines->idx[u - 1]; + /* The lines are sorted by address, so we can use binary search. */ + size_t l = 0, u = nlines - 1; + while (l < u) + { + size_t idx = u - (u - l) / 2; + Dwarf_Line *line = &lines->info[idx]; + if (addr < line->addr) + u = idx - 1; + else + l = idx; + } + + /* The last line which is less than or equal to addr is what we want, + except with an end_sequence which can only be strictly equal. */ + Dwarf_Line *line = &lines->info[l]; + if (line->addr == addr + || (! line->end_sequence && line->addr < addr)) + return &cu->lines->idx[l]; + } error = DWFL_E_ADDR_OUTOFRANGE; } diff --git a/libdwfl/dwfl_module_getsym.c b/libdwfl/dwfl_module_getsym.c index 917d0620..42d2b679 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-2013 Red Hat, Inc. + Copyright (C) 2006-2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -119,7 +119,7 @@ __libdwfl_getsym (Dwfl_Module *mod, int ndx, GElf_Sym *sym, GElf_Addr *addr, descriptors). */ char *ident; - GElf_Addr st_value = sym->st_value; + GElf_Addr st_value = sym->st_value & ebl_func_addr_mask (mod->ebl); *resolved = false; if (! adjust_st_value && mod->e_type != ET_REL && alloc && (GELF_ST_TYPE (sym->st_info) == STT_FUNC diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index dfecb517..898457f1 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-2012 Red Hat, Inc. + Copyright (C) 2008-2012, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -30,6 +30,7 @@ #include "../libelf/libelfP.h" /* For NOTE_ALIGN. */ #undef _ #include "libdwflP.h" +#include "common.h" #include <elf.h> #include <gelf.h> @@ -38,6 +39,7 @@ #include <alloca.h> #include <endian.h> #include <unistd.h> +#include <fcntl.h> /* A good size for the initial read from memory, if it's not too costly. @@ -79,12 +81,164 @@ addr_segndx (Dwfl *dwfl, size_t segment, GElf_Addr addr, bool next) return ndx; } +/* Return whether there is SZ bytes available at PTR till END. */ + +static bool +buf_has_data (const void *ptr, const void *end, size_t sz) +{ + return ptr < end && (size_t) (end - ptr) >= sz; +} + +/* Read SZ bytes into *RETP from *PTRP (limited by END) in format EI_DATA. + Function comes from src/readelf.c . */ + +static bool +buf_read_ulong (unsigned char ei_data, size_t sz, + const void **ptrp, const void *end, uint64_t *retp) +{ + if (! buf_has_data (*ptrp, end, sz)) + return false; + + union + { + uint64_t u64; + uint32_t u32; + } u; + + memcpy (&u, *ptrp, sz); + (*ptrp) += sz; + + if (retp == NULL) + return true; + + if (MY_ELFDATA != ei_data) + { + if (sz == 4) + CONVERT (u.u32); + else + CONVERT (u.u64); + } + if (sz == 4) + *retp = u.u32; + else + *retp = u.u64; + return true; +} + +/* Try to find matching entry for module from address MODULE_START to + MODULE_END in NT_FILE note located at NOTE_FILE of NOTE_FILE_SIZE + bytes in format EI_CLASS and EI_DATA. */ + +static const char * +handle_file_note (GElf_Addr module_start, GElf_Addr module_end, + unsigned char ei_class, unsigned char ei_data, + const void *note_file, size_t note_file_size) +{ + if (note_file == NULL) + return NULL; + + size_t sz; + switch (ei_class) + { + case ELFCLASS32: + sz = 4; + break; + case ELFCLASS64: + sz = 8; + break; + default: + return NULL; + } + + const void *ptr = note_file; + const void *end = note_file + note_file_size; + uint64_t count; + if (! buf_read_ulong (ei_data, sz, &ptr, end, &count)) + return NULL; + if (! buf_read_ulong (ei_data, sz, &ptr, end, NULL)) // page_size + return NULL; + + uint64_t maxcount = (size_t) (end - ptr) / (3 * sz); + if (count > maxcount) + return NULL; + + /* Where file names are stored. */ + const char *fptr = ptr + 3 * count * sz; + + ssize_t firstix = -1; + ssize_t lastix = -1; + for (size_t mix = 0; mix < count; mix++) + { + uint64_t mstart, mend, moffset; + if (! buf_read_ulong (ei_data, sz, &ptr, fptr, &mstart) + || ! buf_read_ulong (ei_data, sz, &ptr, fptr, &mend) + || ! buf_read_ulong (ei_data, sz, &ptr, fptr, &moffset)) + return NULL; + if (mstart == module_start && moffset == 0) + firstix = lastix = mix; + if (firstix != -1 && mstart < module_end) + lastix = mix; + if (mend >= module_end) + break; + } + if (firstix == -1) + return NULL; + + const char *retval = NULL; + for (ssize_t mix = 0; mix <= lastix; mix++) + { + const char *fnext = memchr (fptr, 0, (const char *) end - fptr); + if (fnext == NULL) + return NULL; + if (mix == firstix) + retval = fptr; + if (firstix < mix && mix <= lastix && strcmp (fptr, retval) != 0) + return NULL; + fptr = fnext + 1; + } + return retval; +} + +/* Return true iff we are certain ELF cannot match BUILD_ID of + BUILD_ID_LEN bytes. Pass DISK_FILE_HAS_BUILD_ID as false if it is + certain ELF does not contain build-id (it is only a performance hit + to pass it always as true). */ + +static bool +invalid_elf (Elf *elf, bool disk_file_has_build_id, + const void *build_id, size_t build_id_len) +{ + if (! disk_file_has_build_id && build_id_len > 0) + { + /* Module found in segments with build-id is more reliable + than a module found via DT_DEBUG on disk without any + build-id. */ + return true; + } + if (disk_file_has_build_id && build_id_len > 0) + { + const void *elf_build_id; + ssize_t elf_build_id_len; + + /* If there is a build id in the elf file, check it. */ + elf_build_id_len = INTUSE(dwelf_elf_gnu_build_id) (elf, &elf_build_id); + if (elf_build_id_len > 0) + { + if (build_id_len != (size_t) elf_build_id_len + || memcmp (build_id, elf_build_id, build_id_len) != 0) + return true; + } + } + return false; +} + int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, Dwfl_Memory_Callback *memory_callback, void *memory_callback_arg, Dwfl_Module_Callback *read_eagerly, void *read_eagerly_arg, + const void *note_file, size_t note_file_size, const struct r_debug_info *r_debug_info) { size_t segment = ndx; @@ -121,10 +275,16 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *buffer = NULL; size_t buffer_available = INITIAL_READ; + Elf *elf = NULL; + int fd = -1; inline int finish (void) { release_buffer (&buffer, &buffer_available); + if (elf != NULL) + elf_end (elf); + if (fd != -1) + close (fd); return ndx; } @@ -161,6 +321,10 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } /* Extract the information we need from the file header. */ + const unsigned char *e_ident; + unsigned char ei_class; + unsigned char ei_data; + uint16_t e_type; union { Elf32_Ehdr e32; @@ -183,13 +347,16 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, .d_size = sizeof ehdr, .d_version = EV_CURRENT, }; - switch (((const unsigned char *) buffer)[EI_CLASS]) + e_ident = ((const unsigned char *) buffer); + ei_class = e_ident[EI_CLASS]; + ei_data = e_ident[EI_DATA]; + switch (ei_class) { case ELFCLASS32: xlatefrom.d_size = sizeof (Elf32_Ehdr); - if (elf32_xlatetom (&xlateto, &xlatefrom, - ((const unsigned char *) buffer)[EI_DATA]) == NULL) + if (elf32_xlatetom (&xlateto, &xlatefrom, ei_data) == NULL) return finish (); + e_type = ehdr.e32.e_type; phoff = ehdr.e32.e_phoff; phnum = ehdr.e32.e_phnum; phentsize = ehdr.e32.e_phentsize; @@ -200,9 +367,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, case ELFCLASS64: xlatefrom.d_size = sizeof (Elf64_Ehdr); - if (elf64_xlatetom (&xlateto, &xlatefrom, - ((const unsigned char *) buffer)[EI_DATA]) == NULL) + if (elf64_xlatetom (&xlateto, &xlatefrom, ei_data) == NULL) return finish (); + e_type = ehdr.e64.e_type; phoff = ehdr.e64.e_phoff; phnum = ehdr.e64.e_phnum; phentsize = ehdr.e64.e_phentsize; @@ -281,7 +448,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); void *notes; - if (ehdr.e32.e_ident[EI_DATA] == MY_ELFDATA) + if (ei_data == MY_ELFDATA) notes = data; else { @@ -397,10 +564,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, break; } } - if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32) + if (ei_class == ELFCLASS32) { - if (elf32_xlatetom (&xlateto, &xlatefrom, - ehdr.e32.e_ident[EI_DATA]) == NULL) + if (elf32_xlatetom (&xlateto, &xlatefrom, ei_data) == NULL) found_bias = false; /* Trigger error check. */ else for (uint_fast16_t i = 0; i < phnum; ++i) @@ -411,8 +577,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } else { - if (elf64_xlatetom (&xlateto, &xlatefrom, - ehdr.e32.e_ident[EI_DATA]) == NULL) + if (elf64_xlatetom (&xlateto, &xlatefrom, ei_data) == NULL) found_bias = false; /* Trigger error check. */ else for (uint_fast16_t i = 0; i < phnum; ++i) @@ -481,32 +646,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if ((module_end > module->start && module_start < module->end) || dyn_vaddr == module->l_ld) { - bool close_elf = false; - if (! module->disk_file_has_build_id && build_id_len > 0) - { - /* Module found in segments with build-id is more reliable - than a module found via DT_DEBUG on disk without any - build-id. */ - if (module->elf != NULL) - close_elf = true; - } if (module->elf != NULL - && module->disk_file_has_build_id && build_id_len > 0) - { - const void *elf_build_id; - ssize_t elf_build_id_len; - - /* If there is a build id in the elf file, check it. */ - elf_build_id_len = INTUSE(dwelf_elf_gnu_build_id) (module->elf, - &elf_build_id); - if (elf_build_id_len > 0) - { - if (build_id_len != (size_t) elf_build_id_len - || memcmp (build_id, elf_build_id, build_id_len) != 0) - close_elf = true; - } - } - if (close_elf) + && invalid_elf (module->elf, module->disk_file_has_build_id, + build_id, build_id_len)) { elf_end (module->elf); close (module->fd); @@ -527,6 +669,29 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } } + const char *file_note_name = handle_file_note (module_start, module_end, + ei_class, ei_data, + note_file, note_file_size); + if (file_note_name) + { + name = file_note_name; + name_is_final = true; + bool invalid = false; + fd = open64 (name, O_RDONLY); + if (fd >= 0) + { + Dwfl_Error error = __libdw_open_file (&fd, &elf, true, false); + if (error == DWFL_E_NOERROR) + invalid = invalid_elf (elf, true /* disk_file_has_build_id */, + build_id, build_id_len); + } + if (invalid) + { + free (build_id); + return finish (); + } + } + /* Our return value now says to skip the segments contained within the module. */ ndx = addr_segndx (dwfl, segment, module_end, true); @@ -568,7 +733,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, return soname_stroff != 0 && dynstr_vaddr != 0 && dynstrsz != 0; } - const size_t dyn_entsize = (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32 + const size_t dyn_entsize = (ei_class == ELFCLASS32 ? sizeof (Elf32_Dyn) : sizeof (Elf64_Dyn)); void *dyn_data = NULL; size_t dyn_data_size = 0; @@ -587,18 +752,16 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlateto.d_buf = &dyn; xlateto.d_size = sizeof dyn; - if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32) + if (ei_class == ELFCLASS32) { - if (elf32_xlatetom (&xlateto, &xlatefrom, - ehdr.e32.e_ident[EI_DATA]) != NULL) + if (elf32_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL) for (size_t i = 0; i < dyn_filesz / sizeof dyn.d32[0]; ++i) if (consider_dyn (dyn.d32[i].d_tag, dyn.d32[i].d_un.d_val)) break; } else { - if (elf64_xlatetom (&xlateto, &xlatefrom, - ehdr.e32.e_ident[EI_DATA]) != NULL) + if (elf64_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL) for (size_t i = 0; i < dyn_filesz / sizeof dyn.d64[0]; ++i) if (consider_dyn (dyn.d64[i].d_tag, dyn.d64[i].d_un.d_val)) break; @@ -608,7 +771,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* We'll use the name passed in or a stupid default if not DT_SONAME. */ if (name == NULL) - name = ehdr.e32.e_type == ET_EXEC ? "[exe]" : execlike ? "[pie]" : "[dso]"; + name = e_type == ET_EXEC ? "[exe]" : execlike ? "[pie]" : "[dso]"; void *soname = NULL; size_t soname_size = 0; @@ -646,6 +809,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, Dwfl_Module *mod = INTUSE(dwfl_report_module) (dwfl, name, module_start, module_end); + + // !execlike && ET_EXEC is PIE. + // execlike && !ET_EXEC is a static executable. + if (mod != NULL && (execlike || ehdr.e32.e_type == ET_EXEC)) + mod->is_executable = true; + if (likely (mod != NULL) && build_id != NULL && unlikely (INTUSE(dwfl_module_report_build_id) (mod, build_id, @@ -677,10 +846,10 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, : dynstr_vaddr + dynstrsz - start); const GElf_Off whole = MAX (file_trimmed_end, shdrs_end); - Elf *elf = NULL; - if ((*read_eagerly) (MODCB_ARGS (mod), &buffer, &buffer_available, - cost, worthwhile, whole, contiguous, - read_eagerly_arg, &elf) + if (elf == NULL + && (*read_eagerly) (MODCB_ARGS (mod), &buffer, &buffer_available, + cost, worthwhile, whole, contiguous, + read_eagerly_arg, &elf) && elf == NULL) { /* The caller wants to read the whole file in right now, but hasn't @@ -710,7 +879,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, final_read (offset, vaddr + bias, filesz); } - if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32) + if (ei_class == ELFCLASS32) for (uint_fast16_t i = 0; i < phnum; ++i) read_phdr (phdrs.p32[i].p_type, phdrs.p32[i].p_vaddr, phdrs.p32[i].p_offset, phdrs.p32[i].p_filesz); @@ -742,6 +911,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, { /* Install the file in the module. */ mod->main.elf = elf; + elf = NULL; + fd = -1; mod->main.vaddr = module_start - bias; mod->main.address_sync = module_address_sync; mod->main_bias = bias; diff --git a/libdwfl/elf-from-memory.c b/libdwfl/elf-from-memory.c index df9fbe69..b35fac71 100644 --- a/libdwfl/elf-from-memory.c +++ b/libdwfl/elf-from-memory.c @@ -206,12 +206,10 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, found_base yet). Returns true if sanity checking failed, false otherwise. */ inline bool handle_segment (GElf_Addr vaddr, GElf_Off offset, - GElf_Xword filesz, GElf_Xword memsz, - GElf_Xword palign) + GElf_Xword filesz, GElf_Xword memsz) { - /* Sanity check the alignment requirements. */ - if ((palign & (pagesize - 1)) != 0 - || ((vaddr - offset) & (palign - 1)) != 0) + /* Sanity check the segment load aligns with the pagesize. */ + if (((vaddr - offset) & (pagesize - 1)) != 0) return true; GElf_Off segment_end = ((offset + filesz + pagesize - 1) @@ -238,8 +236,7 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, for (uint_fast16_t i = 0; i < phnum; ++i) if (phdrs.p32[i].p_type == PT_LOAD) if (handle_segment (phdrs.p32[i].p_vaddr, phdrs.p32[i].p_offset, - phdrs.p32[i].p_filesz, phdrs.p32[i].p_memsz, - phdrs.p32[i].p_align)) + phdrs.p32[i].p_filesz, phdrs.p32[i].p_memsz)) goto bad_elf; break; @@ -250,8 +247,7 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, for (uint_fast16_t i = 0; i < phnum; ++i) if (phdrs.p64[i].p_type == PT_LOAD) if (handle_segment (phdrs.p64[i].p_vaddr, phdrs.p64[i].p_offset, - phdrs.p64[i].p_filesz, phdrs.p64[i].p_memsz, - phdrs.p64[i].p_align)) + phdrs.p64[i].p_filesz, phdrs.p64[i].p_memsz)) goto bad_elf; break; diff --git a/libdwfl/frame_unwind.c b/libdwfl/frame_unwind.c index 18c808b2..16cebd08 100644 --- a/libdwfl/frame_unwind.c +++ b/libdwfl/frame_unwind.c @@ -1,5 +1,5 @@ /* Get previous frame state for an existing frame state. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -582,6 +582,10 @@ handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias) continue; } + /* Some architectures encode some extra info in the return address. */ + if (regno == frame->fde->cie->return_address_register) + regval &= ebl_func_addr_mask (ebl); + /* This is another strange PPC[64] case. There are two registers numbers that can represent the same DWARF return register number. We only want one to actually set the return diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h index 9b03d8a7..12ee116e 100644 --- a/libdwfl/libdwflP.h +++ b/libdwfl/libdwflP.h @@ -91,7 +91,8 @@ typedef struct Dwfl_Process Dwfl_Process; DWFL_ERROR (ATTACH_STATE_CONFLICT, N_("Dwfl already has attached state")) \ DWFL_ERROR (NO_ATTACH_STATE, N_("Dwfl has no attached state")) \ DWFL_ERROR (NO_UNWIND, N_("Unwinding not supported for this architecture")) \ - DWFL_ERROR (INVALID_ARGUMENT, N_("Invalid argument")) + DWFL_ERROR (INVALID_ARGUMENT, N_("Invalid argument")) \ + DWFL_ERROR (NO_CORE_FILE, N_("Not an ET_CORE ELF file")) #define DWFL_ERROR(name, text) DWFL_E_##name, typedef enum { DWFL_ERRORS DWFL_E_NUM } Dwfl_Error; @@ -110,6 +111,7 @@ struct Dwfl Dwfl_Module *modulelist; /* List in order used by full traversals. */ Dwfl_Process *process; + Dwfl_Error attacherr; /* Previous error attaching process. */ GElf_Addr offline_next_address; @@ -209,6 +211,7 @@ struct Dwfl_Module int segment; /* Index of first segment table entry. */ bool gc; /* Mark/sweep flag. */ + bool is_executable; /* Use Dwfl::executable_for_core? */ }; /* This holds information common for all the threads/tasks/TIDs of one process @@ -657,6 +660,8 @@ extern int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *memory_callback_arg, Dwfl_Module_Callback *read_eagerly, void *read_eagerly_arg, + const void *note_file, + size_t note_file_size, const struct r_debug_info *r_debug_info); /* Report a module for entry in the dynamic linker's struct link_map list. diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 2913d9f7..eaf43b57 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-2013 Red Hat, Inc. + Copyright (C) 2008-2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -321,7 +321,11 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, if (read_addrs (next, 4)) return release_buffer (-1); - GElf_Addr l_addr = addrs[0]; + /* Unused: l_addr is the difference between the address in memory + and the ELF file when the core was created. We need to + recalculate the difference below because the ELF file we use + might be differently pre-linked. */ + // GElf_Addr l_addr = addrs[0]; GElf_Addr l_name = addrs[1]; GElf_Addr l_ld = addrs[2]; next = addrs[3]; @@ -432,11 +436,14 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, if (valid) { + // It is like l_addr but it handles differently prelinked + // files at core dumping vs. core loading time. + GElf_Addr base = l_ld - elf_dynamic_vaddr; if (r_debug_info_module == NULL) { // XXX hook for sysroot mod = __libdwfl_report_elf (dwfl, basename (name), - name, fd, elf, l_addr, + name, fd, elf, base, true, true); if (mod != NULL) { @@ -444,7 +451,7 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, fd = -1; } } - else if (__libdwfl_elf_address_range (elf, l_addr, true, + else if (__libdwfl_elf_address_range (elf, base, true, true, NULL, NULL, &r_debug_info_module->start, &r_debug_info_module->end, @@ -526,7 +533,11 @@ consider_executable (Dwfl_Module *mod, GElf_Addr at_phdr, GElf_Addr at_entry, address where &r_debug was written at runtime. */ GElf_Xword align = mod->dwfl->segment_align; GElf_Addr d_val_vaddr = 0; - for (uint_fast16_t i = 0; i < ehdr.e_phnum; ++i) + size_t phnum; + if (elf_getphdrnum (mod->main.elf, &phnum) != 0) + return 0; + + for (size_t i = 0; i < phnum; ++i) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (mod->main.elf, i, &phdr_mem); @@ -806,7 +817,15 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, __libdwfl_seterrno (DWFL_E_LIBELF); return false; } - if (ehdr->e_phnum != phnum || ehdr->e_phentsize != phent) + size_t e_phnum; + if (elf_getphdrnum (elf, &e_phnum) != 0) + { + elf_end (elf); + close (fd); + __libdwfl_seterrno (DWFL_E_LIBELF); + return false; + } + if (e_phnum != phnum || ehdr->e_phentsize != phent) { elf_end (elf); close (fd); diff --git a/libdwfl/linux-core-attach.c b/libdwfl/linux-core-attach.c index 1002788e..5a7b3b3d 100644 --- a/libdwfl/linux-core-attach.c +++ b/libdwfl/linux-core-attach.c @@ -1,5 +1,5 @@ /* Get Dwarf Frame state for target core file. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -30,6 +30,8 @@ #include <fcntl.h> #include "system.h" +#include "../libdw/memory-access.h" + #ifndef MIN # define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif @@ -83,12 +85,10 @@ core_memory_read (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Word *result, return false; } assert (data->d_size == bytes); - /* FIXME: Currently any arch supported for unwinding supports - unaligned access. */ if (bytes == 8) - *result = *(const uint64_t *) data->d_buf; + *result = read_8ubyte_unaligned_noncvt (data->d_buf); else - *result = *(const uint32_t *) data->d_buf; + *result = read_4ubyte_unaligned_noncvt (data->d_buf); return true; } __libdwfl_seterrno (DWFL_E_ADDR_OUTOFRANGE); @@ -150,7 +150,7 @@ core_next_thread (Dwfl *dwfl __attribute__ ((unused)), void *dwfl_arg, break; if (item == items + nitems) continue; - uint32_t val32 = *(const uint32_t *) (desc + item->offset); + uint32_t val32 = read_4ubyte_unaligned_noncvt (desc + item->offset); val32 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be32toh (val32) : le32toh (val32)); pid_t tid = (int32_t) val32; @@ -201,7 +201,7 @@ core_set_initial_registers (Dwfl_Thread *thread, void *thread_arg_voidp) assert (item < items + nitems); pid_t tid; { - uint32_t val32 = *(const uint32_t *) (desc + item->offset); + uint32_t val32 = read_4ubyte_unaligned_noncvt (desc + item->offset); val32 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be32toh (val32) : le32toh (val32)); tid = (int32_t) val32; @@ -218,14 +218,14 @@ core_set_initial_registers (Dwfl_Thread *thread, void *thread_arg_voidp) switch (gelf_getclass (core) == ELFCLASS32 ? 32 : 64) { case 32:; - uint32_t val32 = *(const uint32_t *) (desc + item->offset); + uint32_t val32 = read_4ubyte_unaligned_noncvt (desc + item->offset); val32 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be32toh (val32) : le32toh (val32)); /* Do a host width conversion. */ pc = val32; break; case 64:; - uint64_t val64 = *(const uint64_t *) (desc + item->offset); + uint64_t val64 = read_8ubyte_unaligned_noncvt (desc + item->offset); val64 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be64toh (val64) : le64toh (val64)); pc = val64; @@ -259,7 +259,7 @@ core_set_initial_registers (Dwfl_Thread *thread, void *thread_arg_voidp) switch (regloc->bits) { case 32:; - uint32_t val32 = *(const uint32_t *) reg_desc; + uint32_t val32 = read_4ubyte_unaligned_noncvt (reg_desc); reg_desc += sizeof val32; val32 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be32toh (val32) : le32toh (val32)); @@ -267,7 +267,7 @@ core_set_initial_registers (Dwfl_Thread *thread, void *thread_arg_voidp) val = val32; break; case 64:; - uint64_t val64 = *(const uint64_t *) reg_desc; + uint64_t val64 = read_8ubyte_unaligned_noncvt (reg_desc); reg_desc += sizeof val64; val64 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be64toh (val64) : le64toh (val64)); @@ -309,33 +309,41 @@ static const Dwfl_Thread_Callbacks core_thread_callbacks = int dwfl_core_file_attach (Dwfl *dwfl, Elf *core) { + Dwfl_Error err = DWFL_E_NOERROR; Ebl *ebl = ebl_openbackend (core); if (ebl == NULL) { - __libdwfl_seterrno (DWFL_E_LIBEBL); + err = DWFL_E_LIBEBL; + fail_err: + if (dwfl->process == NULL && dwfl->attacherr == DWFL_E_NOERROR) + dwfl->attacherr = __libdwfl_canon_error (err); + __libdwfl_seterrno (err); return -1; } size_t nregs = ebl_frame_nregs (ebl); if (nregs == 0) { - __libdwfl_seterrno (DWFL_E_NO_UNWIND); + err = DWFL_E_NO_UNWIND; + fail: ebl_closebackend (ebl); - return -1; + goto fail_err; } GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (core, &ehdr_mem); if (ehdr == NULL) { - __libdwfl_seterrno (DWFL_E_LIBELF); - ebl_closebackend (ebl); - return -1; + err = DWFL_E_LIBELF; + goto fail; + } + if (ehdr->e_type != ET_CORE) + { + err = DWFL_E_NO_CORE_FILE; + goto fail; } - assert (ehdr->e_type == ET_CORE); size_t phnum; if (elf_getphdrnum (core, &phnum) < 0) { - __libdwfl_seterrno (DWFL_E_LIBELF); - ebl_closebackend (ebl); - return -1; + err = DWFL_E_LIBELF; + goto fail; } pid_t pid = -1; Elf_Data *note_data = NULL; @@ -351,8 +359,8 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) } if (note_data == NULL) { - ebl_closebackend (ebl); - return DWFL_E_LIBELF; + err = DWFL_E_LIBELF; + goto fail; } size_t offset = 0; GElf_Nhdr nhdr; @@ -384,7 +392,7 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) break; if (item == items + nitems) continue; - uint32_t val32 = *(const uint32_t *) (desc + item->offset); + uint32_t val32 = read_4ubyte_unaligned_noncvt (desc + item->offset); val32 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB ? be32toh (val32) : le32toh (val32)); pid = (int32_t) val32; @@ -394,16 +402,14 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) if (pid == -1) { /* No valid NT_PRPSINFO recognized in this CORE. */ - __libdwfl_seterrno (DWFL_E_BADELF); - ebl_closebackend (ebl); - return -1; + err = DWFL_E_BADELF; + goto fail; } struct core_arg *core_arg = malloc (sizeof *core_arg); if (core_arg == NULL) { - __libdwfl_seterrno (DWFL_E_NOMEM); - ebl_closebackend (ebl); - return -1; + err = DWFL_E_NOMEM; + goto fail; } core_arg->core = core; core_arg->note_data = note_data; diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index 1ad7d2f6..e4065d89 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -302,6 +302,9 @@ check_suffix (const FTSENT *f, size_t namelen) #if USE_BZLIB TRY (".ko.bz2"); #endif +#if USE_LZMA + TRY (".ko.xz"); +#endif return 0; diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c index 8aee7211..ae717028 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -290,13 +290,23 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) { char buffer[36]; FILE *procfile; + int err = 0; /* The errno to return and set for dwfl->attcherr. */ /* Make sure to report the actual PID (thread group leader) to dwfl_attach_state. */ snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid); procfile = fopen (buffer, "r"); if (procfile == NULL) - return errno; + { + err = errno; + fail: + if (dwfl->process == NULL && dwfl->attacherr == DWFL_E_NOERROR) + { + errno = err; + dwfl->attacherr = __libdwfl_canon_error (DWFL_E_ERRNO); + } + return err; + } char *line = NULL; size_t linelen = 0; @@ -317,19 +327,26 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) fclose (procfile); if (pid == 0) - return ESRCH; + { + err = ESRCH; + goto fail; + } char dirname[64]; int i = snprintf (dirname, sizeof (dirname), "/proc/%ld/task", (long) pid); assert (i > 0 && i < (ssize_t) sizeof (dirname) - 1); DIR *dir = opendir (dirname); if (dir == NULL) - return errno; + { + err = errno; + goto fail; + } struct __libdwfl_pid_arg *pid_arg = malloc (sizeof *pid_arg); if (pid_arg == NULL) { closedir (dir); - return ENOMEM; + err = ENOMEM; + goto fail; } pid_arg->dir = dir; pid_arg->tid_attached = 0; @@ -379,6 +396,16 @@ pid_getthread (Dwfl *dwfl __attribute__ ((unused)), return false; } +bool +internal_function +__libdwfl_ptrace_attach (pid_t tid __attribute__ ((unused)), + bool *tid_was_stoppedp __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; +} + static bool pid_memory_read (Dwfl *dwfl __attribute__ ((unused)), Dwarf_Addr addr __attribute__ ((unused)), @@ -405,6 +432,13 @@ pid_detach (Dwfl *dwfl __attribute__ ((unused)), { } +void +internal_function +__libdwfl_ptrace_detach (pid_t tid __attribute__ ((unused)), + bool tid_was_stopped __attribute__ ((unused))) +{ +} + static void pid_thread_detach (Dwfl_Thread *thread __attribute__ ((unused)), void *thread_arg __attribute__ ((unused))) diff --git a/libdwfl/offline.c b/libdwfl/offline.c index 28d2782e..982ceab0 100644 --- a/libdwfl/offline.c +++ b/libdwfl/offline.c @@ -48,6 +48,7 @@ dwfl_offline_section_address (Dwfl_Module *mod, assert (mod->e_type == ET_REL); assert (shdr->sh_addr == 0); assert (shdr->sh_flags & SHF_ALLOC); + assert (shndx != 0); if (mod->debug.elf == NULL) /* We are only here because sh_addr is zero even though layout is complete. diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c index 52b7b5eb..e102e1e4 100644 --- a/libdwfl/relocate.c +++ b/libdwfl/relocate.c @@ -38,6 +38,12 @@ internal_function __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx, Elf32_Word shndx, GElf_Addr *value) { + /* No adjustment needed for section zero, it is never loaded. + Handle it first, just in case the ELF file has strange section + zero flags set. */ + if (shndx == 0) + return DWFL_E_NOERROR; + Elf_Scn *refscn = elf_getscn (elf, shndx); GElf_Shdr refshdr_mem, *refshdr = gelf_getshdr (refscn, &refshdr_mem); if (refshdr == NULL) @@ -200,7 +206,8 @@ resolve_symbol (Dwfl_Module *referer, struct reloc_symtab_cache *symtab, symtab->symstrdata = elf_getdata (elf_getscn (symtab->symelf, symtab->strtabndx), NULL); - if (unlikely (symtab->symstrdata == NULL)) + if (unlikely (symtab->symstrdata == NULL + || symtab->symstrdata->d_buf == NULL)) return DWFL_E_LIBELF; } if (unlikely (sym->st_name >= symtab->symstrdata->d_size)) @@ -297,6 +304,46 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, if (tdata == NULL) return DWFL_E_LIBELF; + /* If either the section that needs the relocation applied, or the + section that the relocations come from overlap one of the ehdrs, + shdrs or phdrs data then we refuse to do the relocations. It + isn't illegal for ELF section data to overlap the header data, + but updating the (relocation) data might corrupt the in-memory + libelf headers causing strange corruptions or errors. */ + size_t ehsize = gelf_fsize (relocated, ELF_T_EHDR, 1, EV_CURRENT); + if (unlikely (shdr->sh_offset < ehsize + || tshdr->sh_offset < ehsize)) + return DWFL_E_BADELF; + + GElf_Off shdrs_start = ehdr->e_shoff; + size_t shnums; + if (elf_getshdrnum (relocated, &shnums) < 0) + return DWFL_E_LIBELF; + /* Overflows will have been checked by elf_getshdrnum/get|rawdata. */ + size_t shentsize = gelf_fsize (relocated, ELF_T_SHDR, 1, EV_CURRENT); + GElf_Off shdrs_end = shdrs_start + shnums * shentsize; + if (unlikely ((shdrs_start < shdr->sh_offset + shdr->sh_size + && shdr->sh_offset < shdrs_end) + || (shdrs_start < tshdr->sh_offset + tshdr->sh_size + && tshdr->sh_offset < shdrs_end))) + return DWFL_E_BADELF; + + GElf_Off phdrs_start = ehdr->e_phoff; + size_t phnums; + if (elf_getphdrnum (relocated, &phnums) < 0) + return DWFL_E_LIBELF; + if (phdrs_start != 0 && phnums != 0) + { + /* Overflows will have been checked by elf_getphdrnum/get|rawdata. */ + size_t phentsize = gelf_fsize (relocated, ELF_T_PHDR, 1, EV_CURRENT); + GElf_Off phdrs_end = phdrs_start + phnums * phentsize; + if (unlikely ((phdrs_start < shdr->sh_offset + shdr->sh_size + && shdr->sh_offset < phdrs_end) + || (phdrs_start < tshdr->sh_offset + tshdr->sh_size + && tshdr->sh_offset < phdrs_end))) + return DWFL_E_BADELF; + } + /* Apply one relocation. Returns true for any invalid data. */ Dwfl_Error relocate (GElf_Addr offset, const GElf_Sxword *addend, int rtype, int symndx) @@ -365,7 +412,7 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, return DWFL_E_BADRELTYPE; } - if (offset + size > tdata->d_size) + if (offset > tdata->d_size || tdata->d_size - offset < size) return DWFL_E_BADRELOFF; #define DO_TYPE(NAME, Name) GElf_##Name Name; diff --git a/libebl/ChangeLog b/libebl/ChangeLog index 7198d5ec..5e635f21 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,20 @@ +2014-11-22 Mark Wielaard <[email protected]> + + * ebl-hooks.h (bss_plt_p): Remove ehdr argument. + * eblbsspltp.c (ebl_bss_plt_p): Likewise. + * eblopenbackend.c (default_bss_plt_p): Likewise. + * libebl.h (ebl_bss_plt_p): Likewise. + +2014-11-17 Mark Wielaard <[email protected]> + + * ebldebugscnp.c (ebl_debugscn_p): Check name is not NULL. + +2014-06-17 Mark Wielaard <[email protected]> + + * eblinitreg.c (ebl_func_addr_mask): New function. + * libebl.h (ebl_func_addr_mask): Define. + * libeblP.h (struct ebl): Add func_addr_mask. + 2014-05-19 Mark Wielaard <[email protected]> * Makefile.am (gen_SOURCES): Add eblcheckreloctargettype.c. diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h index 65c62ec6..2e314464 100644 --- a/libebl/ebl-hooks.h +++ b/libebl/ebl-hooks.h @@ -132,7 +132,7 @@ bool EBLHOOK(check_special_symbol) (Elf *, GElf_Ehdr *, const GElf_Sym *, bool EBLHOOK(check_st_other_bits) (unsigned char st_other); /* Check if backend uses a bss PLT in this file. */ -bool EBLHOOK(bss_plt_p) (Elf *, GElf_Ehdr *); +bool EBLHOOK(bss_plt_p) (Elf *); /* Return location expression to find return value given the DW_AT_type DIE of a DW_TAG_subprogram DIE. */ @@ -187,7 +187,7 @@ bool EBLHOOK(unwind) (Ebl *ebl, Dwarf_Addr pc, ebl_tid_registers_t *setfunc, bool *signal_framep); /* Returns true if the value can be resolved to an address in an - allocated section, which will be returned in *SHNDXP. + allocated section, which will be returned in *ADDR. (e.g. function descriptor resolving) */ bool EBLHOOK(resolve_sym_value) (Ebl *ebl, GElf_Addr *addr); diff --git a/libebl/eblbsspltp.c b/libebl/eblbsspltp.c index 080e7c5c..95a5d8af 100644 --- a/libebl/eblbsspltp.c +++ b/libebl/eblbsspltp.c @@ -1,5 +1,5 @@ /* Check if backend uses a bss PLT. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -35,9 +35,8 @@ bool -ebl_bss_plt_p (ebl, ehdr) +ebl_bss_plt_p (ebl) Ebl *ebl; - GElf_Ehdr *ehdr; { - return ebl == NULL ? false : ebl->bss_plt_p (ebl->elf, ehdr); + return ebl == NULL ? false : ebl->bss_plt_p (ebl->elf); } diff --git a/libebl/ebldebugscnp.c b/libebl/ebldebugscnp.c index f2351e23..01a56754 100644 --- a/libebl/ebldebugscnp.c +++ b/libebl/ebldebugscnp.c @@ -1,5 +1,5 @@ /* Check section name for being that of a debug informatino section. - Copyright (C) 2002 Red Hat, Inc. + Copyright (C) 2002, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2002. @@ -40,5 +40,5 @@ ebl_debugscn_p (ebl, name) Ebl *ebl; const char *name; { - return ebl->debugscn_p (name); + return name != NULL && ebl->debugscn_p (name); } diff --git a/libebl/eblinitreg.c b/libebl/eblinitreg.c index 8909c500..5729b3cc 100644 --- a/libebl/eblinitreg.c +++ b/libebl/eblinitreg.c @@ -1,5 +1,5 @@ /* Fetch live process Dwfl_Frame from PID. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -49,3 +49,10 @@ ebl_frame_nregs (Ebl *ebl) { return ebl == NULL ? 0 : ebl->frame_nregs; } + +GElf_Addr +ebl_func_addr_mask (Ebl *ebl) +{ + return ((ebl == NULL || ebl->func_addr_mask == 0) + ? ~(GElf_Addr)0 : ebl->func_addr_mask); +} diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index 64619fb3..3db7a18f 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -193,7 +193,7 @@ static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, static bool default_check_st_other_bits (unsigned char st_other); static bool default_check_special_section (Ebl *, int, const GElf_Shdr *, const char *); -static bool default_bss_plt_p (Elf *elf, GElf_Ehdr *ehdr); +static bool default_bss_plt_p (Elf *elf); static int default_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locops); static ssize_t default_register_info (Ebl *ebl, @@ -672,8 +672,7 @@ default_check_st_other_bits (unsigned char st_other __attribute__ ((unused))) static bool -default_bss_plt_p (Elf *elf __attribute__ ((unused)), - GElf_Ehdr *ehdr __attribute__ ((unused))) +default_bss_plt_p (Elf *elf __attribute__ ((unused))) { return false; } diff --git a/libebl/libebl.h b/libebl/libebl.h index d05751fa..7c3c7647 100644 --- a/libebl/libebl.h +++ b/libebl/libebl.h @@ -1,5 +1,5 @@ /* Interface for libebl. - Copyright (C) 2000-2010, 2013 Red Hat, Inc. + Copyright (C) 2000-2010, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -201,7 +201,7 @@ extern bool ebl_section_strip_p (Ebl *ebl, const GElf_Ehdr *ehdr, bool remove_comment, bool only_remove_debug); /* Check if backend uses a bss PLT in this file. */ -extern bool ebl_bss_plt_p (Ebl *ebl, GElf_Ehdr *ehdr); +extern bool ebl_bss_plt_p (Ebl *ebl); /* Return size of entry in SysV-style hash table. */ extern int ebl_sysvhash_entrysize (Ebl *ebl); @@ -409,6 +409,17 @@ extern bool ebl_set_initial_registers_tid (Ebl *ebl, extern size_t ebl_frame_nregs (Ebl *ebl) __nonnull_attribute__ (1); +/* Mask to use for function symbol or unwind return addresses in case + the architecture adds some extra non-address bits to it. This is + different from ebl_resolve_sym_value which only works for actual + symbol addresses (in non-ET_REL files) that might resolve to an + address in a different section. ebl_func_addr_mask is called to + turn a given function value into the a real address or offset (the + original value might not be a real address). This works for all + cases where an actual function address (or offset in ET_REL symbol + tables) is needed. */ +extern GElf_Addr ebl_func_addr_mask (Ebl *ebl); + /* Convert *REGNO as is in DWARF to a lower range suitable for Dwarf_Frame->REGS indexing. */ extern bool ebl_dwarf_to_regno (Ebl *ebl, unsigned *regno) diff --git a/libebl/libeblP.h b/libebl/libeblP.h index f91c2a0d..dbd67f3e 100644 --- a/libebl/libeblP.h +++ b/libebl/libeblP.h @@ -1,5 +1,5 @@ /* Internal definitions for interface for libebl. - Copyright (C) 2000-2009, 2013 Red Hat, Inc. + Copyright (C) 2000-2009, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -64,6 +64,12 @@ struct ebl Ebl architecture can unwind iff FRAME_NREGS > 0. */ size_t frame_nregs; + /* Mask to use to turn a function value into a real function address + in case the architecture adds some extra non-address bits to it. + If not initialized (0) then ebl_func_addr_mask will return ~0, + otherwise it should be the actual mask to use. */ + GElf_Addr func_addr_mask; + /* Function descriptor load address and table as used by ebl_resolve_sym_value if available for this arch. */ GElf_Addr fd_addr; diff --git a/libelf/ChangeLog b/libelf/ChangeLog index bd009cd9..3b88d031 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,112 @@ +2014-12-18 Ulrich Drepper <[email protected]> + + * Makefile.am: Suppress output of textrel_check command. + +2014-12-16 Mark Wielaard <[email protected]> + + * elf_begin.c (read_long_names): Make sure long_names len fits + in mapped ELF file. + +2014-12-15 Mark Wielaard <[email protected]> + + * elf_getarsym.c (elf_getarsym): Check index_size doesn't overflow. + +2014-12-15 Mark Wielaard <[email protected]> + + * elf_begin.c (read_long_names): Clear any garbage left in the + name table. + +2014-12-11 Mark Wielaard <[email protected]> + + * elf_begin.c (file_read_elf): Correct ELF64 section offset check. + +2014-12-11 Mark Wielaard <[email protected]> + + * elf_begin.c (read_long_names): Check for offset overflow. + (__libelf_next_arhdr_wrlock): Likewise. Sanity check the ar_size. + Don't allow it to go beyond end of file. + +2014-12-09 Mark Wielaard <[email protected]> + + * elf_getarsym.c (elf_getarsym): Make sure n * w doesn't overflow. + +2014-11-27 Mark Wielaard <[email protected]> + + * Makefile.am (libelf.so): Use textrel_check. + +2014-11-23 Mark Wielaard <[email protected]> + + * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Change signed + overflow check to unsigned. + +2014-11-23 Mark Wielaard <[email protected]> + + * note_xlate.h (elf_cvt_note): Copy over any leftover data if + src != dest. The data is probably part of truncated name/desc. + +2014-11-22 Mark Wielaard <[email protected]> + + * elf_getphdrnum.c (elf_getphdrnum): Sanity check the + __elf_getphdrnum_rdlock result. + +2014-11-18 Mark Wielaard <[email protected]> + + * version_xlate.h (elf_cvt_Verdef): Check for overflow. + (elf_cvt_Verneed): Likewise. + +2014-11-17 Mark Wielaard <[email protected]> + + * elf-knowledge.h (SECTION_STRIP_P): Check name is not NULL. + +2014-11-16 Mark Wielaard <[email protected]> + + * elf_getshdrstrndx.c: Check there are section headers before + handling SHN_XINDEX. + +2014-11-16 Mark Wielaard <[email protected]> + + * elf32_getphdr.c (getphdr_wrlock): Check e_phoff isn't zero. + Check for too many pheaders. + * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Check section zero + actually exists before handling PN_XNUM. + +2014-11-16 Mark Wielaard <[email protected]> + + * gelf_getnote.c (gelf_getnote): Check padding overflow. + +2014-11-16 Mark Wielaard <[email protected]> + + * elf_getdata.c (__libelf_set_rawdata_wrlock): Declare offset, size + and align as Elf64_Off and Elf64_Xword not size_t. + +2014-11-14 Mark Wielaard <[email protected]> + + * gelf_getnote.c (gelf_getnote): Check offset overflow. + +2014-11-13 Mark Wielaard <[email protected]> + + * elf_getdata.c (__libelf_set_rawdata_wrlock): Fix unsigned overflow + check. + +2014-11-08 Mark Wielaard <[email protected]> + + * elf_begin.c (__libelf_next_arhdr_wrlock): Use mempcpy not __mempcpy. + +2014-11-07 Mark Wielaard <[email protected]> + + * elf_begin.c (file_read_elf): Correct sh_size check. + * elf_getdata.c (__libelf_set_rawdata_wrlock): Check for unsigned + overflow. + +2014-09-10 Petr Machata <[email protected]> + + * elf_begin (read_unmmaped_file): Call __libelf_seterrno if the + file is unreadable. + +2014-07-07 Mark Wielaard <[email protected]> + + * elf.h: Update from glibc. + 2014-04-13 Mark Wielaard <[email protected]> * Makefile.am: Remove !MUDFLAP conditions. diff --git a/libelf/Makefile.am b/libelf/Makefile.am index 31fa8a46..e10ba1e7 100644 --- a/libelf/Makefile.am +++ b/libelf/Makefile.am @@ -104,7 +104,7 @@ libelf.so$(EXEEXT): libelf_pic.a libelf.map $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ -Wl,--version-script,$(srcdir)/libelf.map,--no-undefined \ -Wl,--soname,$@.$(VERSION),-z,defs,-z,relro $(libelf_so_LDLIBS) - if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi + @$(textrel_check) ln -fs $@ $@.$(VERSION) install: install-am libelf.so diff --git a/libelf/elf-knowledge.h b/libelf/elf-knowledge.h index 99fb9107..24534b38 100644 --- a/libelf/elf-knowledge.h +++ b/libelf/elf-knowledge.h @@ -1,5 +1,5 @@ /* Accumulation of various pieces of knowledge about ELF. - Copyright (C) 2000-2012 Red Hat, Inc. + Copyright (C) 2000-2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2000. @@ -41,7 +41,8 @@ && (shdr)->sh_type != SHT_NOTE \ && (((shdr)->sh_type) != SHT_PROGBITS \ /* Never remove .gnu.warning.* sections. */ \ - || (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) != 0 \ + || (name != NULL \ + && strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) != 0\ /* We remove .comment sections only if explicitly told to do so. */\ && (remove_comment \ || strcmp (name, ".comment") != 0)))) diff --git a/libelf/elf.h b/libelf/elf.h index a05ea3b6..40e87b21 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-2013 Free Software Foundation, Inc. + Copyright (C) 1995-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -2252,6 +2252,17 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */ #define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */ #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */ +#define R_PPC64_TLSGD 107 /* none (sym+add)@tlsgd */ +#define R_PPC64_TLSLD 108 /* none (sym+add)@tlsld */ +#define R_PPC64_TOCSAVE 109 /* none */ + +/* Added when HA and HI relocs were changed to report overflows. */ +#define R_PPC64_ADDR16_HIGH 110 +#define R_PPC64_ADDR16_HIGHA 111 +#define R_PPC64_TPREL16_HIGH 112 +#define R_PPC64_TPREL16_HIGHA 113 +#define R_PPC64_DTPREL16_HIGH 114 +#define R_PPC64_DTPREL16_HIGHA 115 /* GNU extension to support local ifunc. */ #define R_PPC64_JMP_IREL 247 @@ -2261,12 +2272,29 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PPC64_REL16_HI 251 /* half16 (sym+add-.)@h */ #define R_PPC64_REL16_HA 252 /* half16 (sym+add-.)@ha */ +/* e_flags bits specifying ABI. + 1 for original function descriptor using ABI, + 2 for revised ABI without function descriptors, + 0 for unspecified or not using any features affected by the differences. */ +#define EF_PPC64_ABI 3 + /* PowerPC64 specific values for the Dyn d_tag field. */ #define DT_PPC64_GLINK (DT_LOPROC + 0) #define DT_PPC64_OPD (DT_LOPROC + 1) #define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_OPT (DT_LOPROC + 3) #define DT_PPC64_NUM 3 +/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry. */ +#define PPC64_OPT_TLS 1 +#define PPC64_OPT_MULTI_TOC 2 + +/* PowerPC64 specific values for the Elf64_Sym st_other field. */ +#define STO_PPC64_LOCAL_BIT 5 +#define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT) +#define PPC64_LOCAL_ENTRY_OFFSET(other) \ + (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2) + /* ARM specific declarations */ diff --git a/libelf/elf32_getphdr.c b/libelf/elf32_getphdr.c index e74e63fd..1b82a480 100644 --- a/libelf/elf32_getphdr.c +++ b/libelf/elf32_getphdr.c @@ -76,15 +76,17 @@ __elfw2(LIBELFBITS,getphdr_wrlock) (elf) size_t phnum; if (__elf_getphdrnum_rdlock (elf, &phnum) != 0) goto out; - if (phnum == 0) + if (phnum == 0 || ehdr->e_phoff == 0) { __libelf_seterrno (ELF_E_NO_PHDR); goto out; } + /* Check this doesn't overflow. */ size_t size = phnum * sizeof (ElfW2(LIBELFBITS,Phdr)); - if (ehdr->e_phoff > elf->maximum_size + if (phnum > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Phdr)) + || ehdr->e_phoff > elf->maximum_size || elf->maximum_size - ehdr->e_phoff < size) { __libelf_seterrno (ELF_E_INVALID_DATA); diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 1ef70ac3..30abe0bf 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -337,8 +337,8 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, elf->state.elf32.scns.data[cnt].shdr.e32 = &elf->state.elf32.shdr[cnt]; if (likely (elf->state.elf32.shdr[cnt].sh_offset < maxsize) - && likely (maxsize - elf->state.elf32.shdr[cnt].sh_offset - <= elf->state.elf32.shdr[cnt].sh_size)) + && likely (elf->state.elf32.shdr[cnt].sh_size + <= maxsize - elf->state.elf32.shdr[cnt].sh_offset)) elf->state.elf32.scns.data[cnt].rawdata_base = elf->state.elf32.scns.data[cnt].data_base = ((char *) map_address + offset @@ -412,8 +412,8 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, elf->state.elf64.ehdr = ehdr; if (unlikely (ehdr->e_shoff >= maxsize) - || unlikely (ehdr->e_shoff - + scncnt * sizeof (Elf32_Shdr) > maxsize)) + || unlikely (maxsize - ehdr->e_shoff + < scncnt * sizeof (Elf64_Shdr))) goto free_and_out; elf->state.elf64.shdr = (Elf64_Shdr *) ((char *) ehdr + ehdr->e_shoff); @@ -428,8 +428,8 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, elf->state.elf64.scns.data[cnt].shdr.e64 = &elf->state.elf64.shdr[cnt]; if (likely (elf->state.elf64.shdr[cnt].sh_offset < maxsize) - && likely (maxsize - elf->state.elf64.shdr[cnt].sh_offset - <= elf->state.elf64.shdr[cnt].sh_size)) + && likely (elf->state.elf64.shdr[cnt].sh_size + <= maxsize - elf->state.elf64.shdr[cnt].sh_offset)) elf->state.elf64.scns.data[cnt].rawdata_base = elf->state.elf64.scns.data[cnt].data_base = ((char *) map_address + offset @@ -550,9 +550,12 @@ read_unmmaped_file (int fildes, off_t offset, size_t maxsize, Elf_Cmd cmd, maxsize), offset); if (unlikely (nread == -1)) - /* We cannot even read the head of the file. Maybe FILDES is associated - with an unseekable device. This is nothing we can handle. */ - return NULL; + { + /* We cannot even read the head of the file. Maybe FILDES is associated + with an unseekable device. This is nothing we can handle. */ + __libelf_seterrno (ELF_E_INVALID_FILE); + return NULL; + } /* See what kind of object we have here. */ Elf_Kind kind = determine_kind (mem.header, nread); @@ -670,7 +673,8 @@ read_long_names (Elf *elf) { if (elf->map_address != NULL) { - if (offset + sizeof (struct ar_hdr) > elf->maximum_size) + if ((size_t) offset > elf->maximum_size + || elf->maximum_size - offset < sizeof (struct ar_hdr)) return NULL; /* The data is mapped. */ @@ -704,11 +708,15 @@ read_long_names (Elf *elf) char *runp; if (elf->map_address != NULL) - /* Simply copy it over. */ - elf->state.ar.long_names = (char *) memcpy (newp, - elf->map_address + offset - + sizeof (struct ar_hdr), - len); + { + if (len > elf->maximum_size - offset - sizeof (struct ar_hdr)) + goto too_much; + /* Simply copy it over. */ + elf->state.ar.long_names = (char *) memcpy (newp, + elf->map_address + offset + + sizeof (struct ar_hdr), + len); + } else { if (unlikely ((size_t) pread_retry (elf->fildes, newp, len, @@ -716,6 +724,7 @@ read_long_names (Elf *elf) + sizeof (struct ar_hdr)) != len)) { + too_much: /* We were not able to read all data. */ free (newp); elf->state.ar.long_names = NULL; @@ -730,10 +739,14 @@ read_long_names (Elf *elf) runp = newp; while (1) { + char *startp = runp; runp = (char *) memchr (runp, '/', newp + len - runp); if (runp == NULL) - /* This was the last entry. */ - break; + { + /* This was the last entry. Clear any left overs. */ + memset (startp, '\0', newp + len - startp); + break; + } /* NUL-terminate the string. */ *runp = '\0'; @@ -764,8 +777,10 @@ __libelf_next_arhdr_wrlock (elf) if (elf->map_address != NULL) { /* See whether this entry is in the file. */ - if (unlikely (elf->state.ar.offset + sizeof (struct ar_hdr) - > elf->start_offset + elf->maximum_size)) + if (unlikely ((size_t) elf->state.ar.offset + > elf->start_offset + elf->maximum_size + || (elf->start_offset + elf->maximum_size + - elf->state.ar.offset) < sizeof (struct ar_hdr))) { /* This record is not anymore in the file. */ __libelf_seterrno (ELF_E_RANGE); @@ -796,7 +811,7 @@ __libelf_next_arhdr_wrlock (elf) } /* Copy the raw name over to a NUL terminated buffer. */ - *((char *) __mempcpy (elf->state.ar.raw_name, ar_hdr->ar_name, 16)) = '\0'; + *((char *) mempcpy (elf->state.ar.raw_name, ar_hdr->ar_name, 16)) = '\0'; elf_ar_hdr = &elf->state.ar.elf_ar_hdr; @@ -892,7 +907,7 @@ __libelf_next_arhdr_wrlock (elf) const char *string = ar_hdr->FIELD; \ if (ar_hdr->FIELD[sizeof (ar_hdr->FIELD) - 1] != ' ') \ { \ - *((char *) __mempcpy (buf, ar_hdr->FIELD, sizeof (ar_hdr->FIELD))) \ + *((char *) mempcpy (buf, ar_hdr->FIELD, sizeof (ar_hdr->FIELD))) \ = '\0'; \ string = buf; \ } \ @@ -909,6 +924,12 @@ __libelf_next_arhdr_wrlock (elf) INT_FIELD (ar_mode); INT_FIELD (ar_size); + /* Truncated file? */ + size_t maxsize; + maxsize = elf->maximum_size - elf->state.ar.offset - sizeof (struct ar_hdr); + if ((size_t) elf_ar_hdr->ar_size > maxsize) + elf_ar_hdr->ar_size = maxsize; + return 0; } diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c index 7325190a..40633aa8 100644 --- a/libelf/elf_getarsym.c +++ b/libelf/elf_getarsym.c @@ -182,11 +182,12 @@ elf_getarsym (elf, ptr) tmpbuf[10] = '\0'; size_t index_size = atol (tmpbuf); - if (SARMAG + sizeof (struct ar_hdr) + index_size > elf->maximum_size + if (index_size > elf->maximum_size + || elf->maximum_size - index_size < SARMAG + sizeof (struct ar_hdr) #if SIZE_MAX <= 4294967295U || n >= SIZE_MAX / sizeof (Elf_Arsym) #endif - || n * w > index_size) + || n > index_size / w) { /* This index table cannot be right since it does not fit into the file. */ diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c index bc9f26ae..0aeb9972 100644 --- a/libelf/elf_getdata.c +++ b/libelf/elf_getdata.c @@ -170,9 +170,9 @@ int internal_function __libelf_set_rawdata_wrlock (Elf_Scn *scn) { - size_t offset; - size_t size; - size_t align; + Elf64_Off offset; + Elf64_Xword size; + Elf64_Xword align; int type; Elf *elf = scn->elf; @@ -243,8 +243,10 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn) if (elf->map_address != NULL) { /* First see whether the information in the section header is - valid and it does not ask for too much. */ - if (unlikely (offset + size > elf->maximum_size)) + valid and it does not ask for too much. Check for unsigned + overflow. */ + if (unlikely (offset > elf->maximum_size + || elf->maximum_size - offset < size)) { /* Something is wrong. */ __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c index f4fbe660..63a9914f 100644 --- a/libelf/elf_getdata_rawchunk.c +++ b/libelf/elf_getdata_rawchunk.c @@ -1,5 +1,5 @@ /* Return converted data from raw chunk of ELF file. - Copyright (C) 2007 Red Hat, Inc. + Copyright (C) 2007, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -57,8 +57,9 @@ elf_getdata_rawchunk (elf, offset, size, type) return NULL; } - if (unlikely (offset < 0 || offset + (off64_t) size < offset - || offset + size > elf->maximum_size)) + if (unlikely (offset < 0 || (uint64_t) offset > elf->maximum_size + || elf->maximum_size - (uint64_t) offset < size)) + { /* Invalid request. */ __libelf_seterrno (ELF_E_INVALID_OP); diff --git a/libelf/elf_getphdrnum.c b/libelf/elf_getphdrnum.c index 99649bee..63c27fb1 100644 --- a/libelf/elf_getphdrnum.c +++ b/libelf/elf_getphdrnum.c @@ -1,5 +1,5 @@ /* Return number of program headers in the ELF file. - Copyright (C) 2010 Red Hat, Inc. + Copyright (C) 2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -62,10 +62,18 @@ __elf_getphdrnum_rdlock (elf, dst) /* If there are no section headers, perhaps this is really just 65536 written without PN_XNUM support. Either that or it's bad data. */ - if (likely (scns->cnt > 0)) - *dst = (elf->class == ELFCLASS32 - ? scns->data[0].shdr.e32->sh_info - : scns->data[0].shdr.e64->sh_info); + if (elf->class == ELFCLASS32) + { + if (likely (scns->cnt > 0 + && elf->state.elf32.scns.data[0].shdr.e32 != NULL)) + *dst = scns->data[0].shdr.e32->sh_info; + } + else + { + if (likely (scns->cnt > 0 + && elf->state.elf64.scns.data[0].shdr.e64 != NULL)) + *dst = scns->data[0].shdr.e64->sh_info; + } } return 0; @@ -89,6 +97,39 @@ elf_getphdrnum (elf, dst) rwlock_rdlock (elf->lock); result = __elf_getphdrnum_rdlock (elf, dst); + + /* Do some sanity checking to make sure phnum and phoff are consistent. */ + Elf64_Off off = (elf->class == ELFCLASS32 + ? elf->state.elf32.ehdr->e_phoff + : elf->state.elf64.ehdr->e_phoff); + if (unlikely (off == 0)) + { + *dst = 0; + goto out; + } + + if (unlikely (off >= elf->maximum_size)) + { + __libelf_seterrno (ELF_E_INVALID_DATA); + result = -1; + goto out; + } + + /* Check for too many sections. */ + size_t phdr_size = (elf->class == ELFCLASS32 + ? sizeof (Elf32_Phdr) : sizeof (Elf64_Phdr)); + if (unlikely (*dst > SIZE_MAX / phdr_size)) + { + __libelf_seterrno (ELF_E_INVALID_DATA); + result = -1; + goto out; + } + + /* Truncated file? Don't return more than can be indexed. */ + if (unlikely (elf->maximum_size - off < *dst * phdr_size)) + *dst = (elf->maximum_size - off) / phdr_size; + +out: rwlock_unlock (elf->lock); return result; diff --git a/libelf/elf_getshdrstrndx.c b/libelf/elf_getshdrstrndx.c index 1dbed4c8..6f8d66e8 100644 --- a/libelf/elf_getshdrstrndx.c +++ b/libelf/elf_getshdrstrndx.c @@ -92,6 +92,13 @@ elf_getshdrstrndx (elf, dst) if (elf->class == ELFCLASS32) { size_t offset; + if (unlikely (elf->state.elf32.scns.cnt == 0)) + { + /* Cannot use SHN_XINDEX without section headers. */ + __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); + result = -1; + goto out; + } if (elf->state.elf32.scns.data[0].shdr.e32 != NULL) { @@ -146,6 +153,14 @@ elf_getshdrstrndx (elf, dst) } else { + if (unlikely (elf->state.elf64.scns.cnt == 0)) + { + /* Cannot use SHN_XINDEX without section headers. */ + __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); + result = -1; + goto out; + } + if (elf->state.elf64.scns.data[0].shdr.e64 != NULL) { num = elf->state.elf64.scns.data[0].shdr.e64->sh_link; diff --git a/libelf/gelf_getnote.c b/libelf/gelf_getnote.c index 1a368553..7dc82156 100644 --- a/libelf/gelf_getnote.c +++ b/libelf/gelf_getnote.c @@ -1,5 +1,5 @@ /* Get note information at the supplied offset. - Copyright (C) 2007 Red Hat, Inc. + Copyright (C) 2007, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -62,7 +62,8 @@ gelf_getnote (data, offset, result, name_offset, desc_offset) /* The data is already in the correct form. Just make sure the offset is OK. */ - if (unlikely (offset + sizeof (GElf_Nhdr) > data->d_size)) + if (unlikely (offset > data->d_size + || data->d_size - offset < sizeof (GElf_Nhdr))) { __libelf_seterrno (ELF_E_OFFSET_RANGE); offset = 0; @@ -72,16 +73,21 @@ gelf_getnote (data, offset, result, name_offset, desc_offset) const GElf_Nhdr *n = data->d_buf + offset; offset += sizeof *n; + /* Include padding. Check below for overflow. */ GElf_Word namesz = NOTE_ALIGN (n->n_namesz); GElf_Word descsz = NOTE_ALIGN (n->n_descsz); - if (unlikely (data->d_size - offset < namesz)) + if (unlikely (offset > data->d_size + || data->d_size - offset < namesz + || (namesz == 0 && n->n_namesz != 0))) offset = 0; else { *name_offset = offset; offset += namesz; - if (unlikely (data->d_size - offset < descsz)) + if (unlikely (offset > data->d_size + || data->d_size - offset < descsz + || (descsz == 0 && n->n_descsz != 0))) offset = 0; else { diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h index 8187e881..62c6f63d 100644 --- a/libelf/note_xlate.h +++ b/libelf/note_xlate.h @@ -1,5 +1,5 @@ /* Conversion functions for notes. - Copyright (C) 2007, 2009 Red Hat, Inc. + Copyright (C) 2007, 2009, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -56,4 +56,9 @@ elf_cvt_note (void *dest, const void *src, size_t len, int encode) src += namesz + descsz; dest += namesz + descsz; } + + /* Copy opver any leftover data unconcerted. Probably part of + truncated name/desc data. */ + if (unlikely (len > 0) && src != dest) + memcpy (dest, src, len); } diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h index 935f77ab..16eaa19c 100644 --- a/libelf/version_xlate.h +++ b/libelf/version_xlate.h @@ -61,7 +61,7 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) GElf_Verdaux *asrc; /* Test for correct offset. */ - if (def_offset + sizeof (GElf_Verdef) > len) + if (def_offset > len || len - def_offset < sizeof (GElf_Verdef)) return; /* Work the tree from the first record. */ @@ -90,7 +90,7 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) GElf_Verdaux *adest; /* Test for correct offset. */ - if (aux_offset + sizeof (GElf_Verdaux) > len) + if (aux_offset > len || len - aux_offset < sizeof (GElf_Verdaux)) return; adest = (GElf_Verdaux *) ((char *) dest + aux_offset); @@ -155,7 +155,7 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) GElf_Vernaux *asrc; /* Test for correct offset. */ - if (need_offset + sizeof (GElf_Verneed) > len) + if (need_offset > len || len - need_offset < sizeof (GElf_Verneed)) return; /* Work the tree from the first record. */ @@ -182,7 +182,7 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) GElf_Vernaux *adest; /* Test for correct offset. */ - if (aux_offset + sizeof (GElf_Vernaux) > len) + if (aux_offset > len || len - aux_offset < sizeof (GElf_Vernaux)) return; adest = (GElf_Vernaux *) ((char *) dest + aux_offset); diff --git a/m4/ChangeLog b/m4/ChangeLog index c950e54b..163ee734 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,8 @@ +2014-07-14 Mark Wielaard <[email protected]> + + * biarch.m4 (utrace_BIARCH): Set biarch-no for cross-compile using + AC_RUN_IFELSE extra argument. + 2013-12-02 Jan Kratochvil <[email protected]> * biarch.m4 (utrace_BIARCH): Call AC_MSG_WARN if !BIARCH. diff --git a/m4/biarch.m4 b/m4/biarch.m4 index 04c8dbab..c238d8d1 100644 --- a/m4/biarch.m4 +++ b/m4/biarch.m4 @@ -40,7 +40,7 @@ AC_CACHE_CHECK([whether $biarch_CC makes executables we can run], save_CC="$CC" CC="$biarch_CC" AC_RUN_IFELSE([AC_LANG_PROGRAM([], [])], - utrace_cv_cc_biarch=yes, utrace_cv_cc_biarch=no) + utrace_cv_cc_biarch=yes, utrace_cv_cc_biarch=no, utrace_cv_cc_biarch=no) CC="$save_CC"])], [utrace_cv_cc_biarch=no]) AS_IF([test $utrace_cv_cc_biarch != yes], [dnl AC_MSG_WARN([not running biarch tests, $biarch_CC does not work])])]) diff --git a/po/ChangeLog b/po/ChangeLog index bf660009..885cc587 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,11 @@ +2014-12-18 Mark Wielaard <[email protected]> + + * *.po: Update for 0.161. + +2014-08-25 Mark Wielaard <[email protected]> + + * *.po: Update for 0.160. + 2014-05-20 Mark Wielaard <[email protected]> * *.po: Regenerated. @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2014-05-20 10:15+0200\n" +"POT-Creation-Date: 2014-12-18 22:59+0100\n" "PO-Revision-Date: 2009-06-29 15:15+0200\n" "Last-Translator: Michael Münch <[email protected]>\n" "Language-Team: German\n" @@ -22,8 +22,8 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 0.3\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3084 -#: src/readelf.c:3433 src/readelf.c:8002 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3182 +#: src/readelf.c:3559 src/readelf.c:8285 src/unstrip.c:2127 src/unstrip.c:2335 #, c-format msgid "memory exhausted" msgstr "Kein Speicher mehr verfügbar" @@ -214,7 +214,12 @@ msgstr "ungültiger Abschnitt" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdw/dwarf_error.c:95 +#, fuzzy +msgid "invalid opcode" +msgstr "ungültiger Operand" + +#: libdwfl/argp-std.c:46 src/unstrip.c:2277 msgid "Input selection options:" msgstr "Eingabeauswahloptionen:" @@ -252,34 +257,24 @@ msgstr "Dateisuchpfad für separate Debug-Informationen" 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:177 -#, fuzzy -msgid "cannot attach to process" -msgstr "Kann Suchbaum nicht erstellen" - -#: libdwfl/argp-std.c:231 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "Konnte Kernel Symbole nicht laden" -#: libdwfl/argp-std.c:235 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "Konnte Kernel Module nicht finden" -#: libdwfl/argp-std.c:252 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "Konnte Kernel oder Module nicht finden" -#: libdwfl/argp-std.c:291 +#: libdwfl/argp-std.c:290 #, c-format msgid "cannot read ELF core file: %s" msgstr "Konnte ELF Kerndatei %s nicht lesen" -#: libdwfl/argp-std.c:307 -#, fuzzy -msgid "cannot attach to core" -msgstr "Kann Suchbaum nicht erstellen" - -#: libdwfl/argp-std.c:314 +#: libdwfl/argp-std.c:311 msgid "No modules recognized in core file" msgstr "Keine Module in der Kerndatei gefunden" @@ -441,6 +436,11 @@ msgstr "" msgid "Invalid argument" msgstr "ungültiger Parameter" +#: libdwfl/libdwflP.h:95 +#, fuzzy +msgid "Not an ET_CORE ELF file" +msgstr "Ungültige ELF Datei" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "Kein Backend" @@ -541,7 +541,7 @@ msgstr "ungültige Grösse des Quell-Operanden" msgid "invalid size of destination operand" msgstr "ungültige Grösse des Ziel-Operanden" -#: libelf/elf_error.c:87 src/readelf.c:5176 +#: libelf/elf_error.c:87 src/readelf.c:5367 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" @@ -624,8 +624,8 @@ msgstr "data/scn Unterschied" msgid "invalid section header" msgstr "ungültiger Abschnitts-Header" -#: libelf/elf_error.c:187 src/readelf.c:6966 src/readelf.c:7412 -#: src/readelf.c:7513 src/readelf.c:7675 +#: libelf/elf_error.c:187 src/readelf.c:7235 src/readelf.c:7683 +#: src/readelf.c:7784 src/readelf.c:7954 #, c-format msgid "invalid data" msgstr "Ungültige Daten" @@ -719,10 +719,10 @@ msgstr "" msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:235 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:663 src/elflint.c:235 #: src/findtextrel.c:162 src/ld.c:949 src/nm.c:265 src/objdump.c:181 #: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 -#: src/strip.c:213 src/unstrip.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -734,10 +734,10 @@ msgstr "" "GARANTIE,\n" "auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n" -#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:240 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:668 src/elflint.c:240 #: src/findtextrel.c:167 src/ld.c:954 src/nm.c:270 src/objdump.c:186 #: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 -#: src/strip.c:218 src/unstrip.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Geschrieben von %s.\n" @@ -1109,120 +1109,120 @@ msgstr "" msgid "cannot get symbol in '%s': %s" msgstr "" -#: src/elfcmp.c:372 +#: src/elfcmp.c:373 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "" -#: src/elfcmp.c:375 +#: src/elfcmp.c:376 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "" -#: src/elfcmp.c:421 src/elfcmp.c:490 +#: src/elfcmp.c:422 src/elfcmp.c:491 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "" -#: src/elfcmp.c:429 +#: src/elfcmp.c:430 #, fuzzy, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfcmp.c:439 +#: src/elfcmp.c:440 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "" -#: src/elfcmp.c:447 +#: src/elfcmp.c:448 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "" -#: src/elfcmp.c:462 +#: src/elfcmp.c:463 #, c-format msgid "%s %s differ: build ID length" msgstr "" -#: src/elfcmp.c:470 +#: src/elfcmp.c:471 #, c-format msgid "%s %s differ: build ID content" msgstr "" -#: src/elfcmp.c:479 +#: src/elfcmp.c:480 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "" -#: src/elfcmp.c:519 +#: src/elfcmp.c:520 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "" -#: src/elfcmp.c:523 +#: src/elfcmp.c:524 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "" -#: src/elfcmp.c:538 +#: src/elfcmp.c:539 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "" -#: src/elfcmp.c:571 src/elfcmp.c:576 +#: src/elfcmp.c:572 src/elfcmp.c:577 #, c-format msgid "cannot load data of '%s': %s" msgstr "" -#: src/elfcmp.c:595 src/elfcmp.c:601 +#: src/elfcmp.c:596 src/elfcmp.c:602 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "" -#: src/elfcmp.c:607 +#: src/elfcmp.c:608 #, c-format msgid "%s %s differ: program header %d" msgstr "" -#: src/elfcmp.c:631 +#: src/elfcmp.c:632 #, c-format msgid "%s %s differ: gap" msgstr "" -#: src/elfcmp.c:694 +#: src/elfcmp.c:695 #, c-format msgid "Invalid value '%s' for --gaps parameter." msgstr "" -#: src/elfcmp.c:722 src/findtextrel.c:221 src/ldgeneric.c:1757 +#: src/elfcmp.c:723 src/findtextrel.c:221 src/ldgeneric.c:1757 #: src/ldgeneric.c:4247 src/nm.c:381 src/ranlib.c:161 src/size.c:293 -#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1923 +#: src/unstrip.c:1952 #, c-format msgid "cannot open '%s'" msgstr "'%s' kann nicht geöffnet werden" -#: src/elfcmp.c:726 src/findtextrel.c:228 src/ranlib.c:178 +#: src/elfcmp.c:727 src/findtextrel.c:228 src/ranlib.c:178 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "" -#: src/elfcmp.c:731 +#: src/elfcmp.c:732 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "" -#: src/elfcmp.c:749 +#: src/elfcmp.c:750 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "" -#: src/elfcmp.c:759 +#: src/elfcmp.c:760 #, c-format msgid "cannot get content of section %zu: %s" msgstr "" -#: src/elfcmp.c:769 src/elfcmp.c:783 +#: src/elfcmp.c:770 src/elfcmp.c:784 #, c-format msgid "cannot get relocation: %s" msgstr "" @@ -1414,14 +1414,14 @@ msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" -#: src/elflint.c:590 src/elflint.c:1450 src/elflint.c:1501 src/elflint.c:1607 -#: src/elflint.c:1932 src/elflint.c:2221 src/elflint.c:2735 src/elflint.c:2897 -#: src/elflint.c:3027 src/elflint.c:3199 src/elflint.c:4101 +#: src/elflint.c:590 src/elflint.c:1457 src/elflint.c:1508 src/elflint.c:1614 +#: src/elflint.c:1939 src/elflint.c:2228 src/elflint.c:2742 src/elflint.c:2904 +#: src/elflint.c:3034 src/elflint.c:3206 src/elflint.c:4108 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "" -#: src/elflint.c:603 src/elflint.c:1614 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1517,1328 +1517,1328 @@ msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "" -#: src/elflint.c:797 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "" -#: src/elflint.c:803 src/elflint.c:828 src/elflint.c:871 +#: src/elflint.c:810 src/elflint.c:835 src/elflint.c:878 #, c-format msgid "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:812 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " "SHF_TLS flag set\n" msgstr "" -#: src/elflint.c:822 src/elflint.c:864 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:849 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" msgstr "" -#: src/elflint.c:857 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:884 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " "sh_info\n" msgstr "" -#: src/elflint.c:891 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " "sh_info\n" msgstr "" -#: src/elflint.c:898 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "" -#: src/elflint.c:948 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " "[%2d]\n" msgstr "" -#: src/elflint.c:955 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:971 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not " "match %s section address %#<PRIx64>\n" msgstr "" -#: src/elflint.c:978 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not " "match %s section size %<PRIu64>\n" msgstr "" -#: src/elflint.c:986 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " "section\n" msgstr "" -#: src/elflint.c:1002 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic " "segment address %#<PRIx64>\n" msgstr "" -#: src/elflint.c:1009 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic " "segment size %<PRIu64>\n" msgstr "" -#: src/elflint.c:1022 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" "default visibility\n" msgstr "" -#: src/elflint.c:1026 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "" -#: src/elflint.c:1075 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "" -#: src/elflint.c:1086 src/elflint.c:1138 +#: src/elflint.c:1093 src/elflint.c:1145 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" -#: src/elflint.c:1111 src/elflint.c:1163 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " "DT_RELCOUNT\n" msgstr "" -#: src/elflint.c:1117 src/elflint.c:1169 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " "specified %d relative relocations\n" msgstr "" -#: src/elflint.c:1129 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "" -#: src/elflint.c:1211 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "" -#: src/elflint.c:1223 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "" -#: src/elflint.c:1231 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "" -#: src/elflint.c:1238 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "" -#: src/elflint.c:1246 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" -#: src/elflint.c:1306 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" -#: src/elflint.c:1333 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "" -#: src/elflint.c:1341 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " "type\n" msgstr "" -#: src/elflint.c:1349 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" -#: src/elflint.c:1367 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " "be used with %s\n" msgstr "" -#: src/elflint.c:1384 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "" -#: src/elflint.c:1399 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " "%s\n" msgstr "" -#: src/elflint.c:1420 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " "relocation flag not set\n" msgstr "" -#: src/elflint.c:1435 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" -#: src/elflint.c:1475 src/elflint.c:1526 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1602 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1621 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1626 src/elflint.c:1911 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1636 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1644 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1651 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1662 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1672 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1690 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" msgstr "" -#: src/elflint.c:1703 +#: src/elflint.c:1710 #, 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:1746 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1761 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:1781 src/elflint.c:1809 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "" -#: src/elflint.c:1793 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1802 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1817 src/elflint.c:1824 +#: src/elflint.c:1824 src/elflint.c:1831 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "" -#: src/elflint.c:1834 src/elflint.c:1838 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" -#: src/elflint.c:1844 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1855 src/elflint.c:1859 src/elflint.c:1863 src/elflint.c:1867 +#: src/elflint.c:1862 src/elflint.c:1866 src/elflint.c:1870 src/elflint.c:1874 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" -#: src/elflint.c:1879 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1889 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1894 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1897 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1906 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1921 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " "same symbol table\n" msgstr "" -#: src/elflint.c:1938 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:1950 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:1955 +#: src/elflint.c:1962 #, c-format msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:1971 src/elflint.c:2022 +#: src/elflint.c:1978 src/elflint.c:2029 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" msgstr "" -#: src/elflint.c:1983 src/elflint.c:2034 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:1997 src/elflint.c:2048 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2007 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2058 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n" msgstr "" -#: src/elflint.c:2074 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "" -#: src/elflint.c:2085 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " "least %ld)\n" msgstr "" -#: src/elflint.c:2093 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2125 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" msgstr "" -#: src/elflint.c:2146 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " "undefined\n" msgstr "" -#: src/elflint.c:2157 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" msgstr "" -#: src/elflint.c:2188 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2193 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2199 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2212 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2230 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2238 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2243 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2248 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " "entries\n" msgstr "" -#: src/elflint.c:2296 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2374 src/elflint.c:2378 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2385 +#: src/elflint.c:2392 #, 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:2397 +#: src/elflint.c:2404 #, 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:2413 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2433 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2444 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2449 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2455 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2460 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2467 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2472 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "" -#: src/elflint.c:2478 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2484 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2493 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2498 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2504 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2508 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2519 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2531 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "" -#: src/elflint.c:2540 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2547 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2553 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " "SHF_GROUP flag set\n" msgstr "" -#: src/elflint.c:2560 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2749 +#: src/elflint.c:2756 #, 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:2761 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:2777 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:2793 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:2801 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:2815 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:2820 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:2830 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:2882 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:2890 src/elflint.c:3019 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "" -#: src/elflint.c:2913 src/elflint.c:3071 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "" -#: src/elflint.c:2919 src/elflint.c:3077 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" -#: src/elflint.c:2927 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:2935 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:2947 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:2954 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " "reference\n" msgstr "" -#: src/elflint.c:2961 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " "%#x, expected %#x\n" msgstr "" -#: src/elflint.c:2971 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " "name '%s'\n" msgstr "" -#: src/elflint.c:2982 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" -#: src/elflint.c:2998 src/elflint.c:3156 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" -#: src/elflint.c:3011 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3056 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3060 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3066 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3090 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3097 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3106 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3125 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3140 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3162 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3178 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3191 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3212 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3228 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3237 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3249 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3266 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3275 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3284 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3297 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" -#: src/elflint.c:3308 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3326 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3337 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3350 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3354 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" msgstr "" -#: src/elflint.c:3364 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3370 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3459 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3463 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3465 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3467 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3469 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3471 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3473 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3475 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3478 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" msgstr "" -#: src/elflint.c:3482 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" msgstr "" -#: src/elflint.c:3486 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" msgstr "" -#: src/elflint.c:3503 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3512 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3539 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3555 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3572 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" -#: src/elflint.c:3590 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3596 src/elflint.c:3628 +#: src/elflint.c:3603 src/elflint.c:3635 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" -#: src/elflint.c:3601 src/elflint.c:3633 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " "segments\n" msgstr "" -#: src/elflint.c:3609 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3652 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3657 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3667 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3681 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3688 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3696 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3704 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3709 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:3716 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:3721 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:3739 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:3748 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:3777 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " "%d\n" msgstr "" -#: src/elflint.c:3785 +#: src/elflint.c:3792 #, 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:3794 +#: src/elflint.c:3801 #, 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:3805 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:3815 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:3825 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" -#: src/elflint.c:3831 +#: src/elflint.c:3838 #, 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:3839 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:3890 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:3913 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:3924 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:3930 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:3941 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" msgstr "" -#: src/elflint.c:3954 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:3968 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:4017 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" -#: src/elflint.c:4021 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n" msgstr "" -#: src/elflint.c:4044 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" -#: src/elflint.c:4048 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" -#: src/elflint.c:4065 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4084 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4087 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4108 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4115 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4118 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4136 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4151 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4160 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" -#: src/elflint.c:4171 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4179 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4186 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4200 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4203 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4213 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4234 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4237 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4245 src/elflint.c:4268 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4274 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4298 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4301 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4314 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4322 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4325 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4329 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4332 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4337 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4340 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4351 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4358 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4361 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4374 +#: src/elflint.c:4381 #, 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:4408 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4434 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -2894,52 +2894,57 @@ msgstr "" msgid "while reading ELF file" msgstr "" -#: src/findtextrel.c:334 src/findtextrel.c:351 -#, c-format -msgid "cannot get program header index at offset %d: %s" -msgstr "" +#: src/findtextrel.c:329 +#, fuzzy, c-format +msgid "cannot get program header count: %s" +msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/findtextrel.c:403 +#: src/findtextrel.c:340 src/findtextrel.c:357 +#, fuzzy, c-format +msgid "cannot get program header index at offset %zd: %s" +msgstr "konnte Programm-Kopf nicht erstellen: %s" + +#: src/findtextrel.c:409 #, c-format msgid "cannot get section header of section %Zu: %s" msgstr "" -#: src/findtextrel.c:415 +#: src/findtextrel.c:421 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:435 src/findtextrel.c:458 +#: src/findtextrel.c:441 src/findtextrel.c:464 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:523 +#: src/findtextrel.c:529 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:576 +#: src/findtextrel.c:582 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:583 src/findtextrel.c:603 +#: src/findtextrel.c:589 src/findtextrel.c:609 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" -#: src/findtextrel.c:591 +#: src/findtextrel.c:597 #, 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:611 +#: src/findtextrel.c:617 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3347,7 +3352,7 @@ msgid "Warning: size of `%s' changed from %<PRIu64> in %s to %<PRIu64> in %s" msgstr "" #: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 -#: src/readelf.c:829 src/strip.c:563 +#: src/readelf.c:829 src/strip.c:568 #, c-format msgid "cannot determine number of sections: %s" msgstr "" @@ -3578,7 +3583,7 @@ msgstr "" msgid "cannot get header of 0th section: %s" msgstr "" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1822 #, c-format msgid "cannot update ELF header: %s" msgstr "" @@ -3746,7 +3751,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: INTERNER FEHLER %d (%s-%s): %s" #: src/nm.c:398 src/nm.c:410 src/size.c:309 src/size.c:318 src/size.c:329 -#: src/strip.c:2155 +#: src/strip.c:2160 #, c-format msgid "while closing '%s'" msgstr "beim Schliessen von '%s'" @@ -3790,12 +3795,12 @@ msgstr "%s%s%s: Dateiformat nicht erkannt" msgid "cannot create search tree" msgstr "Kann Suchbaum nicht erstellen" -#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 src/readelf.c:536 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:793 src/readelf.c:536 #: src/readelf.c:1085 src/readelf.c:1245 src/readelf.c:1393 src/readelf.c:1579 -#: src/readelf.c:1785 src/readelf.c:1972 src/readelf.c:2182 src/readelf.c:2440 -#: src/readelf.c:2510 src/readelf.c:2592 src/readelf.c:3103 src/readelf.c:3139 -#: src/readelf.c:3202 src/readelf.c:7906 src/readelf.c:8986 src/readelf.c:9133 -#: src/readelf.c:9201 src/size.c:417 src/size.c:487 src/strip.c:503 +#: src/readelf.c:1785 src/readelf.c:1975 src/readelf.c:2202 src/readelf.c:2460 +#: src/readelf.c:2536 src/readelf.c:2623 src/readelf.c:3201 src/readelf.c:3237 +#: src/readelf.c:3300 src/readelf.c:8187 src/readelf.c:9273 src/readelf.c:9420 +#: src/readelf.c:9488 src/size.c:417 src/size.c:486 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "" @@ -3878,15 +3883,15 @@ msgstr "Keine Operation angegeben.\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2055 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2072 msgid "INVALID SYMBOL" msgstr "" -#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2088 +#: src/objdump.c:394 src/readelf.c:1914 src/readelf.c:2108 msgid "INVALID SECTION" msgstr "" -#: src/objdump.c:510 +#: src/objdump.c:514 #, c-format msgid "" "\n" @@ -3894,21 +3899,21 @@ msgid "" "%-*s TYPE VALUE\n" msgstr "" -#: src/objdump.c:513 +#: src/objdump.c:517 msgid "OFFSET" msgstr "OFFSET" -#: src/objdump.c:576 +#: src/objdump.c:582 #, c-format msgid "Contents of section %s:\n" msgstr "Inhalt des Abschnitts %s:\n" -#: src/objdump.c:697 +#: src/objdump.c:703 #, c-format msgid "cannot disassemble" msgstr "Disassemblieren nicht möglich" -#: src/objdump.c:736 +#: src/objdump.c:742 #, fuzzy, c-format msgid "cannot allocate memory" msgstr "konnte Verzeichnis nicht erstellen: %s" @@ -4062,11 +4067,11 @@ msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" msgid "cannot get section: %s" msgstr "" -#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9153 -#: src/unstrip.c:345 src/unstrip.c:376 src/unstrip.c:425 src/unstrip.c:533 -#: src/unstrip.c:550 src/unstrip.c:586 src/unstrip.c:784 src/unstrip.c:1052 -#: src/unstrip.c:1242 src/unstrip.c:1302 src/unstrip.c:1423 src/unstrip.c:1476 -#: src/unstrip.c:1583 src/unstrip.c:1772 +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9440 +#: src/unstrip.c:356 src/unstrip.c:387 src/unstrip.c:436 src/unstrip.c:544 +#: src/unstrip.c:561 src/unstrip.c:597 src/unstrip.c:795 src/unstrip.c:1063 +#: src/unstrip.c:1254 src/unstrip.c:1314 src/unstrip.c:1435 src/unstrip.c:1488 +#: src/unstrip.c:1595 src/unstrip.c:1784 #, c-format msgid "cannot get section header: %s" msgstr "" @@ -4076,8 +4081,8 @@ msgstr "" msgid "cannot get section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:571 src/readelf.c:5207 src/readelf.c:7400 src/readelf.c:7502 -#: src/readelf.c:7660 +#: src/readelf.c:571 src/readelf.c:5398 src/readelf.c:7671 src/readelf.c:7773 +#: src/readelf.c:7939 #, c-format msgid "cannot get %s content: %s" msgstr "" @@ -4359,7 +4364,7 @@ msgid "" " Segment Sections..." msgstr "" -#: src/readelf.c:1258 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1843 src/unstrip.c:1886 src/unstrip.c:1893 #, c-format msgid "cannot get program header: %s" msgstr "" @@ -4394,8 +4399,8 @@ msgstr "" msgid "<INVALID SECTION>" msgstr "" -#: src/readelf.c:1585 src/readelf.c:2188 src/readelf.c:2446 src/readelf.c:2516 -#: src/readelf.c:2798 src/readelf.c:2871 src/readelf.c:4474 +#: src/readelf.c:1585 src/readelf.c:2208 src/readelf.c:2466 src/readelf.c:2542 +#: src/readelf.c:2846 src/readelf.c:2920 src/readelf.c:4610 #, fuzzy, c-format msgid "invalid sh_link value in section %Zu" msgstr "ungültige .debug_line Sektion" @@ -4442,14 +4447,14 @@ msgstr "" msgid "%<PRId64> (bytes)\n" msgstr "" -#: src/readelf.c:1770 src/readelf.c:1957 +#: src/readelf.c:1770 src/readelf.c:1960 #, c-format msgid "" "\n" "Invalid symbol table at offset %#0<PRIx64>\n" msgstr "" -#: src/readelf.c:1788 src/readelf.c:1974 +#: src/readelf.c:1788 src/readelf.c:1978 #, c-format msgid "" "\n" @@ -4462,7 +4467,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1803 +#: src/readelf.c:1803 src/readelf.c:1993 #, c-format msgid "" "\n" @@ -4481,21 +4486,21 @@ msgstr "" msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 -#: src/readelf.c:1922 src/readelf.c:2042 src/readelf.c:2054 src/readelf.c:2068 -#: src/readelf.c:2087 src/readelf.c:2100 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1913 +#: src/readelf.c:1925 src/readelf.c:2059 src/readelf.c:2071 src/readelf.c:2085 +#: src/readelf.c:2107 src/readelf.c:2120 msgid "<INVALID RELOC>" msgstr "" -#: src/readelf.c:1986 +#: src/readelf.c:2003 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:1988 +#: src/readelf.c:2005 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2196 +#: src/readelf.c:2216 #, c-format msgid "" "\n" @@ -4506,40 +4511,40 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2201 +#: src/readelf.c:2221 #, 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:2209 +#: src/readelf.c:2229 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2211 +#: src/readelf.c:2231 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2231 +#: src/readelf.c:2251 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2319 +#: src/readelf.c:2339 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2401 +#: src/readelf.c:2421 msgid "none" msgstr "keine" -#: src/readelf.c:2418 +#: src/readelf.c:2438 msgid "| <unknown>" msgstr "| <unbekannt>" -#: src/readelf.c:2449 +#: src/readelf.c:2469 #, c-format msgid "" "\n" @@ -4552,17 +4557,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2470 +#: src/readelf.c:2490 #, fuzzy, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n" -#: src/readelf.c:2483 +#: src/readelf.c:2503 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2520 +#: src/readelf.c:2546 #, c-format msgid "" "\n" @@ -4575,17 +4580,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2548 +#: src/readelf.c:2574 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2563 +#: src/readelf.c:2589 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" -#: src/readelf.c:2802 +#: src/readelf.c:2850 #, c-format msgid "" "\n" @@ -4598,15 +4603,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2830 +#: src/readelf.c:2878 msgid " 0 *local* " msgstr " 0 *lokal* " -#: src/readelf.c:2835 +#: src/readelf.c:2883 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:2876 +#: src/readelf.c:2925 #, c-format msgid "" "\n" @@ -4621,41 +4626,56 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2898 +#: src/readelf.c:2947 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:2900 +#: src/readelf.c:2949 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:2907 +#: src/readelf.c:2956 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:2920 +#: src/readelf.c:2969 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" msgstr "" -#: src/readelf.c:2938 src/readelf.c:2980 src/readelf.c:3021 +#: src/readelf.c:2987 src/readelf.c:3042 src/readelf.c:3098 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:3075 +#: src/readelf.c:2995 +#, fuzzy, c-format +msgid "invalid data in sysv.hash section %d" +msgstr "ungültige .debug_line Sektion" + +#: src/readelf.c:3050 +#, fuzzy, c-format +msgid "invalid data in sysv.hash64 section %d" +msgstr "ungültige .debug_line Sektion" + +#: src/readelf.c:3106 +#, fuzzy, c-format +msgid "invalid data in gnu.hash section %d" +msgstr "ungültige .debug_line Sektion" + +#: src/readelf.c:3173 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:3150 +#: src/readelf.c:3248 #, c-format msgid "" "\n" @@ -4666,13 +4686,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3164 +#: src/readelf.c:3262 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:3214 +#: src/readelf.c:3312 #, c-format msgid "" "\n" @@ -4680,140 +4700,140 @@ msgid "" "%#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:3230 +#: src/readelf.c:3329 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3256 +#: src/readelf.c:3358 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" -#: src/readelf.c:3288 +#: src/readelf.c:3397 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" -#: src/readelf.c:3293 +#: src/readelf.c:3402 #, c-format msgid " File: %11<PRIu32>\n" msgstr " File: %11<PRIu32>\n" -#: src/readelf.c:3328 +#: src/readelf.c:3451 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3331 +#: src/readelf.c:3454 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3334 +#: src/readelf.c:3457 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3341 +#: src/readelf.c:3467 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3344 +#: src/readelf.c:3470 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3389 +#: src/readelf.c:3515 #, c-format msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3392 +#: src/readelf.c:3518 #, c-format msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3397 +#: src/readelf.c:3523 #, c-format msgid "%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3400 +#: src/readelf.c:3526 #, c-format msgid "%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3406 +#: src/readelf.c:3532 #, c-format msgid "%s+%#<PRIx64> <%s>" msgstr "%s+%#<PRIx64> <%s>" -#: src/readelf.c:3409 +#: src/readelf.c:3535 #, c-format msgid "%s+%#0*<PRIx64> <%s>" msgstr "%s+%#0*<PRIx64> <%s>" -#: src/readelf.c:3413 +#: src/readelf.c:3539 #, c-format msgid "%#<PRIx64> <%s>" msgstr "%#<PRIx64> <%s>" -#: src/readelf.c:3416 +#: src/readelf.c:3542 #, c-format msgid "%#0*<PRIx64> <%s>" msgstr "%#0*<PRIx64> <%s>" -#: src/readelf.c:3421 +#: src/readelf.c:3547 #, c-format msgid "%s+%#<PRIx64>" msgstr "%s+%#<PRIx64>" -#: src/readelf.c:3424 +#: src/readelf.c:3550 #, c-format msgid "%s+%#0*<PRIx64>" msgstr "%s+%#0*<PRIx64>" -#: src/readelf.c:3806 +#: src/readelf.c:3932 msgid "empty block" msgstr "" -#: src/readelf.c:3809 +#: src/readelf.c:3935 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:4203 +#: src/readelf.c:4332 #, c-format msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" msgstr "" -#: src/readelf.c:4260 +#: src/readelf.c:4389 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "" -#: src/readelf.c:4267 +#: src/readelf.c:4396 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "" -#: src/readelf.c:4274 +#: src/readelf.c:4403 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "" -#: src/readelf.c:4356 +#: src/readelf.c:4492 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr "" -#: src/readelf.c:4364 +#: src/readelf.c:4500 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr "" -#: src/readelf.c:4390 +#: src/readelf.c:4526 #, c-format msgid "" "\n" @@ -4821,37 +4841,37 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:4398 +#: src/readelf.c:4534 #, c-format msgid "" "\n" "Abbreviation section at offset %<PRIu64>:\n" msgstr "" -#: src/readelf.c:4411 +#: src/readelf.c:4547 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:4427 +#: src/readelf.c:4563 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "yes" msgstr "ja" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "no" msgstr "nein" -#: src/readelf.c:4464 src/readelf.c:4537 +#: src/readelf.c:4600 src/readelf.c:4673 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:4479 +#: src/readelf.c:4615 #, c-format msgid "" "\n" @@ -4862,189 +4882,193 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:4510 +#: src/readelf.c:4646 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4512 +#: src/readelf.c:4648 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" msgstr "" -#: src/readelf.c:4542 src/readelf.c:4696 src/readelf.c:5217 src/readelf.c:6131 -#: src/readelf.c:6632 src/readelf.c:6752 src/readelf.c:6908 src/readelf.c:7331 +#: src/readelf.c:4678 src/readelf.c:4832 src/readelf.c:5408 src/readelf.c:6362 +#: src/readelf.c:6894 src/readelf.c:7014 src/readelf.c:7177 src/readelf.c:7602 #, c-format msgid "" "\n" "DWARF section [%2zu] '%s' at offset %#<PRIx64>:\n" msgstr "" -#: src/readelf.c:4555 src/readelf.c:6157 +#: src/readelf.c:4691 src/readelf.c:6388 #, c-format msgid "" "\n" "Table at offset %Zu:\n" msgstr "" -#: src/readelf.c:4559 src/readelf.c:5241 src/readelf.c:6166 +#: src/readelf.c:4695 src/readelf.c:5432 src/readelf.c:6399 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:4575 +#: src/readelf.c:4711 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4587 +#: src/readelf.c:4723 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4591 +#: src/readelf.c:4727 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:4602 +#: src/readelf.c:4738 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4608 +#: src/readelf.c:4744 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr "" -#: src/readelf.c:4612 +#: src/readelf.c:4748 #, fuzzy, c-format msgid "unsupported address size" msgstr "Kein Adress-Wert" -#: src/readelf.c:4617 +#: src/readelf.c:4753 #, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr "" -#: src/readelf.c:4621 +#: src/readelf.c:4757 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:4661 +#: src/readelf.c:4797 #, fuzzy, c-format msgid " %s..%s (%<PRIx64>)\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4664 +#: src/readelf.c:4800 #, fuzzy, c-format msgid " %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4673 +#: src/readelf.c:4809 #, c-format msgid " %Zu padding bytes\n" msgstr "" -#: src/readelf.c:4691 +#: src/readelf.c:4827 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "" -#: src/readelf.c:4721 src/readelf.c:6659 +#: src/readelf.c:4857 src/readelf.c:6921 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr "" -#: src/readelf.c:4743 src/readelf.c:6681 +#: src/readelf.c:4879 src/readelf.c:6943 #, c-format msgid " [%6tx] base address %s\n" msgstr "" -#: src/readelf.c:4750 src/readelf.c:6688 +#: src/readelf.c:4886 src/readelf.c:6950 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4761 +#: src/readelf.c:4897 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4763 +#: src/readelf.c:4899 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:5196 +#: src/readelf.c:5078 +msgid " <INVALID DATA>\n" +msgstr "" + +#: src/readelf.c:5387 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:5213 +#: src/readelf.c:5404 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#<PRIx64>:\n" msgstr "" -#: src/readelf.c:5263 +#: src/readelf.c:5454 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:5348 +#: src/readelf.c:5547 src/readelf.c:5702 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:5360 +#: src/readelf.c:5562 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:5366 +#: src/readelf.c:5568 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:5477 +#: src/readelf.c:5679 #, c-format msgid " (offset: %#<PRIx64>)" msgstr "" -#: src/readelf.c:5484 +#: src/readelf.c:5686 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr "" -#: src/readelf.c:5511 +#: src/readelf.c:5723 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr "" -#: src/readelf.c:5563 +#: src/readelf.c:5778 #, c-format msgid "cannot get attribute code: %s" msgstr "" -#: src/readelf.c:5572 +#: src/readelf.c:5787 #, c-format msgid "cannot get attribute form: %s" msgstr "" -#: src/readelf.c:5587 +#: src/readelf.c:5802 #, c-format msgid "cannot get attribute value: %s" msgstr "" -#: src/readelf.c:5880 +#: src/readelf.c:6101 #, c-format msgid "" "\n" @@ -5052,7 +5076,7 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:5912 +#: src/readelf.c:6133 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5061,7 +5085,7 @@ msgid "" " Type signature: %#<PRIx64>, Type offset: %#<PRIx64>\n" msgstr "" -#: src/readelf.c:5921 +#: src/readelf.c:6142 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5069,32 +5093,32 @@ msgid "" "%<PRIu8>, Offset size: %<PRIu8>\n" msgstr "" -#: src/readelf.c:5946 +#: src/readelf.c:6167 #, c-format msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s" msgstr "" -#: src/readelf.c:5960 +#: src/readelf.c:6181 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:5969 +#: src/readelf.c:6190 #, c-format msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s" msgstr "" -#: src/readelf.c:6001 +#: src/readelf.c:6222 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:6009 +#: src/readelf.c:6230 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:6045 +#: src/readelf.c:6266 #, c-format msgid "" "\n" @@ -5102,12 +5126,12 @@ msgid "" "\n" msgstr "" -#: src/readelf.c:6144 +#: src/readelf.c:6375 #, c-format msgid "cannot get line data section data: %s" msgstr "" -#: src/readelf.c:6212 +#: src/readelf.c:6445 #, c-format msgid "" "\n" @@ -5124,239 +5148,249 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:6233 +#: src/readelf.c:6466 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:6248 +#: src/readelf.c:6481 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:6256 +#: src/readelf.c:6489 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:6272 +#: src/readelf.c:6505 msgid "" "\n" "File name table:\n" " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:6301 +#: src/readelf.c:6540 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:6377 +#: src/readelf.c:6591 +#, c-format +msgid "invalid maximum operations per instruction is zero" +msgstr "" + +#: src/readelf.c:6627 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:6382 +#: src/readelf.c:6632 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr "" -#: src/readelf.c:6402 +#: src/readelf.c:6652 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:6407 +#: src/readelf.c:6657 msgid " end of sequence" msgstr "" -#: src/readelf.c:6424 +#: src/readelf.c:6676 #, c-format msgid " set address to %s\n" msgstr "" -#: src/readelf.c:6445 +#: src/readelf.c:6703 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" -#: src/readelf.c:6458 +#: src/readelf.c:6716 #, c-format msgid " set discriminator to %u\n" msgstr "" -#: src/readelf.c:6463 +#: src/readelf.c:6721 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" -#: src/readelf.c:6475 +#: src/readelf.c:6733 msgid " copy" msgstr "" -#: src/readelf.c:6486 +#: src/readelf.c:6744 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr "" -#: src/readelf.c:6490 +#: src/readelf.c:6748 #, c-format msgid " advance address by %u to %s\n" msgstr "" -#: src/readelf.c:6501 +#: src/readelf.c:6759 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr "" -#: src/readelf.c:6509 +#: src/readelf.c:6767 #, c-format msgid " set file to %<PRIu64>\n" msgstr "" -#: src/readelf.c:6519 +#: src/readelf.c:6777 #, c-format msgid " set column to %<PRIu64>\n" msgstr "" -#: src/readelf.c:6526 +#: src/readelf.c:6784 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr "" -#: src/readelf.c:6532 +#: src/readelf.c:6790 msgid " set basic block flag" msgstr "" -#: src/readelf.c:6541 +#: src/readelf.c:6803 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr "" -#: src/readelf.c:6545 +#: src/readelf.c:6807 #, c-format msgid " advance address by constant %u to %s\n" msgstr "" -#: src/readelf.c:6563 +#: src/readelf.c:6825 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr "" -#: src/readelf.c:6572 +#: src/readelf.c:6834 msgid " set prologue end flag" msgstr "" -#: src/readelf.c:6577 +#: src/readelf.c:6839 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:6586 +#: src/readelf.c:6848 #, c-format msgid " set isa to %u\n" msgstr "" -#: src/readelf.c:6595 +#: src/readelf.c:6857 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:6627 +#: src/readelf.c:6889 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:6702 +#: src/readelf.c:6964 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6704 +#: src/readelf.c:6966 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6711 +#: src/readelf.c:6973 src/readelf.c:7858 msgid " <INVALID DATA>\n" msgstr "" -#: src/readelf.c:6763 src/readelf.c:6917 +#: src/readelf.c:7025 src/readelf.c:7186 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:6842 +#: src/readelf.c:7104 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:6958 +#: src/readelf.c:7127 +#, c-format +msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" +msgstr "" + +#: src/readelf.c:7227 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:6970 +#: src/readelf.c:7239 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:6976 src/readelf.c:7689 +#: src/readelf.c:7245 src/readelf.c:7968 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6983 +#: src/readelf.c:7252 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:6986 +#: src/readelf.c:7255 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr "" -#: src/readelf.c:6994 +#: src/readelf.c:7263 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr "" -#: src/readelf.c:7007 +#: src/readelf.c:7276 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr "" -#: src/readelf.c:7014 +#: src/readelf.c:7283 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:7026 +#: src/readelf.c:7295 #, c-format msgid " %<PRIu8> arguments:" msgstr "" -#: src/readelf.c:7054 +#: src/readelf.c:7323 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:7289 +#: src/readelf.c:7560 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:7317 +#: src/readelf.c:7588 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" -#: src/readelf.c:7358 +#: src/readelf.c:7629 #, c-format msgid "" "\n" @@ -5364,47 +5398,47 @@ msgid "" " %*s String\n" msgstr "" -#: src/readelf.c:7372 +#: src/readelf.c:7643 #, c-format msgid " *** error while reading strings: %s\n" msgstr "" -#: src/readelf.c:7392 +#: src/readelf.c:7663 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:7494 +#: src/readelf.c:7765 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:7517 +#: src/readelf.c:7788 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:7529 +#: src/readelf.c:7800 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:7543 +#: src/readelf.c:7815 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:7556 +#: src/readelf.c:7828 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:7570 +#: src/readelf.c:7842 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5413,193 +5447,193 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:7630 +#: src/readelf.c:7909 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:7651 +#: src/readelf.c:7930 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %#<PRIx64> contains %<PRId64> bytes :\n" msgstr "" -#: src/readelf.c:7680 +#: src/readelf.c:7959 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:7698 +#: src/readelf.c:7977 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:7705 +#: src/readelf.c:7984 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:7712 +#: src/readelf.c:7991 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:7719 +#: src/readelf.c:7998 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:7726 +#: src/readelf.c:8005 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr "" -#: src/readelf.c:7733 +#: src/readelf.c:8012 #, c-format msgid "" "\n" " CU list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:7755 +#: src/readelf.c:8034 #, c-format msgid "" "\n" " TU list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:7781 +#: src/readelf.c:8060 #, c-format msgid "" "\n" " Address list at offset %#<PRIx32> contains %zu entries:\n" msgstr "" -#: src/readelf.c:7810 +#: src/readelf.c:8089 #, c-format msgid "" "\n" " Symbol table at offset %#<PRIx32> contains %zu slots:\n" msgstr "" -#: src/readelf.c:7895 +#: src/readelf.c:8176 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:8053 src/readelf.c:8659 src/readelf.c:8770 src/readelf.c:8828 +#: src/readelf.c:8336 src/readelf.c:8942 src/readelf.c:9053 src/readelf.c:9111 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:8400 +#: src/readelf.c:8683 #, c-format msgid "" "\n" "%*s... <repeats %u more times> ..." msgstr "" -#: src/readelf.c:8903 +#: src/readelf.c:9190 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:8921 +#: src/readelf.c:9208 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr "" -#: src/readelf.c:8971 +#: src/readelf.c:9258 #, c-format msgid "cannot get content of note section: %s" msgstr "" -#: src/readelf.c:8998 +#: src/readelf.c:9285 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:9021 +#: src/readelf.c:9308 #, c-format msgid "" "\n" "Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:9067 +#: src/readelf.c:9354 #, c-format msgid "" "\n" "Section [%Zu] '%s' has no data to dump.\n" msgstr "" -#: src/readelf.c:9073 src/readelf.c:9096 +#: src/readelf.c:9360 src/readelf.c:9383 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "" -#: src/readelf.c:9077 +#: src/readelf.c:9364 #, c-format msgid "" "\n" "Hex dump of section [%Zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:9090 +#: src/readelf.c:9377 #, c-format msgid "" "\n" "Section [%Zu] '%s' has no strings to dump.\n" msgstr "" -#: src/readelf.c:9100 +#: src/readelf.c:9387 #, c-format msgid "" "\n" "String section [%Zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n" msgstr "" -#: src/readelf.c:9148 +#: src/readelf.c:9435 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:9177 +#: src/readelf.c:9464 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:9234 +#: src/readelf.c:9521 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:9237 +#: src/readelf.c:9524 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:9241 +#: src/readelf.c:9528 #, c-format msgid "" "\n" "Index of archive '%s' has %Zu entries:\n" msgstr "" -#: src/readelf.c:9259 +#: src/readelf.c:9546 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "" -#: src/readelf.c:9264 +#: src/readelf.c:9551 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -5661,12 +5695,12 @@ msgstr "" msgid "%s: file format not recognized" msgstr "" -#: src/size.c:438 src/size.c:571 +#: src/size.c:437 src/size.c:570 #, c-format msgid " (ex %s)" msgstr "" -#: src/size.c:596 +#: src/size.c:595 msgid "(TOTALS)\n" msgstr "" @@ -5792,7 +5826,7 @@ msgstr "" msgid "-F option specified twice" msgstr "" -#: src/strip.c:249 src/unstrip.c:117 +#: src/strip.c:249 src/unstrip.c:121 #, c-format msgid "-o option specified twice" msgstr "" @@ -5822,82 +5856,87 @@ msgstr "" msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:518 src/strip.c:542 +#: src/strip.c:508 +#, fuzzy, c-format +msgid "cannot get number of phdrs" +msgstr "konnte Programm-Kopf nicht erstellen: %s" + +#: src/strip.c:523 src/strip.c:547 #, c-format msgid "cannot create new file '%s': %s" msgstr "" -#: src/strip.c:608 +#: src/strip.c:613 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:930 src/strip.c:1019 +#: src/strip.c:935 src/strip.c:1024 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:992 src/strip.c:1957 +#: src/strip.c:997 src/strip.c:1962 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:1006 +#: src/strip.c:1011 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1057 src/strip.c:1114 +#: src/strip.c:1062 src/strip.c:1119 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1063 +#: src/strip.c:1068 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1123 +#: src/strip.c:1128 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1752 +#: src/strip.c:1757 #, fuzzy, c-format msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:1869 src/strip.c:1979 +#: src/strip.c:1874 src/strip.c:1984 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:1880 +#: src/strip.c:1885 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:1902 +#: src/strip.c:1907 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:1965 +#: src/strip.c:1970 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:2004 src/strip.c:2024 +#: src/strip.c:2009 src/strip.c:2029 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2061 src/strip.c:2068 +#: src/strip.c:2066 src/strip.c:2073 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2091 src/strip.c:2148 +#: src/strip.c:2096 src/strip.c:2153 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -5934,265 +5973,293 @@ msgstr "" msgid "Only list module and file names, build IDs" msgstr "" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "Option -d zweimal angegeben" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "nur entweder -o oder -d erlaubt" -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "-n kann nicht mit expliziten Dateien oder -o oder -d verwendet werden" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "Ausgabeverzeichnis '%s'" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "genau zwei Datei-Argumente werden benötigt" -#: src/unstrip.c:197 +#: src/unstrip.c:204 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:262 src/unstrip.c:1832 src/unstrip.c:1876 +#, fuzzy, c-format +msgid "cannot get number of program headers: %s" +msgstr "konnte Programm-Kopf nicht erstellen: %s" + +#: src/unstrip.c:267 src/unstrip.c:1836 #, c-format msgid "cannot create program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:273 #, c-format msgid "cannot copy program header: %s" msgstr "konnte Programm-Kopf nicht kopieren: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:283 #, c-format msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:286 src/unstrip.c:1513 #, c-format msgid "cannot get section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:288 src/unstrip.c:1515 #, c-format msgid "cannot copy section data: %s" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:312 #, c-format msgid "cannot create directory '%s'" msgstr "konnte Verzeichnis nicht erstellen: %s" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:352 src/unstrip.c:769 src/unstrip.c:1547 #, c-format msgid "cannot get symbol table entry: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/unstrip.c:357 src/unstrip.c:575 src/unstrip.c:596 src/unstrip.c:608 -#: src/unstrip.c:1556 src/unstrip.c:1686 src/unstrip.c:1710 +#: src/unstrip.c:368 src/unstrip.c:586 src/unstrip.c:607 src/unstrip.c:619 +#: src/unstrip.c:1568 src/unstrip.c:1698 src/unstrip.c:1722 #, c-format msgid "cannot update symbol table: %s" msgstr "konnte Symboltabelle nicht aktualisieren: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:378 #, c-format msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:417 src/unstrip.c:428 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:504 +#: src/unstrip.c:515 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:516 +#: src/unstrip.c:527 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:764 +#: src/unstrip.c:775 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:917 src/unstrip.c:1258 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:958 src/unstrip.c:977 src/unstrip.c:1010 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:987 +#: src/unstrip.c:998 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1053 src/unstrip.c:1378 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1178 src/unstrip.c:1193 src/unstrip.c:1459 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1190 +#: src/unstrip.c:1202 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1229 src/unstrip.c:1233 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1237 src/unstrip.c:1241 src/unstrip.c:1474 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1232 +#: src/unstrip.c:1244 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1303 src/unstrip.c:1393 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1441 +#: src/unstrip.c:1453 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1543 +#: src/unstrip.c:1555 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "" -#: src/unstrip.c:1781 +#: src/unstrip.c:1793 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1814 #, c-format msgid "cannot get ELF header: %s" msgstr "" -#: src/unstrip.c:1830 +#: src/unstrip.c:1846 #, c-format msgid "cannot update program header: %s" msgstr "konnte Programm-Kopf nicht aktualisieren: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1851 src/unstrip.c:1934 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:1883 +#: src/unstrip.c:1903 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1886 +#: src/unstrip.c:1906 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1925 src/unstrip.c:1976 src/unstrip.c:1988 src/unstrip.c:2074 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" +#: src/unstrip.c:1967 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1969 +msgid ", use --force" msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:1992 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1995 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1998 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:2001 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" + +#: src/unstrip.c:2031 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:1998 +#: src/unstrip.c:2035 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2013 +#: src/unstrip.c:2050 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2017 +#: src/unstrip.c:2054 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2030 +#: src/unstrip.c:2067 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2061 +#: src/unstrip.c:2098 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2194 +#: src/unstrip.c:2231 #, c-format msgid "no matching modules found" msgstr "kein passendes Modul gefunden" -#: src/unstrip.c:2203 +#: src/unstrip.c:2240 #, c-format msgid "matched more than one module" msgstr "mehr als ein passendes Modul" -#: src/unstrip.c:2250 +#: src/unstrip.c:2287 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2251 +#: src/unstrip.c:2288 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" @@ -6219,6 +6286,14 @@ msgid "" "was found, or . if FILE contains the debug information." msgstr "" +#, fuzzy +#~ msgid "cannot attach to process" +#~ msgstr "Kann Suchbaum nicht erstellen" + +#, fuzzy +#~ msgid "cannot attach to core" +#~ msgstr "Kann Suchbaum nicht erstellen" + #~ msgid "unknown tag %hx" #~ msgstr "unbekannter Tag %hx" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils.master.es\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2014-05-20 10:15+0200\n" +"POT-Creation-Date: 2014-12-18 22:59+0100\n" "PO-Revision-Date: 2011-01-10 15:17-0300\n" "Last-Translator: Claudio Rodrigo Pereyra Diaz <claudiorodrigo@pereyradiaz." "com.ar>\n" @@ -24,8 +24,8 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Country: ARGENTINA\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3084 -#: src/readelf.c:3433 src/readelf.c:8002 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3182 +#: src/readelf.c:3559 src/readelf.c:8285 src/unstrip.c:2127 src/unstrip.c:2335 #, c-format msgid "memory exhausted" msgstr "memoria agotada" @@ -215,7 +215,12 @@ msgstr "sección CFI inválida" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdw/dwarf_error.c:95 +#, fuzzy +msgid "invalid opcode" +msgstr "operando inválido" + +#: libdwfl/argp-std.c:46 src/unstrip.c:2277 msgid "Input selection options:" msgstr "Opciones de selección de entrada:" @@ -255,34 +260,24 @@ msgstr "Ruta de búsqueda para archivos debugingfo independientes" msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "Sólo uno de -e, -p, -k, -K, ó --core está permitido" -#: libdwfl/argp-std.c:177 -#, fuzzy -msgid "cannot attach to process" -msgstr "No se puede crear el árbol de búsqueda" - -#: libdwfl/argp-std.c:231 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "No se pueden cargar símbolos de kernel" -#: libdwfl/argp-std.c:235 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "no se pueden hallar módulos de kernel" -#: libdwfl/argp-std.c:252 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "imposible encontrar kernel o módulos" -#: libdwfl/argp-std.c:291 +#: libdwfl/argp-std.c:290 #, c-format msgid "cannot read ELF core file: %s" msgstr "No se puede leer archivo core ELF: %s" -#: libdwfl/argp-std.c:307 -#, fuzzy -msgid "cannot attach to core" -msgstr "No se puede crear el árbol de búsqueda" - -#: libdwfl/argp-std.c:314 +#: libdwfl/argp-std.c:311 msgid "No modules recognized in core file" msgstr "No hay módulos reconocidos en el archivo core" @@ -438,6 +433,11 @@ msgstr "" msgid "Invalid argument" msgstr "Parámetro inválido" +#: libdwfl/libdwflP.h:95 +#, fuzzy +msgid "Not an ET_CORE ELF file" +msgstr "no es un archivo ELF válido" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "No hay segundo plano (Backend)" @@ -538,7 +538,7 @@ msgstr "tamaño inválido del operando fuente" msgid "invalid size of destination operand" msgstr "tamaño inválido del operando destino" -#: libelf/elf_error.c:87 src/readelf.c:5176 +#: libelf/elf_error.c:87 src/readelf.c:5367 #, c-format msgid "invalid encoding" msgstr "codificación inválida" @@ -619,8 +619,8 @@ msgstr "no coinciden los datos/scn" msgid "invalid section header" msgstr "encabezamiento de sección inválida" -#: libelf/elf_error.c:187 src/readelf.c:6966 src/readelf.c:7412 -#: src/readelf.c:7513 src/readelf.c:7675 +#: libelf/elf_error.c:187 src/readelf.c:7235 src/readelf.c:7683 +#: src/readelf.c:7784 src/readelf.c:7954 #, c-format msgid "invalid data" msgstr "datos inválidos" @@ -720,10 +720,10 @@ msgstr "" msgid "[ADDR...]" msgstr "[DIREC...]" -#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:235 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:663 src/elflint.c:235 #: src/findtextrel.c:162 src/ld.c:949 src/nm.c:265 src/objdump.c:181 #: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 -#: src/strip.c:213 src/unstrip.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -736,10 +736,10 @@ msgstr "" "garantía, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN " "DETERMINADO.\n" -#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:240 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:668 src/elflint.c:240 #: src/findtextrel.c:167 src/ld.c:954 src/nm.c:270 src/objdump.c:186 #: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 -#: src/strip.c:218 src/unstrip.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Escrito por %s.\n" @@ -1111,121 +1111,121 @@ msgstr "No se puede obtener contenido de sección %zu en '%s': %s" msgid "cannot get symbol in '%s': %s" msgstr "No se puede obtener símbolo en '%s': %s" -#: src/elfcmp.c:372 +#: src/elfcmp.c:373 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "%s %s differ: tabla de símbolos [%zu]" -#: src/elfcmp.c:375 +#: src/elfcmp.c:376 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "%s %s differ: tabla de símbolos [%zu,%zu]" -#: src/elfcmp.c:421 src/elfcmp.c:490 +#: src/elfcmp.c:422 src/elfcmp.c:491 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:429 +#: src/elfcmp.c:430 #, fuzzy, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "No se puede obtener contenido de sección %zu en '%s': %s" -#: src/elfcmp.c:439 +#: src/elfcmp.c:440 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:447 +#: src/elfcmp.c:448 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:462 +#: src/elfcmp.c:463 #, fuzzy, c-format msgid "%s %s differ: build ID length" msgstr "%s %s differ: brecha" -#: src/elfcmp.c:470 +#: src/elfcmp.c:471 #, fuzzy, c-format msgid "%s %s differ: build ID content" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:479 +#: src/elfcmp.c:480 #, fuzzy, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:519 +#: src/elfcmp.c:520 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "%s %s differ: sección [%zu] contenido '%s'" -#: src/elfcmp.c:523 +#: src/elfcmp.c:524 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "%s %s differ: sección [%zu,%zu] contenido '%s'" -#: src/elfcmp.c:538 +#: src/elfcmp.c:539 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "%s %s differ: cantidad desigual de secciones importantes" -#: src/elfcmp.c:571 src/elfcmp.c:576 +#: src/elfcmp.c:572 src/elfcmp.c:577 #, c-format msgid "cannot load data of '%s': %s" msgstr "no se pueden cargar los datos de '%s': %s" -#: src/elfcmp.c:595 src/elfcmp.c:601 +#: src/elfcmp.c:596 src/elfcmp.c:602 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "" "no se puede obtener entrada de encabezamiento de programa %d de '%s': %s" -#: src/elfcmp.c:607 +#: src/elfcmp.c:608 #, c-format msgid "%s %s differ: program header %d" msgstr "%s %s differ: encabezamiento de programa %d" -#: src/elfcmp.c:631 +#: src/elfcmp.c:632 #, c-format msgid "%s %s differ: gap" msgstr "%s %s differ: brecha" -#: src/elfcmp.c:694 +#: src/elfcmp.c:695 #, c-format msgid "Invalid value '%s' for --gaps parameter." msgstr "Valor inválido '%s' para parámetro --gaps" -#: src/elfcmp.c:722 src/findtextrel.c:221 src/ldgeneric.c:1757 +#: src/elfcmp.c:723 src/findtextrel.c:221 src/ldgeneric.c:1757 #: src/ldgeneric.c:4247 src/nm.c:381 src/ranlib.c:161 src/size.c:293 -#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1923 +#: src/unstrip.c:1952 #, c-format msgid "cannot open '%s'" msgstr "Imposible abrir '%s'" -#: src/elfcmp.c:726 src/findtextrel.c:228 src/ranlib.c:178 +#: src/elfcmp.c:727 src/findtextrel.c:228 src/ranlib.c:178 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "No puede crear descriptor ELF para '%s': %s" -#: src/elfcmp.c:731 +#: src/elfcmp.c:732 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "no se puede crear el descriptor EBL para '%s'" -#: src/elfcmp.c:749 +#: src/elfcmp.c:750 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/elfcmp.c:759 +#: src/elfcmp.c:760 #, c-format msgid "cannot get content of section %zu: %s" msgstr "No se puede obtener contenido de sección %zu: %s" -#: src/elfcmp.c:769 src/elfcmp.c:783 +#: src/elfcmp.c:770 src/elfcmp.c:784 #, c-format msgid "cannot get relocation: %s" msgstr "No se puede obtener reubicación: %s" @@ -1427,14 +1427,14 @@ msgstr "" "sección [%2d] '%s': el grupo de sección [%2zu] '%s' no precede al miembro de " "grupo\n" -#: src/elflint.c:590 src/elflint.c:1450 src/elflint.c:1501 src/elflint.c:1607 -#: src/elflint.c:1932 src/elflint.c:2221 src/elflint.c:2735 src/elflint.c:2897 -#: src/elflint.c:3027 src/elflint.c:3199 src/elflint.c:4101 +#: src/elflint.c:590 src/elflint.c:1457 src/elflint.c:1508 src/elflint.c:1614 +#: src/elflint.c:1939 src/elflint.c:2228 src/elflint.c:2742 src/elflint.c:2904 +#: src/elflint.c:3034 src/elflint.c:3206 src/elflint.c:4108 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n" -#: src/elflint.c:603 src/elflint.c:1614 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1543,12 +1543,12 @@ msgid "" msgstr "" "Sección [%2d] '%s': símbolo %zu: función en sección COMMON no tiene sentido\n" -#: src/elflint.c:797 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "sección [%2d] '%s': símbolo %zu: st_value fuera de límites\n" -#: src/elflint.c:803 src/elflint.c:828 src/elflint.c:871 +#: src/elflint.c:810 src/elflint.c:835 src/elflint.c:878 #, c-format msgid "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " @@ -1557,7 +1557,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu no se ajusta totalmente en la sección [%2d] " "'%s'\n" -#: src/elflint.c:812 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1566,7 +1566,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: sección de referencia [%2d] '%s' no tiene " "establecida bandera SHF_TLS\n" -#: src/elflint.c:822 src/elflint.c:864 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1575,7 +1575,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: st_value fuera de límites de sección de " "referencia [%2d] '%s'\n" -#: src/elflint.c:849 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" @@ -1583,7 +1583,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de " "programa TLS\n" -#: src/elflint.c:857 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1592,7 +1592,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: st_value falta sección de referencia [%2d] " "'%s'\n" -#: src/elflint.c:884 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1601,7 +1601,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo local fuera del rango descrito en " "sh_info\n" -#: src/elflint.c:891 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1610,12 +1610,12 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo non-local fuera del rango descrito " "en sh_info\n" -#: src/elflint.c:898 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "Sección [%2d] '%s': símbolo %zu: símbolo de sección non-local\n" -#: src/elflint.c:948 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1624,7 +1624,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección " "errada [%2d]\n" -#: src/elflint.c:955 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1633,7 +1633,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección [%2d] " "'%s'\n" -#: src/elflint.c:971 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not " @@ -1642,7 +1642,7 @@ msgstr "" "Sección [%2d] '%s': valor del símbolo _GLOBAL_OFFSET_TABLE_ %#<PRIx64> no " "coincide con dirección de sección %s %#<PRIx64>\n" -#: src/elflint.c:978 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not " @@ -1651,7 +1651,7 @@ msgstr "" "Sección [%2d] '%s': tamaño de símbolo _GLOBAL_OFFSET_TABLE_ %<PRIu64> no " "coincide con tamaño de sección %s %<PRIu64>\n" -#: src/elflint.c:986 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1660,7 +1660,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ presente, pero no. sección " "got\n" -#: src/elflint.c:1002 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic " @@ -1669,7 +1669,7 @@ msgstr "" "sección [%2d] '%s': Valor de símbolo _DYNAMIC_ %#<PRIx64> no coincide con la " "dirección de segmento%#<PRIx64>\n" -#: src/elflint.c:1009 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic " @@ -1678,7 +1678,7 @@ msgstr "" "Sección [%2d] '%s': tamaño de símbolo _DYNAMIC %<PRIu64> no coincide con " "tamaño de segmento %<PRIu64>\n" -#: src/elflint.c:1022 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1687,24 +1687,24 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo en tabla de símbolos dinámicos sin " "visibilidad predeterminada\n" -#: src/elflint.c:1026 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "" "Sección [%2d] '%s': símbolo %zu: bit desconocido establecido en st_other\n" -#: src/elflint.c:1075 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "Sección [%2d] '%s': DT_RELCOUNT utilizada para esta sección RELA\n" -#: src/elflint.c:1086 src/elflint.c:1138 +#: src/elflint.c:1093 src/elflint.c:1145 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" "Sección [%2d] '%s': valor DT_RELCOUNT %d demasiado alto para esta sección\n" -#: src/elflint.c:1111 src/elflint.c:1163 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1713,7 +1713,7 @@ msgstr "" "Sección [%2d] '%s': reubicaciones relativas después de que el %d de índice " "haya sido especificado por DT_RELCOUNT\n" -#: src/elflint.c:1117 src/elflint.c:1169 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1722,49 +1722,49 @@ msgstr "" "Sección [%2d] '%s': reubicación no-relativa en %zu de índice; DT_RELCOUNT " "especificado %d reubicaciones relativas\n" -#: src/elflint.c:1129 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "sección [%2d] '%s': DT_RELACOUNT utilizado para esta sección REL\n" -#: src/elflint.c:1211 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "Sección [%2d] '%s': índice de sección de destino inválido\n" -#: src/elflint.c:1223 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "Sección [%2d] '%s': tipo de sección de destino inválido\n" -#: src/elflint.c:1231 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "Sección [%2d] '%s': sh_info debe ser cero\n" -#: src/elflint.c:1238 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "" "Sección [%2d] '%s': no reubicaciones para secciones de fusión posibles\n" -#: src/elflint.c:1246 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Rela\n" -#: src/elflint.c:1306 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "Reubicación de bandera pero no hay segmento de sólo lectura\n" -#: src/elflint.c:1333 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "Sección [%2d] '%s': reubicación %zu: tipo inválido\n" -#: src/elflint.c:1341 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1773,12 +1773,12 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: tipo de reubicación inválido para el " "tipo de archivo\n" -#: src/elflint.c:1349 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "Sección [%2d] '%s': reubicación %zu: índice de símbolo inválido\n" -#: src/elflint.c:1367 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1787,12 +1787,12 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: sólo el símbolo '_GLOBAL_OFFSET_TABLE_' " "puede utilizarse con %s\n" -#: src/elflint.c:1384 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "Sección [%2d] '%s': reubicación %zu: compensación fuera de límites\n" -#: src/elflint.c:1399 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1801,7 +1801,7 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: reubicación de copia con símbolo de " "tipo %s\n" -#: src/elflint.c:1420 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1810,61 +1810,61 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: sección de sólo-lectura modificada, " "pero no se estableció bandera de reubicación\n" -#: src/elflint.c:1435 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" "Sección [%2d] '%s': las reubicaciones se hacen con datos cargados y " "descargados\n" -#: src/elflint.c:1475 src/elflint.c:1526 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "Sección [%2d] '%s': no puede obtener reubicación %zu: %s\n" -#: src/elflint.c:1602 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "más de una sección dinámica presente\n" -#: src/elflint.c:1621 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" "Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Dyn\n" -#: src/elflint.c:1626 src/elflint.c:1911 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "Sección [%2d] '%s': sh_info no es cero\n" -#: src/elflint.c:1636 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" "Sección [%2d] '%s': no puede obtener entrada de sección dinámica %zu: %s\n" -#: src/elflint.c:1644 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "Sección [%2d] '%s': entradas non-DT_NULL siguen a la entrada DT_NULL\n" -#: src/elflint.c:1651 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "Sección [%2d] '%s': entrada %zu: etiqueta desconocida\n" -#: src/elflint.c:1662 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "Sección [%2d] '%s': entrada %zu: más de una entrada con etiqueta %s\n" -#: src/elflint.c:1672 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "Sección [%2d] '%s': entrada %zu: nivel 2 etiqueta %s utilizada\n" -#: src/elflint.c:1690 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -1872,7 +1872,7 @@ msgstr "" "Sección [%2d] '%s': entrada %zu: el valor DT_PLTREL debe ser DT_REL or " "DT_RELA\n" -#: src/elflint.c:1703 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1881,14 +1881,14 @@ msgstr "" "Sección [%2d] '%s': entrada %zu: puntero no coincide con dirección de " "sección [%2d] '%s' al que hace referencia sh_link\n" -#: src/elflint.c:1746 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" "Sección [%2d] '%s': entrada %zu: valor %s debe apuntar en segmento cargado\n" -#: src/elflint.c:1761 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1897,46 +1897,46 @@ msgstr "" "sección [%2d] '%s': entrada %zu: valor %s debe ser compensación válida en " "sección [%2d] '%s'\n" -#: src/elflint.c:1781 src/elflint.c:1809 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "Sección [%2d] '%s': contiene entrada %s pero no %s\n" -#: src/elflint.c:1793 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "Sección [%2d] '%s': etiqueta obligatoria %s no está presente\n" -#: src/elflint.c:1802 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "Sección [%2d] '%s': no hay sección de dispersión presente\n" -#: src/elflint.c:1817 src/elflint.c:1824 +#: src/elflint.c:1824 src/elflint.c:1831 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "Sección [%2d] '%s': no todas las %s, %s, y %s están presentes\n" -#: src/elflint.c:1834 src/elflint.c:1838 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" "Sección [%2d] '%s': etiqueta %s faltante en DSO marcada durante el pre-" "enlace\n" -#: src/elflint.c:1844 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" "Sección [%2d] '%s': archivo no-DSO marcado como dependencia durante el pre-" "enlace\n" -#: src/elflint.c:1855 src/elflint.c:1859 src/elflint.c:1863 src/elflint.c:1867 +#: src/elflint.c:1862 src/elflint.c:1866 src/elflint.c:1870 src/elflint.c:1874 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "Sección [%2d] '%s': etiqueta %s faltante en pre-enlace ejecutable\n" -#: src/elflint.c:1879 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -1944,31 +1944,31 @@ msgstr "" "Sección [%2d] '%s': sólo los archivos reubicables pueden tener índice de " "sección extendido\n" -#: src/elflint.c:1889 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" "Sección [%2d] '%s': índice de sección extendido no para tabla de símbolos\n" -#: src/elflint.c:1894 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "no se puede obtener sección para símbolos\n" -#: src/elflint.c:1897 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "Sección [%2d] '%s': tamaño de entrada no coincide con Elf32_Word\n" -#: src/elflint.c:1906 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" "Sección [%2d] '%s': tabla de índice extendida demasiado pequeña para tabla " "de símbolos\n" -#: src/elflint.c:1921 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1977,24 +1977,24 @@ msgstr "" "Sección [%2d] '%s': índice de sección extendida en sección [%2zu] '%s' se " "refiere a la misma tabla de símbolos\n" -#: src/elflint.c:1938 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "símbolo 0 debe tener índice de sección extendida cero\n" -#: src/elflint.c:1950 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "no puede obtener datos para símbolo %zu\n" -#: src/elflint.c:1955 +#: src/elflint.c:1962 #, c-format msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n" msgstr "" "índice de sección extendida es %<PRIu32> pero índice de símbolo no es " "XINDEX\n" -#: src/elflint.c:1971 src/elflint.c:2022 +#: src/elflint.c:1978 src/elflint.c:2029 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" @@ -2002,37 +2002,37 @@ msgstr "" "Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es " "%ld, se espera %ld)\n" -#: src/elflint.c:1983 src/elflint.c:2034 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "Sección [%2d] '%s': índice de la cadena es demasiado grande\n" -#: src/elflint.c:1997 src/elflint.c:2048 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cubetas de dispersión %zu fuera de " "límites\n" -#: src/elflint.c:2007 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cadena de dispersión %zu fuera de límites\n" -#: src/elflint.c:2058 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cadena de dispersión %<PRIu64> fuera de " "límites\n" -#: src/elflint.c:2074 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "Sección [%2d] '%s': tamaño de bitmask no es potencia de 2: %u\n" -#: src/elflint.c:2085 +#: src/elflint.c:2092 #, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " @@ -2041,14 +2041,14 @@ msgstr "" "Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es " "%ld, se espera al menos least%ld)\n" -#: src/elflint.c:2093 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" "Sección [%2d] '%s': segundo cambio de función de dispersión demasiado " "grande: %u\n" -#: src/elflint.c:2125 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -2056,7 +2056,7 @@ msgstr "" "Sección [%2d] '%s': cadena de dispersión para cubetas %zu inferior a " "polarización de índice de símbolo\n" -#: src/elflint.c:2146 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -2065,7 +2065,7 @@ msgstr "" "Sección [%2d] '%s': el símbolo %u al que se hace referencia en cadena para " "cubeta %zu es indefinido\n" -#: src/elflint.c:2157 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -2073,13 +2073,13 @@ msgstr "" "Sección [%2d] '%s': valor de dispersión para símbolo %u en cadena para " "cubeta %zu está errado\n" -#: src/elflint.c:2188 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" "Sección [%2d] '%s': cadena de dispersión para cubeta %zu fuera de limites\n" -#: src/elflint.c:2193 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2087,38 +2087,38 @@ msgstr "" "Sección [%2d] '%s': referencia de símbolo en cadena para cubeta %zu fuera de " "límites\n" -#: src/elflint.c:2199 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" "Sección [%2d] '%s': bitmask no coincide con nombres en la tabla de " "dispersión\n" -#: src/elflint.c:2212 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "Sección [%2d] '%s': archivos reubicables no pueden tener tablas de " "dispersión\n" -#: src/elflint.c:2230 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" "Sección [%2d] '%s': tabla de dispersión no para tabla de símbolos dinámicos\n" -#: src/elflint.c:2238 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" "Sección [%2d] '%s': tamaño incorrecto de entrada de tabla de dispersión\n" -#: src/elflint.c:2243 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "Sección [%2d] '%s': no marcada para ser asignada\n" -#: src/elflint.c:2248 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2127,19 +2127,19 @@ msgstr "" "Sección [%2d] '%s': tabla de dispersión no tiene ni siquiera espacio para " "entradas administrativas iniciales\n" -#: src/elflint.c:2296 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" "sh_link en secciones de dispersión [%2zu] '%s' y [%2zu] '%s' no son " "idénticas\n" -#: src/elflint.c:2374 src/elflint.c:2378 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "Sección [%2zu] '%s': referencia al índice de símbolo 0\n" -#: src/elflint.c:2385 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2148,7 +2148,7 @@ msgstr "" "Símbolo %d nombrado en nueva tabla de dispersión en [%2zu] '%s' pero no en " "la tabla de dispersión anterior en [%2zu] '%s'\n" -#: src/elflint.c:2397 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2157,12 +2157,12 @@ msgstr "" "Símbolo %d nombrado en la tabla de dispersión anterior en [%2zu] '%s' pero " "no en la nueva tabla de dispersión en [%2zu] '%s'\n" -#: src/elflint.c:2413 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "Sección [%2d] '%s': nonzero sh_%s para sección NULL\n" -#: src/elflint.c:2433 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2170,94 +2170,94 @@ msgstr "" "Sección [%2d] '%s': grupos de sección sólo permitidos en archivos de objeto " "reubicables\n" -#: src/elflint.c:2444 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "Sección [%2d] '%s': no puede obtener tabla de símbolos: %s\n" -#: src/elflint.c:2449 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" "Sección [%2d] '%s': referencia de sección en sh_link no es una tabla de " "símbolos\n" -#: src/elflint.c:2455 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "Sección [%2d] '%s': índice de símbolo inválido en sh_info\n" -#: src/elflint.c:2460 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "Sección [%2d] '%s': sh_flags no cero\n" -#: src/elflint.c:2467 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "Sección [%2d] '%s': no puede obtener símbolo para firma\n" -#: src/elflint.c:2472 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "" "sección [%2d] '%s': el símbolo de firma no puede ser una cadena vacía\n" -#: src/elflint.c:2478 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "Sección [%2d] '%s': sh_flags no establecida correctamente\n" -#: src/elflint.c:2484 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "Sección [%2d] '%s': no puede obtener datos: %s\n" -#: src/elflint.c:2493 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" "Sección [%2d] '%s': tamaño de sección no es múltiplo de tamaño de " "(Elf32_Word)\n" -#: src/elflint.c:2498 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "Sección [%2d] '%s': grupo de sección sin palabra de banderas\n" -#: src/elflint.c:2504 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "Sección [%2d] '%s': grupo de sección sin miembro\n" -#: src/elflint.c:2508 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "Sección [%2d] '%s': grupo de sección con sólo un miembro\n" -#: src/elflint.c:2519 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "Sección [%2d] '%s': banderas de grupo de sección desconocido\n" -#: src/elflint.c:2531 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "Sección [%2d] '%s': índice de sección %Zu fuera de rango\n" -#: src/elflint.c:2540 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" "Sección [%2d] '%s': no se puede obtener encabezamiento de sección para " "elemento %zu: %s\n" -#: src/elflint.c:2547 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "Sección [%2d] '%s': grupo de sección contiene otro grupo [%2d] '%s'\n" -#: src/elflint.c:2553 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2266,12 +2266,12 @@ msgstr "" "Sección [%2d] '%s': elemento %Zu hace referencia a sección [%2d] '%s' sin " "establecer bandera SHF_GROUP\n" -#: src/elflint.c:2560 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "Sección [%2d] '%s' está contenida en más de un grupo de sección\n" -#: src/elflint.c:2749 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2280,7 +2280,7 @@ msgstr "" "Sección [%2d] '%s' se refiere en sh_link a la sección [%2d] '%s' la cual no " "es una tabla de símbolos dinámicos\n" -#: src/elflint.c:2761 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2289,29 +2289,29 @@ msgstr "" "Sección [%2d] '%s' tiene un número diferente de entradas a la de la tabla de " "símbolos [%2d] '%s'\n" -#: src/elflint.c:2777 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" "Sección [%2d] '%s': el símbolo %d: no se pueden leer datos de versión\n" -#: src/elflint.c:2793 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" "Sección [%2d] '%s': el símbolo %d: el símbolo local con alcance mundial\n" -#: src/elflint.c:2801 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "Sección [%2d] '%s': símbolo %d: símbolo local con versión\n" -#: src/elflint.c:2815 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "Sección [%2d] '%s': símbolo %d: índice de versión inválida %d\n" -#: src/elflint.c:2820 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" @@ -2319,7 +2319,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %d: índice de versión %d es para versión " "definida\n" -#: src/elflint.c:2830 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" @@ -2327,46 +2327,46 @@ msgstr "" "Sección [%2d] '%s': símbolo %d: índice de versión %d es para la versión " "solicitada\n" -#: src/elflint.c:2882 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "Más de una sección de referencia de versión presente\n" -#: src/elflint.c:2890 src/elflint.c:3019 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "Sección [%2d] '%s': sh_link no se enlaza a la tabla de cadenas\n" -#: src/elflint.c:2913 src/elflint.c:3071 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "Sección [%2d] '%s': entrada %d tiene versión %d errada\n" -#: src/elflint.c:2919 src/elflint.c:3077 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene compensación errada de datos " "auxiliares\n" -#: src/elflint.c:2927 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "Sección [%2d] '%s': entrada %d tiene referencia de archivo inválida\n" -#: src/elflint.c:2935 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "Sección [%2d] '%s': %d hace referencia a dependencia desconocida\n" -#: src/elflint.c:2947 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene bandera " "desconocida\n" -#: src/elflint.c:2954 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2375,7 +2375,7 @@ msgstr "" "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene referencia de " "nombre inválida\n" -#: src/elflint.c:2961 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2384,7 +2384,7 @@ msgstr "" "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene valor de " "dispersión: %#x, esperado %#x\n" -#: src/elflint.c:2971 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2393,7 +2393,7 @@ msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene nombre duplicado " "'%s'\n" -#: src/elflint.c:2982 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2401,53 +2401,53 @@ msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene próximo campo " "errado\n" -#: src/elflint.c:2998 src/elflint.c:3156 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" "sección [%2d] '%s': entrada %d tiene compensación inválida para próxima " "entrada\n" -#: src/elflint.c:3011 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "más de una definición de versión presente de sección\n" -#: src/elflint.c:3056 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "Sección [%2d] '%s': más de una definición de BASE\n" -#: src/elflint.c:3060 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" "Sección [%2d] '%s': definición de BASE debe tener índice VER_NDX_GLOBAL\n" -#: src/elflint.c:3066 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "Sección [%2d] '%s': entrada %d tiene bandera desconocida\n" -#: src/elflint.c:3090 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida\n" -#: src/elflint.c:3097 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene valor de dispersión errado: %#x, " "esperado %#x\n" -#: src/elflint.c:3106 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene nombre de versión duplicado '%s'\n" -#: src/elflint.c:3125 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -2455,34 +2455,34 @@ msgstr "" "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida en datos " "auxiliares\n" -#: src/elflint.c:3140 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" "Sección [%2d] '%s': entrada %d tiene próximo campo errado en datos " "auxiliares\n" -#: src/elflint.c:3162 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "Sección [%2d] '%s': no hay definición de BASE\n" -#: src/elflint.c:3178 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "Sección [%2d] '%s': desconocida versión principal '%s'\n" -#: src/elflint.c:3191 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "Sección [%2d] '%s': sección de atributos de objeto vacío\n" -#: src/elflint.c:3212 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "Sección[%2d] '%s': formato de atributo no reconocido\n" -#: src/elflint.c:3228 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" @@ -2490,21 +2490,21 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: campo de longitud cero en sección de " "atributo\n" -#: src/elflint.c:3237 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "Sección[%2d] '%s': compensación %zu: longitud inválida en sección de " "atributo\n" -#: src/elflint.c:3249 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" "Sección[%2d] '%s': compensación %zu: cadena de nombre de proveedor sin " "terminar\n" -#: src/elflint.c:3266 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2512,12 +2512,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de sub-" "sección de atributo\n" -#: src/elflint.c:3275 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "Sección [%2d] '%s': compensación %zu: sección de atributo truncado\n" -#: src/elflint.c:3284 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2525,7 +2525,7 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: campo de longitud cero length en sub-" "sección de atributo\n" -#: src/elflint.c:3297 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2533,7 +2533,7 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: longitud inválida en sub-sección de " "atributo\n" -#: src/elflint.c:3308 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2541,26 +2541,26 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: sub-sección de atributo tiene etiqueta " "inesperada %u\n" -#: src/elflint.c:3326 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "Sección[%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de " "atributo\n" -#: src/elflint.c:3337 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" "Sección [%2d] '%s': compensación %zu: cadena sin terminar en atributo\n" -#: src/elflint.c:3350 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" "Sección [%2d] '%s': compensación %zu: etiqueta de atributo no reconocida %u\n" -#: src/elflint.c:3354 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" @@ -2568,12 +2568,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: no reconocido %s valor de atributo " "%<PRIu64>\n" -#: src/elflint.c:3364 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "Sección [%2d] '%s': compensación %zu: proveedor '%s' desconocido\n" -#: src/elflint.c:3370 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2581,47 +2581,47 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: extra bytes después de la última " "sección de atributo\n" -#: src/elflint.c:3459 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "no puede obtener encabezamiento de sección de sección zeroth\n" -#: src/elflint.c:3463 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "Sección zeroth tiene nombre nonzero\n" -#: src/elflint.c:3465 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "Sección zeroth tiene tipo nonzero\n" -#: src/elflint.c:3467 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "Sección zeroth tiene banderas nonzero\n" -#: src/elflint.c:3469 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "Sección zeroth tiene dirección nonzero\n" -#: src/elflint.c:3471 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "Sección zeroth tiene compensación nonzero\n" -#: src/elflint.c:3473 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "Sección zeroth tiene valor de alineación nonzero\n" -#: src/elflint.c:3475 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "Sección zeroth tiene valor de tamaño de entrada nonzero\n" -#: src/elflint.c:3478 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2630,7 +2630,7 @@ msgstr "" "Sección zeroth tiene valor de tamaño nonzero mientras que el encabezamiento " "ELF tiene valor shnum nonzero\n" -#: src/elflint.c:3482 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2639,7 +2639,7 @@ msgstr "" "Sección zeroth tiene valor de enlace nonzero mientras que el encabezamiento " "ELF no señala sobreflujo en shstrndx\n" -#: src/elflint.c:3486 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2648,27 +2648,27 @@ msgstr "" "la sección zeroth tiene un valor de enlace distinto a cero mientras que el " "encabezamiento ELF no señala desbordamiento en phnum\n" -#: src/elflint.c:3503 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "No se puede obtener encabezamiento para sección [%2zu] '%s': %s\n" -#: src/elflint.c:3512 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "Sección [%2zu]: nombre inválido\n" -#: src/elflint.c:3539 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "Sección [%2d] '%s' tiene tipo errado: %s esperado, es %s\n" -#: src/elflint.c:3555 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "Sección [%2zu] '%s' tiene banderas erradas: %s esperado, es %s\n" -#: src/elflint.c:3572 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2676,12 +2676,12 @@ msgstr "" "Sección [%2zu] '%s' tiene banderas erradas: %s esperado y posiblemente %s, " "es %s\n" -#: src/elflint.c:3590 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "Sección [%2zu] '%s' presente en archivo objeto\n" -#: src/elflint.c:3596 src/elflint.c:3628 +#: src/elflint.c:3603 src/elflint.c:3635 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -2689,7 +2689,7 @@ msgstr "" "Sección [%2zu] '%s' tiene bandera SHF_ALLOC establecida pero no es un " "segmento cargable\n" -#: src/elflint.c:3601 src/elflint.c:3633 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2698,7 +2698,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene bandera SHF_ALLOC establecida pero hay " "segmentos cargables\n" -#: src/elflint.c:3609 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2706,22 +2706,22 @@ msgstr "" "Sección [%2zu] '%s' es tabla de índice de sección de extensión en archivo no-" "objeto\n" -#: src/elflint.c:3652 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "Sección [%2zu] '%s': tamaño no es múltiplo de tamaño de entrada\n" -#: src/elflint.c:3657 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elflint.c:3667 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "sección [%2zu] '%s' tiene tipo %d incompatible \n" -#: src/elflint.c:3681 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" @@ -2729,54 +2729,54 @@ msgstr "" "Sección [%2zu] '%s' contiene bandera(s) de procesador-específico inválidas " "%#<PRIx64>\n" -#: src/elflint.c:3688 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "Sección [%2zu] '%s' contiene bandera(s) desconocidas %#<PRIx64>\n" -#: src/elflint.c:3696 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" -#: src/elflint.c:3704 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "Sección [%2zu] '%s': referencia de sección inválida en valor de enlace\n" -#: src/elflint.c:3709 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "Sección [%2zu] '%s': referencia de sección inválida en valor de información\n" -#: src/elflint.c:3716 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" "Sección [%2zu] '%s': bandera de cadenas establecida sin bandera de fusión\n" -#: src/elflint.c:3721 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "Sección [%2zu] '%s': bandera de fusión establecida pero tamaño de entrada es " "cero\n" -#: src/elflint.c:3739 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" "Sección [%2zu] '%s' tiene un tipo %d inesperado para una sección ejecutable\n" -#: src/elflint.c:3748 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "Sección [%2zu] '%s' es tanto de ejecución como de escritura\n" -#: src/elflint.c:3777 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2785,7 +2785,7 @@ msgstr "" "Sección [%2zu] '%s' no contenida totalmente en segmento de entrada de " "encabezamiento de programa %d\n" -#: src/elflint.c:3785 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2794,7 +2794,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero es leída desde el archivo en " "segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:3794 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2803,18 +2803,18 @@ msgstr "" "Sección [%2zu] '%s' no tiene tipo NOBITS pero no es leída desde el fichero " "en segmento de entrada de encabezamiento de programa %d\n" -#: src/elflint.c:3805 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "Sección [%2zu] '%s' es ejecutable en segmento no ejecutable %d\n" -#: src/elflint.c:3815 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" "Sección [%2zu] '%s' es de escritura en segmento que no es de escritura %d\n" -#: src/elflint.c:3825 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -2822,7 +2822,7 @@ msgstr "" "Sección [%2zu] '%s': asignación de bandera establecida pero sección no en " "ningún segmento cargado\n" -#: src/elflint.c:3831 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2831,7 +2831,7 @@ msgstr "" "Sección [%2zu] '%s': encabezamiento ELF dice esta es la tabla de cadena de " "encabezamiento de sección, pero el tipo no es SHT_TYPE\n" -#: src/elflint.c:3839 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -2839,32 +2839,32 @@ msgstr "" "sección [%2zu] '%s': ficheros reubicables no pueden tener tablas de símbolos " "dinámicos\n" -#: src/elflint.c:3890 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "Más de una tabla de símbolos presente\n" -#: src/elflint.c:3913 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" "Entrada de encabezamiento de programa INTERP pero no la sección .interp\n" -#: src/elflint.c:3924 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" "segmento cargable [%u] es ejecutable pero no contiene secciones ejecutables\n" -#: src/elflint.c:3930 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "segmento cargable [%u] es de escritura pero contiene secciones protegidas " "contra escritura\n" -#: src/elflint.c:3941 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2873,26 +2873,26 @@ msgstr "" "Sección no .gnu.versym presente, pero la sección .gnu.versym_d o la sección ." "gnu.versym_r existen\n" -#: src/elflint.c:3954 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "Duplicar índice de versión %d\n" -#: src/elflint.c:3968 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" "Sección .gnu.versym presente sin las secciones .gnu.versym_d o .gnu." "versym_r\n" -#: src/elflint.c:4017 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" "phdr[%d]: tipo de nota de fichero core desconocido %<PRIu32> en compensación " "%<PRIu64>\n" -#: src/elflint.c:4021 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n" @@ -2900,14 +2900,14 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero core desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4044 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" "phdr[%d]: tipo de nota de fichero objeto desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4048 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n" @@ -2915,40 +2915,40 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido %<PRIu32> en " "compensación %Zu\n" -#: src/elflint.c:4065 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: no hay entradas de nota definidas para el tipo de archivo\n" -#: src/elflint.c:4084 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: no puede obtener contenido de sección de nota: %s\n" -#: src/elflint.c:4087 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: extra %<PRIu64> bytes después de la última nota\n" -#: src/elflint.c:4108 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de " "archivo\n" -#: src/elflint.c:4115 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" "Sección[%2d] '%s': no se puede obtener el contenido de sección de nota\n" -#: src/elflint.c:4118 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "Sección[%2d] '%s': extra %<PRIu64> bytes después de la última nota\n" -#: src/elflint.c:4136 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -2956,139 +2956,139 @@ msgstr "" "Sólo ejecutables, objetos compartidos y ficheros core pueden tener " "encabezamientos de programas\n" -#: src/elflint.c:4151 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "no se puede obtener entrada de encabezamiento %d: %s\n" -#: src/elflint.c:4160 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "entrada de encabezamiento de programa %d: tipo %#<PRIx64> de entrada de " "encabezamiento de programa desconocido\n" -#: src/elflint.c:4171 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "Más de una entrada INTERP en encabezamiento de programa\n" -#: src/elflint.c:4179 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "más de una entrada TLS en encabezamiento de programa\n" -#: src/elflint.c:4186 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "ejecutable estático no puede tener secciones dinámicas\n" -#: src/elflint.c:4200 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "Referencia de sección dinámica en encabezamiento de programa tiene " "compensación errada\n" -#: src/elflint.c:4203 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "No coinciden tamaño de sección dinámica en programa y encabezamiento de " "sección\n" -#: src/elflint.c:4213 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "Más de una entrada GNU_RELRO en encabezamiento de programa\n" -#: src/elflint.c:4234 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "Segmento cargable GNU_RELRO que se aplica no es de escritura\n" -#: src/elflint.c:4237 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "Banderas de segmento cargable [%u] no coinciden con banderas GNU_RELRO [%u]\n" -#: src/elflint.c:4245 src/elflint.c:4268 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "Segmento %s no contenido en un segmento cargable\n" -#: src/elflint.c:4274 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" "Compensación de encabezamiento de programa en encabezamiento ELF y entrada " "PHDR no coinciden" -#: src/elflint.c:4298 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "Referencia de tabla de búsqueda de marco de llamada en encabezamiento de " "programa tiene una compensación errada\n" -#: src/elflint.c:4301 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "Tamaño de tabla de búsqueda de marco de llamada no coincide con programa y " "encabezamiento de sección\n" -#: src/elflint.c:4314 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME presente pero no la sección.eh_frame_hdr\n" -#: src/elflint.c:4322 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabla de búsqueda de marco de llamada debe ser asignada\n" -#: src/elflint.c:4325 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sección [%2zu] '%s' debe ser asignada\n" -#: src/elflint.c:4329 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "" "tabla de búsqueda de marco de llamada no debe tener permiso de escritura\n" -#: src/elflint.c:4332 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n" -#: src/elflint.c:4337 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "tabla de búsqueda de marco de llamada no debe ser ejecutable\n" -#: src/elflint.c:4340 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" -#: src/elflint.c:4351 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" "entrada de encabezamiento de programa %d: tamaño de fichero mayor que el " "tamaño de memoria\n" -#: src/elflint.c:4358 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" "entrada de encabezamiento de programa %d: alineamiento no es potencia de 2\n" -#: src/elflint.c:4361 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3097,7 +3097,7 @@ msgstr "" "entrada de encabezamiento de programa %d: compensación de fichero y " "dirección virtual no módulo de alineación\n" -#: src/elflint.c:4374 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3106,12 +3106,12 @@ msgstr "" "ejecutable/DSO con sección .eh_frame_hdr no tiene una entrada de " "encabezamiento de programa PT_GNU_EH_FRAME" -#: src/elflint.c:4408 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "No se puede leer encabezamiento ELF: %s\n" -#: src/elflint.c:4434 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "Bandera de reubicación de texto establecida pero no necesaria\n" @@ -3168,42 +3168,47 @@ msgstr "no hay reubicaciones de texto reportado en '%s'" msgid "while reading ELF file" msgstr "Error al leer fichero ELF" -#: src/findtextrel.c:334 src/findtextrel.c:351 -#, c-format -msgid "cannot get program header index at offset %d: %s" +#: src/findtextrel.c:329 +#, fuzzy, c-format +msgid "cannot get program header count: %s" +msgstr "no se puede obtener memoria para encabezamiento del programa: %s" + +#: src/findtextrel.c:340 src/findtextrel.c:357 +#, fuzzy, c-format +msgid "cannot get program header index at offset %zd: %s" msgstr "" "Nos se puede obtener el índice de encabezamiento de programa en compensación " "%d: %s" -#: src/findtextrel.c:403 +#: src/findtextrel.c:409 #, c-format msgid "cannot get section header of section %Zu: %s" msgstr "No se puede obtener encabezamiento de sección %Zu: %s" -#: src/findtextrel.c:415 +#: src/findtextrel.c:421 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "No se puede obtener tabla de símbolos %zu en '%s': %s" -#: src/findtextrel.c:435 src/findtextrel.c:458 +#: src/findtextrel.c:441 src/findtextrel.c:464 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" "No se puede obtener reubicación en índice %d en sección %zu en '%s': %s" -#: src/findtextrel.c:523 +#: src/findtextrel.c:529 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s no compilado con -fpic/-fPIC\n" -#: src/findtextrel.c:576 +#: src/findtextrel.c:582 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "El archivo que contiene la función '%s' no está compilado con -fpic/-fPIC\n" -#: src/findtextrel.c:583 src/findtextrel.c:603 +#: src/findtextrel.c:589 src/findtextrel.c:609 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3212,7 +3217,7 @@ msgstr "" "el fichero que contiene la función '%s' podría no estar compilado con -fpic/-" "fPIC\n" -#: src/findtextrel.c:591 +#: src/findtextrel.c:597 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3221,7 +3226,7 @@ msgstr "" "Tanto el fichero que contiene la función '%s' como el fichero que contiene " "la función '%s' no están compilados con -fpic/-fPIC\n" -#: src/findtextrel.c:611 +#: src/findtextrel.c:617 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3646,7 +3651,7 @@ msgstr "" "Advertencia: el tamaño de `%s' cambió de %<PRIu64> en %s a %<PRIu64> en %s" #: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 -#: src/readelf.c:829 src/strip.c:563 +#: src/readelf.c:829 src/strip.c:568 #, c-format msgid "cannot determine number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" @@ -3902,7 +3907,7 @@ msgstr "error interno: sección non-nobits sigue a sección nobits" msgid "cannot get header of 0th section: %s" msgstr "No se puede obtener encabezamiento de sección 0th: %s" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1822 #, c-format msgid "cannot update ELF header: %s" msgstr "No se puede actualizar encabezamiento ELF: %s" @@ -4073,7 +4078,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: ERROR INTERNO %d (%s-%s): %s" #: src/nm.c:398 src/nm.c:410 src/size.c:309 src/size.c:318 src/size.c:329 -#: src/strip.c:2155 +#: src/strip.c:2160 #, c-format msgid "while closing '%s'" msgstr "error al cerrar '%s'" @@ -4117,12 +4122,12 @@ msgstr "%s%s%s: no se reconoció el formato de fichero" msgid "cannot create search tree" msgstr "No se puede crear el árbol de búsqueda" -#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 src/readelf.c:536 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:793 src/readelf.c:536 #: src/readelf.c:1085 src/readelf.c:1245 src/readelf.c:1393 src/readelf.c:1579 -#: src/readelf.c:1785 src/readelf.c:1972 src/readelf.c:2182 src/readelf.c:2440 -#: src/readelf.c:2510 src/readelf.c:2592 src/readelf.c:3103 src/readelf.c:3139 -#: src/readelf.c:3202 src/readelf.c:7906 src/readelf.c:8986 src/readelf.c:9133 -#: src/readelf.c:9201 src/size.c:417 src/size.c:487 src/strip.c:503 +#: src/readelf.c:1785 src/readelf.c:1975 src/readelf.c:2202 src/readelf.c:2460 +#: src/readelf.c:2536 src/readelf.c:2623 src/readelf.c:3201 src/readelf.c:3237 +#: src/readelf.c:3300 src/readelf.c:8187 src/readelf.c:9273 src/readelf.c:9420 +#: src/readelf.c:9488 src/size.c:417 src/size.c:486 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "no se puede obtener índice de cadena de encabezamiento de sección" @@ -4208,15 +4213,15 @@ msgstr "No se especificó una operación.\n" msgid "while close `%s'" msgstr "mientras cierra `%s'" -#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2055 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2072 msgid "INVALID SYMBOL" msgstr "SÍMBOLO INVÁLIDO" -#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2088 +#: src/objdump.c:394 src/readelf.c:1914 src/readelf.c:2108 msgid "INVALID SECTION" msgstr "SECCIÓN INVÁLIDA" -#: src/objdump.c:510 +#: src/objdump.c:514 #, c-format msgid "" "\n" @@ -4227,21 +4232,21 @@ msgstr "" "REUBICACIÓN DE REGISTROS PARA [%s]:\n" "%-*s TIPO VALOR\n" -#: src/objdump.c:513 +#: src/objdump.c:517 msgid "OFFSET" msgstr "COMPENSACIÓN" -#: src/objdump.c:576 +#: src/objdump.c:582 #, c-format msgid "Contents of section %s:\n" msgstr "Contenido de la sección %s:\n" -#: src/objdump.c:697 +#: src/objdump.c:703 #, c-format msgid "cannot disassemble" msgstr "No se puede desensamblar" -#: src/objdump.c:736 +#: src/objdump.c:742 #, fuzzy, c-format msgid "cannot allocate memory" msgstr "No se puede asignar sección PLT: %s" @@ -4399,11 +4404,11 @@ msgstr "no se puede crear descriptor ELF: %s" msgid "cannot get section: %s" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9153 -#: src/unstrip.c:345 src/unstrip.c:376 src/unstrip.c:425 src/unstrip.c:533 -#: src/unstrip.c:550 src/unstrip.c:586 src/unstrip.c:784 src/unstrip.c:1052 -#: src/unstrip.c:1242 src/unstrip.c:1302 src/unstrip.c:1423 src/unstrip.c:1476 -#: src/unstrip.c:1583 src/unstrip.c:1772 +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9440 +#: src/unstrip.c:356 src/unstrip.c:387 src/unstrip.c:436 src/unstrip.c:544 +#: src/unstrip.c:561 src/unstrip.c:597 src/unstrip.c:795 src/unstrip.c:1063 +#: src/unstrip.c:1254 src/unstrip.c:1314 src/unstrip.c:1435 src/unstrip.c:1488 +#: src/unstrip.c:1595 src/unstrip.c:1784 #, c-format msgid "cannot get section header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" @@ -4413,8 +4418,8 @@ msgstr "No se puede obtener encabezamiento de sección: %s" msgid "cannot get section name" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/readelf.c:571 src/readelf.c:5207 src/readelf.c:7400 src/readelf.c:7502 -#: src/readelf.c:7660 +#: src/readelf.c:571 src/readelf.c:5398 src/readelf.c:7671 src/readelf.c:7773 +#: src/readelf.c:7939 #, c-format msgid "cannot get %s content: %s" msgstr "No se puede obtener el contenido %s: %s" @@ -4717,7 +4722,7 @@ msgstr "" " Sección para asignación de segmento:\n" " Secciones de segmento..." -#: src/readelf.c:1258 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1843 src/unstrip.c:1886 src/unstrip.c:1893 #, c-format msgid "cannot get program header: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" @@ -4760,8 +4765,8 @@ msgstr "<SÍMBOLO INVÁLIDO>" msgid "<INVALID SECTION>" msgstr "<SECCIÓN INVÁLIDA>" -#: src/readelf.c:1585 src/readelf.c:2188 src/readelf.c:2446 src/readelf.c:2516 -#: src/readelf.c:2798 src/readelf.c:2871 src/readelf.c:4474 +#: src/readelf.c:1585 src/readelf.c:2208 src/readelf.c:2466 src/readelf.c:2542 +#: src/readelf.c:2846 src/readelf.c:2920 src/readelf.c:4610 #, fuzzy, c-format msgid "invalid sh_link value in section %Zu" msgstr ".debug_line section inválida" @@ -4816,7 +4821,7 @@ msgstr "Ruta de ejecución de la biblioteca: [%s]\n" msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (bytes)\n" -#: src/readelf.c:1770 src/readelf.c:1957 +#: src/readelf.c:1770 src/readelf.c:1960 #, c-format msgid "" "\n" @@ -4825,7 +4830,7 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0<PRIx64>\n" -#: src/readelf.c:1788 src/readelf.c:1974 +#: src/readelf.c:1788 src/readelf.c:1978 #, c-format msgid "" "\n" @@ -4844,7 +4849,7 @@ msgstr[1] "" "Sección de reubicación [%2zu] '%s' para sección [%2u] '%s' en compensación " "%#0<PRIx64> contiene entradas %d:\n" -#: src/readelf.c:1803 +#: src/readelf.c:1803 src/readelf.c:1993 #, c-format msgid "" "\n" @@ -4869,21 +4874,21 @@ msgstr " Compensación Tipo Valor Nombre\n" msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 -#: src/readelf.c:1922 src/readelf.c:2042 src/readelf.c:2054 src/readelf.c:2068 -#: src/readelf.c:2087 src/readelf.c:2100 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1913 +#: src/readelf.c:1925 src/readelf.c:2059 src/readelf.c:2071 src/readelf.c:2085 +#: src/readelf.c:2107 src/readelf.c:2120 msgid "<INVALID RELOC>" msgstr "<REUBIC INVÁLIDA>" -#: src/readelf.c:1986 +#: src/readelf.c:2003 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:1988 +#: src/readelf.c:2005 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2196 +#: src/readelf.c:2216 #, c-format msgid "" "\n" @@ -4898,40 +4903,40 @@ msgstr[1] "" "\n" "La tabla de símbolos [%2u] '%s' contiene entradas %u:\n" -#: src/readelf.c:2201 +#: src/readelf.c:2221 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] "símbolos locales %lu Tabla de cadena: [%2u] '%s'\n" msgstr[1] " Símbolos locales %lu Tabla de cadenas: [%2u] '%s'\n" -#: src/readelf.c:2209 +#: src/readelf.c:2229 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Núm: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" -#: src/readelf.c:2211 +#: src/readelf.c:2231 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" -#: src/readelf.c:2231 +#: src/readelf.c:2251 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2319 +#: src/readelf.c:2339 #, c-format msgid "bad dynamic symbol" msgstr "símbolo dinámico erróneo" -#: src/readelf.c:2401 +#: src/readelf.c:2421 msgid "none" msgstr "nada" -#: src/readelf.c:2418 +#: src/readelf.c:2438 msgid "| <unknown>" msgstr "| <desconocido>" -#: src/readelf.c:2449 +#: src/readelf.c:2469 #, c-format msgid "" "\n" @@ -4952,17 +4957,17 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2470 +#: src/readelf.c:2490 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n" -#: src/readelf.c:2483 +#: src/readelf.c:2503 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n" -#: src/readelf.c:2520 +#: src/readelf.c:2546 #, c-format msgid "" "\n" @@ -4983,18 +4988,18 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2548 +#: src/readelf.c:2574 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" " %#06x: Versión: %hd Banderas: %s Índice: %hd Conteo: %hd Nombre: %s\n" -#: src/readelf.c:2563 +#: src/readelf.c:2589 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Principal %d: %s\n" -#: src/readelf.c:2802 +#: src/readelf.c:2850 #, c-format msgid "" "\n" @@ -5015,15 +5020,15 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'" -#: src/readelf.c:2830 +#: src/readelf.c:2878 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:2835 +#: src/readelf.c:2883 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:2876 +#: src/readelf.c:2925 #, c-format msgid "" "\n" @@ -5048,22 +5053,22 @@ msgstr[1] "" " Dirección: %#0*<PRIx64> Compensación: %#08<PRIx64> Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2898 +#: src/readelf.c:2947 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Longitud Número % of total Cobertura\n" -#: src/readelf.c:2900 +#: src/readelf.c:2949 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:2907 +#: src/readelf.c:2956 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:2920 +#: src/readelf.c:2969 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5072,12 +5077,27 @@ msgstr "" " Número promedio de pruebas: búsqueda exitosa: %f\n" " búsqueda sin éxito: %f\n" -#: src/readelf.c:2938 src/readelf.c:2980 src/readelf.c:3021 +#: src/readelf.c:2987 src/readelf.c:3042 src/readelf.c:3098 #, c-format msgid "cannot get data for section %d: %s" msgstr "No se pueden obtener datos para la sección %d: %s" -#: src/readelf.c:3075 +#: src/readelf.c:2995 +#, fuzzy, c-format +msgid "invalid data in sysv.hash section %d" +msgstr "Datos inválidos en sección [%zu] '%s'" + +#: src/readelf.c:3050 +#, fuzzy, c-format +msgid "invalid data in sysv.hash64 section %d" +msgstr "Datos inválidos en sección [%zu] '%s'" + +#: src/readelf.c:3106 +#, fuzzy, c-format +msgid "invalid data in gnu.hash section %d" +msgstr "Datos inválidos en sección [%zu] '%s'" + +#: src/readelf.c:3173 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5087,7 +5107,7 @@ msgstr "" " Tamaño de Bitmask: %zu bytes %<PRIuFAST32>%% bits establecen segundo " "cambio de dispersión: %u\n" -#: src/readelf.c:3150 +#: src/readelf.c:3248 #, c-format msgid "" "\n" @@ -5104,7 +5124,7 @@ msgstr[1] "" "Sección de lista de biblioteca [%2zu] '%s' en compensación %#0<PRIx64> " "contiene entradas %d:\n" -#: src/readelf.c:3164 +#: src/readelf.c:3262 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5112,7 +5132,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:3214 +#: src/readelf.c:3312 #, c-format msgid "" "\n" @@ -5123,140 +5143,140 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de %<PRIu64> bytes con " "desplazamiento %#0<PRIx64>:\n" -#: src/readelf.c:3230 +#: src/readelf.c:3329 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3256 +#: src/readelf.c:3358 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" -#: src/readelf.c:3288 +#: src/readelf.c:3397 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" -#: src/readelf.c:3293 +#: src/readelf.c:3402 #, c-format msgid " File: %11<PRIu32>\n" msgstr " File: %11<PRIu32>\n" -#: src/readelf.c:3328 +#: src/readelf.c:3451 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3331 +#: src/readelf.c:3454 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3334 +#: src/readelf.c:3457 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3341 +#: src/readelf.c:3467 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3344 +#: src/readelf.c:3470 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3389 +#: src/readelf.c:3515 #, c-format msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3392 +#: src/readelf.c:3518 #, c-format msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3397 +#: src/readelf.c:3523 #, c-format msgid "%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3400 +#: src/readelf.c:3526 #, c-format msgid "%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3406 +#: src/readelf.c:3532 #, c-format msgid "%s+%#<PRIx64> <%s>" msgstr "%s+%#<PRIx64> <%s>" -#: src/readelf.c:3409 +#: src/readelf.c:3535 #, c-format msgid "%s+%#0*<PRIx64> <%s>" msgstr "%s+%#0*<PRIx64> <%s>" -#: src/readelf.c:3413 +#: src/readelf.c:3539 #, c-format msgid "%#<PRIx64> <%s>" msgstr "%#<PRIx64> <%s>" -#: src/readelf.c:3416 +#: src/readelf.c:3542 #, c-format msgid "%#0*<PRIx64> <%s>" msgstr "%#0*<PRIx64> <%s>" -#: src/readelf.c:3421 +#: src/readelf.c:3547 #, c-format msgid "%s+%#<PRIx64>" msgstr "%s+%#<PRIx64>" -#: src/readelf.c:3424 +#: src/readelf.c:3550 #, c-format msgid "%s+%#0*<PRIx64>" msgstr "%s+%#0*<PRIx64>" -#: src/readelf.c:3806 +#: src/readelf.c:3932 msgid "empty block" msgstr "bloque vacío" -#: src/readelf.c:3809 +#: src/readelf.c:3935 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:4203 +#: src/readelf.c:4332 #, c-format msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" -#: src/readelf.c:4260 +#: src/readelf.c:4389 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4267 +#: src/readelf.c:4396 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4274 +#: src/readelf.c:4403 #, fuzzy, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4356 +#: src/readelf.c:4492 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <MATERIAL INUTIL SIN UTILIZAR EN EL RESTO DE LA SECCION>\n" -#: src/readelf.c:4364 +#: src/readelf.c:4500 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <MATERIAL INUTIL NO UTILIZADO> ... %<PRIu64> bytes ...\n" -#: src/readelf.c:4390 +#: src/readelf.c:4526 #, c-format msgid "" "\n" @@ -5267,7 +5287,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " [ Código]\n" -#: src/readelf.c:4398 +#: src/readelf.c:4534 #, c-format msgid "" "\n" @@ -5276,30 +5296,30 @@ msgstr "" "\n" "Sección de abreviatura en compensación %<PRIu64>:\n" -#: src/readelf.c:4411 +#: src/readelf.c:4547 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:4427 +#: src/readelf.c:4563 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] compensación: %<PRId64>, hijos: %s, etiqueta: %s\n" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "yes" msgstr "sí" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "no" msgstr "no" -#: src/readelf.c:4464 src/readelf.c:4537 +#: src/readelf.c:4600 src/readelf.c:4673 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "no se ha podido obtener contenido de .debug_aranges: %s" -#: src/readelf.c:4479 +#: src/readelf.c:4615 #, c-format msgid "" "\n" @@ -5314,12 +5334,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entradas %zu:\n" -#: src/readelf.c:4510 +#: src/readelf.c:4646 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4512 +#: src/readelf.c:4648 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5327,8 +5347,8 @@ msgstr "" " Inicio [%*zu]: %0#*<PRIx64>, longitud: %5<PRIu64>, compensación CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:4542 src/readelf.c:4696 src/readelf.c:5217 src/readelf.c:6131 -#: src/readelf.c:6632 src/readelf.c:6752 src/readelf.c:6908 src/readelf.c:7331 +#: src/readelf.c:4678 src/readelf.c:4832 src/readelf.c:5408 src/readelf.c:6362 +#: src/readelf.c:6894 src/readelf.c:7014 src/readelf.c:7177 src/readelf.c:7602 #, c-format msgid "" "\n" @@ -5337,7 +5357,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" -#: src/readelf.c:4555 src/readelf.c:6157 +#: src/readelf.c:4691 src/readelf.c:6388 #, c-format msgid "" "\n" @@ -5346,106 +5366,111 @@ msgstr "" "\n" "Tabla en compensación %Zu:\n" -#: src/readelf.c:4559 src/readelf.c:5241 src/readelf.c:6166 +#: src/readelf.c:4695 src/readelf.c:5432 src/readelf.c:6399 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:4575 +#: src/readelf.c:4711 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:4587 +#: src/readelf.c:4723 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4591 +#: src/readelf.c:4727 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:4602 +#: src/readelf.c:4738 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:4608 +#: src/readelf.c:4744 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:4612 +#: src/readelf.c:4748 #, fuzzy, c-format msgid "unsupported address size" msgstr "no hay valor de dirección" -#: src/readelf.c:4617 +#: src/readelf.c:4753 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:4621 +#: src/readelf.c:4757 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:4661 +#: src/readelf.c:4797 #, fuzzy, c-format msgid " %s..%s (%<PRIx64>)\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4664 +#: src/readelf.c:4800 #, fuzzy, c-format msgid " %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4673 +#: src/readelf.c:4809 #, c-format msgid " %Zu padding bytes\n" msgstr "" -#: src/readelf.c:4691 +#: src/readelf.c:4827 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:4721 src/readelf.c:6659 +#: src/readelf.c:4857 src/readelf.c:6921 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <DATOS INVÁLIDOS>\n" -#: src/readelf.c:4743 src/readelf.c:6681 +#: src/readelf.c:4879 src/readelf.c:6943 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] (dirección base) %s\n" -#: src/readelf.c:4750 src/readelf.c:6688 +#: src/readelf.c:4886 src/readelf.c:6950 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacía\n" -#: src/readelf.c:4761 +#: src/readelf.c:4897 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4763 +#: src/readelf.c:4899 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:5196 +#: src/readelf.c:5078 +#, fuzzy +msgid " <INVALID DATA>\n" +msgstr " <DATOS INVÁLIDOS>\n" + +#: src/readelf.c:5387 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:5213 +#: src/readelf.c:5404 #, c-format msgid "" "\n" @@ -5455,7 +5480,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#<PRIx64>:\n" -#: src/readelf.c:5263 +#: src/readelf.c:5454 #, c-format msgid "" "\n" @@ -5464,50 +5489,50 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:5348 +#: src/readelf.c:5547 src/readelf.c:5702 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:5360 +#: src/readelf.c:5562 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:5366 +#: src/readelf.c:5568 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:5477 +#: src/readelf.c:5679 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:5484 +#: src/readelf.c:5686 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:5511 +#: src/readelf.c:5723 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr "Puntero %-26sLSDA: %#<PRIx64>\n" -#: src/readelf.c:5563 +#: src/readelf.c:5778 #, c-format msgid "cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:5572 +#: src/readelf.c:5787 #, c-format msgid "cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:5587 +#: src/readelf.c:5802 #, c-format msgid "cannot get attribute value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:5880 +#: src/readelf.c:6101 #, c-format msgid "" "\n" @@ -5518,7 +5543,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " [Offset]\n" -#: src/readelf.c:5912 +#: src/readelf.c:6133 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5531,7 +5556,7 @@ msgstr "" "Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n" " Tipo de firma: %#<PRIx64>, Tipo de compensación: %#<PRIx64>\n" -#: src/readelf.c:5921 +#: src/readelf.c:6142 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5542,34 +5567,34 @@ msgstr "" " Versión: %<PRIu16>, Compensación de sección de abreviatura: %<PRIu64>, " "Tamaño de dirección: %<PRIu8>, Tamaño de compensación: %<PRIu8>\n" -#: src/readelf.c:5946 +#: src/readelf.c:6167 #, c-format msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s" msgstr "no se puede obtener DIE en compensación %<PRIu64> en sección '%s': %s" -#: src/readelf.c:5960 +#: src/readelf.c:6181 #, c-format msgid "cannot get DIE offset: %s" msgstr "no se puede obtener DIE en compensación: %s" -#: src/readelf.c:5969 +#: src/readelf.c:6190 #, 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 compensación%<PRIu64> en sección " "'%s': %s" -#: src/readelf.c:6001 +#: src/readelf.c:6222 #, c-format msgid "cannot get next DIE: %s\n" msgstr "No se puede obtener próximo DIE: %s\n" -#: src/readelf.c:6009 +#: src/readelf.c:6230 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:6045 +#: src/readelf.c:6266 #, fuzzy, c-format msgid "" "\n" @@ -5579,12 +5604,12 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" -#: src/readelf.c:6144 +#: src/readelf.c:6375 #, c-format msgid "cannot get line data section data: %s" msgstr "No se puede obtener sección de datos de línea: %s" -#: src/readelf.c:6212 +#: src/readelf.c:6445 #, c-format msgid "" "\n" @@ -5613,19 +5638,19 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:6233 +#: src/readelf.c:6466 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "datos inválidos en compensación %tu en sección [%zu] '%s'" -#: src/readelf.c:6248 +#: src/readelf.c:6481 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] " [%*<PRIuFAST8>] argumento %hhu \n" msgstr[1] " [%*<PRIuFAST8>] argumento %hhu\n" -#: src/readelf.c:6256 +#: src/readelf.c:6489 msgid "" "\n" "Directory table:" @@ -5633,7 +5658,7 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:6272 +#: src/readelf.c:6505 msgid "" "\n" "File name table:\n" @@ -5643,7 +5668,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:6301 +#: src/readelf.c:6540 msgid "" "\n" "Line number statements:" @@ -5651,214 +5676,224 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:6377 +#: src/readelf.c:6591 +#, fuzzy, c-format +msgid "invalid maximum operations per instruction is zero" +msgstr "longitud mínima inválida de tamaño de cadena coincidente" + +#: src/readelf.c:6627 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr "" " opcode especial %u: dirección+%u = %s, op_index = %u, línea%+d = %zu\n" -#: src/readelf.c:6382 +#: src/readelf.c:6632 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " opcode especial %u: dirección+%u = %s, línea%+d = %zu\n" -#: src/readelf.c:6402 +#: src/readelf.c:6652 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:6407 +#: src/readelf.c:6657 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:6424 +#: src/readelf.c:6676 #, fuzzy, c-format msgid " set address to %s\n" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:6445 +#: src/readelf.c:6703 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" "definir nuevo archivo: dir=%u, mtime=%<PRIu64>, longitud=%<PRIu64>, nombre=" "%s\n" -#: src/readelf.c:6458 +#: src/readelf.c:6716 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" -#: src/readelf.c:6463 +#: src/readelf.c:6721 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " -#: src/readelf.c:6475 +#: src/readelf.c:6733 msgid " copy" msgstr "Copiar" -#: src/readelf.c:6486 +#: src/readelf.c:6744 #, fuzzy, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr "dirección avanzada por %u a %s, op_index a %u\n" -#: src/readelf.c:6490 +#: src/readelf.c:6748 #, fuzzy, c-format msgid " advance address by %u to %s\n" msgstr "Dirección de avance por %u a %s\n" -#: src/readelf.c:6501 +#: src/readelf.c:6759 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " línea de avance por la constante %d a %<PRId64>\n" -#: src/readelf.c:6509 +#: src/readelf.c:6767 #, c-format msgid " set file to %<PRIu64>\n" msgstr " establecer archivo a %<PRIu64>\n" -#: src/readelf.c:6519 +#: src/readelf.c:6777 #, c-format msgid " set column to %<PRIu64>\n" msgstr " Establecer columna a %<PRIu64>\n" -#: src/readelf.c:6526 +#: src/readelf.c:6784 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr "Establecer '%s' a %<PRIuFAST8>\n" -#: src/readelf.c:6532 +#: src/readelf.c:6790 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:6541 +#: src/readelf.c:6803 #, fuzzy, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr "dirección avanzada por constante %u a %s, op_index a %u\n" -#: src/readelf.c:6545 +#: src/readelf.c:6807 #, fuzzy, c-format msgid " advance address by constant %u to %s\n" msgstr "Dirección de avance por constante %u a %s\n" -#: src/readelf.c:6563 +#: src/readelf.c:6825 #, fuzzy, c-format msgid " advance address by fixed value %u to %s\n" msgstr "dirección de avance por valor corregido %u a %s\n" -#: src/readelf.c:6572 +#: src/readelf.c:6834 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" -#: src/readelf.c:6577 +#: src/readelf.c:6839 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:6586 +#: src/readelf.c:6848 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" -#: src/readelf.c:6595 +#: src/readelf.c:6857 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] " opcódigo con parámetro %<PRIu8> desconocido:" msgstr[1] " opcódigo con parámetros %<PRIu8> desconocido:" -#: src/readelf.c:6627 +#: src/readelf.c:6889 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:6702 +#: src/readelf.c:6964 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6704 +#: src/readelf.c:6966 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6711 +#: src/readelf.c:6973 src/readelf.c:7858 msgid " <INVALID DATA>\n" msgstr " <DATOS INVÁLIDOS>\n" -#: src/readelf.c:6763 src/readelf.c:6917 +#: src/readelf.c:7025 src/readelf.c:7186 #, 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:6842 +#: src/readelf.c:7104 #, 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:6958 +#: src/readelf.c:7127 +#, fuzzy, c-format +msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" +msgstr "%*s*** cadena no finalizada al final de la sección" + +#: src/readelf.c:7227 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:6970 +#: src/readelf.c:7239 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:6976 src/readelf.c:7689 +#: src/readelf.c:7245 src/readelf.c:7968 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6983 +#: src/readelf.c:7252 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>\n" msgstr " Dirección de punto de entrada: %#<PRIx64>\n" -#: src/readelf.c:6986 +#: src/readelf.c:7255 #, fuzzy, c-format msgid " Offset length: %<PRIu8>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:6994 +#: src/readelf.c:7263 #, fuzzy, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:7007 +#: src/readelf.c:7276 #, fuzzy, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " opcódigo con parámetro %<PRIu8> desconocido:" -#: src/readelf.c:7014 +#: src/readelf.c:7283 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:7026 +#: src/readelf.c:7295 #, fuzzy, c-format msgid " %<PRIu8> arguments:" msgstr " [%*<PRIuFAST8>] argumento %hhu \n" -#: src/readelf.c:7054 +#: src/readelf.c:7323 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:7289 +#: src/readelf.c:7560 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:7317 +#: src/readelf.c:7588 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" " Compensación [%5d] DIE: %6<PRId64>, Compensación CU DIE: %6<PRId64>, " "nombre: %s\n" -#: src/readelf.c:7358 +#: src/readelf.c:7629 #, c-format msgid "" "\n" @@ -5869,12 +5904,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64>:\n" " %*s String\n" -#: src/readelf.c:7372 +#: src/readelf.c:7643 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:7392 +#: src/readelf.c:7663 #, c-format msgid "" "\n" @@ -5883,7 +5918,7 @@ msgstr "" "\n" "Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:7494 +#: src/readelf.c:7765 #, c-format msgid "" "\n" @@ -5892,22 +5927,22 @@ msgstr "" "\n" "Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:7517 +#: src/readelf.c:7788 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:7529 +#: src/readelf.c:7800 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:7543 +#: src/readelf.c:7815 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:7556 +#: src/readelf.c:7828 msgid "" "\n" " Call site table:" @@ -5915,7 +5950,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:7570 +#: src/readelf.c:7842 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5928,12 +5963,12 @@ msgstr "" " Landing pad: %#<PRIx64>\n" " Action: %u\n" -#: src/readelf.c:7630 +#: src/readelf.c:7909 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:7651 +#: src/readelf.c:7930 #, fuzzy, c-format msgid "" "\n" @@ -5942,37 +5977,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:7680 +#: src/readelf.c:7959 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:7698 +#: src/readelf.c:7977 #, fuzzy, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:7705 +#: src/readelf.c:7984 #, fuzzy, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:7712 +#: src/readelf.c:7991 #, fuzzy, c-format msgid " address offset: %#<PRIx32>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:7719 +#: src/readelf.c:7998 #, fuzzy, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " (compensación: %#<PRIx64>)" -#: src/readelf.c:7726 +#: src/readelf.c:8005 #, fuzzy, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " (fin de compensación: %#<PRIx64>)" -#: src/readelf.c:7733 +#: src/readelf.c:8012 #, fuzzy, c-format msgid "" "\n" @@ -5981,7 +6016,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:7755 +#: src/readelf.c:8034 #, fuzzy, c-format msgid "" "\n" @@ -5990,7 +6025,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:7781 +#: src/readelf.c:8060 #, fuzzy, c-format msgid "" "\n" @@ -5999,7 +6034,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#<PRIx64> contiene entrada %zu:\n" -#: src/readelf.c:7810 +#: src/readelf.c:8089 #, fuzzy, c-format msgid "" "\n" @@ -6008,17 +6043,17 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0<PRIx64>\n" -#: src/readelf.c:7895 +#: src/readelf.c:8176 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "no se puede depurar descriptor de contexto: %s" -#: src/readelf.c:8053 src/readelf.c:8659 src/readelf.c:8770 src/readelf.c:8828 +#: src/readelf.c:8336 src/readelf.c:8942 src/readelf.c:9053 src/readelf.c:9111 #, c-format msgid "cannot convert core note data: %s" msgstr "no es posible convertir datos de la nota principal: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8683 #, c-format msgid "" "\n" @@ -6027,21 +6062,21 @@ msgstr "" "\n" "%*s... <repeats %u more times> ..." -#: src/readelf.c:8903 +#: src/readelf.c:9190 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:8921 +#: src/readelf.c:9208 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:8971 +#: src/readelf.c:9258 #, c-format msgid "cannot get content of note section: %s" msgstr "no se puede obtener el contenido de sección de nota: %s" -#: src/readelf.c:8998 +#: src/readelf.c:9285 #, c-format msgid "" "\n" @@ -6050,7 +6085,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de %<PRIu64> bytes en compensación %#0<PRIx64>:\n" -#: src/readelf.c:9021 +#: src/readelf.c:9308 #, c-format msgid "" "\n" @@ -6059,7 +6094,7 @@ msgstr "" "\n" "Segmento de nota de %<PRIu64> bytes en compensación %#0<PRIx64>:\n" -#: src/readelf.c:9067 +#: src/readelf.c:9354 #, c-format msgid "" "\n" @@ -6068,12 +6103,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:9073 src/readelf.c:9096 +#: src/readelf.c:9360 src/readelf.c:9383 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "no se pueden obtener datos para sección [%Zu] '%s': %s" -#: src/readelf.c:9077 +#: src/readelf.c:9364 #, c-format msgid "" "\n" @@ -6083,7 +6118,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:9090 +#: src/readelf.c:9377 #, c-format msgid "" "\n" @@ -6092,7 +6127,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:9100 +#: src/readelf.c:9387 #, c-format msgid "" "\n" @@ -6102,7 +6137,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene %<PRIu64> bytes en compensación " "%#0<PRIx64>:\n" -#: src/readelf.c:9148 +#: src/readelf.c:9435 #, c-format msgid "" "\n" @@ -6111,7 +6146,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:9177 +#: src/readelf.c:9464 #, c-format msgid "" "\n" @@ -6120,12 +6155,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:9234 +#: src/readelf.c:9521 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "no se puede obtener el índice de símbolo de archivo '%s': %s" -#: src/readelf.c:9237 +#: src/readelf.c:9524 #, c-format msgid "" "\n" @@ -6134,7 +6169,7 @@ msgstr "" "\n" "Archivo '%s' no tiene índice de símbolo\n" -#: src/readelf.c:9241 +#: src/readelf.c:9528 #, c-format msgid "" "\n" @@ -6143,12 +6178,12 @@ msgstr "" "\n" "Índice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:9259 +#: src/readelf.c:9546 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "no es posible extraer miembro en compensación %Zu en '%s': %s" -#: src/readelf.c:9264 +#: src/readelf.c:9551 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" @@ -6214,12 +6249,12 @@ msgstr "Radical inválido: %s" msgid "%s: file format not recognized" msgstr "%s: No se reconoce el formato del fichero" -#: src/size.c:438 src/size.c:571 +#: src/size.c:437 src/size.c:570 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:596 +#: src/size.c:595 msgid "(TOTALS)\n" msgstr "(TOTALES)\n" @@ -6347,7 +6382,7 @@ msgstr "opción -f especificada dos veces" msgid "-F option specified twice" msgstr "opción -F especificada dos veces" -#: src/strip.c:249 src/unstrip.c:117 +#: src/strip.c:249 src/unstrip.c:121 #, c-format msgid "-o option specified twice" msgstr "opción -o especificada dos veces" @@ -6377,82 +6412,87 @@ msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" msgid "cannot open EBL backend" msgstr "No se puede abrir el segundo plano EBL" -#: src/strip.c:518 src/strip.c:542 +#: src/strip.c:508 +#, fuzzy, c-format +msgid "cannot get number of phdrs" +msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" + +#: src/strip.c:523 src/strip.c:547 #, c-format msgid "cannot create new file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:608 +#: src/strip.c:613 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:930 src/strip.c:1019 +#: src/strip.c:935 src/strip.c:1024 #, c-format msgid "while generating output file: %s" msgstr "al generar fichero de salida: %s" -#: src/strip.c:992 src/strip.c:1957 +#: src/strip.c:997 src/strip.c:1962 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1006 +#: src/strip.c:1011 #, c-format msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1057 src/strip.c:1114 +#: src/strip.c:1062 src/strip.c:1119 #, c-format msgid "while create section header section: %s" msgstr "al crear sección de encabezamiento de sección: %s" -#: src/strip.c:1063 +#: src/strip.c:1068 #, c-format msgid "cannot allocate section data: %s" msgstr "no se puede asignar espacio para los datos: %s" -#: src/strip.c:1123 +#: src/strip.c:1128 #, c-format msgid "while create section header string table: %s" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:1752 +#: src/strip.c:1757 #, fuzzy, c-format msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:1869 src/strip.c:1979 +#: src/strip.c:1874 src/strip.c:1984 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:1880 +#: src/strip.c:1885 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:1902 +#: src/strip.c:1907 #, c-format msgid "while computing checksum for debug information" msgstr "al computar la suma de verificación para información de depuración" -#: src/strip.c:1965 +#: src/strip.c:1970 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error al leer el fichero: %s" -#: src/strip.c:2004 src/strip.c:2024 +#: src/strip.c:2009 src/strip.c:2029 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2061 src/strip.c:2068 +#: src/strip.c:2066 src/strip.c:2073 #, c-format msgid "error while finishing '%s': %s" msgstr "Error al terminar '%s': %s" -#: src/strip.c:2091 src/strip.c:2148 +#: src/strip.c:2096 src/strip.c:2153 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" @@ -6491,211 +6531,220 @@ msgstr "Aplicar reubicaciones a contenido de sección en archivos ET_REL" msgid "Only list module and file names, build IDs" msgstr "Solamente listar módulo y nombres de archivo, crear los ID" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "opción -d especificada dos veces" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "Sólo se permite usar -o ó -d " -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "-n no puede utilizarse con archivos explícitos o con -o ó -d" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "Directorio de salida '%s'" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "dos argumentos de archivos se requieren exactamente" -#: src/unstrip.c:197 +#: src/unstrip.c:204 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "No se permiten las opciones -m, -a, -R, ni -i con archivos explícitos" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "se requiere -o ó -d cuando se utilizan archivos implícitos" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "no se puede crear el encabezamiento ELF: %s" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "no se puede copiar encabezamiento ELF: %s" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:262 src/unstrip.c:1832 src/unstrip.c:1876 +#, fuzzy, c-format +msgid "cannot get number of program headers: %s" +msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" + +#: src/unstrip.c:267 src/unstrip.c:1836 #, c-format msgid "cannot create program headers: %s" msgstr "No pueden crear encabezamientos de programa: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:273 #, c-format msgid "cannot copy program header: %s" msgstr "no puede copiar encabezamiento de programa: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:283 #, c-format msgid "cannot copy section header: %s" msgstr "no se puede copiar encabezamiento de sección: %s" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:286 src/unstrip.c:1513 #, c-format msgid "cannot get section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:288 src/unstrip.c:1515 #, c-format msgid "cannot copy section data: %s" msgstr "no pueden copiar datos de sección: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:312 #, c-format msgid "cannot create directory '%s'" msgstr "no se puede crear el directorio '%s'" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:352 src/unstrip.c:769 src/unstrip.c:1547 #, c-format msgid "cannot get symbol table entry: %s" msgstr "no se puede obtener entrada de tabla de símbolos: %s" -#: src/unstrip.c:357 src/unstrip.c:575 src/unstrip.c:596 src/unstrip.c:608 -#: src/unstrip.c:1556 src/unstrip.c:1686 src/unstrip.c:1710 +#: src/unstrip.c:368 src/unstrip.c:586 src/unstrip.c:607 src/unstrip.c:619 +#: src/unstrip.c:1568 src/unstrip.c:1698 src/unstrip.c:1722 #, c-format msgid "cannot update symbol table: %s" msgstr "no se puede actualizar tabla de símbolos: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:378 #, c-format msgid "cannot update section header: %s" msgstr "no se puede actualizar encabezamiento de sección: %s" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:417 src/unstrip.c:428 #, c-format msgid "cannot update relocation: %s" msgstr "no se puede actualizar reubicación: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:515 #, c-format msgid "cannot get symbol version: %s" msgstr "no se puede obtener versión de símbolo: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:527 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "tipo de sección inesperado en [%Zu] con sh_link para symtab" -#: src/unstrip.c:764 +#: src/unstrip.c:775 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "compensación de cadena inválida en símbolo [%Zu]" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:917 src/unstrip.c:1258 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "no se puede leer nombre [%Zu]: %s" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:958 src/unstrip.c:977 src/unstrip.c:1010 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "no se puede leer sección '.gnu.prelink_undo': %s" -#: src/unstrip.c:987 +#: src/unstrip.c:998 #, c-format msgid "invalid contents in '%s' section" msgstr "contenido inválido en sección '%s'" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1053 src/unstrip.c:1378 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1178 src/unstrip.c:1193 src/unstrip.c:1459 #, c-format msgid "cannot add section name to string table: %s" msgstr "no se puede añadir nombre de sección a tabla de cadenas: %s" -#: src/unstrip.c:1190 +#: src/unstrip.c:1202 #, c-format msgid "cannot update section header string table data: %s" msgstr "" "no se pueden actualizar datos de tabla de cadenas de encabezamiento de " "sección: %s" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1229 src/unstrip.c:1233 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "no se puede obtener índice de sección de tabla de cadenas de encabezamiento " "de sección: %s" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1237 src/unstrip.c:1241 src/unstrip.c:1474 #, c-format msgid "cannot get section count: %s" msgstr "No se puede obtener cuenta de sección: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1244 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "más secciones en el archivo despojado que en el archivo de depuración -- " "¿argumentos invertidos?" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1303 src/unstrip.c:1393 #, c-format msgid "cannot read section header string table: %s" msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" -#: src/unstrip.c:1441 +#: src/unstrip.c:1453 #, c-format msgid "cannot add new section: %s" msgstr "No se puede añadir nueva sección: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1555 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:1781 +#: src/unstrip.c:1793 #, c-format msgid "cannot read section data: %s" msgstr "no se puede leer la sección de datos: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1814 #, c-format msgid "cannot get ELF header: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1846 #, c-format msgid "cannot update program header: %s" msgstr "no se puede actualizar encabezamiento de programa: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1851 src/unstrip.c:1934 #, c-format msgid "cannot write output file: %s" msgstr "no se puede escribir al archivo de salida: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1903 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "datos DWARF no se ajustan para polarización de pre-enlace; considere prelink " "-u" -#: src/unstrip.c:1886 +#: src/unstrip.c:1906 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6703,58 +6752,77 @@ msgstr "" "Datos DWARF en '%s' no se ajustan a polarización de pre-enlace; considere " "prelink -u" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1925 src/unstrip.c:1976 src/unstrip.c:1988 src/unstrip.c:2074 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "no se puede crear un descriptor ELF: %s" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" -msgstr "Al parecer '%s' y '%s'no coinciden" +#: src/unstrip.c:1967 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1969 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1992 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1995 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1998 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:2001 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:2031 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "no se puede hallar archivo obtenido para módulo '%s': %s " -#: src/unstrip.c:1998 +#: src/unstrip.c:2035 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "No se puede abrir el archivo '%s' obtenido para módulo '%s': %s" -#: src/unstrip.c:2013 +#: src/unstrip.c:2050 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "no puede hallar archivo de depuración para módulo '%s': %su" -#: src/unstrip.c:2017 +#: src/unstrip.c:2054 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "No puede abrir archivo de depuración '%s' para módulo '%s': %s" -#: src/unstrip.c:2030 +#: src/unstrip.c:2067 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "No se obtuvo el archivo '%s' de módulo '%s' " -#: src/unstrip.c:2061 +#: src/unstrip.c:2098 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" "No puede almacenar en cache direcciones de sección para módulo '%s': %s" -#: src/unstrip.c:2194 +#: src/unstrip.c:2231 #, c-format msgid "no matching modules found" msgstr "No se encontraron módulos coincidentes" -#: src/unstrip.c:2203 +#: src/unstrip.c:2240 #, c-format msgid "matched more than one module" msgstr "coincidió con más de un módulo" -#: src/unstrip.c:2250 +#: src/unstrip.c:2287 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6762,7 +6830,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2288 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" @@ -6812,6 +6880,17 @@ msgstr "" "file. DEBUGFILE is the separate debuginfo file name, or - if no debuginfo " "was found, or . if FILE contains the debug information." +#, fuzzy +#~ msgid "cannot attach to process" +#~ msgstr "No se puede crear el árbol de búsqueda" + +#, fuzzy +#~ msgid "cannot attach to core" +#~ msgstr "No se puede crear el árbol de búsqueda" + +#~ msgid "'%s' and '%s' do not seem to match" +#~ msgstr "Al parecer '%s' y '%s'no coinciden" + #~ msgid "unknown tag %hx" #~ msgstr "etiqueta %hx desconocida" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2014-05-20 10:15+0200\n" +"POT-Creation-Date: 2014-12-18 22:59+0100\n" "PO-Revision-Date: 2009-09-20 15:32+0900\n" "Last-Translator: Hyu_gabaru Ryu_ichi <[email protected]>\n" "Language-Team: Japanese <[email protected]>\n" @@ -19,8 +19,8 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3084 -#: src/readelf.c:3433 src/readelf.c:8002 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3182 +#: src/readelf.c:3559 src/readelf.c:8285 src/unstrip.c:2127 src/unstrip.c:2335 #, c-format msgid "memory exhausted" msgstr "メモリー消費済み" @@ -210,7 +210,12 @@ msgstr "不当な CFI セクション" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdw/dwarf_error.c:95 +#, fuzzy +msgid "invalid opcode" +msgstr "不当なオペランド" + +#: libdwfl/argp-std.c:46 src/unstrip.c:2277 msgid "Input selection options:" msgstr "選択オプションを入力してください:" @@ -250,34 +255,24 @@ msgstr "分離した debuginfo ファイルべきパスを探す" msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "-e か、-p、-k、-K、--core のひとつだけが認められます" -#: libdwfl/argp-std.c:177 -#, fuzzy -msgid "cannot attach to process" -msgstr "検索ツリーを生成できません" - -#: libdwfl/argp-std.c:231 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "カーネルシンボルをロードできません" -#: libdwfl/argp-std.c:235 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "カーネルモジュールを見つけられません" -#: libdwfl/argp-std.c:252 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "カーネルかモジュールを見つけられません" -#: libdwfl/argp-std.c:291 +#: libdwfl/argp-std.c:290 #, c-format msgid "cannot read ELF core file: %s" msgstr "ELF コアファイルを読めません: %s" -#: libdwfl/argp-std.c:307 -#, fuzzy -msgid "cannot attach to core" -msgstr "検索ツリーを生成できません" - -#: libdwfl/argp-std.c:314 +#: libdwfl/argp-std.c:311 msgid "No modules recognized in core file" msgstr "コアファイルの中にモジュールを認識できません" @@ -439,6 +434,11 @@ msgstr "" msgid "Invalid argument" msgstr "不当なパラメーター" +#: libdwfl/libdwflP.h:95 +#, fuzzy +msgid "Not an ET_CORE ELF file" +msgstr "不当な ELF ファイル" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "バックエンドがありません" @@ -539,7 +539,7 @@ msgstr "ソース演算子の大きさが無効" msgid "invalid size of destination operand" msgstr "宛先演算子の大きさが無効" -#: libelf/elf_error.c:87 src/readelf.c:5176 +#: libelf/elf_error.c:87 src/readelf.c:5367 #, c-format msgid "invalid encoding" msgstr "無効なエンコード" @@ -621,8 +621,8 @@ msgstr "データ/scnが不整合です" msgid "invalid section header" msgstr "不当なセクションヘッダー" -#: libelf/elf_error.c:187 src/readelf.c:6966 src/readelf.c:7412 -#: src/readelf.c:7513 src/readelf.c:7675 +#: libelf/elf_error.c:187 src/readelf.c:7235 src/readelf.c:7683 +#: src/readelf.c:7784 src/readelf.c:7954 #, c-format msgid "invalid data" msgstr "不当なデータ" @@ -718,10 +718,10 @@ msgstr "" msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:235 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:663 src/elflint.c:235 #: src/findtextrel.c:162 src/ld.c:949 src/nm.c:265 src/objdump.c:181 #: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 -#: src/strip.c:213 src/unstrip.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -732,10 +732,10 @@ msgstr "" "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" -#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:240 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:668 src/elflint.c:240 #: src/findtextrel.c:167 src/ld.c:954 src/nm.c:270 src/objdump.c:186 #: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 -#: src/strip.c:218 src/unstrip.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "%s によって書かれました。\n" @@ -1105,120 +1105,120 @@ msgstr "" msgid "cannot get symbol in '%s': %s" msgstr "" -#: src/elfcmp.c:372 +#: src/elfcmp.c:373 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "" -#: src/elfcmp.c:375 +#: src/elfcmp.c:376 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "" -#: src/elfcmp.c:421 src/elfcmp.c:490 +#: src/elfcmp.c:422 src/elfcmp.c:491 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "" -#: src/elfcmp.c:429 +#: src/elfcmp.c:430 #, fuzzy, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/elfcmp.c:439 +#: src/elfcmp.c:440 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "" -#: src/elfcmp.c:447 +#: src/elfcmp.c:448 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "" -#: src/elfcmp.c:462 +#: src/elfcmp.c:463 #, c-format msgid "%s %s differ: build ID length" msgstr "" -#: src/elfcmp.c:470 +#: src/elfcmp.c:471 #, c-format msgid "%s %s differ: build ID content" msgstr "" -#: src/elfcmp.c:479 +#: src/elfcmp.c:480 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "" -#: src/elfcmp.c:519 +#: src/elfcmp.c:520 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "" -#: src/elfcmp.c:523 +#: src/elfcmp.c:524 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "" -#: src/elfcmp.c:538 +#: src/elfcmp.c:539 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "" -#: src/elfcmp.c:571 src/elfcmp.c:576 +#: src/elfcmp.c:572 src/elfcmp.c:577 #, c-format msgid "cannot load data of '%s': %s" msgstr "" -#: src/elfcmp.c:595 src/elfcmp.c:601 +#: src/elfcmp.c:596 src/elfcmp.c:602 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "" -#: src/elfcmp.c:607 +#: src/elfcmp.c:608 #, c-format msgid "%s %s differ: program header %d" msgstr "" -#: src/elfcmp.c:631 +#: src/elfcmp.c:632 #, c-format msgid "%s %s differ: gap" msgstr "" -#: src/elfcmp.c:694 +#: src/elfcmp.c:695 #, c-format msgid "Invalid value '%s' for --gaps parameter." msgstr "" -#: src/elfcmp.c:722 src/findtextrel.c:221 src/ldgeneric.c:1757 +#: src/elfcmp.c:723 src/findtextrel.c:221 src/ldgeneric.c:1757 #: src/ldgeneric.c:4247 src/nm.c:381 src/ranlib.c:161 src/size.c:293 -#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1923 +#: src/unstrip.c:1952 #, c-format msgid "cannot open '%s'" msgstr "'%s' を開けません" -#: src/elfcmp.c:726 src/findtextrel.c:228 src/ranlib.c:178 +#: src/elfcmp.c:727 src/findtextrel.c:228 src/ranlib.c:178 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "" -#: src/elfcmp.c:731 +#: src/elfcmp.c:732 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "" -#: src/elfcmp.c:749 +#: src/elfcmp.c:750 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "" -#: src/elfcmp.c:759 +#: src/elfcmp.c:760 #, c-format msgid "cannot get content of section %zu: %s" msgstr "" -#: src/elfcmp.c:769 src/elfcmp.c:783 +#: src/elfcmp.c:770 src/elfcmp.c:784 #, c-format msgid "cannot get relocation: %s" msgstr "" @@ -1416,14 +1416,14 @@ msgstr "" "セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーを継" "続していません\n" -#: src/elflint.c:590 src/elflint.c:1450 src/elflint.c:1501 src/elflint.c:1607 -#: src/elflint.c:1932 src/elflint.c:2221 src/elflint.c:2735 src/elflint.c:2897 -#: src/elflint.c:3027 src/elflint.c:3199 src/elflint.c:4101 +#: src/elflint.c:590 src/elflint.c:1457 src/elflint.c:1508 src/elflint.c:1614 +#: src/elflint.c:1939 src/elflint.c:2228 src/elflint.c:2742 src/elflint.c:2904 +#: src/elflint.c:3034 src/elflint.c:3206 src/elflint.c:4108 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:603 src/elflint.c:1614 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1535,12 +1535,12 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: COMMON セクションの機能は意味がありませ" "ん\n" -#: src/elflint.c:797 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "セクション [%2d] '%s': シンボル %zu: st_value 境界外\n" -#: src/elflint.c:803 src/elflint.c:828 src/elflint.c:871 +#: src/elflint.c:810 src/elflint.c:835 src/elflint.c:878 #, c-format msgid "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " @@ -1549,7 +1549,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu は参照されるセクション [%2d] '%s' とは完" "全に一致しません\n" -#: src/elflint.c:812 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1558,7 +1558,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' は " "SHF_TLS フラグが設定されていません\n" -#: src/elflint.c:822 src/elflint.c:864 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1567,7 +1567,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: st_value 参照されるセクション [%2d] " "'%s' の境界外\n" -#: src/elflint.c:849 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" @@ -1575,7 +1575,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目がない TLS シ" "ンボル\n" -#: src/elflint.c:857 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1584,7 +1584,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' の" "st_value 不足\n" -#: src/elflint.c:884 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1593,7 +1593,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外のローカルシン" "ボル\n" -#: src/elflint.c:891 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1602,12 +1602,12 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外の非ローカルシ" "ンボル\n" -#: src/elflint.c:898 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "セクション [%2d] '%s': シンボル %zu: 非ローカルセクションシンボル\n" -#: src/elflint.c:948 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1616,7 +1616,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルが間違ったセクション " "[%2d] を参照しています\n" -#: src/elflint.c:955 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1625,7 +1625,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはセクション [%2d] '%s' " "を参照しています\n" -#: src/elflint.c:971 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not " @@ -1634,7 +1634,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボル値 %#<PRIx64> は %s のセ" "クションアドレス %#<PRIx64> と一致しません\n" -#: src/elflint.c:978 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not " @@ -1643,7 +1643,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルサイズ %<PRIu64> は %s " "のセクションサイズ %<PRIu64> と一致しません\n" -#: src/elflint.c:986 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1652,7 +1652,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはありますが、.got セク" "ションがありません\n" -#: src/elflint.c:1002 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic " @@ -1661,7 +1661,7 @@ msgstr "" "セクション [%2d] '%s': _DYNAMIC_ シンボル値 %#<PRIx64> は動的セグメントアドレ" "ス %#<PRIx64> と一致しません\n" -#: src/elflint.c:1009 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic " @@ -1670,7 +1670,7 @@ msgstr "" "セクション [%2d] '%s': _DYNAMIC シンボルサイズ %<PRIu64> は動的セグメントサイ" "ズ %<PRIu64> と一致しません\n" -#: src/elflint.c:1022 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1679,24 +1679,24 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 省略以外の可視性を持った動的シンボルテー" "ブル中のシンボル\n" -#: src/elflint.c:1026 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "" "セクション [%2d] '%s': シンボル %zu: st_other 中に設定された不明なビット\n" -#: src/elflint.c:1075 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "セクション [%2d] '%s': この RELA セクション用に使われる DT_RELCOUNT\n" -#: src/elflint.c:1086 src/elflint.c:1138 +#: src/elflint.c:1093 src/elflint.c:1145 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" "セクション [%2d] '%s': このセクション用には高すぎる DT_RELCOUNT 値 %d\n" -#: src/elflint.c:1111 src/elflint.c:1163 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1705,7 +1705,7 @@ msgstr "" "セクション [%2d] '%s': UT_RELOCOUNT で指定されたインデックス %d 後の相対リロ" "ケーション\n" -#: src/elflint.c:1117 src/elflint.c:1169 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1714,51 +1714,51 @@ msgstr "" "セクション [%2d] '%s': インデックス %zu での非相対リロケーション; %d 相対リ" "ロケーションで指定された DT_RELCOUNT\n" -#: src/elflint.c:1129 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "セクション [%2d] '%s': この REL セクション用に使われる DT_RELACOUNT\n" -#: src/elflint.c:1211 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションインデックス\n" -#: src/elflint.c:1223 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションタイプ\n" -#: src/elflint.c:1231 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "セクション [%2d] '%s': sh_info はゼロでなければなりません\n" -#: src/elflint.c:1238 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "" "セクション [%2d] '%s': マージできるセクションのリロケーションは不可能です\n" -#: src/elflint.c:1246 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "セクション [%2d] '%s': セクション項目サイズが ElfXX_Rela と一致しません\n" -#: src/elflint.c:1306 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "テキストリロケーションフラグが設定されていますが、読込み専用セグメントがあり" "ません\n" -#: src/elflint.c:1333 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "セクション [%2d] '%s': リロケーション %zu: 不当なタイプ\n" -#: src/elflint.c:1341 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1767,13 +1767,13 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: このファイル用のリロケーションタイ" "プは不当です\n" -#: src/elflint.c:1349 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" "セクション [%2d] '%s': リロケーション %zu: 不当なシンボルインデックス\n" -#: src/elflint.c:1367 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1782,12 +1782,12 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: シンボル '_GLOBAL_OFFSET_TABLE_' " "のみが %s と一緒に使用できます\n" -#: src/elflint.c:1384 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "セクション [%2d] '%s': リロケーション %zu: オフセット境界外\n" -#: src/elflint.c:1399 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1796,7 +1796,7 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: タイプ %s のシンボルに対するコピー" "リロケーション\n" -#: src/elflint.c:1420 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1805,1109 +1805,1109 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: 読込み専用セクションが変更されまし" "たが、テキストリロケーションフラグが設定されていません\n" -#: src/elflint.c:1435 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" "セクション [%2d] '%s': リロケーションがロードされたデータとロードされなかった" "データに対してです\n" -#: src/elflint.c:1475 src/elflint.c:1526 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1602 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1621 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1626 src/elflint.c:1911 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1636 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1644 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1651 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1662 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1672 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1690 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" msgstr "" -#: src/elflint.c:1703 +#: src/elflint.c:1710 #, 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:1746 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1761 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " "[%2d] '%s'\n" msgstr "" -#: src/elflint.c:1781 src/elflint.c:1809 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "" -#: src/elflint.c:1793 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1802 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1817 src/elflint.c:1824 +#: src/elflint.c:1824 src/elflint.c:1831 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "" -#: src/elflint.c:1834 src/elflint.c:1838 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" -#: src/elflint.c:1844 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1855 src/elflint.c:1859 src/elflint.c:1863 src/elflint.c:1867 +#: src/elflint.c:1862 src/elflint.c:1866 src/elflint.c:1870 src/elflint.c:1874 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" -#: src/elflint.c:1879 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1889 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1894 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1897 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1906 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1921 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " "same symbol table\n" msgstr "" -#: src/elflint.c:1938 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:1950 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:1955 +#: src/elflint.c:1962 #, c-format msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:1971 src/elflint.c:2022 +#: src/elflint.c:1978 src/elflint.c:2029 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" msgstr "" -#: src/elflint.c:1983 src/elflint.c:2034 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:1997 src/elflint.c:2048 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2007 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2058 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n" msgstr "" -#: src/elflint.c:2074 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "" -#: src/elflint.c:2085 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " "least %ld)\n" msgstr "" -#: src/elflint.c:2093 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2125 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" msgstr "" -#: src/elflint.c:2146 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " "undefined\n" msgstr "" -#: src/elflint.c:2157 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" msgstr "" -#: src/elflint.c:2188 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2193 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2199 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2212 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2230 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2238 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2243 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2248 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " "entries\n" msgstr "" -#: src/elflint.c:2296 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2374 src/elflint.c:2378 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2385 +#: src/elflint.c:2392 #, 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:2397 +#: src/elflint.c:2404 #, 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:2413 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2433 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2444 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2449 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2455 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2460 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2467 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2472 +#: src/elflint.c:2479 #, fuzzy, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" -#: src/elflint.c:2478 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2484 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2493 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2498 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2504 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2508 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2519 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2531 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "" -#: src/elflint.c:2540 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2547 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2553 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " "SHF_GROUP flag set\n" msgstr "" -#: src/elflint.c:2560 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2749 +#: src/elflint.c:2756 #, 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:2761 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:2777 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:2793 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:2801 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:2815 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:2820 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:2830 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:2882 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:2890 src/elflint.c:3019 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "" -#: src/elflint.c:2913 src/elflint.c:3071 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "" -#: src/elflint.c:2919 src/elflint.c:3077 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" -#: src/elflint.c:2927 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:2935 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:2947 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:2954 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " "reference\n" msgstr "" -#: src/elflint.c:2961 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " "%#x, expected %#x\n" msgstr "" -#: src/elflint.c:2971 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " "name '%s'\n" msgstr "" -#: src/elflint.c:2982 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" -#: src/elflint.c:2998 src/elflint.c:3156 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" -#: src/elflint.c:3011 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3056 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3060 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3066 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3090 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3097 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3106 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3125 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3140 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3162 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3178 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3191 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3212 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3228 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3237 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3249 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3266 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3275 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3284 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3297 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" -#: src/elflint.c:3308 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3326 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3337 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3350 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3354 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" msgstr "" -#: src/elflint.c:3364 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3370 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3459 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3463 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3465 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3467 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3469 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3471 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3473 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3475 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3478 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" msgstr "" -#: src/elflint.c:3482 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" msgstr "" -#: src/elflint.c:3486 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" msgstr "" -#: src/elflint.c:3503 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3512 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3539 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3555 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3572 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" -#: src/elflint.c:3590 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3596 src/elflint.c:3628 +#: src/elflint.c:3603 src/elflint.c:3635 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" msgstr "" -#: src/elflint.c:3601 src/elflint.c:3633 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " "segments\n" msgstr "" -#: src/elflint.c:3609 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3652 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3657 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3667 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3681 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3688 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "" -#: src/elflint.c:3696 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3704 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3709 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:3716 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:3721 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:3739 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:3748 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:3777 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " "%d\n" msgstr "" -#: src/elflint.c:3785 +#: src/elflint.c:3792 #, 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:3794 +#: src/elflint.c:3801 #, 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:3805 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:3815 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:3825 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" -#: src/elflint.c:3831 +#: src/elflint.c:3838 #, 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:3839 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:3890 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:3913 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:3924 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:3930 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:3941 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" msgstr "" -#: src/elflint.c:3954 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:3968 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:4017 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" -#: src/elflint.c:4021 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n" msgstr "" -#: src/elflint.c:4044 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" -#: src/elflint.c:4048 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" -#: src/elflint.c:4065 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4084 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4087 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4108 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4115 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4118 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" -#: src/elflint.c:4136 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4151 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4160 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" -#: src/elflint.c:4171 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4179 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4186 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4200 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4203 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4213 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4234 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4237 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4245 src/elflint.c:4268 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4274 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4298 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4301 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4314 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4322 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4325 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4329 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4332 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4337 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4340 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4351 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4358 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4361 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4374 +#: src/elflint.c:4381 #, 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:4408 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4434 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -2963,52 +2963,57 @@ msgstr "" msgid "while reading ELF file" msgstr "" -#: src/findtextrel.c:334 src/findtextrel.c:351 -#, c-format -msgid "cannot get program header index at offset %d: %s" -msgstr "" +#: src/findtextrel.c:329 +#, fuzzy, c-format +msgid "cannot get program header count: %s" +msgstr "プログラムヘッダーを得られません: %s" + +#: src/findtextrel.c:340 src/findtextrel.c:357 +#, fuzzy, c-format +msgid "cannot get program header index at offset %zd: %s" +msgstr "プログラムヘッダーを得られません: %s" -#: src/findtextrel.c:403 +#: src/findtextrel.c:409 #, c-format msgid "cannot get section header of section %Zu: %s" msgstr "" -#: src/findtextrel.c:415 +#: src/findtextrel.c:421 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:435 src/findtextrel.c:458 +#: src/findtextrel.c:441 src/findtextrel.c:464 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:523 +#: src/findtextrel.c:529 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:576 +#: src/findtextrel.c:582 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:583 src/findtextrel.c:603 +#: src/findtextrel.c:589 src/findtextrel.c:609 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" -#: src/findtextrel.c:591 +#: src/findtextrel.c:597 #, 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:611 +#: src/findtextrel.c:617 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3423,7 +3428,7 @@ msgstr "" "れました" #: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 -#: src/readelf.c:829 src/strip.c:563 +#: src/readelf.c:829 src/strip.c:568 #, c-format msgid "cannot determine number of sections: %s" msgstr "セクション数を決定できません: %s" @@ -3661,7 +3666,7 @@ msgstr "内部エラー: 非 nobits セクションが nobits セクションに msgid "cannot get header of 0th section: %s" msgstr "0番目のセクションのヘッダーを得られません: %s" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1822 #, c-format msgid "cannot update ELF header: %s" msgstr "ELF ヘッダーを更新できません: %s" @@ -3828,7 +3833,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: 内部エラー %d (%s-%s): %s" #: src/nm.c:398 src/nm.c:410 src/size.c:309 src/size.c:318 src/size.c:329 -#: src/strip.c:2155 +#: src/strip.c:2160 #, c-format msgid "while closing '%s'" msgstr "'%s' を閉じている最中" @@ -3872,12 +3877,12 @@ msgstr "%s%s%s: ファイル形式を認識できません" msgid "cannot create search tree" msgstr "検索ツリーを生成できません" -#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 src/readelf.c:536 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:793 src/readelf.c:536 #: src/readelf.c:1085 src/readelf.c:1245 src/readelf.c:1393 src/readelf.c:1579 -#: src/readelf.c:1785 src/readelf.c:1972 src/readelf.c:2182 src/readelf.c:2440 -#: src/readelf.c:2510 src/readelf.c:2592 src/readelf.c:3103 src/readelf.c:3139 -#: src/readelf.c:3202 src/readelf.c:7906 src/readelf.c:8986 src/readelf.c:9133 -#: src/readelf.c:9201 src/size.c:417 src/size.c:487 src/strip.c:503 +#: src/readelf.c:1785 src/readelf.c:1975 src/readelf.c:2202 src/readelf.c:2460 +#: src/readelf.c:2536 src/readelf.c:2623 src/readelf.c:3201 src/readelf.c:3237 +#: src/readelf.c:3300 src/readelf.c:8187 src/readelf.c:9273 src/readelf.c:9420 +#: src/readelf.c:9488 src/size.c:417 src/size.c:486 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文字列テーブル索引が得られません" @@ -3962,15 +3967,15 @@ msgstr "操作が指定されていません。\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2055 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2072 msgid "INVALID SYMBOL" msgstr "不当なシンボル" -#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2088 +#: src/objdump.c:394 src/readelf.c:1914 src/readelf.c:2108 msgid "INVALID SECTION" msgstr "不当なセクション" -#: src/objdump.c:510 +#: src/objdump.c:514 #, c-format msgid "" "\n" @@ -3978,21 +3983,21 @@ msgid "" "%-*s TYPE VALUE\n" msgstr "" -#: src/objdump.c:513 +#: src/objdump.c:517 msgid "OFFSET" msgstr "" -#: src/objdump.c:576 +#: src/objdump.c:582 #, c-format msgid "Contents of section %s:\n" msgstr "" -#: src/objdump.c:697 +#: src/objdump.c:703 #, c-format msgid "cannot disassemble" msgstr "" -#: src/objdump.c:736 +#: src/objdump.c:742 #, fuzzy, c-format msgid "cannot allocate memory" msgstr "PLT セクションを割り当てられません: %s" @@ -4150,11 +4155,11 @@ msgstr "Elf 記述子を生成できません: %s" msgid "cannot get section: %s" msgstr "セクションを得られません: %s" -#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9153 -#: src/unstrip.c:345 src/unstrip.c:376 src/unstrip.c:425 src/unstrip.c:533 -#: src/unstrip.c:550 src/unstrip.c:586 src/unstrip.c:784 src/unstrip.c:1052 -#: src/unstrip.c:1242 src/unstrip.c:1302 src/unstrip.c:1423 src/unstrip.c:1476 -#: src/unstrip.c:1583 src/unstrip.c:1772 +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9440 +#: src/unstrip.c:356 src/unstrip.c:387 src/unstrip.c:436 src/unstrip.c:544 +#: src/unstrip.c:561 src/unstrip.c:597 src/unstrip.c:795 src/unstrip.c:1063 +#: src/unstrip.c:1254 src/unstrip.c:1314 src/unstrip.c:1435 src/unstrip.c:1488 +#: src/unstrip.c:1595 src/unstrip.c:1784 #, c-format msgid "cannot get section header: %s" msgstr "セクションヘッダーを得られません: %s" @@ -4164,8 +4169,8 @@ msgstr "セクションヘッダーを得られません: %s" msgid "cannot get section name" msgstr "セクションを得られません: %s" -#: src/readelf.c:571 src/readelf.c:5207 src/readelf.c:7400 src/readelf.c:7502 -#: src/readelf.c:7660 +#: src/readelf.c:571 src/readelf.c:5398 src/readelf.c:7671 src/readelf.c:7773 +#: src/readelf.c:7939 #, c-format msgid "cannot get %s content: %s" msgstr "%s の内容を得られません: %s" @@ -4467,7 +4472,7 @@ msgstr "" " セクションからセグメントへのマッビング:\n" " セグメント セクション..." -#: src/readelf.c:1258 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1843 src/unstrip.c:1886 src/unstrip.c:1893 #, c-format msgid "cannot get program header: %s" msgstr "プログラムヘッダーを得られません: %s" @@ -4506,8 +4511,8 @@ msgstr "<不当なシンボル>" msgid "<INVALID SECTION>" msgstr "<不当なセクション>" -#: src/readelf.c:1585 src/readelf.c:2188 src/readelf.c:2446 src/readelf.c:2516 -#: src/readelf.c:2798 src/readelf.c:2871 src/readelf.c:4474 +#: src/readelf.c:1585 src/readelf.c:2208 src/readelf.c:2466 src/readelf.c:2542 +#: src/readelf.c:2846 src/readelf.c:2920 src/readelf.c:4610 #, fuzzy, c-format msgid "invalid sh_link value in section %Zu" msgstr "不当な .debug_line セクション" @@ -4557,7 +4562,7 @@ msgstr "ライブラリー run パス: [%s]\n" msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (バイト)\n" -#: src/readelf.c:1770 src/readelf.c:1957 +#: src/readelf.c:1770 src/readelf.c:1960 #, c-format msgid "" "\n" @@ -4566,7 +4571,7 @@ msgstr "" "\n" "オフセット %#0<PRIx64> に不当なシンボルテーブル\n" -#: src/readelf.c:1788 src/readelf.c:1974 +#: src/readelf.c:1788 src/readelf.c:1978 #, c-format msgid "" "\n" @@ -4581,7 +4586,7 @@ msgstr[0] "" "オフセット %5$#0<PRIx64> のセクション [%3$2u] '%4$s' 用のリロケーションセク" "ション [%1$2zu] '%2$s' には %6$d 個の項目があります:\n" -#: src/readelf.c:1803 +#: src/readelf.c:1803 src/readelf.c:1993 #, c-format msgid "" "\n" @@ -4602,21 +4607,21 @@ msgstr " オフセット タイプ 値 名前\n" msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 名前\n" -#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 -#: src/readelf.c:1922 src/readelf.c:2042 src/readelf.c:2054 src/readelf.c:2068 -#: src/readelf.c:2087 src/readelf.c:2100 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1913 +#: src/readelf.c:1925 src/readelf.c:2059 src/readelf.c:2071 src/readelf.c:2085 +#: src/readelf.c:2107 src/readelf.c:2120 msgid "<INVALID RELOC>" msgstr "<不当なRELOC>" -#: src/readelf.c:1986 +#: src/readelf.c:2003 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:1988 +#: src/readelf.c:2005 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:2196 +#: src/readelf.c:2216 #, c-format msgid "" "\n" @@ -4628,39 +4633,39 @@ msgstr[0] "" "\n" "シンボルテーブル [%2u] '%s' には %u 個の項目があります:\n" -#: src/readelf.c:2201 +#: src/readelf.c:2221 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] " %lu ローカルシンボル文字列テーブル: [%2u] '%s'\n" -#: src/readelf.c:2209 +#: src/readelf.c:2229 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2211 +#: src/readelf.c:2231 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2231 +#: src/readelf.c:2251 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2319 +#: src/readelf.c:2339 #, c-format msgid "bad dynamic symbol" msgstr "不正な動的シンボル" -#: src/readelf.c:2401 +#: src/readelf.c:2421 msgid "none" msgstr "なし" -#: src/readelf.c:2418 +#: src/readelf.c:2438 msgid "| <unknown>" msgstr "| <不明>" -#: src/readelf.c:2449 +#: src/readelf.c:2469 #, c-format msgid "" "\n" @@ -4676,17 +4681,17 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2470 +#: src/readelf.c:2490 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: バージョン: %hu ファイル: %s 数: %hu\n" -#: src/readelf.c:2483 +#: src/readelf.c:2503 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: 名前: %s フラグ: %s バージョン: %hu\n" -#: src/readelf.c:2520 +#: src/readelf.c:2546 #, c-format msgid "" "\n" @@ -4702,17 +4707,17 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2548 +#: src/readelf.c:2574 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: バージョン: %hd フラグ: %s 索引: %hd 数: %hd 名前: %s\n" -#: src/readelf.c:2563 +#: src/readelf.c:2589 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: 親 %d: %s\n" -#: src/readelf.c:2802 +#: src/readelf.c:2850 #, c-format msgid "" "\n" @@ -4728,15 +4733,15 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションへのリンク: " "[%2u] '%s'" -#: src/readelf.c:2830 +#: src/readelf.c:2878 msgid " 0 *local* " msgstr " 0 *ローカル* " -#: src/readelf.c:2835 +#: src/readelf.c:2883 msgid " 1 *global* " msgstr " 1 *グローバル* " -#: src/readelf.c:2876 +#: src/readelf.c:2925 #, c-format msgid "" "\n" @@ -4754,22 +4759,22 @@ msgstr[0] "" " アドレス: %#0*<PRIx64> オフセット: %#08<PRIx64> セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2898 +#: src/readelf.c:2947 #, fuzzy, no-c-format msgid " Length Number % of total Coverage\n" msgstr " 長さ 数 全体の% 範囲 \n" -#: src/readelf.c:2900 +#: src/readelf.c:2949 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:2907 +#: src/readelf.c:2956 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:2920 +#: src/readelf.c:2969 #, fuzzy, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4778,12 +4783,27 @@ msgstr "" " テストの平均数: 検索成功: %f\n" " 検索失敗: %f\n" -#: src/readelf.c:2938 src/readelf.c:2980 src/readelf.c:3021 +#: src/readelf.c:2987 src/readelf.c:3042 src/readelf.c:3098 #, c-format msgid "cannot get data for section %d: %s" msgstr "セクションからデータを得られません %d: %s" -#: src/readelf.c:3075 +#: src/readelf.c:2995 +#, fuzzy, c-format +msgid "invalid data in sysv.hash section %d" +msgstr "セクション [%zu] '%s' の不当なデータ" + +#: src/readelf.c:3050 +#, fuzzy, c-format +msgid "invalid data in sysv.hash64 section %d" +msgstr "セクション [%zu] '%s' の不当なデータ" + +#: src/readelf.c:3106 +#, fuzzy, c-format +msgid "invalid data in gnu.hash section %d" +msgstr "セクション [%zu] '%s' の不当なデータ" + +#: src/readelf.c:3173 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4793,7 +4813,7 @@ msgstr "" " ビットマスクの大きさ: %zu バイト %<PRIuFAST32>%% ビット設定 第2ハッシュシフ" "ト: %u\n" -#: src/readelf.c:3150 +#: src/readelf.c:3248 #, c-format msgid "" "\n" @@ -4806,7 +4826,7 @@ msgstr[0] "" "オフセット %3$#0<PRIx64> のライブラリー一覧セクション [%1$2zu] '%2$s' には " "%4$d 個の項目があります:\n" -#: src/readelf.c:3164 +#: src/readelf.c:3262 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4814,7 +4834,7 @@ msgstr "" " ライブラリー タイムスタンプ チェックサム バー" "ジョン フラグ" -#: src/readelf.c:3214 +#: src/readelf.c:3312 #, c-format msgid "" "\n" @@ -4825,140 +4845,140 @@ msgstr "" "オフセット %4$#0<PRIx64> の %3$<PRIu64> バイトのオブジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:3230 +#: src/readelf.c:3329 msgid " Owner Size\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:3256 +#: src/readelf.c:3358 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" -#: src/readelf.c:3288 +#: src/readelf.c:3397 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" -#: src/readelf.c:3293 +#: src/readelf.c:3402 #, c-format msgid " File: %11<PRIu32>\n" msgstr " ファイル: %11<PRIu32>\n" -#: src/readelf.c:3328 +#: src/readelf.c:3451 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>、%s\n" -#: src/readelf.c:3331 +#: src/readelf.c:3454 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3334 +#: src/readelf.c:3457 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3341 +#: src/readelf.c:3467 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3344 +#: src/readelf.c:3470 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3389 +#: src/readelf.c:3515 #, c-format msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3392 +#: src/readelf.c:3518 #, c-format msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3397 +#: src/readelf.c:3523 #, c-format msgid "%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3400 +#: src/readelf.c:3526 #, c-format msgid "%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3406 +#: src/readelf.c:3532 #, c-format msgid "%s+%#<PRIx64> <%s>" msgstr "%s+%#<PRIx64> <%s>" -#: src/readelf.c:3409 +#: src/readelf.c:3535 #, c-format msgid "%s+%#0*<PRIx64> <%s>" msgstr "%s+%#0*<PRIx64> <%s>" -#: src/readelf.c:3413 +#: src/readelf.c:3539 #, c-format msgid "%#<PRIx64> <%s>" msgstr "%#<PRIx64> <%s>" -#: src/readelf.c:3416 +#: src/readelf.c:3542 #, c-format msgid "%#0*<PRIx64> <%s>" msgstr "%#0*<PRIx64> <%s>" -#: src/readelf.c:3421 +#: src/readelf.c:3547 #, c-format msgid "%s+%#<PRIx64>" msgstr "%s+%#<PRIx64>" -#: src/readelf.c:3424 +#: src/readelf.c:3550 #, c-format msgid "%s+%#0*<PRIx64>" msgstr "%s+%#0*<PRIx64>" -#: src/readelf.c:3806 +#: src/readelf.c:3932 msgid "empty block" msgstr "空ブロック" -#: src/readelf.c:3809 +#: src/readelf.c:3935 #, c-format msgid "%zu byte block:" msgstr "%zu バイトのブロック:" -#: src/readelf.c:4203 +#: src/readelf.c:4332 #, c-format msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" -#: src/readelf.c:4260 +#: src/readelf.c:4389 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "" -#: src/readelf.c:4267 +#: src/readelf.c:4396 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "" -#: src/readelf.c:4274 +#: src/readelf.c:4403 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "" -#: src/readelf.c:4356 +#: src/readelf.c:4492 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr "" -#: src/readelf.c:4364 +#: src/readelf.c:4500 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr "" -#: src/readelf.c:4390 +#: src/readelf.c:4526 #, c-format msgid "" "\n" @@ -4969,7 +4989,7 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:4398 +#: src/readelf.c:4534 #, c-format msgid "" "\n" @@ -4978,30 +4998,30 @@ msgstr "" "\n" "オフセット %<PRIu64> の略語セクション:\n" -#: src/readelf.c:4411 +#: src/readelf.c:4547 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語を読んでいる間にエラー: %s\n" -#: src/readelf.c:4427 +#: src/readelf.c:4563 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %<PRId64>、子: %s、タグ: %s\n" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "yes" msgstr "はい" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "no" msgstr "いいえ" -#: src/readelf.c:4464 src/readelf.c:4537 +#: src/readelf.c:4600 src/readelf.c:4673 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes の内容を得られません: %s" -#: src/readelf.c:4479 +#: src/readelf.c:4615 #, c-format msgid "" "\n" @@ -5014,20 +5034,20 @@ msgstr[0] "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:4510 +#: src/readelf.c:4646 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4512 +#: src/readelf.c:4648 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" msgstr "" " [%*zu] 開始: %0#*<PRIx64>、長さ: %5<PRIu64>、CU DIE オフセット: %6<PRId64>\n" -#: src/readelf.c:4542 src/readelf.c:4696 src/readelf.c:5217 src/readelf.c:6131 -#: src/readelf.c:6632 src/readelf.c:6752 src/readelf.c:6908 src/readelf.c:7331 +#: src/readelf.c:4678 src/readelf.c:4832 src/readelf.c:5408 src/readelf.c:6362 +#: src/readelf.c:6894 src/readelf.c:7014 src/readelf.c:7177 src/readelf.c:7602 #, c-format msgid "" "\n" @@ -5036,7 +5056,7 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:4555 src/readelf.c:6157 +#: src/readelf.c:4691 src/readelf.c:6388 #, c-format msgid "" "\n" @@ -5045,108 +5065,113 @@ msgstr "" "\n" "オフセット %Zu のテーブル:\n" -#: src/readelf.c:4559 src/readelf.c:5241 src/readelf.c:6166 +#: src/readelf.c:4695 src/readelf.c:5432 src/readelf.c:6399 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:4575 +#: src/readelf.c:4711 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:4587 +#: src/readelf.c:4723 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4591 +#: src/readelf.c:4727 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:4602 +#: src/readelf.c:4738 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:4608 +#: src/readelf.c:4744 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:4612 +#: src/readelf.c:4748 #, fuzzy, c-format msgid "unsupported address size" msgstr "アドレス値ではありません" -#: src/readelf.c:4617 +#: src/readelf.c:4753 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " ファイルを %<PRIu64> に設定する\n" -#: src/readelf.c:4621 +#: src/readelf.c:4757 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:4661 +#: src/readelf.c:4797 #, fuzzy, c-format msgid " %s..%s (%<PRIx64>)\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4664 +#: src/readelf.c:4800 #, fuzzy, c-format msgid " %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4673 +#: src/readelf.c:4809 #, c-format msgid " %Zu padding bytes\n" msgstr "" -#: src/readelf.c:4691 +#: src/readelf.c:4827 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:4721 src/readelf.c:6659 +#: src/readelf.c:4857 src/readelf.c:6921 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:4743 src/readelf.c:6681 +#: src/readelf.c:4879 src/readelf.c:6943 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] ベースアドレス %s\n" -#: src/readelf.c:4750 src/readelf.c:6688 +#: src/readelf.c:4886 src/readelf.c:6950 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:4761 +#: src/readelf.c:4897 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4763 +#: src/readelf.c:4899 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:5196 +#: src/readelf.c:5078 +#, fuzzy +msgid " <INVALID DATA>\n" +msgstr " [%6tx] <不当なデータ>\n" + +#: src/readelf.c:5387 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:5213 +#: src/readelf.c:5404 #, c-format msgid "" "\n" @@ -5155,7 +5180,7 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> の フレーム情報呼出しセクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5263 +#: src/readelf.c:5454 #, c-format msgid "" "\n" @@ -5164,50 +5189,50 @@ msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:5348 +#: src/readelf.c:5547 src/readelf.c:5702 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "不当な拡大エンコード" -#: src/readelf.c:5360 +#: src/readelf.c:5562 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:5366 +#: src/readelf.c:5568 msgid "LSDA pointer encoding: " msgstr "LSDA ポインターエンコード:" -#: src/readelf.c:5477 +#: src/readelf.c:5679 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:5484 +#: src/readelf.c:5686 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:5511 +#: src/readelf.c:5723 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sLSDA ポインター: %#<PRIx64>\n" -#: src/readelf.c:5563 +#: src/readelf.c:5778 #, c-format msgid "cannot get attribute code: %s" msgstr "属性コードを得られません: %s" -#: src/readelf.c:5572 +#: src/readelf.c:5787 #, c-format msgid "cannot get attribute form: %s" msgstr "属性様式を得られません: %s" -#: src/readelf.c:5587 +#: src/readelf.c:5802 #, c-format msgid "cannot get attribute value: %s" msgstr "属性値を得られません: %s" -#: src/readelf.c:5880 +#: src/readelf.c:6101 #, c-format msgid "" "\n" @@ -5218,7 +5243,7 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:5912 +#: src/readelf.c:6133 #, fuzzy, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5230,7 +5255,7 @@ msgstr "" " バージョン: %2$<PRIu16>、略語セクションオフセット: %3$<PRIu64>、アドレスの大" "きさ: %4$<PRIu8>、オフセットの大きさ: %5$<PRIu8>\n" -#: src/readelf.c:5921 +#: src/readelf.c:6142 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5241,35 +5266,35 @@ msgstr "" " バージョン: %2$<PRIu16>、略語セクションオフセット: %3$<PRIu64>、アドレスの大" "きさ: %4$<PRIu8>、オフセットの大きさ: %5$<PRIu8>\n" -#: src/readelf.c:5946 +#: src/readelf.c:6167 #, c-format msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s" msgstr "" "セクション '%2$s' の オフセット %1$<PRIu64> の DIE を得られません: %3$s" -#: src/readelf.c:5960 +#: src/readelf.c:6181 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られません: %s" -#: src/readelf.c:5969 +#: src/readelf.c:6190 #, c-format msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s" msgstr "" "セクション '%2$s' 中のオフセット %1$<PRIu64> の DIE のタグを得られません: " "%3$s" -#: src/readelf.c:6001 +#: src/readelf.c:6222 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次の DIE を得られません: %s\n" -#: src/readelf.c:6009 +#: src/readelf.c:6230 #, c-format msgid "cannot get next DIE: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:6045 +#: src/readelf.c:6266 #, fuzzy, c-format msgid "" "\n" @@ -5279,12 +5304,12 @@ msgstr "" "\n" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:6144 +#: src/readelf.c:6375 #, c-format msgid "cannot get line data section data: %s" msgstr "ラインデータセクションデータを得られません: %s" -#: src/readelf.c:6212 +#: src/readelf.c:6445 #, fuzzy, c-format msgid "" "\n" @@ -5312,18 +5337,18 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:6233 +#: src/readelf.c:6466 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "セクション [%2$zu] '%3$s' 中のオフセット %1$tu に不当なデータ" -#: src/readelf.c:6248 +#: src/readelf.c:6481 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" msgstr[0] " [%*<PRIuFAST8>] %hhu パラメーター\n" -#: src/readelf.c:6256 +#: src/readelf.c:6489 msgid "" "\n" "Directory table:" @@ -5331,7 +5356,7 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:6272 +#: src/readelf.c:6505 msgid "" "\n" "File name table:\n" @@ -5341,7 +5366,7 @@ msgstr "" "ファイル名テーブル:\n" " Entry Dir 時刻 大きさ 名前" -#: src/readelf.c:6301 +#: src/readelf.c:6540 msgid "" "\n" "Line number statements:" @@ -5349,205 +5374,215 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:6377 +#: src/readelf.c:6591 +#, c-format +msgid "invalid maximum operations per instruction is zero" +msgstr "" + +#: src/readelf.c:6627 #, fuzzy, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:6382 +#: src/readelf.c:6632 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:6402 +#: src/readelf.c:6652 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:6407 +#: src/readelf.c:6657 #, fuzzy msgid " end of sequence" msgstr "列の終わり" -#: src/readelf.c:6424 +#: src/readelf.c:6676 #, fuzzy, c-format msgid " set address to %s\n" msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:6445 +#: src/readelf.c:6703 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" "新ファイルを定義する: dir=%u、mtime=%<PRIu64>、長さh=%<PRIu64>、名前=%s\n" -#: src/readelf.c:6458 +#: src/readelf.c:6716 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを %<PRIu64> に設定する\n" -#: src/readelf.c:6463 +#: src/readelf.c:6721 #, fuzzy msgid " unknown opcode" msgstr "不明な命令コード" -#: src/readelf.c:6475 +#: src/readelf.c:6733 msgid " copy" msgstr "複写" -#: src/readelf.c:6486 +#: src/readelf.c:6744 #, fuzzy, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:6490 +#: src/readelf.c:6748 #, fuzzy, c-format msgid " advance address by %u to %s\n" msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:6501 +#: src/readelf.c:6759 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr "行を定数 %d だけ進めて %<PRId64> にする\n" -#: src/readelf.c:6509 +#: src/readelf.c:6767 #, c-format msgid " set file to %<PRIu64>\n" msgstr " ファイルを %<PRIu64> に設定する\n" -#: src/readelf.c:6519 +#: src/readelf.c:6777 #, c-format msgid " set column to %<PRIu64>\n" msgstr "カラムを %<PRIu64> に設定する\n" -#: src/readelf.c:6526 +#: src/readelf.c:6784 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " '%s' を %<PRIuFAST8> に設定する\n" -#: src/readelf.c:6532 +#: src/readelf.c:6790 msgid " set basic block flag" msgstr "基本ブロックフラグを設定する" -#: src/readelf.c:6541 +#: src/readelf.c:6803 #, fuzzy, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:6545 +#: src/readelf.c:6807 #, fuzzy, c-format msgid " advance address by constant %u to %s\n" msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:6563 +#: src/readelf.c:6825 #, fuzzy, c-format msgid " advance address by fixed value %u to %s\n" msgstr "アドレスを固定値 %u だけ進めて %s にする\n" -#: src/readelf.c:6572 +#: src/readelf.c:6834 msgid " set prologue end flag" msgstr "プロローグ終了フラグを設定する" -#: src/readelf.c:6577 +#: src/readelf.c:6839 msgid " set epilogue begin flag" msgstr "エピローグ開始フラグを設定する" -#: src/readelf.c:6586 +#: src/readelf.c:6848 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを %<PRIu64> に設定する\n" -#: src/readelf.c:6595 +#: src/readelf.c:6857 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" msgstr[0] " %<PRIu8> 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:6627 +#: src/readelf.c:6889 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc の内容を得られません: %s" -#: src/readelf.c:6702 +#: src/readelf.c:6964 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6704 +#: src/readelf.c:6966 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6711 +#: src/readelf.c:6973 src/readelf.c:7858 #, fuzzy msgid " <INVALID DATA>\n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6763 src/readelf.c:6917 +#: src/readelf.c:7025 src/readelf.c:7186 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクロ情報セクションのデータを得られません: %s" -#: src/readelf.c:6842 +#: src/readelf.c:7104 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:6958 +#: src/readelf.c:7127 +#, fuzzy, c-format +msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" +msgstr "%*s*** 最後のセクションの終端していない文字列" + +#: src/readelf.c:7227 #, fuzzy, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:6970 +#: src/readelf.c:7239 #, fuzzy, c-format msgid " Version: %<PRIu16>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:6976 src/readelf.c:7689 +#: src/readelf.c:7245 src/readelf.c:7968 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6983 +#: src/readelf.c:7252 #, fuzzy, c-format msgid " Flag: 0x%<PRIx8>\n" msgstr " 入口点アドレス : %#<PRIx64>\n" -#: src/readelf.c:6986 +#: src/readelf.c:7255 #, fuzzy, c-format msgid " Offset length: %<PRIu8>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:6994 +#: src/readelf.c:7263 #, fuzzy, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:7007 +#: src/readelf.c:7276 #, fuzzy, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " %<PRIu8> 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:7014 +#: src/readelf.c:7283 #, c-format msgid " [%<PRIx8>]" msgstr "" -#: src/readelf.c:7026 +#: src/readelf.c:7295 #, fuzzy, c-format msgid " %<PRIu8> arguments:" msgstr " [%*<PRIuFAST8>] %hhu パラメーター\n" -#: src/readelf.c:7054 +#: src/readelf.c:7323 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:7289 +#: src/readelf.c:7560 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:7317 +#: src/readelf.c:7588 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" @@ -5555,7 +5590,7 @@ msgstr "" # # "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s 文字列\n" がエラーになるのは何故? 取り敢えず fuzzy扱い -#: src/readelf.c:7358 +#: src/readelf.c:7629 #, fuzzy, c-format msgid "" "\n" @@ -5566,12 +5601,12 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s':\n" " %4$*s 文字列\n" -#: src/readelf.c:7372 +#: src/readelf.c:7643 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** 文字列の読込み中にエラー: %s\n" -#: src/readelf.c:7392 +#: src/readelf.c:7663 #, c-format msgid "" "\n" @@ -5580,7 +5615,7 @@ msgstr "" "\n" "呼出しフレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:7494 +#: src/readelf.c:7765 #, c-format msgid "" "\n" @@ -5589,22 +5624,22 @@ msgstr "" "\n" "例外取扱いテーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:7517 +#: src/readelf.c:7788 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:7529 +#: src/readelf.c:7800 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:7543 +#: src/readelf.c:7815 #, c-format msgid " Call site encoding: %#x " msgstr "呼出しサイトコード化: %#x " -#: src/readelf.c:7556 +#: src/readelf.c:7828 msgid "" "\n" " Call site table:" @@ -5612,7 +5647,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:7570 +#: src/readelf.c:7842 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5625,12 +5660,12 @@ msgstr "" " 離着陸場: %#<PRIx64>\n" " 行動: %u\n" -#: src/readelf.c:7630 +#: src/readelf.c:7909 #, c-format msgid "invalid TType encoding" msgstr "不当な TType コード化" -#: src/readelf.c:7651 +#: src/readelf.c:7930 #, fuzzy, c-format msgid "" "\n" @@ -5640,37 +5675,37 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7680 +#: src/readelf.c:7959 #, fuzzy, c-format msgid " Version: %<PRId32>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:7698 +#: src/readelf.c:7977 #, fuzzy, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:7705 +#: src/readelf.c:7984 #, fuzzy, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:7712 +#: src/readelf.c:7991 #, fuzzy, c-format msgid " address offset: %#<PRIx32>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:7719 +#: src/readelf.c:7998 #, fuzzy, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " (オフセット: %#<PRIx64>)" -#: src/readelf.c:7726 +#: src/readelf.c:8005 #, fuzzy, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " (終了オフセット: %#<PRIx64>)" -#: src/readelf.c:7733 +#: src/readelf.c:8012 #, fuzzy, c-format msgid "" "\n" @@ -5680,7 +5715,7 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7755 +#: src/readelf.c:8034 #, fuzzy, c-format msgid "" "\n" @@ -5690,7 +5725,7 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7781 +#: src/readelf.c:8060 #, fuzzy, c-format msgid "" "\n" @@ -5700,7 +5735,7 @@ msgstr "" "オフセット %3$#<PRIx64> の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7810 +#: src/readelf.c:8089 #, fuzzy, c-format msgid "" "\n" @@ -5709,17 +5744,17 @@ msgstr "" "\n" "オフセット %#0<PRIx64> に不当なシンボルテーブル\n" -#: src/readelf.c:7895 +#: src/readelf.c:8176 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "デバッグ内容記述子を得られません: %s" -#: src/readelf.c:8053 src/readelf.c:8659 src/readelf.c:8770 src/readelf.c:8828 +#: src/readelf.c:8336 src/readelf.c:8942 src/readelf.c:9053 src/readelf.c:9111 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータの変換ができません: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8683 #, c-format msgid "" "\n" @@ -5728,21 +5763,21 @@ msgstr "" "\n" "%*s... < %u 回の繰返し> ..." -#: src/readelf.c:8903 +#: src/readelf.c:9190 msgid " Owner Data size Type\n" msgstr " 所有者 データ大きさタイプ\n" -#: src/readelf.c:8921 +#: src/readelf.c:9208 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:8971 +#: src/readelf.c:9258 #, c-format msgid "cannot get content of note section: %s" msgstr "ノートセクションの内容を得られません: %s" -#: src/readelf.c:8998 +#: src/readelf.c:9285 #, c-format msgid "" "\n" @@ -5752,7 +5787,7 @@ msgstr "" "オフセット %4$#0<PRIx64> の %3$<PRIu64> バイトのノートセクション [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:9021 +#: src/readelf.c:9308 #, c-format msgid "" "\n" @@ -5761,7 +5796,7 @@ msgstr "" "\n" "オフセット %2$#0<PRIx64> の %1$<PRIu64> バイトのノートセグメント:\n" -#: src/readelf.c:9067 +#: src/readelf.c:9354 #, c-format msgid "" "\n" @@ -5770,12 +5805,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:9073 src/readelf.c:9096 +#: src/readelf.c:9360 src/readelf.c:9383 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/readelf.c:9077 +#: src/readelf.c:9364 #, c-format msgid "" "\n" @@ -5785,7 +5820,7 @@ msgstr "" "オフセット %4$#0<PRIx64> のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$<PRIu64> バイト:\n" -#: src/readelf.c:9090 +#: src/readelf.c:9377 #, fuzzy, c-format msgid "" "\n" @@ -5794,7 +5829,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:9100 +#: src/readelf.c:9387 #, c-format msgid "" "\n" @@ -5804,7 +5839,7 @@ msgstr "" "オフセット %4$#0<PRIx64> 文字列セクション [%1$Zu] '%2$s' には %3$<PRIu64> バ" "イトあります:\n" -#: src/readelf.c:9148 +#: src/readelf.c:9435 #, c-format msgid "" "\n" @@ -5813,7 +5848,7 @@ msgstr "" "\n" "セクション [%lu] がありません" -#: src/readelf.c:9177 +#: src/readelf.c:9464 #, c-format msgid "" "\n" @@ -5822,12 +5857,12 @@ msgstr "" "\n" "セクション '%s' がありません" -#: src/readelf.c:9234 +#: src/readelf.c:9521 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブのシンボル索引 '%s' を得られません: %s" -#: src/readelf.c:9237 +#: src/readelf.c:9524 #, c-format msgid "" "\n" @@ -5836,7 +5871,7 @@ msgstr "" "\n" "アーカイブ '%s' にはシンボル索引がありません\n" -#: src/readelf.c:9241 +#: src/readelf.c:9528 #, c-format msgid "" "\n" @@ -5845,12 +5880,12 @@ msgstr "" "\n" "アーカイブ '%s' の索引には %Zu 項目あります:\n" -#: src/readelf.c:9259 +#: src/readelf.c:9546 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "'%2$s' の オフセット %1$Zu のメンバーを抽出できません: %3$s" -#: src/readelf.c:9264 +#: src/readelf.c:9551 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンバー '%s' には以下があります:\n" @@ -5914,12 +5949,12 @@ msgstr "不当な基数: %s" msgid "%s: file format not recognized" msgstr "%s: ファイル形式を認識できません" -#: src/size.c:438 src/size.c:571 +#: src/size.c:437 src/size.c:570 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:596 +#: src/size.c:595 msgid "(TOTALS)\n" msgstr "(合計)\n" @@ -6045,7 +6080,7 @@ msgstr "-f オプションが 2 回指定されています" msgid "-F option specified twice" msgstr "-F オプションが 2 回指定されています" -#: src/strip.c:249 src/unstrip.c:117 +#: src/strip.c:249 src/unstrip.c:121 #, c-format msgid "-o option specified twice" msgstr "-o オプションが 2 回指定されています" @@ -6075,82 +6110,87 @@ msgstr "%s: アーカイブから抜き出している時は -o や -f は使え msgid "cannot open EBL backend" msgstr "EBL バックエンドを開けません" -#: src/strip.c:518 src/strip.c:542 +#: src/strip.c:508 +#, fuzzy, c-format +msgid "cannot get number of phdrs" +msgstr "セクション数を決定できません: %s" + +#: src/strip.c:523 src/strip.c:547 #, c-format msgid "cannot create new file '%s': %s" msgstr "新しいファイル '%s' を生成できません: %s" -#: src/strip.c:608 +#: src/strip.c:613 #, c-format msgid "illformed file '%s'" msgstr "不適格なファイル '%s'" -#: src/strip.c:930 src/strip.c:1019 +#: src/strip.c:935 src/strip.c:1024 #, c-format msgid "while generating output file: %s" msgstr "出力ファイルを生成している間: %s" -#: src/strip.c:992 src/strip.c:1957 +#: src/strip.c:997 src/strip.c:1962 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" -#: src/strip.c:1006 +#: src/strip.c:1011 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' のための出力を準備している間" -#: src/strip.c:1057 src/strip.c:1114 +#: src/strip.c:1062 src/strip.c:1119 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生成している間: %s" -#: src/strip.c:1063 +#: src/strip.c:1068 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/strip.c:1123 +#: src/strip.c:1128 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文字列テーブルを生成中: %s" -#: src/strip.c:1752 +#: src/strip.c:1757 #, fuzzy, c-format msgid "bad relocation" msgstr "リロケーションを表示" -#: src/strip.c:1869 src/strip.c:1979 +#: src/strip.c:1874 src/strip.c:1984 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込み中: %s" -#: src/strip.c:1880 +#: src/strip.c:1885 #, c-format msgid "while creating '%s'" msgstr "'%s' を生成中" -#: src/strip.c:1902 +#: src/strip.c:1907 #, c-format msgid "while computing checksum for debug information" msgstr "デバッグ情報のチェックサムを計算中" -#: src/strip.c:1965 +#: src/strip.c:1970 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: ファイルを読込み中にエラー: %s" -#: src/strip.c:2004 src/strip.c:2024 +#: src/strip.c:2009 src/strip.c:2029 #, fuzzy, c-format msgid "while writing '%s'" msgstr "'%s' を書込み中: %s" -#: src/strip.c:2061 src/strip.c:2068 +#: src/strip.c:2066 src/strip.c:2073 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' の終了中にエラー: %s" -#: src/strip.c:2091 src/strip.c:2148 +#: src/strip.c:2096 src/strip.c:2153 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "'%s' のアクセスと変更日付を設定できません" @@ -6187,265 +6227,293 @@ msgstr "" msgid "Only list module and file names, build IDs" msgstr "" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "" -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "" -#: src/unstrip.c:197 +#: src/unstrip.c:204 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:262 src/unstrip.c:1832 src/unstrip.c:1876 +#, fuzzy, c-format +msgid "cannot get number of program headers: %s" +msgstr "セクション数を決定できません: %s" + +#: src/unstrip.c:267 src/unstrip.c:1836 #, c-format msgid "cannot create program headers: %s" msgstr "" -#: src/unstrip.c:262 +#: src/unstrip.c:273 #, c-format msgid "cannot copy program header: %s" msgstr "" -#: src/unstrip.c:272 +#: src/unstrip.c:283 #, c-format msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:286 src/unstrip.c:1513 #, c-format msgid "cannot get section data: %s" msgstr "" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:288 src/unstrip.c:1515 #, c-format msgid "cannot copy section data: %s" msgstr "" -#: src/unstrip.c:301 +#: src/unstrip.c:312 #, c-format msgid "cannot create directory '%s'" msgstr "" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:352 src/unstrip.c:769 src/unstrip.c:1547 #, c-format msgid "cannot get symbol table entry: %s" msgstr "" -#: src/unstrip.c:357 src/unstrip.c:575 src/unstrip.c:596 src/unstrip.c:608 -#: src/unstrip.c:1556 src/unstrip.c:1686 src/unstrip.c:1710 +#: src/unstrip.c:368 src/unstrip.c:586 src/unstrip.c:607 src/unstrip.c:619 +#: src/unstrip.c:1568 src/unstrip.c:1698 src/unstrip.c:1722 #, c-format msgid "cannot update symbol table: %s" msgstr "" -#: src/unstrip.c:367 +#: src/unstrip.c:378 #, c-format msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:417 src/unstrip.c:428 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:504 +#: src/unstrip.c:515 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:516 +#: src/unstrip.c:527 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:764 +#: src/unstrip.c:775 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:917 src/unstrip.c:1258 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:958 src/unstrip.c:977 src/unstrip.c:1010 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:987 +#: src/unstrip.c:998 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1053 src/unstrip.c:1378 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1178 src/unstrip.c:1193 src/unstrip.c:1459 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1190 +#: src/unstrip.c:1202 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1229 src/unstrip.c:1233 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1237 src/unstrip.c:1241 src/unstrip.c:1474 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1232 +#: src/unstrip.c:1244 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1303 src/unstrip.c:1393 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1441 +#: src/unstrip.c:1453 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1543 +#: src/unstrip.c:1555 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "" -#: src/unstrip.c:1781 +#: src/unstrip.c:1793 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1814 #, c-format msgid "cannot get ELF header: %s" msgstr "" -#: src/unstrip.c:1830 +#: src/unstrip.c:1846 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1851 src/unstrip.c:1934 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:1883 +#: src/unstrip.c:1903 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1886 +#: src/unstrip.c:1906 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1925 src/unstrip.c:1976 src/unstrip.c:1988 src/unstrip.c:2074 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" +#: src/unstrip.c:1967 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1969 +msgid ", use --force" msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:1992 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1995 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1998 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:2001 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" + +#: src/unstrip.c:2031 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:1998 +#: src/unstrip.c:2035 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2013 +#: src/unstrip.c:2050 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2017 +#: src/unstrip.c:2054 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2030 +#: src/unstrip.c:2067 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2061 +#: src/unstrip.c:2098 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2194 +#: src/unstrip.c:2231 #, c-format msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2203 +#: src/unstrip.c:2240 #, c-format msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2250 +#: src/unstrip.c:2287 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2251 +#: src/unstrip.c:2288 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" @@ -6472,6 +6540,14 @@ msgid "" "was found, or . if FILE contains the debug information." msgstr "" +#, fuzzy +#~ msgid "cannot attach to process" +#~ msgstr "検索ツリーを生成できません" + +#, fuzzy +#~ msgid "cannot attach to core" +#~ msgstr "検索ツリーを生成できません" + #~ msgid "unknown tag %hx" #~ msgstr "不明なタグ %hx" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2014-05-20 10:15+0200\n" +"POT-Creation-Date: 2014-12-18 22:59+0100\n" "PO-Revision-Date: 2012-09-02 19:12+0200\n" "Last-Translator: Piotr Drąg <[email protected]>\n" "Language-Team: Polish <[email protected]>\n" @@ -17,8 +17,8 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3084 -#: src/readelf.c:3433 src/readelf.c:8002 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3182 +#: src/readelf.c:3559 src/readelf.c:8285 src/unstrip.c:2127 src/unstrip.c:2335 #, c-format msgid "memory exhausted" msgstr "pamięć wyczerpana" @@ -208,7 +208,12 @@ msgstr "nieprawidłowa wersja CFI" msgid "no alternative debug link found" msgstr "nie odnaleziono alternatywnego dowiązania debugowania" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdw/dwarf_error.c:95 +#, fuzzy +msgid "invalid opcode" +msgstr "nieprawidłowy operand" + +#: libdwfl/argp-std.c:46 src/unstrip.c:2277 msgid "Input selection options:" msgstr "Opcje wyboru wejścia:" @@ -248,34 +253,24 @@ msgstr "Wyszukuje ścieżkę dla oddzielnych plików debuginfo" msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "dopuszczalna jest tylko jedna z opcji -e, -p, -k, -K lub --core" -#: libdwfl/argp-std.c:177 -#, fuzzy -msgid "cannot attach to process" -msgstr "nie można utworzyć drzewa wyszukiwania" - -#: libdwfl/argp-std.c:231 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "nie można wczytać symboli jądra" -#: libdwfl/argp-std.c:235 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "nie można odnaleźć modułów jądra" -#: libdwfl/argp-std.c:252 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "nie można odnaleźć jądra lub modułów" -#: libdwfl/argp-std.c:291 +#: libdwfl/argp-std.c:290 #, c-format msgid "cannot read ELF core file: %s" msgstr "nie można odczytać pliku core ELF: %s" -#: libdwfl/argp-std.c:307 -#, fuzzy -msgid "cannot attach to core" -msgstr "nie można utworzyć drzewa wyszukiwania" - -#: libdwfl/argp-std.c:314 +#: libdwfl/argp-std.c:311 msgid "No modules recognized in core file" msgstr "Nie rozpoznano żadnych modułów w pliku core" @@ -430,6 +425,11 @@ msgstr "" msgid "Invalid argument" msgstr "nieprawidłowy parametr" +#: libdwfl/libdwflP.h:95 +#, fuzzy +msgid "Not an ET_CORE ELF file" +msgstr "nie jest prawidłowym plikiem ELF" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "Brak zaplecza" @@ -530,7 +530,7 @@ msgstr "nieprawidłowy rozmiar operanda źródłowego" msgid "invalid size of destination operand" msgstr "nieprawidłowy rozmiar operanda docelowego" -#: libelf/elf_error.c:87 src/readelf.c:5176 +#: libelf/elf_error.c:87 src/readelf.c:5367 #, c-format msgid "invalid encoding" msgstr "nieprawidłowe kodowanie" @@ -611,8 +611,8 @@ msgstr "dane/scn nie zgadzają się" msgid "invalid section header" msgstr "nieprawidłowy nagłówek sekcji" -#: libelf/elf_error.c:187 src/readelf.c:6966 src/readelf.c:7412 -#: src/readelf.c:7513 src/readelf.c:7675 +#: libelf/elf_error.c:187 src/readelf.c:7235 src/readelf.c:7683 +#: src/readelf.c:7784 src/readelf.c:7954 #, c-format msgid "invalid data" msgstr "nieprawidłowe dane" @@ -711,10 +711,10 @@ msgstr "" msgid "[ADDR...]" msgstr "[ADRES...]" -#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:235 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:663 src/elflint.c:235 #: src/findtextrel.c:162 src/ld.c:949 src/nm.c:265 src/objdump.c:181 #: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 -#: src/strip.c:213 src/unstrip.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -727,10 +727,10 @@ msgstr "" "BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI\n" "HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n" -#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:240 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:668 src/elflint.c:240 #: src/findtextrel.c:167 src/ld.c:954 src/nm.c:270 src/objdump.c:186 #: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 -#: src/strip.c:218 src/unstrip.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Napisane przez %s.\n" @@ -1102,120 +1102,120 @@ msgstr "nie można uzyskać zawartości sekcji %zu w \"%s\": %s" msgid "cannot get symbol in '%s': %s" msgstr "nie można uzyskać symbolu w \"%s\": %s" -#: src/elfcmp.c:372 +#: src/elfcmp.c:373 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "%s %s różnią się: tabela symboli [%zu]" -#: src/elfcmp.c:375 +#: src/elfcmp.c:376 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "%s %s różnią się: tabela symboli [%zu,%zu]" -#: src/elfcmp.c:421 src/elfcmp.c:490 +#: src/elfcmp.c:422 src/elfcmp.c:491 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "%s %s różnią się: liczba notatek sekcji [%zu] \"%s\"" -#: src/elfcmp.c:429 +#: src/elfcmp.c:430 #, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "nie można odczytać notatki sekcji [%zu] \"%s\" w \"%s\": %s" -#: src/elfcmp.c:439 +#: src/elfcmp.c:440 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "%s %s różnią się: nazwa notatki sekcji [%zu] \"%s\"" -#: src/elfcmp.c:447 +#: src/elfcmp.c:448 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "%s %s różnią się: sekcja [%zu] \"%s\" notatka \"%s\" typ" -#: src/elfcmp.c:462 +#: src/elfcmp.c:463 #, c-format msgid "%s %s differ: build ID length" msgstr "%s %s różnią się: długość identyfikatora kopii" -#: src/elfcmp.c:470 +#: src/elfcmp.c:471 #, c-format msgid "%s %s differ: build ID content" msgstr "%s %s różnią się: zawartość identyfikatora kopii" -#: src/elfcmp.c:479 +#: src/elfcmp.c:480 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "%s %s różnią się: sekcja [%zu] \"%s\" notatka \"%s\" zawartość" -#: src/elfcmp.c:519 +#: src/elfcmp.c:520 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "%s %s różnią się: zawartość sekcji [%zu] \"%s\"" -#: src/elfcmp.c:523 +#: src/elfcmp.c:524 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "%s %s różnią się: zawartość sekcji [%zu,%zu] \"%s\"" -#: src/elfcmp.c:538 +#: src/elfcmp.c:539 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "%s %s różnią się: różna liczba ważnych sekcji" -#: src/elfcmp.c:571 src/elfcmp.c:576 +#: src/elfcmp.c:572 src/elfcmp.c:577 #, c-format msgid "cannot load data of '%s': %s" msgstr "nie można wczytać danych z \"%s\": %s" -#: src/elfcmp.c:595 src/elfcmp.c:601 +#: src/elfcmp.c:596 src/elfcmp.c:602 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "nie można uzyskać wpisu nagłówka programu %d z \"%s\": %s" -#: src/elfcmp.c:607 +#: src/elfcmp.c:608 #, c-format msgid "%s %s differ: program header %d" msgstr "%s %s różnią się: nagłówek programu %d" -#: src/elfcmp.c:631 +#: src/elfcmp.c:632 #, c-format msgid "%s %s differ: gap" msgstr "%s %s różnią się: luka" -#: src/elfcmp.c:694 +#: src/elfcmp.c:695 #, c-format msgid "Invalid value '%s' for --gaps parameter." msgstr "Nieprawidłowa wartość \"%s\" dla parametru --gaps." -#: src/elfcmp.c:722 src/findtextrel.c:221 src/ldgeneric.c:1757 +#: src/elfcmp.c:723 src/findtextrel.c:221 src/ldgeneric.c:1757 #: src/ldgeneric.c:4247 src/nm.c:381 src/ranlib.c:161 src/size.c:293 -#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1923 +#: src/unstrip.c:1952 #, c-format msgid "cannot open '%s'" msgstr "nie można otworzyć \"%s\"" -#: src/elfcmp.c:726 src/findtextrel.c:228 src/ranlib.c:178 +#: src/elfcmp.c:727 src/findtextrel.c:228 src/ranlib.c:178 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "nie można utworzyć deskryptora ELF dla \"%s\": %s" -#: src/elfcmp.c:731 +#: src/elfcmp.c:732 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "nie można utworzyć deskryptora EBL dla \"%s\"" -#: src/elfcmp.c:749 +#: src/elfcmp.c:750 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "nie można uzyskać nagłówka sekcji dla sekcji %zu: %s" -#: src/elfcmp.c:759 +#: src/elfcmp.c:760 #, c-format msgid "cannot get content of section %zu: %s" msgstr "nie można uzyskać zawartości sekcji %zu: %s" -#: src/elfcmp.c:769 src/elfcmp.c:783 +#: src/elfcmp.c:770 src/elfcmp.c:784 #, c-format msgid "cannot get relocation: %s" msgstr "nie można uzyskać relokacji: %s" @@ -1414,14 +1414,14 @@ msgstr "" "sekcja [%2d] \"%s\": grupa sekcji [%2zu] \"%s\" nie poprzedza elementu " "grupy\n" -#: src/elflint.c:590 src/elflint.c:1450 src/elflint.c:1501 src/elflint.c:1607 -#: src/elflint.c:1932 src/elflint.c:2221 src/elflint.c:2735 src/elflint.c:2897 -#: src/elflint.c:3027 src/elflint.c:3199 src/elflint.c:4101 +#: src/elflint.c:590 src/elflint.c:1457 src/elflint.c:1508 src/elflint.c:1614 +#: src/elflint.c:1939 src/elflint.c:2228 src/elflint.c:2742 src/elflint.c:2904 +#: src/elflint.c:3034 src/elflint.c:3206 src/elflint.c:4108 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać danych sekcji\n" -#: src/elflint.c:603 src/elflint.c:1614 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1528,12 +1528,12 @@ msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: funkcja w sekcji COMMON to nonsens\n" -#: src/elflint.c:797 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: st_value spoza zakresu\n" -#: src/elflint.c:803 src/elflint.c:828 src/elflint.c:871 +#: src/elflint.c:810 src/elflint.c:835 src/elflint.c:878 #, c-format msgid "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " @@ -1542,7 +1542,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu nie mieści się w całości we wskazywanej " "sekcji [%2d] \"%s\"\n" -#: src/elflint.c:812 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1551,7 +1551,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: wskazywana sekcja [%2d] \"%s\" nie posiada " "ustawionej flagi SHF_TLS\n" -#: src/elflint.c:822 src/elflint.c:864 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1560,7 +1560,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: st_value spoza zakresu wskazywanej sekcji " "[%2d] \"%s\"\n" -#: src/elflint.c:849 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" @@ -1568,7 +1568,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: symbol TLS, ale brak wpisu TLS nagłówka " "programu\n" -#: src/elflint.c:857 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1577,7 +1577,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: st_value pomija wskazywaną sekcję [%2d] \"%s" "\"\n" -#: src/elflint.c:884 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1586,7 +1586,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: lokalny symbol spoza zakresu określonego w " "sh_info\n" -#: src/elflint.c:891 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1595,12 +1595,12 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: nielokalny symbol spoza zakresu określonego " "w sh_info\n" -#: src/elflint.c:898 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: nielokalny symbol sekcji\n" -#: src/elflint.c:948 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1609,7 +1609,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol _GLOBAL_OFFSET_TABLE_ odnosi się do błędnej " "sekcji [%2d]\n" -#: src/elflint.c:955 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1618,7 +1618,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol _GLOBAL_OFFSET_TABLE_ odnosi się do sekcji [%2d] " "\"%s\"\n" -#: src/elflint.c:971 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not " @@ -1627,7 +1627,7 @@ msgstr "" "sekcja [%2d] \"%s\": wartość symbolu _GLOBAL_OFFSET_TABLE_ %#<PRIx64> nie " "pasuje do adresu sekcji %s %#<PRIx64>\n" -#: src/elflint.c:978 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not " @@ -1636,7 +1636,7 @@ msgstr "" "sekcja [%2d] \"%s\": rozmiar symbolu _GLOBAL_OFFSET_TABLE_ %<PRIu64> nie " "pasuje do rozmiaru sekcji %s %<PRIu64>\n" -#: src/elflint.c:986 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1645,7 +1645,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol _GLOBAL_OFFSET_TABLE_ istnieje, ale brak sekcji ." "got\n" -#: src/elflint.c:1002 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic " @@ -1654,7 +1654,7 @@ msgstr "" "sekcja [%2d] \"%s\": wartość symbolu _DYNAMIC_ %#<PRIx64> nie pasuje do " "adresu segmentu dynamicznego %#<PRIx64>\n" -#: src/elflint.c:1009 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic " @@ -1663,7 +1663,7 @@ msgstr "" "sekcja [%2d] \"%s\": rozmiar symbolu _DYNAMIC_ %<PRIu64> nie pasuje do " "rozmiaru segmentu dynamicznego %<PRIu64>\n" -#: src/elflint.c:1022 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1672,22 +1672,22 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: symbol w dynamicznej tabeli symboli z " "niedomyślną widocznością\n" -#: src/elflint.c:1026 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: ustawiono nieznany bit w st_other\n" -#: src/elflint.c:1075 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "sekcja [%2d] \"%s\": DT_RELCOUNT użyte dla tej sekcji RELA\n" -#: src/elflint.c:1086 src/elflint.c:1138 +#: src/elflint.c:1093 src/elflint.c:1145 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "sekcja [%2d] \"%s\": DT_RELCOUNT %d za duże dla tej sekcji\n" -#: src/elflint.c:1111 src/elflint.c:1163 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1696,7 +1696,7 @@ msgstr "" "sekcja [%2d] \"%s\": relokacje względne po indeksie %d podanym przez " "DT_RELCOUNT\n" -#: src/elflint.c:1117 src/elflint.c:1169 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1705,50 +1705,50 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja bezwzględna pod indeksem %zu; DT_RELCOUNT " "podał %d relokacji względnych\n" -#: src/elflint.c:1129 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "sekcja [%2d] \"%s\": DT_RELACOUNT użyte dla tej sekcji REL\n" -#: src/elflint.c:1211 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "sekcja [%2d] \"%s\": nieprawidłowy indeks sekcji docelowej\n" -#: src/elflint.c:1223 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "sekcja [%2d] \"%s\": nieprawidłowy typ sekcji docelowej\n" -#: src/elflint.c:1231 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "sekcja [%2d] \"%s\": sh_info powinno wynosić zero\n" -#: src/elflint.c:1238 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "sekcja [%2d] \"%s\": relokacje dla sekcji złączalnych są niemożliwe\n" -#: src/elflint.c:1246 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "sekcja [%2d] \"%s\": rozmiar wpisu sekcji nie zgadza się z ElfXX_Rela\n" -#: src/elflint.c:1306 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "flaga relokacji tekstu jest ustawiona, ale nie posiada segmentu tylko do " "odczytu\n" -#: src/elflint.c:1333 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "sekcja [%2d] \"%s\": relokacja %zu: nieprawidłowy typ\n" -#: src/elflint.c:1341 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1757,12 +1757,12 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: typ relokacji nieprawidłowy dla tego " "typu pliku\n" -#: src/elflint.c:1349 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "sekcja [%2d] \"%s\": relokacja %zu: nieprawidłowy indeks symbolu\n" -#: src/elflint.c:1367 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1771,12 +1771,12 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: z %s można użyć tylko symbolu " "\"_GLOBAL_OFFSET_TABLE_\"\n" -#: src/elflint.c:1384 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "sekcja [%2d] \"%s\": relokacja %zu: offset spoza zakresu\n" -#: src/elflint.c:1399 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1785,7 +1785,7 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: relokacja kopii względem symbolu typu " "%s\n" -#: src/elflint.c:1420 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1794,60 +1794,60 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: sekcja tylko do odczytu została " "zmodyfikowana, ale nie ustawiono flagi relokacji tekstu\n" -#: src/elflint.c:1435 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" "sekcja [%2d] \"%s\": relokacje względem wczytanych i niewczytanych danych\n" -#: src/elflint.c:1475 src/elflint.c:1526 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać relokacji %zu: %s\n" -#: src/elflint.c:1602 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "obecna jest więcej niż jedna sekcja dynamiczna\n" -#: src/elflint.c:1621 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "sekcja [%2d] \"%s\": rozmiar wpisu sekcji nie zgadza się z ElfXX_Dyn\n" -#: src/elflint.c:1626 src/elflint.c:1911 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "sekcja [%2d] \"%s\": sh_info nie wynosi zero\n" -#: src/elflint.c:1636 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" "sekcja [%2d] \"%s\": nie można uzyskać wpisu %zu sekcji dynamicznej: %s\n" -#: src/elflint.c:1644 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "sekcja [%2d] \"%s\": wpisy nie-DT_NULL występują po wpisie DT_NULL\n" -#: src/elflint.c:1651 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "sekcja [%2d] \"%s\": wpis %zu: nieznany znacznik\n" -#: src/elflint.c:1662 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" "sekcja [%2d] \"%s\": wpis %zu: więcej niż jeden wpis ze znacznikiem %s\n" -#: src/elflint.c:1672 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "sekcja [%2d] \"%s\": wpis %zu: użyto znacznika %s poziomu 2\n" -#: src/elflint.c:1690 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -1855,7 +1855,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wartość DT_PLTREL musi wynosić DT_REL lub " "DT_RELA\n" -#: src/elflint.c:1703 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1864,7 +1864,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wskaźnik nie pasuje do adresu sekcji [%2d] " "\"%s\" wskazywanej przez sh_link\n" -#: src/elflint.c:1746 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" @@ -1872,7 +1872,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wartość %s musi wskazywać na wczytany " "segment\n" -#: src/elflint.c:1761 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1881,48 +1881,48 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wartość %s musi być prawidłowym offsetem w " "sekcji [%2d] \"%s\"\n" -#: src/elflint.c:1781 src/elflint.c:1809 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "sekcja [%2d] \"%s\": zawiera wpis %s, ale nie %s\n" -#: src/elflint.c:1793 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "sekcja [%2d] \"%s\": brak obowiązkowego znacznika %s\n" -#: src/elflint.c:1802 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "sekcja [%2d] \"%s\": brak sekcji skrótów\n" -#: src/elflint.c:1817 src/elflint.c:1824 +#: src/elflint.c:1824 src/elflint.c:1831 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "sekcja [%2d] \"%s\": nie wszystkie z %s, %s i %s są obecne\n" -#: src/elflint.c:1834 src/elflint.c:1838 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" "sekcja [%2d] \"%s\": brak znacznika %s w DSO oznaczonym podczas wstępnej " "konsolidacji\n" -#: src/elflint.c:1844 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" "sekcja [%2d] \"%s\": plik nie-DSO oznaczony jako zależność podczas wstępnej " "konsolidacji\n" -#: src/elflint.c:1855 src/elflint.c:1859 src/elflint.c:1863 src/elflint.c:1867 +#: src/elflint.c:1862 src/elflint.c:1866 src/elflint.c:1870 src/elflint.c:1874 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" "sekcja [%2d] \"%s\": brak znacznika %s we wstępnie konsolidowanym pliku " "wykonywalnym\n" -#: src/elflint.c:1879 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -1930,7 +1930,7 @@ msgstr "" "sekcja [%2d] \"%s\": tylko pliki relokowalne mogą mieć rozszerzoną sekcję " "indeksów\n" -#: src/elflint.c:1889 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" @@ -1938,24 +1938,24 @@ msgstr "" "sekcja [%2d] \"%s\": sekcja rozszerzonych indeksów sekcji nie dla tabeli " "symboli\n" -#: src/elflint.c:1894 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "nie można uzyskać danych dla sekcji symboli\n" -#: src/elflint.c:1897 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "sekcja [%2d] \"%s\": rozmiar wpisu nie zgadza się z Elf32_Word\n" -#: src/elflint.c:1906 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" "sekcja [%2d] \"%s\": tabela rozszerzonych indeksów jest za mała dla tabeli " "symboli\n" -#: src/elflint.c:1921 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1964,24 +1964,24 @@ msgstr "" "sekcja [%2d] \"%s\": rozszerzony indeks sekcji w sekcji [%2zu] \"%s\" " "odwołuje się do tej samej tabeli symboli\n" -#: src/elflint.c:1938 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "symbol 0 powinien mieć zerowy rozszerzony indeks sekcji\n" -#: src/elflint.c:1950 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "nie można uzyskać danych dla symbolu %zu\n" -#: src/elflint.c:1955 +#: src/elflint.c:1962 #, c-format msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n" msgstr "" "rozszerzony indeks sekcji wynosi %<PRIu32>, ale indeks symbolu nie wynosi " "XINDEX\n" -#: src/elflint.c:1971 src/elflint.c:2022 +#: src/elflint.c:1978 src/elflint.c:2029 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" @@ -1989,36 +1989,36 @@ msgstr "" "sekcja [%2d] \"%s\": sekcja tabeli mieszającej jest za mała (%ld, oczekiwano " "%ld)\n" -#: src/elflint.c:1983 src/elflint.c:2034 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "sekcja [%2d] \"%s\": tabela łańcuchowa jest za duża\n" -#: src/elflint.c:1997 src/elflint.c:2048 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" "sekcja [%2d] \"%s\": odwołanie do kubełka skrótu %zu jest spoza zakresu\n" -#: src/elflint.c:2007 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" "sekcja [%2d] \"%s\": odwołanie do łańcucha skrótu %zu jest spoza zakresu\n" -#: src/elflint.c:2058 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n" msgstr "" "sekcja [%2d] \"%s\": odwołanie do łańcucha skrótu %<PRIu64> jest spoza " "zakresu\n" -#: src/elflint.c:2074 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "sekcja [%2d] \"%s\": rozmiar maski bitowej nie jest potęgą 2: %u\n" -#: src/elflint.c:2085 +#: src/elflint.c:2092 #, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " @@ -2027,14 +2027,14 @@ msgstr "" "sekcja [%2d] \"%s\": sekcja tabeli mieszającej jest za mała (%ld, oczekiwano " "co najmniej %ld)\n" -#: src/elflint.c:2093 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" "sekcja [%2d] \"%s\": drugie przesunięcie funkcji mieszającej jest za duże: " "%u\n" -#: src/elflint.c:2125 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -2042,7 +2042,7 @@ msgstr "" "sekcja [%2d] \"%s\": łańcuch mieszający dla kubełka %zu jest mniejszy niż " "przesunięcie indeksu symboli\n" -#: src/elflint.c:2146 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -2051,7 +2051,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %u wskazywany w łańcuchu dla kubełka %zu jest " "nieokreślony\n" -#: src/elflint.c:2157 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -2059,13 +2059,13 @@ msgstr "" "sekcja [%2d] \"%s\": wartość skrótu dla symbolu %u w łańcuchu dla kubełka " "%zu jest błędna\n" -#: src/elflint.c:2188 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" "sekcja [%2d] \"%s\": łańcuch skrótu dla kubełka %zu jest spoza zakresu\n" -#: src/elflint.c:2193 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2073,36 +2073,36 @@ msgstr "" "sekcja [%2d] \"%s\": odwołanie do symbolu w łańcuchu dla kubełka %zu jest " "spoza zakresu\n" -#: src/elflint.c:2199 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" "sekcja [%2d] \"%s\": maska bitowa nie pasuje do nazw w tabeli mieszającej\n" -#: src/elflint.c:2212 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "sekcja [%2d] \"%s\": pliki relokowalne nie mogą posiadać tabeli " "mieszających\n" -#: src/elflint.c:2230 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" "sekcja [%2d] \"%s\": tabela mieszająca nie dla tabeli dynamicznych symboli\n" -#: src/elflint.c:2238 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "sekcja [%2d] \"%s\": niepoprawny rozmiar wpisu tabeli mieszającej\n" -#: src/elflint.c:2243 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "sekcja [%2d] \"%s\": nieoznaczona do przydzielenia\n" -#: src/elflint.c:2248 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2111,18 +2111,18 @@ msgstr "" "sekcja [%2d] \"%s\": tabela mieszająca nie posiada miejsca nawet na " "początkowe wpisy administracyjne\n" -#: src/elflint.c:2296 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" "sh_link w sekcjach skrótu [%2zu] \"%s\" i [%2zu] \"%s\" nie są identyczne\n" -#: src/elflint.c:2374 src/elflint.c:2378 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "sekcja [%2zu] \"%s\": odwołanie do symbolu o indeksie 0\n" -#: src/elflint.c:2385 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2131,7 +2131,7 @@ msgstr "" "symbol %d wymieniony w nowej tabeli mieszającej w [%2zu] \"%s\", ale nie w " "poprzedniej tabeli mieszającej [%2zu] \"%s\"\n" -#: src/elflint.c:2397 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2140,12 +2140,12 @@ msgstr "" "symbol %d wymieniony w poprzedniej tabeli mieszającej w [%2zu] \"%s\", ale " "nie w nowej tabeli mieszającej w [%2zu] \"%s\"\n" -#: src/elflint.c:2413 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "sekcja [%2d] \"%s\": niezerowe sh_%s dla sekcji NULL\n" -#: src/elflint.c:2433 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2153,92 +2153,92 @@ msgstr "" "sekcja [%2d] \"%s\": w plikach obiektów relokowalnych dozwolone są tylko " "grupy sekcji\n" -#: src/elflint.c:2444 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać tabeli symboli: %s\n" -#: src/elflint.c:2449 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" "sekcja [%2d] \"%s\": odwołanie do sekcji w sh_link nie posiada tabeli " "symboli\n" -#: src/elflint.c:2455 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "sekcja [%2d] \"%s\": nieprawidłowy indeks symbolu w sh_info\n" -#: src/elflint.c:2460 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "sekcja [%2d] \"%s\": niezerowe sh_flags\n" -#: src/elflint.c:2467 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać symbolu dla podpisu\n" -#: src/elflint.c:2472 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "sekcja [%2d] \"%s\": symbol podpisu nie można być pustym ciągiem\n" -#: src/elflint.c:2478 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "sekcja [%2d] \"%s\": sh_flags nie ustawione poprawnie\n" -#: src/elflint.c:2484 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać danych: %s\n" -#: src/elflint.c:2493 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" "sekcja [%2d] \"%s\": rozmiar sekcji nie jest wielokrotnością " "sizeof(Elf32_Word)\n" -#: src/elflint.c:2498 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "sekcja [%2d] \"%s\": grupa sekcji bez słowa flag\n" -#: src/elflint.c:2504 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "sekcja [%2d] \"%s\": grupa sekcji bez elementów\n" -#: src/elflint.c:2508 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "sekcja [%2d] \"%s\": grupa sekcji z tylko jednym elementem\n" -#: src/elflint.c:2519 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "sekcja [%2d] \"%s\": nieznane flagi grupy sekcji\n" -#: src/elflint.c:2531 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "sekcja [%2d] \"%s\": indeks sekcji %Zu jest spoza zakresu\n" -#: src/elflint.c:2540 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" "sekcja [%2d] \"%s\": nie można uzyskać nagłówka sekcji dla elementu %zu: %s\n" -#: src/elflint.c:2547 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "sekcja [%2d] \"%s\": grupa sekcji zawiera inną grupę [%2d] \"%s\"\n" -#: src/elflint.c:2553 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2247,12 +2247,12 @@ msgstr "" "sekcja [%2d] \"%s\": element %Zu odwołuje się do sekcji [%2d] \"%s\" bez " "flagi SHF_GROUP\n" -#: src/elflint.c:2560 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "sekcja [%2d] \"%s\" jest zawarta w więcej niż jednej grupie sekcji\n" -#: src/elflint.c:2749 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2261,7 +2261,7 @@ msgstr "" "sekcja [%2d] \"%s\" odwołuje się w sh_link do sekcji [%2d] \"%s\", która nie " "jest tabelą symboli dynamicznych\n" -#: src/elflint.c:2761 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2270,78 +2270,78 @@ msgstr "" "sekcja [%2d] \"%s\" posiada inną liczbę wpisów niż tabela symboli [%2d] \"%s" "\"\n" -#: src/elflint.c:2777 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "sekcja [%2d] \"%s\": symbol %d: nie można odczytać danych wersji\n" -#: src/elflint.c:2793 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "sekcja [%2d] \"%s\": symbol %d: symbol lokalny z zakresem globalnym\n" -#: src/elflint.c:2801 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "sekcja [%2d] \"%s\": symbol %d: symbol lokalny z wersją\n" -#: src/elflint.c:2815 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "sekcja [%2d] \"%s\": symbol %d: nieprawidłowy indeks wersji %d\n" -#: src/elflint.c:2820 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" "sekcja [%2d] \"%s\": symbol %d: indeks wersji %d jest dla wersji określonej\n" -#: src/elflint.c:2830 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" "sekcja [%2d] \"%s\": symbol %d: indeks wersji %d jest dla wersji żądanej\n" -#: src/elflint.c:2882 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "obecna jest więcej niż jedna sekcja odniesienia wersji\n" -#: src/elflint.c:2890 src/elflint.c:3019 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "sekcja [%2d] \"%s\": sh_link nie łączy się z tabelą ciągów\n" -#: src/elflint.c:2913 src/elflint.c:3071 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "sekcja [%2d] \"%s\": wpis %d posiada błędną wersję %d\n" -#: src/elflint.c:2919 src/elflint.c:3077 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada błędny offset dla danych dodatkowych\n" -#: src/elflint.c:2927 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "sekcja [%2d] \"%s\": symbol %d posiada błędne odniesienie do pliku\n" -#: src/elflint.c:2935 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "sekcja [%2d] \"%s\": wpis %d odnosi się do nieznanej zależności\n" -#: src/elflint.c:2947 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada nieznaną flagę\n" -#: src/elflint.c:2954 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2350,7 +2350,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada nieprawidłowe " "odniesienie do nazwy\n" -#: src/elflint.c:2961 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2359,7 +2359,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada błędną wartość " "skrótu: %#x, oczekiwano %#x\n" -#: src/elflint.c:2971 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2368,7 +2368,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada powtórzoną nazwę " "wersji \"%s\"\n" -#: src/elflint.c:2982 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2376,52 +2376,52 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada błędne następne " "pole\n" -#: src/elflint.c:2998 src/elflint.c:3156 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada błędny offset do następnego wpisu\n" -#: src/elflint.c:3011 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "obecna jest więcej niż jedna sekcja definicji wersji\n" -#: src/elflint.c:3056 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "sekcja [%2d] \"%s\": jest więcej niż jedna definicja BASE\n" -#: src/elflint.c:3060 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" "sekcja [%2d] \"%s\": definicja BASE musi posiadać indeks VER_NDX_GLOBAL\n" -#: src/elflint.c:3066 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "sekcja [%2d] \"%s\": wpis %d posiada nieznaną flagę\n" -#: src/elflint.c:3090 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada nieprawidłowe odniesienie do nazwy\n" -#: src/elflint.c:3097 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada błędną wartość skrótu: %#x, oczekiwano " "%#x\n" -#: src/elflint.c:3106 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "sekcja [%2d] \"%s\": wpis %d posiada powtórzoną nazwę wersji \"%s\"\n" -#: src/elflint.c:3125 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -2429,52 +2429,52 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada nieprawidłowe odniesienie do nazwy w " "danych dodatkowych\n" -#: src/elflint.c:3140 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada błędne następne pole w danych " "dodatkowych\n" -#: src/elflint.c:3162 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "sekcja [%2d] \"%s\": brak definicji BASE\n" -#: src/elflint.c:3178 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "sekcja [%2d] \"%s\": nieznana wersja rodzica \"%s\"\n" -#: src/elflint.c:3191 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "sekcja [%2d] \"%s\": pusta sekcja atrybutów obiektu\n" -#: src/elflint.c:3212 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "sekcja [%2d] \"%s\": nierozpoznany format atrybutu\n" -#: src/elflint.c:3228 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "sekcja [%2d] \"%s\": offset %zu: pole o zerowej długości w sekcji atrybutów\n" -#: src/elflint.c:3237 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "sekcja [%2d] \"%s\": offset %zu: nieprawidłowa długość w sekcji atrybutów\n" -#: src/elflint.c:3249 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "sekcja [%2d] \"%s\": offset %zu: niezakończony ciąg nazwy producenta\n" -#: src/elflint.c:3266 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2482,12 +2482,12 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: niekończące się ULEB128 w znaczniku " "podsekcji atrybutów\n" -#: src/elflint.c:3275 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "sekcja [%2d] \"%s\": offset %zu: skrócona sekcja atrybutów\n" -#: src/elflint.c:3284 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2495,7 +2495,7 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: zerowej długości pole w podsekcji " "atrybutów\n" -#: src/elflint.c:3297 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2503,7 +2503,7 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: nieprawidłowa długość w podsekcji " "atrybutów\n" -#: src/elflint.c:3308 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2511,24 +2511,24 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: podsekcja atrybutów posiada nieoczekiwany " "znacznik %u\n" -#: src/elflint.c:3326 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "sekcja [%2d] \"%s\": offset %zu: niekończące się ULEB128 w znaczniku " "atrybutu\n" -#: src/elflint.c:3337 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "sekcja [%2d] \"%s\": offset %zu: niezakończony ciąg w atrybucie\n" -#: src/elflint.c:3350 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "sekcja [%2d] \"%s\": offset %zu: nierozpoznany znacznik atrybutu %u\n" -#: src/elflint.c:3354 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" @@ -2536,12 +2536,12 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: atrybut %s posiada nierozpoznaną wartość " "%<PRIu64>\n" -#: src/elflint.c:3364 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "sekcja [%2d] \"%s\": offset %zu: producent \"%s\" jest nieznany\n" -#: src/elflint.c:3370 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2549,47 +2549,47 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: dodatkowe bajty po ostatniej sekcji " "atrybutów\n" -#: src/elflint.c:3459 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "nie można uzyskać nagłówka sekcji zerowej\n" -#: src/elflint.c:3463 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "sekcja zerowa posiada niezerową nazwę\n" -#: src/elflint.c:3465 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "sekcja zerowa posiada niezerowy typ\n" -#: src/elflint.c:3467 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "sekcja zerowa posiada niezerowe flagi\n" -#: src/elflint.c:3469 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "sekcja zerowa posiada niezerowy adres\n" -#: src/elflint.c:3471 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "sekcja zerowa posiada niezerowy offset\n" -#: src/elflint.c:3473 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "sekcja zerowa posiada niezerową wartość wyrównania\n" -#: src/elflint.c:3475 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "sekcja zerowa posiada niezerową wartość rozmiaru wpisu\n" -#: src/elflint.c:3478 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2598,7 +2598,7 @@ msgstr "" "sekcja zerowa posiada niezerową wartość rozmiaru, a nagłówek ELF posiada " "niezerową wartość shnum\n" -#: src/elflint.c:3482 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2607,7 +2607,7 @@ msgstr "" "sekcja zerowa posiada niezerową wartość dowiązań, a nagłówek ELF nie " "wskazuje przepełnienia w shstrndx\n" -#: src/elflint.c:3486 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2616,27 +2616,27 @@ msgstr "" "sekcja zerowa posiada niezerową wartość dowiązań, a nagłówek ELF nie " "wskazuje przepełnienia w phnum\n" -#: src/elflint.c:3503 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "nie można uzyskać nagłówka sekcji dla sekcji [%2zu] \"%s\": %s\n" -#: src/elflint.c:3512 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "sekcja [%2zu]: nieprawidłowa nazwa\n" -#: src/elflint.c:3539 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "sekcja [%2d] \"%s\" posiada błędny typ: oczekiwano %s, jest %s\n" -#: src/elflint.c:3555 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "sekcja [%2zu] \"%s\" posiada błędne flagi: oczekiwano %s, jest %s\n" -#: src/elflint.c:3572 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2644,12 +2644,12 @@ msgstr "" "sekcja [%2zu] \"%s\" posiada błędne flagi: oczekiwano %s i być może %s, jest " "%s\n" -#: src/elflint.c:3590 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "sekcja [%2zu] \"%s\" jest obecna w pliku obiektu\n" -#: src/elflint.c:3596 src/elflint.c:3628 +#: src/elflint.c:3603 src/elflint.c:3635 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -2657,7 +2657,7 @@ msgstr "" "sekcja [%2zu] \"%s\" posiada flagę SHF_ALLOC, ale nie posiada segmentu " "wczytywalnego\n" -#: src/elflint.c:3601 src/elflint.c:3633 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2666,7 +2666,7 @@ msgstr "" "sekcja [%2zu] \"%s\" nie posiada flagi SHF_ALLOC, ale są segmenty " "wczytywalne\n" -#: src/elflint.c:3609 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2674,23 +2674,23 @@ msgstr "" "sekcja [%2zu] \"%s\" jest tabelą indeksów sekcji rozszerzeń w pliku " "nieobiektowym\n" -#: src/elflint.c:3652 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" "sekcja [%2zu] \"%s\": rozmiar nie jest wielokrotnością rozmiaru wpisu\n" -#: src/elflint.c:3657 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "nie można uzyskać nagłówka sekcji\n" -#: src/elflint.c:3667 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "sekcja [%2zu] \"%s\" posiada nieobsługiwany typ %d\n" -#: src/elflint.c:3681 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" @@ -2698,56 +2698,56 @@ msgstr "" "sekcja [%2zu] \"%s\" zawiera nieprawidłowe flagi specyficzne dla procesora " "%#<PRIx64>\n" -#: src/elflint.c:3688 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "sekcja [%2zu] \"%s\" zawiera nieznane flagi %#<PRIx64>\n" -#: src/elflint.c:3696 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "sekcja [%2zu] \"%s\": adres sekcji danych lokalnych dla wątków nie jest " "zerem\n" -#: src/elflint.c:3704 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "sekcja [%2zu] \"%s\": nieprawidłowe odwołanie do sekcji w wartości " "dowiązania\n" -#: src/elflint.c:3709 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "sekcja [%2zu] \"%s\": nieprawidłowe odwołanie do sekcji w wartości " "informacyjnej\n" -#: src/elflint.c:3716 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "sekcja [%2zu] \"%s\": flaga ciągów jest ustawiona bez flagi merge\n" -#: src/elflint.c:3721 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "sekcja [%2zu] \"%s\": flaga merge jest ustawiona, ale rozmiar wpisu jest " "zerowy\n" -#: src/elflint.c:3739 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" "sekcja [%2zu] \"%s\" posiada nieoczekiwany typ %d dla sekcji wykonywalnej\n" -#: src/elflint.c:3748 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "sekcja [%2zu] \"%s\" jest wykonywalne i zapisywalne\n" -#: src/elflint.c:3777 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2756,7 +2756,7 @@ msgstr "" "sekcja [%2zu] \"%s\" nie jest w całości zawarta w segmencie wpisu %d " "nagłówka programu\n" -#: src/elflint.c:3785 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2765,7 +2765,7 @@ msgstr "" "sekcja [%2zu] \"%s\" posiada typ NOBITS, a jest odczytywana z pliku w " "segmencie wpisu %d nagłówka programu\n" -#: src/elflint.c:3794 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2774,17 +2774,17 @@ msgstr "" "sekcja [%2zu] \"%s\" nie posiada typu NOBITS, a nie jest odczytywana z pliku " "w segmencie wpisu %d nagłówka programu\n" -#: src/elflint.c:3805 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "sekcja [%2zu] \"%s\" jest wykonywalne w segmencie niewykonywalnym %d\n" -#: src/elflint.c:3815 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "sekcja [%2zu] \"%s\" jest zapisywalne w niezapisywalnym segmencie %d\n" -#: src/elflint.c:3825 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -2792,7 +2792,7 @@ msgstr "" "sekcja [%2zu] \"%s\": posiada flagę alloc, ale sekcja nie jest w żadnym " "segmencie wczytywalnym\n" -#: src/elflint.c:3831 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2801,7 +2801,7 @@ msgstr "" "sekcja [%2zu] \"%s\": według nagłówka ELF to jest tabela ciągów nagłówków " "sekcji, ale typ nie jest SHT_TYPE\n" -#: src/elflint.c:3839 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -2809,17 +2809,17 @@ msgstr "" "sekcja [%2zu] \"%s\": pliki relokowalne nie mogą posiadać tabeli symboli " "dynamicznych\n" -#: src/elflint.c:3890 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "obecna jest więcej niż jedna tabela symboli wersji\n" -#: src/elflint.c:3913 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "jest wpis nagłówka programu INTERP, ale nie posiada sekcji .interp\n" -#: src/elflint.c:3924 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -2827,14 +2827,14 @@ msgstr "" "wczytywalny segment [%u] jest wykonywalny, ale nie zawiera wykonywalnych " "sekcji\n" -#: src/elflint.c:3930 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "wczytywalny segment [%u] jest zapisywalny, ale nie zawiera zapisywalnych " "sekcji\n" -#: src/elflint.c:3941 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2843,23 +2843,23 @@ msgstr "" "brak sekcji .gnu.versym, ale istnieje sekcja .gnu.versym_d lub .gnu." "versym_r\n" -#: src/elflint.c:3954 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "powtórzony indeks wersji %d\n" -#: src/elflint.c:3968 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "sekcja .gnu.versym istnieje bez .gnu.versym_d lub .gnu.versym_r\n" -#: src/elflint.c:4017 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" "phdr[%d]: nieznany typ notatki pliku core %<PRIu32> pod offsetem %<PRIu64>\n" -#: src/elflint.c:4021 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n" @@ -2867,13 +2867,13 @@ msgstr "" "phdr[%2d]: \"%s\": nieznany typ notatki pliku core %<PRIu32> pod offsetem " "%Zu\n" -#: src/elflint.c:4044 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" "phdr[%d]: nieznany typ notatki pliku obiektu %<PRIu32> pod offsetem %Zu\n" -#: src/elflint.c:4048 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n" @@ -2881,37 +2881,37 @@ msgstr "" "phdr[%d]: \"%s\": nieznany typ notatki pliku obiektu %<PRIu32> pod offsetem " "%Zu\n" -#: src/elflint.c:4065 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: brak określonych wpisów notatek dla typu pliku\n" -#: src/elflint.c:4084 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: nie można uzyskać zawartości sekcji notatki: %s\n" -#: src/elflint.c:4087 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: dodatkowe %<PRIu64> bajtów po ostatniej notatce\n" -#: src/elflint.c:4108 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "sekcja [%2d] \"%s\": brak określonych wpisów notatek dla typu pliku\n" -#: src/elflint.c:4115 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać zawartości sekcji notatek\n" -#: src/elflint.c:4118 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "sekcja [%2d] \"%s\": dodatkowe %<PRIu64> bajtów po ostatniej notatce\n" -#: src/elflint.c:4136 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -2919,129 +2919,129 @@ msgstr "" "tylko pliki wykonywalne, obiekty współdzielone i pliki core mogą posiadać " "nagłówki programu\n" -#: src/elflint.c:4151 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "nie można uzyskać wpisu nagłówka programu %d: %s\n" -#: src/elflint.c:4160 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "wpis nagłówka programu %d: nieznany typ wpisu nagłówka programu %#<PRIx64>\n" -#: src/elflint.c:4171 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "więcej niż jeden wpis INTERP w nagłówku programu\n" -#: src/elflint.c:4179 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "więcej niż jeden wpis TLS w nagłówku programu\n" -#: src/elflint.c:4186 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "statyczny plik wykonywalny nie może posiadać sekcji dynamicznych\n" -#: src/elflint.c:4200 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "odniesienie sekcji dynamicznej w nagłówku programu posiada błędny offset\n" -#: src/elflint.c:4203 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "różne rozmiary sekcji dynamicznej w nagłówku programu i sekcji\n" -#: src/elflint.c:4213 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "więcej niż jeden wpis GNU_RELRO w nagłówku programu\n" -#: src/elflint.c:4234 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "wczytywalny segment wskazywany przez GNU_RELRO nie jest zapisywalny\n" -#: src/elflint.c:4237 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "flagi wczytywalnego segmentu [%u] nie pasują do flag GNU_RELRO [%u]\n" -#: src/elflint.c:4245 src/elflint.c:4268 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "segment %s nie zawiera się we wczytywalnym segmencie\n" -#: src/elflint.c:4274 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" "offsety nagłówka programu w nagłówku ELF i wpisie PHDR nie zgadzają się" -#: src/elflint.c:4298 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "odniesienie tabeli wyszukiwania ramki wywołania w nagłówku programu posiada " "błędny offset\n" -#: src/elflint.c:4301 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "różne rozmiary tabel wyszukiwania ramki wywołania w nagłówku programu i " "sekcji\n" -#: src/elflint.c:4314 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME jest obecne, ale brak sekcji .eh_frame_hdr\n" -#: src/elflint.c:4322 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabela wyszukiwania ramki wywołania musi być przydzielona\n" -#: src/elflint.c:4325 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sekcja [%2zu] \"%s\": musi być przydzielona\n" -#: src/elflint.c:4329 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "tabela wyszukiwania ramki wywołania nie może być zapisywalna\n" -#: src/elflint.c:4332 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sekcja [%2zu] \"%s\" nie może być zapisywalna\n" -#: src/elflint.c:4337 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "tabela wyszukiwania ramki wywołania nie może być wykonywalna\n" -#: src/elflint.c:4340 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sekcja [%2zu] \"%s\" nie może być wykonywalna\n" -#: src/elflint.c:4351 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "wpis nagłówka programu %d: rozmiar pliku większy niż rozmiar pamięci\n" -#: src/elflint.c:4358 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "wpis nagłówka programu %d: wyrównanie nie jest potęgą 2\n" -#: src/elflint.c:4361 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3050,7 +3050,7 @@ msgstr "" "wpis nagłówka programu %d: offset w pliku i adres wirtualny nie są " "wielokrotnością wyrównania\n" -#: src/elflint.c:4374 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3059,12 +3059,12 @@ msgstr "" "plik wykonywalny/DSO z sekcją .eh_frame_hdr nie posiada wpisu nagłówka " "programu PT_GNU_EH_FRAME" -#: src/elflint.c:4408 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "nie można odczytać nagłówka ELF: %s\n" -#: src/elflint.c:4434 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n" @@ -3120,39 +3120,44 @@ msgstr "brak relokacji tekstu w \"%s\"" msgid "while reading ELF file" msgstr "podczas odczytywania pliku ELF" -#: src/findtextrel.c:334 src/findtextrel.c:351 -#, c-format -msgid "cannot get program header index at offset %d: %s" +#: src/findtextrel.c:329 +#, fuzzy, c-format +msgid "cannot get program header count: %s" +msgstr "nie można uzyskać nagłówka programu: %s" + +#: src/findtextrel.c:340 src/findtextrel.c:357 +#, fuzzy, c-format +msgid "cannot get program header index at offset %zd: %s" msgstr "nie można uzyskać indeksu nagłówka programu pod offsetem %d: %s" -#: src/findtextrel.c:403 +#: src/findtextrel.c:409 #, c-format msgid "cannot get section header of section %Zu: %s" msgstr "nie można uzyskać nagłówka sekcji dla sekcji %Zu: %s" -#: src/findtextrel.c:415 +#: src/findtextrel.c:421 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "nie można uzyskać sekcji tabeli symboli %zu w \"%s\": %s" -#: src/findtextrel.c:435 src/findtextrel.c:458 +#: src/findtextrel.c:441 src/findtextrel.c:464 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "nie można uzyskać relokacji pod indeksem %d w sekcji %zu w \"%s\": %s" -#: src/findtextrel.c:523 +#: src/findtextrel.c:529 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s nie został skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:576 +#: src/findtextrel.c:582 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "plik zawierający funkcję \"%s\" nie został skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:583 src/findtextrel.c:603 +#: src/findtextrel.c:589 src/findtextrel.c:609 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3160,7 +3165,7 @@ msgid "" msgstr "" "plik zawierający funkcję \"%s\" mógł nie zostać skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:591 +#: src/findtextrel.c:597 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3169,7 +3174,7 @@ msgstr "" "plik zawierający funkcję \"%s\" lub plik zawierający funkcję \"%s\" nie " "został skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:611 +#: src/findtextrel.c:617 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3585,7 +3590,7 @@ msgstr "" "Ostrzeżenie: rozmiar \"%s\" zmienił się z %<PRIu64> w %s na %<PRIu64> w %s" #: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 -#: src/readelf.c:829 src/strip.c:563 +#: src/readelf.c:829 src/strip.c:568 #, c-format msgid "cannot determine number of sections: %s" msgstr "nie można określić liczby sekcji: %s" @@ -3824,7 +3829,7 @@ msgstr "błąd wewnętrzny: sekcja nie będąca nobits po sekcji nobits" msgid "cannot get header of 0th section: %s" msgstr "nie można uzyskać nagłówka zerowej sekcji: %s" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1822 #, c-format msgid "cannot update ELF header: %s" msgstr "nie można zaktualizować nagłówka ELF: %s" @@ -3994,7 +3999,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: BŁĄD WEWNĘTRZNY %d (%s-%s): %s" #: src/nm.c:398 src/nm.c:410 src/size.c:309 src/size.c:318 src/size.c:329 -#: src/strip.c:2155 +#: src/strip.c:2160 #, c-format msgid "while closing '%s'" msgstr "podczas zamykania \"%s\"" @@ -4037,12 +4042,12 @@ msgstr "%s%s%s: nie rozpoznano formatu pliku" msgid "cannot create search tree" msgstr "nie można utworzyć drzewa wyszukiwania" -#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 src/readelf.c:536 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:793 src/readelf.c:536 #: src/readelf.c:1085 src/readelf.c:1245 src/readelf.c:1393 src/readelf.c:1579 -#: src/readelf.c:1785 src/readelf.c:1972 src/readelf.c:2182 src/readelf.c:2440 -#: src/readelf.c:2510 src/readelf.c:2592 src/readelf.c:3103 src/readelf.c:3139 -#: src/readelf.c:3202 src/readelf.c:7906 src/readelf.c:8986 src/readelf.c:9133 -#: src/readelf.c:9201 src/size.c:417 src/size.c:487 src/strip.c:503 +#: src/readelf.c:1785 src/readelf.c:1975 src/readelf.c:2202 src/readelf.c:2460 +#: src/readelf.c:2536 src/readelf.c:2623 src/readelf.c:3201 src/readelf.c:3237 +#: src/readelf.c:3300 src/readelf.c:8187 src/readelf.c:9273 src/readelf.c:9420 +#: src/readelf.c:9488 src/size.c:417 src/size.c:486 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "nie można uzyskać indeksu tabeli ciągów nagłówków sekcji" @@ -4126,15 +4131,15 @@ msgstr "Nie podano działania.\n" msgid "while close `%s'" msgstr "podczas zamykania \"%s\"" -#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2055 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2072 msgid "INVALID SYMBOL" msgstr "NIEPRAWIDŁOWY SYMBOL" -#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2088 +#: src/objdump.c:394 src/readelf.c:1914 src/readelf.c:2108 msgid "INVALID SECTION" msgstr "NIEPRAWIDŁOWA SEKCJA" -#: src/objdump.c:510 +#: src/objdump.c:514 #, c-format msgid "" "\n" @@ -4145,21 +4150,21 @@ msgstr "" "PISY RELOKACJI DLA [%s]:\n" "%-*s TYP WARTOŚĆ\n" -#: src/objdump.c:513 +#: src/objdump.c:517 msgid "OFFSET" msgstr "OFFSET" -#: src/objdump.c:576 +#: src/objdump.c:582 #, c-format msgid "Contents of section %s:\n" msgstr "Zawartość sekcji %s:\n" -#: src/objdump.c:697 +#: src/objdump.c:703 #, c-format msgid "cannot disassemble" msgstr "nie można deasemblować" -#: src/objdump.c:736 +#: src/objdump.c:742 #, c-format msgid "cannot allocate memory" msgstr "nie można przydzielić pamięci" @@ -4313,11 +4318,11 @@ msgstr "nie można utworzyć deskryptora ELF: %s" msgid "cannot get section: %s" msgstr "nie można uzyskać sekcji: %s" -#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9153 -#: src/unstrip.c:345 src/unstrip.c:376 src/unstrip.c:425 src/unstrip.c:533 -#: src/unstrip.c:550 src/unstrip.c:586 src/unstrip.c:784 src/unstrip.c:1052 -#: src/unstrip.c:1242 src/unstrip.c:1302 src/unstrip.c:1423 src/unstrip.c:1476 -#: src/unstrip.c:1583 src/unstrip.c:1772 +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9440 +#: src/unstrip.c:356 src/unstrip.c:387 src/unstrip.c:436 src/unstrip.c:544 +#: src/unstrip.c:561 src/unstrip.c:597 src/unstrip.c:795 src/unstrip.c:1063 +#: src/unstrip.c:1254 src/unstrip.c:1314 src/unstrip.c:1435 src/unstrip.c:1488 +#: src/unstrip.c:1595 src/unstrip.c:1784 #, c-format msgid "cannot get section header: %s" msgstr "nie można uzyskać nagłówka sekcji: %s" @@ -4327,8 +4332,8 @@ msgstr "nie można uzyskać nagłówka sekcji: %s" msgid "cannot get section name" msgstr "nie można uzyskać nagłówka sekcji\n" -#: src/readelf.c:571 src/readelf.c:5207 src/readelf.c:7400 src/readelf.c:7502 -#: src/readelf.c:7660 +#: src/readelf.c:571 src/readelf.c:5398 src/readelf.c:7671 src/readelf.c:7773 +#: src/readelf.c:7939 #, c-format msgid "cannot get %s content: %s" msgstr "nie można uzyskać zwartości %s: %s" @@ -4631,7 +4636,7 @@ msgstr "" " mapowanie sekcji do segmentów:\n" " Segment sekcji..." -#: src/readelf.c:1258 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1843 src/unstrip.c:1886 src/unstrip.c:1893 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" @@ -4680,8 +4685,8 @@ msgstr "<NIEPRAWIDŁOWY SYMBOL>" msgid "<INVALID SECTION>" msgstr "<NIEPRAWIDŁOWY SEKCJA>" -#: src/readelf.c:1585 src/readelf.c:2188 src/readelf.c:2446 src/readelf.c:2516 -#: src/readelf.c:2798 src/readelf.c:2871 src/readelf.c:4474 +#: src/readelf.c:1585 src/readelf.c:2208 src/readelf.c:2466 src/readelf.c:2542 +#: src/readelf.c:2846 src/readelf.c:2920 src/readelf.c:4610 #, fuzzy, c-format msgid "invalid sh_link value in section %Zu" msgstr "nieprawidłowa sekcja .debug_line" @@ -4741,7 +4746,7 @@ msgstr "runpath biblioteki: [%s]\n" msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (bajtów)\n" -#: src/readelf.c:1770 src/readelf.c:1957 +#: src/readelf.c:1770 src/readelf.c:1960 #, c-format msgid "" "\n" @@ -4750,7 +4755,7 @@ msgstr "" "\n" "Nieprawidłowa tabela symboli pod offsetem %#0<PRIx64>\n" -#: src/readelf.c:1788 src/readelf.c:1974 +#: src/readelf.c:1788 src/readelf.c:1978 #, c-format msgid "" "\n" @@ -4773,7 +4778,7 @@ msgstr[2] "" "Sekcja relokacji [%2zu] \"%s\" dla sekcji [%2u] \"%s\" pod offsetem " "%#0<PRIx64> zawiera %d wpisów:\n" -#: src/readelf.c:1803 +#: src/readelf.c:1803 src/readelf.c:1993 #, c-format msgid "" "\n" @@ -4799,22 +4804,22 @@ msgstr " Offset Typ Wartość Nazwa\n" msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 -#: src/readelf.c:1922 src/readelf.c:2042 src/readelf.c:2054 src/readelf.c:2068 -#: src/readelf.c:2087 src/readelf.c:2100 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1913 +#: src/readelf.c:1925 src/readelf.c:2059 src/readelf.c:2071 src/readelf.c:2085 +#: src/readelf.c:2107 src/readelf.c:2120 msgid "<INVALID RELOC>" msgstr "<NIEPRAWIDŁOWA RELOKACJA>" -#: src/readelf.c:1986 +#: src/readelf.c:2003 msgid " Offset Type Value Addend Name\n" msgstr " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:1988 +#: src/readelf.c:2005 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2196 +#: src/readelf.c:2216 #, c-format msgid "" "\n" @@ -4832,7 +4837,7 @@ msgstr[2] "" "\n" "Tabela symboli [%2u] \"%s\" zawiera %u wpisów:\n" -#: src/readelf.c:2201 +#: src/readelf.c:2221 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4840,33 +4845,33 @@ msgstr[0] " %lu symbol lokalny Tabela ciągów: [%2u] \"%s\"\n" msgstr[1] " %lu symbole lokalne Tabela ciągów: [%2u] \"%s\"\n" msgstr[2] " %lu symboli lokalnych Tabela ciągów: [%2u] \"%s\"\n" -#: src/readelf.c:2209 +#: src/readelf.c:2229 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2211 +#: src/readelf.c:2231 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2231 +#: src/readelf.c:2251 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2319 +#: src/readelf.c:2339 #, c-format msgid "bad dynamic symbol" msgstr "błędny symbol dynamiczny" -#: src/readelf.c:2401 +#: src/readelf.c:2421 msgid "none" msgstr "brak" -#: src/readelf.c:2418 +#: src/readelf.c:2438 msgid "| <unknown>" msgstr "| <nieznany>" -#: src/readelf.c:2449 +#: src/readelf.c:2469 #, c-format msgid "" "\n" @@ -4892,17 +4897,17 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> Dowiązanie do sekcji: [%2u] \"%s" "\"\n" -#: src/readelf.c:2470 +#: src/readelf.c:2490 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Wersja: %hu Plik: %s Licznik: %hu\n" -#: src/readelf.c:2483 +#: src/readelf.c:2503 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nazwa: %s Flagi: %s Wersja: %hu\n" -#: src/readelf.c:2520 +#: src/readelf.c:2546 #, c-format msgid "" "\n" @@ -4928,18 +4933,18 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> Dowiązanie do sekcji: [%2u] \"%s" "\"\n" -#: src/readelf.c:2548 +#: src/readelf.c:2574 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" " %#06x: Wersja: %hd Flagi: %s Indeks: %hd Licznik: %hd Nazwa: %s\n" -#: src/readelf.c:2563 +#: src/readelf.c:2589 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Rodzic %d: %s\n" -#: src/readelf.c:2802 +#: src/readelf.c:2850 #, c-format msgid "" "\n" @@ -4965,15 +4970,15 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> Dowiązanie do sekcji: [%2u] \"%s" "\"" -#: src/readelf.c:2830 +#: src/readelf.c:2878 msgid " 0 *local* " msgstr " 0 *lokalny* " -#: src/readelf.c:2835 +#: src/readelf.c:2883 msgid " 1 *global* " msgstr " 1 *globalny* " -#: src/readelf.c:2876 +#: src/readelf.c:2925 #, c-format msgid "" "\n" @@ -5004,22 +5009,22 @@ msgstr[2] "" " Adres: %#0*<PRIx64> Offset: %#08<PRIx64> Dowiązanie do sekcji: [%2u] \"%s" "\"\n" -#: src/readelf.c:2898 +#: src/readelf.c:2947 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Długość Liczba % całości Pokrycie\n" -#: src/readelf.c:2900 +#: src/readelf.c:2949 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:2907 +#: src/readelf.c:2956 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:2920 +#: src/readelf.c:2969 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5028,12 +5033,27 @@ msgstr "" " Średnia liczba testów: udane wyszukania: %f\n" "\t\t\t nieudane wyszukania: %f\n" -#: src/readelf.c:2938 src/readelf.c:2980 src/readelf.c:3021 +#: src/readelf.c:2987 src/readelf.c:3042 src/readelf.c:3098 #, c-format msgid "cannot get data for section %d: %s" msgstr "nie można uzyskać danych dla sekcji %d: %s" -#: src/readelf.c:3075 +#: src/readelf.c:2995 +#, fuzzy, c-format +msgid "invalid data in sysv.hash section %d" +msgstr "nieprawidłowe dane w sekcji [%zu] \"%s\"" + +#: src/readelf.c:3050 +#, fuzzy, c-format +msgid "invalid data in sysv.hash64 section %d" +msgstr "nieprawidłowe dane w sekcji [%zu] \"%s\"" + +#: src/readelf.c:3106 +#, fuzzy, c-format +msgid "invalid data in gnu.hash section %d" +msgstr "nieprawidłowe dane w sekcji [%zu] \"%s\"" + +#: src/readelf.c:3173 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5043,7 +5063,7 @@ msgstr "" " Rozmiar maski bitowej: %zu bajtów %<PRIuFAST32>%% bitów ustawionych " "drugie przesunięcie skrótu: %u\n" -#: src/readelf.c:3150 +#: src/readelf.c:3248 #, c-format msgid "" "\n" @@ -5064,7 +5084,7 @@ msgstr[2] "" "Sekcja listy bibliotek [%2zu] \"%s\" pod offsetem %#0<PRIx64> zawiera %d " "wpisów:\n" -#: src/readelf.c:3164 +#: src/readelf.c:3262 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5072,7 +5092,7 @@ msgstr "" " Biblioteka Oznaczenie czasu Suma k. Wersja " "Flagi" -#: src/readelf.c:3214 +#: src/readelf.c:3312 #, c-format msgid "" "\n" @@ -5083,140 +5103,140 @@ msgstr "" "Sekcja atrybutów obiektu [%2zu] \"%s\" %<PRIu64> bajtów pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:3230 +#: src/readelf.c:3329 msgid " Owner Size\n" msgstr " Właściciel Rozmiar\n" -#: src/readelf.c:3256 +#: src/readelf.c:3358 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" -#: src/readelf.c:3288 +#: src/readelf.c:3397 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" -#: src/readelf.c:3293 +#: src/readelf.c:3402 #, c-format msgid " File: %11<PRIu32>\n" msgstr " Plik: %11<PRIu32>\n" -#: src/readelf.c:3328 +#: src/readelf.c:3451 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3331 +#: src/readelf.c:3454 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3334 +#: src/readelf.c:3457 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3341 +#: src/readelf.c:3467 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3344 +#: src/readelf.c:3470 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3389 +#: src/readelf.c:3515 #, c-format msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3392 +#: src/readelf.c:3518 #, c-format msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3397 +#: src/readelf.c:3523 #, c-format msgid "%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3400 +#: src/readelf.c:3526 #, c-format msgid "%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3406 +#: src/readelf.c:3532 #, c-format msgid "%s+%#<PRIx64> <%s>" msgstr "%s+%#<PRIx64> <%s>" -#: src/readelf.c:3409 +#: src/readelf.c:3535 #, c-format msgid "%s+%#0*<PRIx64> <%s>" msgstr "%s+%#0*<PRIx64> <%s>" -#: src/readelf.c:3413 +#: src/readelf.c:3539 #, c-format msgid "%#<PRIx64> <%s>" msgstr "%#<PRIx64> <%s>" -#: src/readelf.c:3416 +#: src/readelf.c:3542 #, c-format msgid "%#0*<PRIx64> <%s>" msgstr "%#0*<PRIx64> <%s>" -#: src/readelf.c:3421 +#: src/readelf.c:3547 #, c-format msgid "%s+%#<PRIx64>" msgstr "%s+%#<PRIx64>" -#: src/readelf.c:3424 +#: src/readelf.c:3550 #, c-format msgid "%s+%#0*<PRIx64>" msgstr "%s+%#0*<PRIx64>" -#: src/readelf.c:3806 +#: src/readelf.c:3932 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:3809 +#: src/readelf.c:3935 #, c-format msgid "%zu byte block:" msgstr "%zu bajtowy blok:" -#: src/readelf.c:4203 +#: src/readelf.c:4332 #, c-format msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <SKRÓCONE>\n" -#: src/readelf.c:4260 +#: src/readelf.c:4389 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> zostało użyte z różnymi rozmiarami adresu" -#: src/readelf.c:4267 +#: src/readelf.c:4396 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> zostało użyte z różnymi rozmiarami offsetu" -#: src/readelf.c:4274 +#: src/readelf.c:4403 #, fuzzy, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> zostało użyte z różnymi rozmiarami adresu" -#: src/readelf.c:4356 +#: src/readelf.c:4492 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <NIEUŻYWANE ŚMIECIE W RESZCIE SEKCJI>\n" -#: src/readelf.c:4364 +#: src/readelf.c:4500 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <NIEUŻYWANE ŚMIECIE>... %<PRIu64> bajtów...\n" -#: src/readelf.c:4390 +#: src/readelf.c:4526 #, c-format msgid "" "\n" @@ -5227,7 +5247,7 @@ msgstr "" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#<PRIx64>:\n" " [ Kod]\n" -#: src/readelf.c:4398 +#: src/readelf.c:4534 #, c-format msgid "" "\n" @@ -5236,30 +5256,30 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %<PRIu64>:\n" -#: src/readelf.c:4411 +#: src/readelf.c:4547 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** błąd podczas odczytywania skrótu: %s\n" -#: src/readelf.c:4427 +#: src/readelf.c:4563 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] offset: %<PRId64>, potomek: %s, znacznik: %s\n" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "yes" msgstr "tak" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "no" msgstr "nie" -#: src/readelf.c:4464 src/readelf.c:4537 +#: src/readelf.c:4600 src/readelf.c:4673 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "nie można uzyskać zawartości .debug_aranges: %s" -#: src/readelf.c:4479 +#: src/readelf.c:4615 #, c-format msgid "" "\n" @@ -5277,12 +5297,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#<PRIx64> zawiera %zu wpisów:\n" -#: src/readelf.c:4510 +#: src/readelf.c:4646 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4512 +#: src/readelf.c:4648 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5290,8 +5310,8 @@ msgstr "" " [%*zu] początek: %0#*<PRIx64>, długość: %5<PRIu64>, offset CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:4542 src/readelf.c:4696 src/readelf.c:5217 src/readelf.c:6131 -#: src/readelf.c:6632 src/readelf.c:6752 src/readelf.c:6908 src/readelf.c:7331 +#: src/readelf.c:4678 src/readelf.c:4832 src/readelf.c:5408 src/readelf.c:6362 +#: src/readelf.c:6894 src/readelf.c:7014 src/readelf.c:7177 src/readelf.c:7602 #, c-format msgid "" "\n" @@ -5300,7 +5320,7 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#<PRIx64>:\n" -#: src/readelf.c:4555 src/readelf.c:6157 +#: src/readelf.c:4691 src/readelf.c:6388 #, c-format msgid "" "\n" @@ -5309,106 +5329,111 @@ msgstr "" "\n" "Tabela pod offsetem %Zu:\n" -#: src/readelf.c:4559 src/readelf.c:5241 src/readelf.c:6166 +#: src/readelf.c:4695 src/readelf.c:5432 src/readelf.c:6399 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "nieprawidłowe dane w sekcji [%zu] \"%s\"" -#: src/readelf.c:4575 +#: src/readelf.c:4711 #, fuzzy, c-format msgid "" "\n" " Length: %6<PRIu64>\n" msgstr " Długość offsetu: %<PRIu8>\n" -#: src/readelf.c:4587 +#: src/readelf.c:4723 #, fuzzy, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " Wersja: %<PRIu16>\n" -#: src/readelf.c:4591 +#: src/readelf.c:4727 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:4602 +#: src/readelf.c:4738 #, fuzzy, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " offset CU: %#<PRIx32>\n" -#: src/readelf.c:4608 +#: src/readelf.c:4744 #, fuzzy, c-format msgid " Address size: %6<PRIu64>\n" msgstr " offset adresu: %#<PRIx32>\n" -#: src/readelf.c:4612 +#: src/readelf.c:4748 #, fuzzy, c-format msgid "unsupported address size" msgstr "brak wartości adresu" -#: src/readelf.c:4617 +#: src/readelf.c:4753 #, fuzzy, c-format msgid "" " Segment size: %6<PRIu64>\n" "\n" msgstr " ustawienie pliku na %<PRIu64>\n" -#: src/readelf.c:4621 +#: src/readelf.c:4757 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:4661 +#: src/readelf.c:4797 #, fuzzy, c-format msgid " %s..%s (%<PRIx64>)\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:4664 +#: src/readelf.c:4800 #, fuzzy, c-format msgid " %s..%s\n" msgstr " [%6tx] %s...%s\n" -#: src/readelf.c:4673 +#: src/readelf.c:4809 #, c-format msgid " %Zu padding bytes\n" msgstr "" -#: src/readelf.c:4691 +#: src/readelf.c:4827 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "nie można uzyskać zawartości .debug_ranges: %s" -#: src/readelf.c:4721 src/readelf.c:6659 +#: src/readelf.c:4857 src/readelf.c:6921 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <NIEPRAWIDŁOWE DANE>\n" -#: src/readelf.c:4743 src/readelf.c:6681 +#: src/readelf.c:4879 src/readelf.c:6943 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] adres podstawowy %s\n" -#: src/readelf.c:4750 src/readelf.c:6688 +#: src/readelf.c:4886 src/readelf.c:6950 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:4761 +#: src/readelf.c:4897 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s...%s\n" -#: src/readelf.c:4763 +#: src/readelf.c:4899 #, c-format msgid " %s..%s\n" msgstr " %s...%s\n" -#: src/readelf.c:5196 +#: src/readelf.c:5078 +#, fuzzy +msgid " <INVALID DATA>\n" +msgstr " <NIEPRAWIDŁOWE DANE>\n" + +#: src/readelf.c:5387 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "nie można uzyskać nagłówka ELF: %s" -#: src/readelf.c:5213 +#: src/readelf.c:5404 #, c-format msgid "" "\n" @@ -5417,7 +5442,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywołania [%2zu] \"%s\" pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:5263 +#: src/readelf.c:5454 #, c-format msgid "" "\n" @@ -5426,50 +5451,50 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:5348 +#: src/readelf.c:5547 src/readelf.c:5702 #, c-format msgid "invalid augmentation length" msgstr "nieprawidłowa długość powiększenia" -#: src/readelf.c:5360 +#: src/readelf.c:5562 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:5366 +#: src/readelf.c:5568 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:5477 +#: src/readelf.c:5679 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (offset: %#<PRIx64>)" -#: src/readelf.c:5484 +#: src/readelf.c:5686 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (kończący offset: %#<PRIx64>)" -#: src/readelf.c:5511 +#: src/readelf.c:5723 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sWskaźnik LSDA: %#<PRIx64>\n" -#: src/readelf.c:5563 +#: src/readelf.c:5778 #, c-format msgid "cannot get attribute code: %s" msgstr "nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:5572 +#: src/readelf.c:5787 #, c-format msgid "cannot get attribute form: %s" msgstr "nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:5587 +#: src/readelf.c:5802 #, c-format msgid "cannot get attribute value: %s" msgstr "nie można uzyskać wartości atrybutu: %s" -#: src/readelf.c:5880 +#: src/readelf.c:6101 #, c-format msgid "" "\n" @@ -5480,7 +5505,7 @@ msgstr "" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#<PRIx64>:\n" " [Offset]\n" -#: src/readelf.c:5912 +#: src/readelf.c:6133 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5493,7 +5518,7 @@ msgstr "" "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" " Podpis typu: %#<PRIx64>, offset typu: %#<PRIx64>\n" -#: src/readelf.c:5921 +#: src/readelf.c:6142 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5504,33 +5529,33 @@ msgstr "" " Wersja: %<PRIu16>, offset sekcji skrótów: %<PRIu64>, rozmiar adresu: " "%<PRIu8>, rozmiar offsetu: %<PRIu8>\n" -#: src/readelf.c:5946 +#: src/readelf.c:6167 #, c-format msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s" msgstr "nie można uzyskać DIE pod offsetem %<PRIu64> w sekcji \"%s\": %s" -#: src/readelf.c:5960 +#: src/readelf.c:6181 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:5969 +#: src/readelf.c:6190 #, c-format msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s" msgstr "" "nie można uzyskać znacznika DIE pod offsetem %<PRIu64> w sekcji \"%s\": %s" -#: src/readelf.c:6001 +#: src/readelf.c:6222 #, c-format msgid "cannot get next DIE: %s\n" msgstr "nie można uzyskać następnego DIE: %s\n" -#: src/readelf.c:6009 +#: src/readelf.c:6230 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać następnego DIE: %s" -#: src/readelf.c:6045 +#: src/readelf.c:6266 #, fuzzy, c-format msgid "" "\n" @@ -5540,12 +5565,12 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#<PRIx64>:\n" -#: src/readelf.c:6144 +#: src/readelf.c:6375 #, c-format msgid "cannot get line data section data: %s" msgstr "nie można uzyskać danych sekcji danych wiersza: %s" -#: src/readelf.c:6212 +#: src/readelf.c:6445 #, c-format msgid "" "\n" @@ -5574,12 +5599,12 @@ msgstr "" "\n" "Instrukcje:\n" -#: src/readelf.c:6233 +#: src/readelf.c:6466 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "nieprawidłowe dane pod offsetem %tu w sekcji [%zu] \"%s\"" -#: src/readelf.c:6248 +#: src/readelf.c:6481 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" @@ -5587,7 +5612,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu parametr\n" msgstr[1] " [%*<PRIuFAST8>] %hhu parametry\n" msgstr[2] " [%*<PRIuFAST8>] %hhu parametrów\n" -#: src/readelf.c:6256 +#: src/readelf.c:6489 msgid "" "\n" "Directory table:" @@ -5595,7 +5620,7 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:6272 +#: src/readelf.c:6505 msgid "" "\n" "File name table:\n" @@ -5605,7 +5630,7 @@ msgstr "" "Tabela nazw plików:\n" " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:6301 +#: src/readelf.c:6540 msgid "" "\n" "Line number statements:" @@ -5613,114 +5638,119 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:6377 +#: src/readelf.c:6591 +#, fuzzy, c-format +msgid "invalid maximum operations per instruction is zero" +msgstr "nieprawidłowa minimalna długość dopasowanego rozmiaru ciągu" + +#: src/readelf.c:6627 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr "" " instrukcja specjalna %u: adres+%u = %s, op_index = %u, wiersz%+d = %zu\n" -#: src/readelf.c:6382 +#: src/readelf.c:6632 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " instrukcja specjalna %u: adres+%u = %s, wiersz%+d = %zu\n" -#: src/readelf.c:6402 +#: src/readelf.c:6652 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:6407 +#: src/readelf.c:6657 msgid " end of sequence" msgstr " koniec sekwencji" -#: src/readelf.c:6424 +#: src/readelf.c:6676 #, c-format msgid " set address to %s\n" msgstr " ustawienie adresu na %s\n" -#: src/readelf.c:6445 +#: src/readelf.c:6703 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" " definicja nowego pliku: dir=%u, mtime=%<PRIu64>, długość=%<PRIu64>, nazwa=" "%s\n" -#: src/readelf.c:6458 +#: src/readelf.c:6716 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" -#: src/readelf.c:6463 +#: src/readelf.c:6721 msgid " unknown opcode" msgstr " nieznana instrukcja" -#: src/readelf.c:6475 +#: src/readelf.c:6733 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:6486 +#: src/readelf.c:6744 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr " zwiększenie adresu o %u do %s, op_index do %u\n" -#: src/readelf.c:6490 +#: src/readelf.c:6748 #, c-format msgid " advance address by %u to %s\n" msgstr " zwiększenie adresu o %u do %s\n" -#: src/readelf.c:6501 +#: src/readelf.c:6759 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " zwiększenie wiersza o stałą %d do %<PRId64>\n" -#: src/readelf.c:6509 +#: src/readelf.c:6767 #, c-format msgid " set file to %<PRIu64>\n" msgstr " ustawienie pliku na %<PRIu64>\n" -#: src/readelf.c:6519 +#: src/readelf.c:6777 #, c-format msgid " set column to %<PRIu64>\n" msgstr " ustawienie kolumny na %<PRIu64>\n" -#: src/readelf.c:6526 +#: src/readelf.c:6784 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " ustawienie \"%s\" na %<PRIuFAST8>\n" -#: src/readelf.c:6532 +#: src/readelf.c:6790 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:6541 +#: src/readelf.c:6803 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr " zwiększenie adresu o stałą %u do %s, op_index do %u\n" -#: src/readelf.c:6545 +#: src/readelf.c:6807 #, c-format msgid " advance address by constant %u to %s\n" msgstr " zwiększenie adresu o stałą %u do %s\n" -#: src/readelf.c:6563 +#: src/readelf.c:6825 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr " zwiększenie adresu o stałą wartość %u do %s\n" -#: src/readelf.c:6572 +#: src/readelf.c:6834 msgid " set prologue end flag" msgstr " ustawienie flagi końca prologu" -#: src/readelf.c:6577 +#: src/readelf.c:6839 msgid " set epilogue begin flag" msgstr " ustawienie flagi początku epilogu" -#: src/readelf.c:6586 +#: src/readelf.c:6848 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" -#: src/readelf.c:6595 +#: src/readelf.c:6857 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" @@ -5728,96 +5758,101 @@ msgstr[0] " nieznana instrukcja z %<PRIu8> parametrem:" msgstr[1] " nieznana instrukcja z %<PRIu8> parametrami:" msgstr[2] " nieznana instrukcja z %<PRIu8> parametrami:" -#: src/readelf.c:6627 +#: src/readelf.c:6889 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "nie można uzyskać zawartości .debug_log: %s" -#: src/readelf.c:6702 +#: src/readelf.c:6964 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s...%s" -#: src/readelf.c:6704 +#: src/readelf.c:6966 #, c-format msgid " %s..%s" msgstr " %s...%s" -#: src/readelf.c:6711 +#: src/readelf.c:6973 src/readelf.c:7858 msgid " <INVALID DATA>\n" msgstr " <NIEPRAWIDŁOWE DANE>\n" -#: src/readelf.c:6763 src/readelf.c:6917 +#: src/readelf.c:7025 src/readelf.c:7186 #, c-format msgid "cannot get macro information section data: %s" msgstr "nie można uzyskać danych sekcji informacji o makrach: %s" -#: src/readelf.c:6842 +#: src/readelf.c:7104 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** niezakończony ciąg na końcu sekcji" -#: src/readelf.c:6958 +#: src/readelf.c:7127 +#, fuzzy, c-format +msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" +msgstr "%*s*** niezakończony ciąg na końcu sekcji" + +#: src/readelf.c:7227 #, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Offset: 0x%<PRIx64>\n" -#: src/readelf.c:6970 +#: src/readelf.c:7239 #, c-format msgid " Version: %<PRIu16>\n" msgstr " Wersja: %<PRIu16>\n" -#: src/readelf.c:6976 src/readelf.c:7689 +#: src/readelf.c:7245 src/readelf.c:7968 #, c-format msgid " unknown version, cannot parse section\n" msgstr " nieznana wersja, nie można przetworzyć sekcji\n" -#: src/readelf.c:6983 +#: src/readelf.c:7252 #, c-format msgid " Flag: 0x%<PRIx8>\n" msgstr " Flaga: 0x%<PRIx8>\n" -#: src/readelf.c:6986 +#: src/readelf.c:7255 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr " Długość offsetu: %<PRIu8>\n" -#: src/readelf.c:6994 +#: src/readelf.c:7263 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " Offset .debug_line: 0x%<PRIx64>\n" -#: src/readelf.c:7007 +#: src/readelf.c:7276 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " tablica instrukcji rozszerzenia, %<PRIu8> elementów:\n" -#: src/readelf.c:7014 +#: src/readelf.c:7283 #, c-format msgid " [%<PRIx8>]" msgstr " [%<PRIx8>]" -#: src/readelf.c:7026 +#: src/readelf.c:7295 #, c-format msgid " %<PRIu8> arguments:" msgstr " Parametry %<PRIu8>:" -#: src/readelf.c:7054 +#: src/readelf.c:7323 #, c-format msgid " no arguments." msgstr " brak parametrów." -#: src/readelf.c:7289 +#: src/readelf.c:7560 #, c-format msgid "vendor opcode not verified?" msgstr "instrukcja producenta nie została sprawdzona?" -#: src/readelf.c:7317 +#: src/readelf.c:7588 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr " [%5d] offset DIE: %6<PRId64>, offset CU DIE: %6<PRId64>, nazwa: %s\n" -#: src/readelf.c:7358 +#: src/readelf.c:7629 #, c-format msgid "" "\n" @@ -5828,12 +5863,12 @@ msgstr "" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#<PRIx64>:\n" " %*s Ciąg\n" -#: src/readelf.c:7372 +#: src/readelf.c:7643 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** błąd podczas odczytywania ciągów: %s\n" -#: src/readelf.c:7392 +#: src/readelf.c:7663 #, c-format msgid "" "\n" @@ -5842,7 +5877,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywołania [%2zu] \".eh_frame_hdr\":\n" -#: src/readelf.c:7494 +#: src/readelf.c:7765 #, c-format msgid "" "\n" @@ -5851,22 +5886,22 @@ msgstr "" "\n" "Sekcja tabeli obsługiwania wyjątków [%2zu] \".gcc_except_table\":\n" -#: src/readelf.c:7517 +#: src/readelf.c:7788 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:7529 +#: src/readelf.c:7800 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:7543 +#: src/readelf.c:7815 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywołania: %#x " -#: src/readelf.c:7556 +#: src/readelf.c:7828 msgid "" "\n" " Call site table:" @@ -5874,7 +5909,7 @@ msgstr "" "\n" " Tabela strony wywołania:" -#: src/readelf.c:7570 +#: src/readelf.c:7842 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5887,12 +5922,12 @@ msgstr "" " Lądowisko: %#<PRIx64>\n" " Działanie: %u\n" -#: src/readelf.c:7630 +#: src/readelf.c:7909 #, c-format msgid "invalid TType encoding" msgstr "nieprawidłowe kodowanie TType" -#: src/readelf.c:7651 +#: src/readelf.c:7930 #, c-format msgid "" "\n" @@ -5901,37 +5936,37 @@ msgstr "" "\n" "Sekcja GDB [%2zu] \"%s\" pod offsetem %#<PRIx64> zawiera %<PRId64> bajtów:\n" -#: src/readelf.c:7680 +#: src/readelf.c:7959 #, c-format msgid " Version: %<PRId32>\n" msgstr " Wersja: %<PRId32>\n" -#: src/readelf.c:7698 +#: src/readelf.c:7977 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " offset CU: %#<PRIx32>\n" -#: src/readelf.c:7705 +#: src/readelf.c:7984 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " offset TU: %#<PRIx32>\n" -#: src/readelf.c:7712 +#: src/readelf.c:7991 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr " offset adresu: %#<PRIx32>\n" -#: src/readelf.c:7719 +#: src/readelf.c:7998 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " offset symbolu: %#<PRIx32>\n" -#: src/readelf.c:7726 +#: src/readelf.c:8005 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " offset stałej: %#<PRIx32>\n" -#: src/readelf.c:7733 +#: src/readelf.c:8012 #, c-format msgid "" "\n" @@ -5940,7 +5975,7 @@ msgstr "" "\n" " Lista CU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:7755 +#: src/readelf.c:8034 #, c-format msgid "" "\n" @@ -5949,7 +5984,7 @@ msgstr "" "\n" " Lista TU pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:7781 +#: src/readelf.c:8060 #, c-format msgid "" "\n" @@ -5958,7 +5993,7 @@ msgstr "" "\n" " Lista adresów pod offsetem %#<PRIx32> zawiera %zu wpisów:\n" -#: src/readelf.c:7810 +#: src/readelf.c:8089 #, c-format msgid "" "\n" @@ -5967,17 +6002,17 @@ msgstr "" "\n" " Tabela symboli pod offsetem %#<PRIx32> zawiera %zu gniazd:\n" -#: src/readelf.c:7895 +#: src/readelf.c:8176 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s" -#: src/readelf.c:8053 src/readelf.c:8659 src/readelf.c:8770 src/readelf.c:8828 +#: src/readelf.c:8336 src/readelf.c:8942 src/readelf.c:9053 src/readelf.c:9111 #, c-format msgid "cannot convert core note data: %s" msgstr "nie można przekonwertować danych notatki core: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8683 #, c-format msgid "" "\n" @@ -5986,21 +6021,21 @@ msgstr "" "\n" "%*s... <powtarza się jeszcze %u razy>..." -#: src/readelf.c:8903 +#: src/readelf.c:9190 msgid " Owner Data size Type\n" msgstr " Właściciel Rozmiar danych Typ\n" -#: src/readelf.c:8921 +#: src/readelf.c:9208 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:8971 +#: src/readelf.c:9258 #, c-format msgid "cannot get content of note section: %s" msgstr "nie można uzyskać zawartości sekcji notatki: %s" -#: src/readelf.c:8998 +#: src/readelf.c:9285 #, c-format msgid "" "\n" @@ -6010,7 +6045,7 @@ msgstr "" "Segment notatki [%2zu] \"%s\" o długości %<PRIu64> bajtów pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:9021 +#: src/readelf.c:9308 #, c-format msgid "" "\n" @@ -6019,7 +6054,7 @@ msgstr "" "\n" "Segment notatki o długości %<PRIu64> bajtów pod offsetem %#0<PRIx64>:\n" -#: src/readelf.c:9067 +#: src/readelf.c:9354 #, c-format msgid "" "\n" @@ -6028,12 +6063,12 @@ msgstr "" "\n" "Sekcja [%Zu] \"%s\" nie posiada danych do zrzucenia.\n" -#: src/readelf.c:9073 src/readelf.c:9096 +#: src/readelf.c:9360 src/readelf.c:9383 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "nie można uzyskać danych dla sekcji [%Zu] \"%s\": %s" -#: src/readelf.c:9077 +#: src/readelf.c:9364 #, c-format msgid "" "\n" @@ -6043,7 +6078,7 @@ msgstr "" "Segment zrzutu szesnastkowego [%Zu] \"%s\", %<PRIu64> bajtów pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:9090 +#: src/readelf.c:9377 #, c-format msgid "" "\n" @@ -6052,7 +6087,7 @@ msgstr "" "\n" "Sekcja [%Zu] \"%s\" nie posiada ciągów do zrzucenia.\n" -#: src/readelf.c:9100 +#: src/readelf.c:9387 #, c-format msgid "" "\n" @@ -6062,7 +6097,7 @@ msgstr "" "Sekcja ciągów [%Zu] \"%s\" zawiera %<PRIu64> bajtów pod offsetem " "%#0<PRIx64>:\n" -#: src/readelf.c:9148 +#: src/readelf.c:9435 #, c-format msgid "" "\n" @@ -6071,7 +6106,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:9177 +#: src/readelf.c:9464 #, c-format msgid "" "\n" @@ -6080,12 +6115,12 @@ msgstr "" "\n" "sekcja \"%s\" nie istnieje" -#: src/readelf.c:9234 +#: src/readelf.c:9521 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "nie można uzyskać indeksu symboli archiwum \"%s\": %s" -#: src/readelf.c:9237 +#: src/readelf.c:9524 #, c-format msgid "" "\n" @@ -6094,7 +6129,7 @@ msgstr "" "\n" "Archiwum \"%s\" nie posiada indeksu symboli\n" -#: src/readelf.c:9241 +#: src/readelf.c:9528 #, c-format msgid "" "\n" @@ -6103,12 +6138,12 @@ msgstr "" "\n" "Indeks archiwum \"%s\" posiada %Zu wpisów:\n" -#: src/readelf.c:9259 +#: src/readelf.c:9546 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "nie można wydobyć elementów pod offsetem %Zu w \"%s\": %s" -#: src/readelf.c:9264 +#: src/readelf.c:9551 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum \"%s\" zawiera:\n" @@ -6172,12 +6207,12 @@ msgstr "Nieprawidłowa baza: %s" msgid "%s: file format not recognized" msgstr "%s: nie rozpoznano formatu pliku" -#: src/size.c:438 src/size.c:571 +#: src/size.c:437 src/size.c:570 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:596 +#: src/size.c:595 msgid "(TOTALS)\n" msgstr "(CAŁKOWITE)\n" @@ -6309,7 +6344,7 @@ msgstr "Opcję -f podano dwukrotnie" msgid "-F option specified twice" msgstr "Opcję -F podano dwukrotnie" -#: src/strip.c:249 src/unstrip.c:117 +#: src/strip.c:249 src/unstrip.c:121 #, c-format msgid "-o option specified twice" msgstr "Opcję -o podano dwukrotnie" @@ -6339,82 +6374,87 @@ msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:518 src/strip.c:542 +#: src/strip.c:508 +#, fuzzy, c-format +msgid "cannot get number of phdrs" +msgstr "nie można określić liczby nagłówków programu: %s" + +#: src/strip.c:523 src/strip.c:547 #, c-format msgid "cannot create new file '%s': %s" msgstr "nie można utworzyć nowego pliku \"%s\": %s" -#: src/strip.c:608 +#: src/strip.c:613 #, c-format msgid "illformed file '%s'" msgstr "plik \"%s\" posiada błędny format" -#: src/strip.c:930 src/strip.c:1019 +#: src/strip.c:935 src/strip.c:1024 #, c-format msgid "while generating output file: %s" msgstr "podczas tworzenia pliku wyjściowego: %s" -#: src/strip.c:992 src/strip.c:1957 +#: src/strip.c:997 src/strip.c:1962 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: błąd podczas tworzenia nagłówka ELF: %s" -#: src/strip.c:1006 +#: src/strip.c:1011 #, c-format msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjścia dla \"%s\"" -#: src/strip.c:1057 src/strip.c:1114 +#: src/strip.c:1062 src/strip.c:1119 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1063 +#: src/strip.c:1068 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1123 +#: src/strip.c:1128 #, c-format msgid "while create section header string table: %s" msgstr "podczas tworzenia tabeli ciągów nagłówka sekcji: %s" -#: src/strip.c:1752 +#: src/strip.c:1757 #, c-format msgid "bad relocation" msgstr "błędna relokacja" -#: src/strip.c:1869 src/strip.c:1979 +#: src/strip.c:1874 src/strip.c:1984 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania \"%s\": %s" -#: src/strip.c:1880 +#: src/strip.c:1885 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia \"%s\"" -#: src/strip.c:1902 +#: src/strip.c:1907 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:1965 +#: src/strip.c:1970 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: błąd podczas odczytywania pliku: %s" -#: src/strip.c:2004 src/strip.c:2024 +#: src/strip.c:2009 src/strip.c:2029 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania \"%s\"" -#: src/strip.c:2061 src/strip.c:2068 +#: src/strip.c:2066 src/strip.c:2073 #, c-format msgid "error while finishing '%s': %s" msgstr "błąd podczas kończenia \"%s\": %s" -#: src/strip.c:2091 src/strip.c:2148 +#: src/strip.c:2096 src/strip.c:2153 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostępu i modyfikacji \"%s\"" @@ -6453,207 +6493,216 @@ msgstr "Zastosowuje relokacje do zawartości sekcji w plikach ET_REL" msgid "Only list module and file names, build IDs" msgstr "Wyświetla tylko nazwy modułów i plików, identyfikatory kopii" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "opcję -d podano dwukrotnie" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "dozwolona jest tylko jedna z opcji -o lub -d" -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "opcja -n nie może być używana z jawnymi plikami albo z opcją -o lub -d" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "katalog wyjściowy \"%s\"" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "wymagane są dokładnie dwa parametry plików" -#: src/unstrip.c:197 +#: src/unstrip.c:204 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "opcje -m, -a, -R oraz -i nie są dozwolone z jawnymi plikami" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "opcja -o lub -d jest wymagana podczas używania ukrytych plików" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "nie można utworzyć nagłówka ELF: %s" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "nie można skopiować nagłówka ELF: %s" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:262 src/unstrip.c:1832 src/unstrip.c:1876 +#, fuzzy, c-format +msgid "cannot get number of program headers: %s" +msgstr "nie można określić liczby nagłówków programu: %s" + +#: src/unstrip.c:267 src/unstrip.c:1836 #, c-format msgid "cannot create program headers: %s" msgstr "nie można utworzyć nagłówków programu: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:273 #, c-format msgid "cannot copy program header: %s" msgstr "nie można skopiować nagłówka programu: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:283 #, c-format msgid "cannot copy section header: %s" msgstr "nie można skopiować nagłówka sekcji: %s" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:286 src/unstrip.c:1513 #, c-format msgid "cannot get section data: %s" msgstr "nie można uzyskać danych sekcji: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:288 src/unstrip.c:1515 #, c-format msgid "cannot copy section data: %s" msgstr "nie można skopiować danych sekcji: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:312 #, c-format msgid "cannot create directory '%s'" msgstr "nie można utworzyć katalogu \"%s\"" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:352 src/unstrip.c:769 src/unstrip.c:1547 #, c-format msgid "cannot get symbol table entry: %s" msgstr "nie można uzyskać wpisu tabeli symboli: %s" -#: src/unstrip.c:357 src/unstrip.c:575 src/unstrip.c:596 src/unstrip.c:608 -#: src/unstrip.c:1556 src/unstrip.c:1686 src/unstrip.c:1710 +#: src/unstrip.c:368 src/unstrip.c:586 src/unstrip.c:607 src/unstrip.c:619 +#: src/unstrip.c:1568 src/unstrip.c:1698 src/unstrip.c:1722 #, c-format msgid "cannot update symbol table: %s" msgstr "nie można zaktualizować tabeli symboli: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:378 #, c-format msgid "cannot update section header: %s" msgstr "nie można zaktualizować nagłówka sekcji: %s" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:417 src/unstrip.c:428 #, c-format msgid "cannot update relocation: %s" msgstr "nie można zaktualizować relokacji: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:515 #, c-format msgid "cannot get symbol version: %s" msgstr "nie można uzyskać wersji symbolu: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:527 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "nieoczekiwany typ sekcji w [%Zu] z sh_link do tabeli symboli" -#: src/unstrip.c:764 +#: src/unstrip.c:775 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "nieprawidłowy offset ciągu w symbolu [%Zu]" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:917 src/unstrip.c:1258 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "nie można odczytać nazwy sekcji [%Zu]: %s" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:958 src/unstrip.c:977 src/unstrip.c:1010 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "nie można odczytać sekcji \".gnu.prelink_undo\": %s" -#: src/unstrip.c:987 +#: src/unstrip.c:998 #, c-format msgid "invalid contents in '%s' section" msgstr "nieprawidłowa zawartość w sekcji \"%s\"" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1053 src/unstrip.c:1378 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "nie można odnaleźć pasującej sekcji dla [%Zu] \"%s\"" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1178 src/unstrip.c:1193 src/unstrip.c:1459 #, c-format msgid "cannot add section name to string table: %s" msgstr "nie można nazwy sekcji do tabeli ciągów: %s" -#: src/unstrip.c:1190 +#: src/unstrip.c:1202 #, c-format msgid "cannot update section header string table data: %s" msgstr "nie można zaktualizować danych tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1229 src/unstrip.c:1233 #, c-format msgid "cannot get section header string table section index: %s" msgstr "nie można uzyskać indeksu sekcji tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1237 src/unstrip.c:1241 src/unstrip.c:1474 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1244 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "więcej sekcji w okrojonym pliku niż w pliku debugowania - odwrócono " "parametry?" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1303 src/unstrip.c:1393 #, c-format msgid "cannot read section header string table: %s" msgstr "nie można odczytać tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1441 +#: src/unstrip.c:1453 #, c-format msgid "cannot add new section: %s" msgstr "nie można dodać nowej sekcji: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1555 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "symbol [%Zu] posiada nieprawidłowy indeks sekcji" -#: src/unstrip.c:1781 +#: src/unstrip.c:1793 #, c-format msgid "cannot read section data: %s" msgstr "nie można odczytać danych sekcji: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1814 #, c-format msgid "cannot get ELF header: %s" msgstr "nie można uzyskać nagłówka ELF: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1846 #, c-format msgid "cannot update program header: %s" msgstr "nie można zaktualizować nagłówka programu: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1851 src/unstrip.c:1934 #, c-format msgid "cannot write output file: %s" msgstr "nie można zapisać pliku wyjściowego: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1903 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Dane DWARF nie zostały dostosowane do przesunięcia wczesnego konsolidowania; " "proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:1886 +#: src/unstrip.c:1906 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6661,58 +6710,77 @@ msgstr "" "Dane DWARF w \"%s\" nie zostały dostosowane do przesunięcia wczesnego " "konsolidowania; proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1925 src/unstrip.c:1976 src/unstrip.c:1988 src/unstrip.c:2074 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" -msgstr "\"%s\" i \"%s\" nie zgadzają się" +#: src/unstrip.c:1967 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1969 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1992 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1995 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1998 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:2001 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:2031 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "nie można odnaleźć okrojonego pliku dla modułu \"%s\": %s" -#: src/unstrip.c:1998 +#: src/unstrip.c:2035 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "nie można otworzyć okrojonego pliku \"%s\" dla modułu \"%s\": %s" -#: src/unstrip.c:2013 +#: src/unstrip.c:2050 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "nie można odnaleźć pliku debugowania dla modułu \"%s\": %s" -#: src/unstrip.c:2017 +#: src/unstrip.c:2054 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "nie można otworzyć pliku debugowania \"%s\" dla modułu \"%s\": %s" -#: src/unstrip.c:2030 +#: src/unstrip.c:2067 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "moduł \"%s\" pliku \"%s\" nie został okrojony" -#: src/unstrip.c:2061 +#: src/unstrip.c:2098 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" "nie można utworzyć pamięci podręcznej adresów sekcji dla modułu \"%s\": %s" -#: src/unstrip.c:2194 +#: src/unstrip.c:2231 #, c-format msgid "no matching modules found" msgstr "nie odnaleziono pasujących modułów" -#: src/unstrip.c:2203 +#: src/unstrip.c:2240 #, c-format msgid "matched more than one module" msgstr "pasuje więcej niż jeden moduł" -#: src/unstrip.c:2250 +#: src/unstrip.c:2287 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6720,7 +6788,7 @@ msgstr "" "OKROJONY-PLIK PLIK-DEBUGOWANIA\n" "[MODUŁ...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2288 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" @@ -6772,3 +6840,14 @@ msgstr "" "jeśli obraz ELF jest dostępny, ale nie z żadnego nazwanego pliku. PLIK-" "DEBUGOWANIA jest nazwą oddzielnego pliku debuginfo lub \"-\", jeśli nie " "odnaleziono debuginfo lub \".\", jeśli PLIK zawiera informacje debugowania." + +#, fuzzy +#~ msgid "cannot attach to process" +#~ msgstr "nie można utworzyć drzewa wyszukiwania" + +#, fuzzy +#~ msgid "cannot attach to core" +#~ msgstr "nie można utworzyć drzewa wyszukiwania" + +#~ msgid "'%s' and '%s' do not seem to match" +#~ msgstr "\"%s\" i \"%s\" nie zgadzają się" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2014-05-20 10:15+0200\n" +"POT-Creation-Date: 2014-12-18 22:59+0100\n" "PO-Revision-Date: 2013-10-09 17:50+0300\n" "Last-Translator: Yuri Chornoivan <[email protected]>\n" "Language-Team: Ukrainian <[email protected]>\n" @@ -19,8 +19,8 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.5\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3084 -#: src/readelf.c:3433 src/readelf.c:8002 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3182 +#: src/readelf.c:3559 src/readelf.c:8285 src/unstrip.c:2127 src/unstrip.c:2335 #, c-format msgid "memory exhausted" msgstr "пам’ять вичерпано" @@ -210,7 +210,12 @@ msgstr "некоректний розділ CFI" msgid "no alternative debug link found" msgstr "альтернативного діагностичного посилання не знайдено" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdw/dwarf_error.c:95 +#, fuzzy +msgid "invalid opcode" +msgstr "некоректний параметр" + +#: libdwfl/argp-std.c:46 src/unstrip.c:2277 msgid "Input selection options:" msgstr "Вибір параметрів виведення даних:" @@ -251,34 +256,24 @@ msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "" "можна використовувати лише один за параметрів: -e, -p, -k, -K або --core" -#: libdwfl/argp-std.c:177 -#, fuzzy -msgid "cannot attach to process" -msgstr "не вдалося створити дерево пошуку" - -#: libdwfl/argp-std.c:231 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "не вдалося завантажити символи ядра" -#: libdwfl/argp-std.c:235 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "не вдалося виявити модулі ядра" -#: libdwfl/argp-std.c:252 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "не вдалося виявити ядро або модулі" -#: libdwfl/argp-std.c:291 +#: libdwfl/argp-std.c:290 #, c-format msgid "cannot read ELF core file: %s" msgstr "не вдалося прочитати файл core ELF: %s" -#: libdwfl/argp-std.c:307 -#, fuzzy -msgid "cannot attach to core" -msgstr "не вдалося створити дерево пошуку" - -#: libdwfl/argp-std.c:314 +#: libdwfl/argp-std.c:311 msgid "No modules recognized in core file" msgstr "Не вдалося виявити модулі у файлі core" @@ -433,6 +428,11 @@ msgstr "" msgid "Invalid argument" msgstr "некоректний параметр" +#: libdwfl/libdwflP.h:95 +#, fuzzy +msgid "Not an ET_CORE ELF file" +msgstr "не є коректним файлом ELF" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "Немає сервера" @@ -533,7 +533,7 @@ msgstr "некоректна розмірність вхідного парам� msgid "invalid size of destination operand" msgstr "некоректна розмірність вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:5176 +#: libelf/elf_error.c:87 src/readelf.c:5367 #, c-format msgid "invalid encoding" msgstr "некоректне кодування" @@ -614,8 +614,8 @@ msgstr "невідповідність полів data/scn" msgid "invalid section header" msgstr "некоректний заголовок розділу" -#: libelf/elf_error.c:187 src/readelf.c:6966 src/readelf.c:7412 -#: src/readelf.c:7513 src/readelf.c:7675 +#: libelf/elf_error.c:187 src/readelf.c:7235 src/readelf.c:7683 +#: src/readelf.c:7784 src/readelf.c:7954 #, c-format msgid "invalid data" msgstr "некоректні дані" @@ -714,10 +714,10 @@ msgstr "Шукати АДРЕСИ у файлах кодів та даних п� msgid "[ADDR...]" msgstr "[АДРЕСА...]" -#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:235 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:663 src/elflint.c:235 #: src/findtextrel.c:162 src/ld.c:949 src/nm.c:265 src/objdump.c:181 #: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 -#: src/strip.c:213 src/unstrip.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -729,10 +729,10 @@ msgstr "" "початкових кодах. Умовами ліцензування програми НЕ передбачено жодних " "гарантій, зокрема гарантій працездатності або придатності для певної мети.\n" -#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:240 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:668 src/elflint.c:240 #: src/findtextrel.c:167 src/ld.c:954 src/nm.c:270 src/objdump.c:186 #: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 -#: src/strip.c:218 src/unstrip.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Автор — %s.\n" @@ -1108,120 +1108,120 @@ msgstr "не вдалося отримати вміст розділу %zu у « msgid "cannot get symbol in '%s': %s" msgstr "не вдалося отримати символ у «%s»: %s" -#: src/elfcmp.c:372 +#: src/elfcmp.c:373 #, c-format msgid "%s %s differ: symbol table [%zu]" msgstr "%s %s diff: таблиця символів [%zu]" -#: src/elfcmp.c:375 +#: src/elfcmp.c:376 #, c-format msgid "%s %s differ: symbol table [%zu,%zu]" msgstr "%s %s diff: таблиця символів [%zu,%zu]" -#: src/elfcmp.c:421 src/elfcmp.c:490 +#: src/elfcmp.c:422 src/elfcmp.c:491 #, c-format msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "%s %s diff: розділ [%zu] кількість нотаток «%s»" -#: src/elfcmp.c:429 +#: src/elfcmp.c:430 #, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" msgstr "не вдалося прочитати розділ нотаток [%zu] «%s» у «%s»: %s" -#: src/elfcmp.c:439 +#: src/elfcmp.c:440 #, c-format msgid "%s %s differ: section [%zu] '%s' note name" msgstr "%s %s diff: розділ [%zu] назва нотатки «%s»" -#: src/elfcmp.c:447 +#: src/elfcmp.c:448 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' type" msgstr "%s %s diff: розділ [%zu] нотатка «%s» тип «%s»" -#: src/elfcmp.c:462 +#: src/elfcmp.c:463 #, c-format msgid "%s %s differ: build ID length" msgstr "%s %s diff: довжина ідентифікатора збирання" -#: src/elfcmp.c:470 +#: src/elfcmp.c:471 #, c-format msgid "%s %s differ: build ID content" msgstr "%s %s diff: вміст ідентифікатора збирання" -#: src/elfcmp.c:479 +#: src/elfcmp.c:480 #, c-format msgid "%s %s differ: section [%zu] '%s' note '%s' content" msgstr "%s %s diff: розділ [%zu] нотатка «%s» вміст «%s»" -#: src/elfcmp.c:519 +#: src/elfcmp.c:520 #, c-format msgid "%s %s differ: section [%zu] '%s' content" msgstr "%s %s diff: розділ [%zu] «%s», вміст" -#: src/elfcmp.c:523 +#: src/elfcmp.c:524 #, c-format msgid "%s %s differ: section [%zu,%zu] '%s' content" msgstr "%s %s diff: розділ [%zu,%zu] «%s», вміст" -#: src/elfcmp.c:538 +#: src/elfcmp.c:539 #, c-format msgid "%s %s differ: unequal amount of important sections" msgstr "%s %s diff: невідповідність об’ємів важливих розділів" -#: src/elfcmp.c:571 src/elfcmp.c:576 +#: src/elfcmp.c:572 src/elfcmp.c:577 #, c-format msgid "cannot load data of '%s': %s" msgstr "не вдалося завантажити дані «%s»: %s" -#: src/elfcmp.c:595 src/elfcmp.c:601 +#: src/elfcmp.c:596 src/elfcmp.c:602 #, c-format msgid "cannot get program header entry %d of '%s': %s" msgstr "не вдалося отримати запис заголовка програми %d «%s»: %s" -#: src/elfcmp.c:607 +#: src/elfcmp.c:608 #, c-format msgid "%s %s differ: program header %d" msgstr "%s %s diff: заголовок програми %d" -#: src/elfcmp.c:631 +#: src/elfcmp.c:632 #, c-format msgid "%s %s differ: gap" msgstr "%s %s diff: проміжок" -#: src/elfcmp.c:694 +#: src/elfcmp.c:695 #, c-format msgid "Invalid value '%s' for --gaps parameter." msgstr "Некоректне значення «%s» параметра --gaps." -#: src/elfcmp.c:722 src/findtextrel.c:221 src/ldgeneric.c:1757 +#: src/elfcmp.c:723 src/findtextrel.c:221 src/ldgeneric.c:1757 #: src/ldgeneric.c:4247 src/nm.c:381 src/ranlib.c:161 src/size.c:293 -#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1923 +#: src/unstrip.c:1952 #, c-format msgid "cannot open '%s'" msgstr "не вдалося відкрити «%s»" -#: src/elfcmp.c:726 src/findtextrel.c:228 src/ranlib.c:178 +#: src/elfcmp.c:727 src/findtextrel.c:228 src/ranlib.c:178 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "не вдалося створити дескриптор ELF для «%s»: %s" -#: src/elfcmp.c:731 +#: src/elfcmp.c:732 #, c-format msgid "cannot create EBL descriptor for '%s'" msgstr "не вдалося створити дескриптор EBL для «%s»" -#: src/elfcmp.c:749 +#: src/elfcmp.c:750 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "не вдалося отримати заголовок розділу %zu: %s" -#: src/elfcmp.c:759 +#: src/elfcmp.c:760 #, c-format msgid "cannot get content of section %zu: %s" msgstr "не вдалося отримати вміст розділу %zu: %s" -#: src/elfcmp.c:769 src/elfcmp.c:783 +#: src/elfcmp.c:770 src/elfcmp.c:784 #, c-format msgid "cannot get relocation: %s" msgstr "не вдалося отримати пересування: %s" @@ -1422,14 +1422,14 @@ msgstr "" "розділ [%2d] «%s»: групу розділів [%2zu] «%s» мало бути визначено до розділу-" "елемента цієї групи\n" -#: src/elflint.c:590 src/elflint.c:1450 src/elflint.c:1501 src/elflint.c:1607 -#: src/elflint.c:1932 src/elflint.c:2221 src/elflint.c:2735 src/elflint.c:2897 -#: src/elflint.c:3027 src/elflint.c:3199 src/elflint.c:4101 +#: src/elflint.c:590 src/elflint.c:1457 src/elflint.c:1508 src/elflint.c:1614 +#: src/elflint.c:1939 src/elflint.c:2228 src/elflint.c:2742 src/elflint.c:2904 +#: src/elflint.c:3034 src/elflint.c:3206 src/elflint.c:4108 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані розділу\n" -#: src/elflint.c:603 src/elflint.c:1614 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1541,13 +1541,13 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: використання функції у розділі COMMON " "позбавлене сенсу\n" -#: src/elflint.c:797 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value поза можливим діапазоном\n" -#: src/elflint.c:803 src/elflint.c:828 src/elflint.c:871 +#: src/elflint.c:810 src/elflint.c:835 src/elflint.c:878 #, c-format msgid "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " @@ -1556,7 +1556,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu не повністю відповідає розділу, на який " "посилається, [%2d] «%s»\n" -#: src/elflint.c:812 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1565,7 +1565,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: для розділу посилання [%2d] «%s» не " "встановлено прапорець SHF_TLS\n" -#: src/elflint.c:822 src/elflint.c:864 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1574,14 +1574,14 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value поза межами розділу " "посилання, [%2d] «%s»\n" -#: src/elflint.c:849 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" msgstr "" "розділ [%2d] «%s»: символ %zu: символ TLS без запису заголовка програми TLS\n" -#: src/elflint.c:857 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1590,7 +1590,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value перед розділом посилання, " "[%2d] «%s»\n" -#: src/elflint.c:884 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1599,7 +1599,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: у sh_info описано локальний символ поза " "діапазоном\n" -#: src/elflint.c:891 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1608,12 +1608,12 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: у sh_info описано нелокальний символ поза " "діапазоном\n" -#: src/elflint.c:898 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "розділ [%2d] «%s»: символ %zu: нелокальний символ розділу\n" -#: src/elflint.c:948 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1622,7 +1622,7 @@ msgstr "" "розділ [%2d] «%s»: символ _GLOBAL_OFFSET_TABLE_ посилається на помилковий " "розділ, [%2d]\n" -#: src/elflint.c:955 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1631,7 +1631,7 @@ msgstr "" "розділ [%2d] «%s»: символ _GLOBAL_OFFSET_TABLE_ посилається на розділ [%2d] " "'%s'\n" -#: src/elflint.c:971 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not " @@ -1640,7 +1640,7 @@ msgstr "" "розділ [%2d] «%s»: значення символу _GLOBAL_OFFSET_TABLE_ %#<PRIx64> не " "відповідає адресі розділу %s %#<PRIx64>\n" -#: src/elflint.c:978 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not " @@ -1649,7 +1649,7 @@ msgstr "" "розділ [%2d] «%s»: розмір символу _GLOBAL_OFFSET_TABLE_ %<PRIu64> не " "відповідає розміру розділу %s %<PRIu64>\n" -#: src/elflint.c:986 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1658,7 +1658,7 @@ msgstr "" "розділ [%2d] «%s»: виявлено символ _GLOBAL_OFFSET_TABLE_, але не виявлено " "розділу .got\n" -#: src/elflint.c:1002 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic " @@ -1667,7 +1667,7 @@ msgstr "" "розділ [%2d] «%s»: значення символу _DYNAMIC_ %#<PRIx64> не відповідає " "адресі динамічного сегмента %#<PRIx64>\n" -#: src/elflint.c:1009 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic " @@ -1676,7 +1676,7 @@ msgstr "" "розділ [%2d] «%s»: розмір символу _DYNAMIC %<PRIu64> не відповідає розміру " "динамічного сегмента %<PRIu64>\n" -#: src/elflint.c:1022 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1685,24 +1685,24 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: символ у динамічній таблиці символів з " "нетиповою видимістю\n" -#: src/elflint.c:1026 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "розділ [%2d] «%s»: символ %zu: невідомий набір бітів у st_other\n" -#: src/elflint.c:1075 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "розділ [%2d] «%s»: для цього розділу RELA використано DT_RELCOUNT\n" -#: src/elflint.c:1086 src/elflint.c:1138 +#: src/elflint.c:1093 src/elflint.c:1145 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" msgstr "" "розділ [%2d] «%s»: значення DT_RELCOUNT %d є занадто високим для цього " "розділу\n" -#: src/elflint.c:1111 src/elflint.c:1163 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1711,7 +1711,7 @@ msgstr "" "розділ [%2d] «%s»: відносні пересування після позиції %d, вказаної за " "допомогою DT_RELCOUNT\n" -#: src/elflint.c:1117 src/elflint.c:1169 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1720,51 +1720,51 @@ msgstr "" "розділ [%2d] «%s»: безвідносне пересування на позиції %zu; DT_RELCOUNT " "визначено %d відносних пересування\n" -#: src/elflint.c:1129 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "розділ [%2d] «%s»: для цього розділу REL використано DT_RELACOUNT\n" -#: src/elflint.c:1211 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "розділ [%2d] «%s»: некоректний індекс розділу призначення\n" -#: src/elflint.c:1223 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "розділ [%2d] «%s»: некоректний тип розділу призначення\n" -#: src/elflint.c:1231 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "розділ [%2d] «%s»: sh_info має бути нульовим\n" -#: src/elflint.c:1238 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "" "розділ [%2d] «%s»: пересування у придатних до об’єднання розділах неможливе\n" -#: src/elflint.c:1246 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" "розділ [%2d] «%s»: розмірність запису розділу не відповідає ElfXX_Rela\n" -#: src/elflint.c:1306 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "встановлено прапорець пересування тексту, але сегмент придатний лише до " "читання\n" -#: src/elflint.c:1333 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "розділ [%2d] «%s»: пересування %zu: некоректний тип\n" -#: src/elflint.c:1341 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1773,12 +1773,12 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: некоректний тип пересування для типу " "файла\n" -#: src/elflint.c:1349 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "розділ [%2d] «%s»: пересування %zu: некоректний індекс символу\n" -#: src/elflint.c:1367 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1787,12 +1787,12 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: з %s можна використовувати лише символ " "«_GLOBAL_OFFSET_TABLE_»\n" -#: src/elflint.c:1384 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "розділ [%2d] «%s»: пересування %zu: зміщення за межі діапазону\n" -#: src/elflint.c:1399 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1801,7 +1801,7 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: пересування копіювання для символу типу " "%s\n" -#: src/elflint.c:1420 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1810,61 +1810,61 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: змінено придатний лише для читання " "розділ, але не встановлено прапорець пересування тексту\n" -#: src/elflint.c:1435 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "розділ [%2d] «%s»: пересування завантажених і незавантажених даних\n" -#: src/elflint.c:1475 src/elflint.c:1526 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати зміщення %zu: %s\n" -#: src/elflint.c:1602 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "вказано більше одного динамічного розділу\n" -#: src/elflint.c:1621 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" "розділ [%2d] «%s»: розмірність запису розділу не відповідає ElfXX_Dyn\n" -#: src/elflint.c:1626 src/elflint.c:1911 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "розділ [%2d] «%s»: sh_info не є нульовим\n" -#: src/elflint.c:1636 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" "розділ [%2d] «%s»: не вдалося отримати запис динамічного розділу %zu: %s\n" -#: src/elflint.c:1644 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" "розділ [%2d] «%s»: за записом DT_NULL вказано записи, що не належать до " "DT_NULL\n" -#: src/elflint.c:1651 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "розділ [%2d] «%s»: запис %zu: невідома мітка\n" -#: src/elflint.c:1662 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "розділ [%2d] «%s»: запис %zu: декілька записів з міткою %s\n" -#: src/elflint.c:1672 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "розділ [%2d] «%s»: запис %zu: використано мітку рівня 2 %s\n" -#: src/elflint.c:1690 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -1872,7 +1872,7 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значенням DT_PLTREL має бути DT_REL або " "DT_RELA\n" -#: src/elflint.c:1703 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1881,7 +1881,7 @@ msgstr "" "розділ [%2d] «%s»: розділ %zu: вказівник не відповідає адресі розділу [%2d] " "«%s», на яку посилається sh_link\n" -#: src/elflint.c:1746 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" @@ -1889,7 +1889,7 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значення %s має вказувати на завантажений " "сегмент\n" -#: src/elflint.c:1761 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1898,48 +1898,48 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значенням %s має бути коректне зміщення у " "розділі [%2d] «%s»\n" -#: src/elflint.c:1781 src/elflint.c:1809 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "розділ [%2d] «%s»: містить запис %s, але не %s\n" -#: src/elflint.c:1793 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "розділ [%2d] «%s»: немає обов’язкової мітки %s\n" -#: src/elflint.c:1802 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "розділ [%2d] «%s»: не виявлено розділу хешів\n" -#: src/elflint.c:1817 src/elflint.c:1824 +#: src/elflint.c:1824 src/elflint.c:1831 #, c-format msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" msgstr "розділ [%2d] «%s»: вказано не всі зі значень %s, %s і %s\n" -#: src/elflint.c:1834 src/elflint.c:1838 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "" "розділ [%2d] «%s»: у DSO, позначеному на кроці попереднього компонування, " "немає мітки %s\n" -#: src/elflint.c:1844 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" "розділ [%2d] «%s»: під час попереднього компонування як залежність позначено " "файл, який не є файлом DSO\n" -#: src/elflint.c:1855 src/elflint.c:1859 src/elflint.c:1863 src/elflint.c:1867 +#: src/elflint.c:1862 src/elflint.c:1866 src/elflint.c:1870 src/elflint.c:1874 #, c-format msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" msgstr "" "розділ [%2d] «%s»: у попередньо скомпонованому виконуваному файлі не " "міститься мітки %s\n" -#: src/elflint.c:1879 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -1947,7 +1947,7 @@ msgstr "" "розділ [%2d] «%s»: розширений розділ покажчика можуть мати лише файли, " "придатні до пересування\n" -#: src/elflint.c:1889 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" @@ -1955,23 +1955,23 @@ msgstr "" "розділ [%2d] «%s»: розділ розширеного покажчика розділів не призначено для " "таблиць символів\n" -#: src/elflint.c:1894 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "не вдалося отримати дані для розділу символів\n" -#: src/elflint.c:1897 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "розділ [%2d] «%s»: розмірність запису не відповідає Elf32_Word\n" -#: src/elflint.c:1906 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" "розділ [%2d] «%s»: розширена таблиця покажчика замала для таблиці символів\n" -#: src/elflint.c:1921 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1980,24 +1980,24 @@ msgstr "" "розділ [%2d] «%s»: розширений покажчик розділів у розділі [%2zu] «%s» " "посилається на ту саму таблицю розділів\n" -#: src/elflint.c:1938 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "символу 0 має відповідати нульовий індекс розширеного розділу\n" -#: src/elflint.c:1950 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "не вдалося отримати дані для символу %zu\n" -#: src/elflint.c:1955 +#: src/elflint.c:1962 #, c-format msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n" msgstr "" "індекс розширеного розділу дорівнює %<PRIu32>, але індекс символу не є " "XINDEX\n" -#: src/elflint.c:1971 src/elflint.c:2022 +#: src/elflint.c:1978 src/elflint.c:2029 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" @@ -2005,37 +2005,37 @@ msgstr "" "розділ [%2d] «%s»: розділ таблиці хешів занадто малий (розмір %ld, мало бути " "— %ld)\n" -#: src/elflint.c:1983 src/elflint.c:2034 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "розділ [%2d] «%s»: масив ланцюжка занадто великий\n" -#: src/elflint.c:1997 src/elflint.c:2048 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання на хеш блоку %zu лежить поза межами діапазону\n" -#: src/elflint.c:2007 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання ланцюжка хешів %zu лежить поза межами " "діапазону\n" -#: src/elflint.c:2058 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання ланцюжка хешів %<PRIu64> лежить поза межами " "діапазону\n" -#: src/elflint.c:2074 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "розділ [%2d] «%s»: розмір бітової маски не є степенем 2: %u\n" -#: src/elflint.c:2085 +#: src/elflint.c:2092 #, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " @@ -2044,12 +2044,12 @@ msgstr "" "розділ [%2d] «%s»: розділ таблиці хешів занадто малий (розмір %ld, мало бути " "не менше %ld)\n" -#: src/elflint.c:2093 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "розділ [%2d] «%s»: зсув 2-ої функції хешування занадто великий: %u\n" -#: src/elflint.c:2125 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -2057,7 +2057,7 @@ msgstr "" "розділ [%2d] '%s': ланцюжок хешів для блоку %zu розташовано нижче за позицію " "відхилення індексу символу\n" -#: src/elflint.c:2146 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -2066,7 +2066,7 @@ msgstr "" "розділ [%2d] «%s»: символ %u, на який посилається ланцюжок у блоці %zu не " "визначено\n" -#: src/elflint.c:2157 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -2074,14 +2074,14 @@ msgstr "" "розділ [%2d] «%s»: значення хешу для символу %u у ланцюжку для блоку %zu є " "помилковим\n" -#: src/elflint.c:2188 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" "розділ [%2d] «%s»: ланцюжок хешів для блоку %zu лежить поза межами " "діапазону\n" -#: src/elflint.c:2193 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2089,36 +2089,36 @@ msgstr "" "розділ [%2d] «%s»: посилання на символ у ланцюжку для блоку %zu лежить поза " "межами діапазону\n" -#: src/elflint.c:2199 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "розділ [%2d] «%s»: бітова маска не відповідає назвам у таблиці хешів\n" -#: src/elflint.c:2212 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "розділ [%2d] «%s»: придатні до пересування файли не можуть містити таблиць " "хешів\n" -#: src/elflint.c:2230 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" "розділ [%2d] «%s»: таблицю хешів не призначено для зберігання таблиці " "динамічних символів\n" -#: src/elflint.c:2238 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "розділ [%2d] «%s»: розмірність запису таблиці хешів є некоректною\n" -#: src/elflint.c:2243 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "розділ [%2d] «%s»: не позначено для пересування\n" -#: src/elflint.c:2248 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2127,17 +2127,17 @@ msgstr "" "розділ [%2d] «%s»: у таблиці хешів виявлено незвичайне розташування " "початкових адміністративних записів\n" -#: src/elflint.c:2296 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "sh_link у розділах хешів [%2zu] «%s» і [%2zu] «%s» не збігаються\n" -#: src/elflint.c:2374 src/elflint.c:2378 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "розділ [%2zu] «%s»: посилання на індекс символів 0\n" -#: src/elflint.c:2385 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2146,7 +2146,7 @@ msgstr "" "виявлено посилання на символ %d у новій таблиці хешів у [%2zu] «%s», але " "його немає у старій таблиці хешів у [%2zu] «%s»\n" -#: src/elflint.c:2397 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2155,12 +2155,12 @@ msgstr "" "виявлено посилання на символ %d у старій таблиці хешів у [%2zu] «%s», але " "його немає у новій таблиці хешів у [%2zu] «%s»\n" -#: src/elflint.c:2413 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "розділ [%2d] «%s»: ненульове значення sh_%s для розділу NULL\n" -#: src/elflint.c:2433 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2168,90 +2168,90 @@ msgstr "" "розділ [%2d] «%s»: групи розділів передбачено лише для придатних до " "пересування об’єктних файлах\n" -#: src/elflint.c:2444 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати таблицю символів: %s\n" -#: src/elflint.c:2449 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" "розділ [%2d] «%s»: посилання на розділ у sh_link не має таблиці символів\n" -#: src/elflint.c:2455 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "розділ [%2d] «%s»: некоректний індекс символу у sh_info\n" -#: src/elflint.c:2460 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "розділ [%2d] «%s»: sh_flags не є нульовим\n" -#: src/elflint.c:2467 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ для підпису\n" -#: src/elflint.c:2472 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "розділ [%2d] «%s»: символ підпису не може бути порожнім рядком\n" -#: src/elflint.c:2478 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "розділ [%2d] «%s»: для sh_flags встановлено помилкове значення\n" -#: src/elflint.c:2484 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані: %s\n" -#: src/elflint.c:2493 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "розділ [%2d] «%s»: розмір розділу не є кратним до sizeof(Elf32_Word)\n" -#: src/elflint.c:2498 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "розділ [%2d] «%s»: група розділів без значення типу word прапорців\n" -#: src/elflint.c:2504 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "розділ [%2d] «%s»: група розділів без елементів\n" -#: src/elflint.c:2508 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "розділ [%2d] «%s»: група розділів, що містить лише один елемент\n" -#: src/elflint.c:2519 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "розділ [%2d] «%s»: невідомі прапорці групи розділів\n" -#: src/elflint.c:2531 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "розділ [%2d] «%s»: індекс розділу %Zu поза межами діапазону\n" -#: src/elflint.c:2540 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" "розділ [%2d] «%s»: не вдалося отримати заголовок розділу для елемента %zu: " "%s\n" -#: src/elflint.c:2547 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "розділ [%2d] «%s»: група розділів містить іншу групу [%2d] «%s»\n" -#: src/elflint.c:2553 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2260,12 +2260,12 @@ msgstr "" "розділ [%2d] «%s»: елемент %Zu посилається на розділ [%2d] «%s» без " "встановленого прапорця SHF_GROUP\n" -#: src/elflint.c:2560 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "розділ [%2d] «%s» міститься у більше ніж одній групі розділів\n" -#: src/elflint.c:2749 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2274,7 +2274,7 @@ msgstr "" "розділ [%2d] «%s» посилається у sh_link на розділ [%2d] «%s», який не має " "динамічної таблиці символів\n" -#: src/elflint.c:2761 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2283,28 +2283,28 @@ msgstr "" "кількість записів у розділі [%2d] «%s» відрізняється від кількості у таблиці " "символів [%2d] «%s»\n" -#: src/elflint.c:2777 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "розділ [%2d] «%s»: символ %d: не вдалося прочитати дані щодо версії\n" -#: src/elflint.c:2793 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" "розділ [%2d] «%s»: символ %d: локальний символ у загальному контексті\n" -#: src/elflint.c:2801 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "розділ [%2d] «%s»: символ %d: локальний символ з версією\n" -#: src/elflint.c:2815 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "розділ [%2d] «%s»: символ %d: некоректний індекс версії %d\n" -#: src/elflint.c:2820 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" @@ -2312,7 +2312,7 @@ msgstr "" "розділ [%2d] «%s»: символ %d: індекси версії %d призначено до визначеної " "версії\n" -#: src/elflint.c:2830 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" @@ -2320,45 +2320,45 @@ msgstr "" "розділ [%2d] «%s»: символ %d: індекс версії %d призначено для версії, на яку " "надійшов запит\n" -#: src/elflint.c:2882 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "виявлено більше за один розділ посилань на версії\n" -#: src/elflint.c:2890 src/elflint.c:3019 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "розділ [%2d] «%s»: sh_link не посилається на таблицю рядків\n" -#: src/elflint.c:2913 src/elflint.c:3071 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "розділ [%2d] «%s»: запис %d має помилкову версію %d\n" -#: src/elflint.c:2919 src/elflint.c:3077 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "" "розділ [%2d] «%s»: запис %d містить помилкове зміщення у допоміжних даних\n" -#: src/elflint.c:2927 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "розділ [%2d] «%s»: запис %d містить некоректне посилання на файл\n" -#: src/elflint.c:2935 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "розділ [%2d] «%s»: запис %d посилається на невідому залежність\n" -#: src/elflint.c:2947 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d позначено невідомим " "прапорцем\n" -#: src/elflint.c:2954 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2367,7 +2367,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d містить некоректне " "посилання на назву\n" -#: src/elflint.c:2961 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2376,7 +2376,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d має помилкове значення " "хешу: %#x, мало бути %#x\n" -#: src/elflint.c:2971 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2385,7 +2385,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d містить дублікати назви " "версії «%s»\n" -#: src/elflint.c:2982 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2393,50 +2393,50 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d має помилкове наступне " "поле\n" -#: src/elflint.c:2998 src/elflint.c:3156 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "" "розділ [%2d] «%s»: запис %d має некоректне зміщення щодо наступного запису\n" -#: src/elflint.c:3011 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "виявлено більше за один розділ визначення версій\n" -#: src/elflint.c:3056 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "розділ [%2d] «%s»: повторне визначення BASE\n" -#: src/elflint.c:3060 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" "розділ [%2d] «%s»: визначення BASE повинно мати індекс VER_NDX_GLOBAL\n" -#: src/elflint.c:3066 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "розділ [%2d] «%s»: невідомий прапорець запису %d\n" -#: src/elflint.c:3090 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "розділ [%2d] «%s»: запис %d містить некоректне посилання на назву\n" -#: src/elflint.c:3097 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" "розділ [%2d] «%s»: запис %d має помилкове значення хешу: %#x, мало бути %#x\n" -#: src/elflint.c:3106 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "розділ [%2d] «%s»: запис %d містить дублікати назви версії «%s»\n" -#: src/elflint.c:3125 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -2444,53 +2444,53 @@ msgstr "" "розділ [%2d] «%s»: запис %d містить некоректне посилання на назву у " "допоміжних даних\n" -#: src/elflint.c:3140 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" "розділ [%2d] «%s»: у допоміжних даних запису %d міститься помилкове поле " "наступного запису\n" -#: src/elflint.c:3162 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "розділ [%2d] «%s»: немає визначення BASE\n" -#: src/elflint.c:3178 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "розділ [%2d] «%s»: невідома основна версія «%s»\n" -#: src/elflint.c:3191 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "розділ [%2d] «%s»: порожній розділ атрибутів об’єкта\n" -#: src/elflint.c:3212 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "розділ [%2d] «%s»: не вдалося визначити формат атрибутів\n" -#: src/elflint.c:3228 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: поле нульового розміру у розділі атрибутів\n" -#: src/elflint.c:3237 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: некоректна довжина у розділі атрибутів\n" -#: src/elflint.c:3249 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершений рядок назви постачальника\n" -#: src/elflint.c:3266 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2498,12 +2498,12 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершене поле ULEB128 у тезі підрозділу " "атрибутів\n" -#: src/elflint.c:3275 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "розділ [%2d] «%s»: зміщення %zu: обрізаний розділ атрибутів\n" -#: src/elflint.c:3284 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2511,14 +2511,14 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: поле нульового розміру у підрозділі " "атрибутів\n" -#: src/elflint.c:3297 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: некоректна довжина у підрозділі атрибутів\n" -#: src/elflint.c:3308 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2526,35 +2526,35 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: підрозділ атрибутів містить неочікуваний " "теґ %u\n" -#: src/elflint.c:3326 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершене поле ULEB128 у тезі атрибуту\n" -#: src/elflint.c:3337 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "розділ [%2d] «%s»: зміщення %zu: незавершений рядок у атрибуті\n" -#: src/elflint.c:3350 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "розділ [%2d] «%s»: зміщення %zu: незавершений теґ атрибуту %u\n" -#: src/elflint.c:3354 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: невідоме значення %s атрибуту %<PRIu64>\n" -#: src/elflint.c:3364 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "розділ [%2d] «%s»: зміщення %zu: невідомий постачальник «%s»\n" -#: src/elflint.c:3370 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2562,47 +2562,47 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: зайві байти після останнього розділу " "атрибутів\n" -#: src/elflint.c:3459 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "не вдалося отримати заголовок нульового розділу\n" -#: src/elflint.c:3463 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "нульовий розділ має ненульову назву\n" -#: src/elflint.c:3465 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "нульовий розділ має ненульовий тип\n" -#: src/elflint.c:3467 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "нульовий розділ має ненульові прапорці\n" -#: src/elflint.c:3469 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "нульовий розділ має ненульову адресу\n" -#: src/elflint.c:3471 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "нульовий розділ має ненульове зміщення\n" -#: src/elflint.c:3473 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "нульовий розділ має ненульове значення вирівнювання\n" -#: src/elflint.c:3475 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "нульовий розділ має ненульове значення розміру запису\n" -#: src/elflint.c:3478 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2611,7 +2611,7 @@ msgstr "" "нульовий розділ має ненульове значення розміру, хоча заголовок ELF ман " "ненульове значення shnum\n" -#: src/elflint.c:3482 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2620,7 +2620,7 @@ msgstr "" "нульовий розділ має ненульове значення компонування, хоча у заголовку ELF " "немає сигналу переповнення у shstrndx\n" -#: src/elflint.c:3486 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2629,28 +2629,28 @@ msgstr "" "нульовий розділ має ненульове значення компонування, хоча у заголовку ELF " "немає сигналу переповнення у phnum\n" -#: src/elflint.c:3503 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "не вдалося отримати заголовок розділу [%2zu] «%s»: %s\n" -#: src/elflint.c:3512 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "розділ [%2zu]: некоректна назва\n" -#: src/elflint.c:3539 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" "розділ [%2d] «%s» належить до помилкового типу: мав бути %s, маємо %s\n" -#: src/elflint.c:3555 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, маємо %s\n" -#: src/elflint.c:3572 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2658,12 +2658,12 @@ msgstr "" "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, можливо, %s, але " "маємо %s\n" -#: src/elflint.c:3590 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "у об’єктному файлі виявлено розділ [%2zu] «%s»\n" -#: src/elflint.c:3596 src/elflint.c:3628 +#: src/elflint.c:3603 src/elflint.c:3635 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" @@ -2671,7 +2671,7 @@ msgstr "" "у розділ [%2zu] «%s» встановлено прапорець SHF_ALLOC, але немає придатного " "до завантаження сегмента\n" -#: src/elflint.c:3601 src/elflint.c:3633 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2680,7 +2680,7 @@ msgstr "" "у розділі [%2zu] «%s» не встановлено прапорець SHF_ALLOC, але є придатні до " "завантаження сегменти\n" -#: src/elflint.c:3609 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2688,22 +2688,22 @@ msgstr "" "розділ [%2zu] «%s» є таблицею-покажчиком розділу розширень у файлі, який не " "є об’єктним\n" -#: src/elflint.c:3652 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "розділ [%2zu] «%s»: розмір не є кратним до розміру запису\n" -#: src/elflint.c:3657 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "не вдалося отримати заголовок розділу\n" -#: src/elflint.c:3667 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "розділ [%2zu] «%s» належить до непідтримуваного типу %d\n" -#: src/elflint.c:3681 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n" @@ -2711,52 +2711,52 @@ msgstr "" "розділ [%2zu] «%s» містить некоректні специфічні для процесора прапорці " "%#<PRIx64>\n" -#: src/elflint.c:3688 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n" msgstr "розділ [%2zu] «%s» містить невідомі прапорці %#<PRIx64>\n" -#: src/elflint.c:3696 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" "розділ [%2zu] «%s»: адреса розділів локальних даних потоків не є нульовою\n" -#: src/elflint.c:3704 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "розділ [%2zu] «%s»: некоректне посилання на розділ у значенні компонування\n" -#: src/elflint.c:3709 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "розділ [%2zu] «%s»: некоректне посилання на розділ у значенні відомостей\n" -#: src/elflint.c:3716 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "розділ [%2zu] «%s»: встановлено прапорець strings без прапорця merge\n" -#: src/elflint.c:3721 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" "розділ [%2zu] «%s»: встановлено прапорець merge, але розмір запису є " "нульовим\n" -#: src/elflint.c:3739 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "розділ [%2zu] «%s» має неочікуваний тип %d для виконуваного розділу\n" -#: src/elflint.c:3748 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "розділ [%2zu] «%s» є одночасно виконуваним і придатним до запису\n" -#: src/elflint.c:3777 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2765,7 +2765,7 @@ msgstr "" "розділ [%2zu] «%s» не повністю міститься у сегменті запису заголовка " "програми %d\n" -#: src/elflint.c:3785 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2774,7 +2774,7 @@ msgstr "" "розділ [%2zu] «%s» належить до типу NOBITS, але його читання виконується з " "файла у сегментів запису заголовка програми %d\n" -#: src/elflint.c:3794 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2783,19 +2783,19 @@ msgstr "" "розділ [%2zu] «%s» не належить до типу NOBITS, але його читання не " "виконується з файла у сегментів запису заголовка програми %d\n" -#: src/elflint.c:3805 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "розділ [%2zu] «%s» є виконуваним у невиконуваному сегменті %d\n" -#: src/elflint.c:3815 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" "розділ [%2zu] «%s» є придатним до запису у непридатному до запису сегменті " "%d\n" -#: src/elflint.c:3825 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -2803,7 +2803,7 @@ msgstr "" "розділ [%2zu] «%s»: встановлено прапорець alloc, але розділ не перебуває у " "жодному завантаженому сегменті\n" -#: src/elflint.c:3831 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2812,7 +2812,7 @@ msgstr "" "розділ [%2zu] «%s»: заголовок ELF повідомляє про те, що це таблиця рядків " "заголовка розділу, але ця таблиця не належить до типу SHT_TYPE\n" -#: src/elflint.c:3839 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -2820,17 +2820,17 @@ msgstr "" "розділ [%2zu] «%s»: придатні до пересування файли не можуть містити " "динамічних таблиць символів\n" -#: src/elflint.c:3890 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "виявлено більше за одну таблицю символів версій\n" -#: src/elflint.c:3913 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "існує запис заголовка програми INTERP, але не розділ .interp\n" -#: src/elflint.c:3924 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -2838,14 +2838,14 @@ msgstr "" "придатний до завантаження сегмент [%u] є виконуваним, але не містить " "виконуваних розділів\n" -#: src/elflint.c:3930 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "придатний до завантаження розділ [%u] є придатним до запису, але не містить " "придатних до запису розділів\n" -#: src/elflint.c:3941 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2854,24 +2854,24 @@ msgstr "" "немає розділу .gnu.versym, хоча існує розділ .gnu.versym_d або .gnu." "versym_r\n" -#: src/elflint.c:3954 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "дублікат індексу версії %d\n" -#: src/elflint.c:3968 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" "існує розділ .gnu.versym, але немає розділу .gnu.versym_d або .gnu.versym_r\n" -#: src/elflint.c:4017 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n" msgstr "" "phdr[%d]: невідомий тип нотатки файла core %<PRIu32> за зміщенням %<PRIu64>\n" -#: src/elflint.c:4021 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n" @@ -2879,13 +2879,13 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки файла core %<PRIu32> за зміщенням " "%Zu\n" -#: src/elflint.c:4044 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n" msgstr "" "phdr[%d]: невідомий тип нотатки об’єктного файла %<PRIu32> за зміщенням %Zu\n" -#: src/elflint.c:4048 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n" @@ -2893,39 +2893,39 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки об’єктного файла %<PRIu32> за " "зміщенням %Zu\n" -#: src/elflint.c:4065 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: для цього типу файлів не визначено записів нотаток\n" -#: src/elflint.c:4084 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: не вдалося отримати вміст розділу нотаток: %s\n" -#: src/elflint.c:4087 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n" msgstr "phdr[%d]: зайві %<PRIu64> байтів після останнього запису нотатки\n" -#: src/elflint.c:4108 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "розділ [%2d] «%s»: для цього типу файлів не визначено записів нотаток\n" -#: src/elflint.c:4115 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "розділ [%2d] «%s»: не вдалося отримати вміст розділу нотаток\n" -#: src/elflint.c:4118 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n" msgstr "" "розділ [%2d] «%s»: додаткові %<PRIu64> байтів після останньої нотатки\n" -#: src/elflint.c:4136 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -2933,135 +2933,135 @@ msgstr "" "заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів " "спільного використання або файлів core\n" -#: src/elflint.c:4151 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "не вдалося отримати запис заголовка програми %d: %s\n" -#: src/elflint.c:4160 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n" msgstr "" "запис заголовка програми %d: невідомий тип запису заголовка програми " "%#<PRIx64>\n" -#: src/elflint.c:4171 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "більше за один запис INTERP у заголовку програми\n" -#: src/elflint.c:4179 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "більше за один запис TLS у заголовку програми\n" -#: src/elflint.c:4186 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "у статичному виконуваному файлі не може бути динамічних розділів\n" -#: src/elflint.c:4200 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "посилання на динамічний розділ у заголовку програми має помилкове зміщення\n" -#: src/elflint.c:4203 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "розміри динамічного розділу у заголовку програми та у заголовку розділу не " "збігаються\n" -#: src/elflint.c:4213 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "більше за один запис GNU_RELRO у заголовку програми\n" -#: src/elflint.c:4234 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" "придатний до завантаження сегмент, до якого звертається GNU_RELRO, " "непридатний до запису\n" -#: src/elflint.c:4237 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "прапорці придатного до завантаження сегмента [%u] не відповідають прапорцям " "GNU_RELRO [%u]\n" -#: src/elflint.c:4245 src/elflint.c:4268 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "сегмент %s не міститься у завантаженому сегменті\n" -#: src/elflint.c:4274 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "зміщення заголовка програми у заголовку ELF і запис PHDR не збігаються" -#: src/elflint.c:4298 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "посилання на таблицю вікон викликів у заголовку програми має помилкове " "зміщення\n" -#: src/elflint.c:4301 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку " "розділу не збігаються\n" -#: src/elflint.c:4314 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "існує PT_GNU_EH_FRAME, хоча немає розділу .eh_frame_hdr\n" -#: src/elflint.c:4322 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’яті\n" -#: src/elflint.c:4325 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "розділ [%2zu] «%s» має бути розміщено у пам’яті\n" -#: src/elflint.c:4329 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до запису\n" -#: src/elflint.c:4332 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до запису\n" -#: src/elflint.c:4337 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до виконання\n" -#: src/elflint.c:4340 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконання\n" -#: src/elflint.c:4351 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "запис заголовка програми %d: розмір файла перевищує об’єм пам’яті\n" -#: src/elflint.c:4358 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "запис заголовка програми %d: значення вирівнювання не є степенем 2\n" -#: src/elflint.c:4361 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3070,7 +3070,7 @@ msgstr "" "запис заголовка програми %d: зміщення у файлі і віртуальна адреса не " "співвідносяться з вирівнюванням\n" -#: src/elflint.c:4374 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3079,12 +3079,12 @@ msgstr "" "виконуваний модуль/DSO з розділом .eh_frame_hdr не містить запису заголовка " "програми PT_GNU_EH_FRAME" -#: src/elflint.c:4408 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "не вдалося прочитати заголовок ELF: %s\n" -#: src/elflint.c:4434 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3141,40 +3141,45 @@ msgstr "у «%s» не виявлено пересувань тексту" msgid "while reading ELF file" msgstr "під час спроби читання файла ELF" -#: src/findtextrel.c:334 src/findtextrel.c:351 -#, c-format -msgid "cannot get program header index at offset %d: %s" +#: src/findtextrel.c:329 +#, fuzzy, c-format +msgid "cannot get program header count: %s" +msgstr "не вдалося отримати заголовок програми: %s" + +#: src/findtextrel.c:340 src/findtextrel.c:357 +#, fuzzy, c-format +msgid "cannot get program header index at offset %zd: %s" msgstr "не вдалося отримати індекс заголовка програми за зміщенням %d: %s" -#: src/findtextrel.c:403 +#: src/findtextrel.c:409 #, c-format msgid "cannot get section header of section %Zu: %s" msgstr "не вдалося отримати заголовок розділу %Zu: %s" -#: src/findtextrel.c:415 +#: src/findtextrel.c:421 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "не вдалося отримати таблицю символів розділу %zu у «%s»: %s" -#: src/findtextrel.c:435 src/findtextrel.c:458 +#: src/findtextrel.c:441 src/findtextrel.c:464 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" "не вдалося отримати пересування за індексом %d у розділі %zu у «%s»: %s" -#: src/findtextrel.c:523 +#: src/findtextrel.c:529 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s не зібрано з -fpic/-fPIC\n" -#: src/findtextrel.c:576 +#: src/findtextrel.c:582 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "файл, що містить функцію «%s», не було зібрано з параметрами -fpic/-fPIC\n" -#: src/findtextrel.c:583 src/findtextrel.c:603 +#: src/findtextrel.c:589 src/findtextrel.c:609 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3183,7 +3188,7 @@ msgstr "" "файл, що містить функцію «%s», ймовірно, не було зібрано з параметрами -" "fpic/-fPIC\n" -#: src/findtextrel.c:591 +#: src/findtextrel.c:597 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3192,7 +3197,7 @@ msgstr "" "файл, що містить функцію «%s», або файл, що містить функцію «%s», зібрано " "без параметрів -fpic/-fPIC\n" -#: src/findtextrel.c:611 +#: src/findtextrel.c:617 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3616,7 +3621,7 @@ msgid "Warning: size of `%s' changed from %<PRIu64> in %s to %<PRIu64> in %s" msgstr "Попередження: розмір «%s» змінено з %<PRIu64> у %s на %<PRIu64> у %s" #: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 -#: src/readelf.c:829 src/strip.c:563 +#: src/readelf.c:829 src/strip.c:568 #, c-format msgid "cannot determine number of sections: %s" msgstr "не вдалося визначити кількість розділів: %s" @@ -3858,7 +3863,7 @@ msgstr "внутрішня помилка: небезбітовий розділ msgid "cannot get header of 0th section: %s" msgstr "не вдалося отримати заголовок 0-го розділу: %s" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1822 #, c-format msgid "cannot update ELF header: %s" msgstr "не вдалося оновити заголовок ELF: %s" @@ -4025,7 +4030,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: ВНУТРІШНЯ ПОМИЛКА %d (%s-%s): %s" #: src/nm.c:398 src/nm.c:410 src/size.c:309 src/size.c:318 src/size.c:329 -#: src/strip.c:2155 +#: src/strip.c:2160 #, c-format msgid "while closing '%s'" msgstr "під час закриття «%s»" @@ -4068,12 +4073,12 @@ msgstr "%s%s%s: не вдалося розпізнати формат файла msgid "cannot create search tree" msgstr "не вдалося створити дерево пошуку" -#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 src/readelf.c:536 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:793 src/readelf.c:536 #: src/readelf.c:1085 src/readelf.c:1245 src/readelf.c:1393 src/readelf.c:1579 -#: src/readelf.c:1785 src/readelf.c:1972 src/readelf.c:2182 src/readelf.c:2440 -#: src/readelf.c:2510 src/readelf.c:2592 src/readelf.c:3103 src/readelf.c:3139 -#: src/readelf.c:3202 src/readelf.c:7906 src/readelf.c:8986 src/readelf.c:9133 -#: src/readelf.c:9201 src/size.c:417 src/size.c:487 src/strip.c:503 +#: src/readelf.c:1785 src/readelf.c:1975 src/readelf.c:2202 src/readelf.c:2460 +#: src/readelf.c:2536 src/readelf.c:2623 src/readelf.c:3201 src/readelf.c:3237 +#: src/readelf.c:3300 src/readelf.c:8187 src/readelf.c:9273 src/readelf.c:9420 +#: src/readelf.c:9488 src/size.c:417 src/size.c:486 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків" @@ -4157,15 +4162,15 @@ msgstr "Не вказано дії.\n" msgid "while close `%s'" msgstr "під час закриття «%s»" -#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2055 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2072 msgid "INVALID SYMBOL" msgstr "НЕКОРЕКТНИЙ СИМВОЛ" -#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2088 +#: src/objdump.c:394 src/readelf.c:1914 src/readelf.c:2108 msgid "INVALID SECTION" msgstr "НЕКОРЕКТНИЙ РОЗДІЛ" -#: src/objdump.c:510 +#: src/objdump.c:514 #, c-format msgid "" "\n" @@ -4176,21 +4181,21 @@ msgstr "" "ЗАПИСИ ПЕРЕМІЩЕННЯ ДЛЯ [%s]:\n" "%-*s ТИП ЗНАЧЕННЯ\n" -#: src/objdump.c:513 +#: src/objdump.c:517 msgid "OFFSET" msgstr "ЗМІЩЕННЯ" -#: src/objdump.c:576 +#: src/objdump.c:582 #, c-format msgid "Contents of section %s:\n" msgstr "Вміст розділу %s:\n" -#: src/objdump.c:697 +#: src/objdump.c:703 #, c-format msgid "cannot disassemble" msgstr "не вдалося дизасемблювати" -#: src/objdump.c:736 +#: src/objdump.c:742 #, c-format msgid "cannot allocate memory" msgstr "не вдалося розподілити пам’ять" @@ -4345,11 +4350,11 @@ msgstr "не вдалося створити дескриптор Elf: %s" msgid "cannot get section: %s" msgstr "не вдалося отримати розділ: %s" -#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9153 -#: src/unstrip.c:345 src/unstrip.c:376 src/unstrip.c:425 src/unstrip.c:533 -#: src/unstrip.c:550 src/unstrip.c:586 src/unstrip.c:784 src/unstrip.c:1052 -#: src/unstrip.c:1242 src/unstrip.c:1302 src/unstrip.c:1423 src/unstrip.c:1476 -#: src/unstrip.c:1583 src/unstrip.c:1772 +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9440 +#: src/unstrip.c:356 src/unstrip.c:387 src/unstrip.c:436 src/unstrip.c:544 +#: src/unstrip.c:561 src/unstrip.c:597 src/unstrip.c:795 src/unstrip.c:1063 +#: src/unstrip.c:1254 src/unstrip.c:1314 src/unstrip.c:1435 src/unstrip.c:1488 +#: src/unstrip.c:1595 src/unstrip.c:1784 #, c-format msgid "cannot get section header: %s" msgstr "не вдалося отримати заголовок розділу: %s" @@ -4359,8 +4364,8 @@ msgstr "не вдалося отримати заголовок розділу: msgid "cannot get section name" msgstr "не вдалося отримати назву розділу" -#: src/readelf.c:571 src/readelf.c:5207 src/readelf.c:7400 src/readelf.c:7502 -#: src/readelf.c:7660 +#: src/readelf.c:571 src/readelf.c:5398 src/readelf.c:7671 src/readelf.c:7773 +#: src/readelf.c:7939 #, c-format msgid "cannot get %s content: %s" msgstr "не вдалося отримати дані %s: %s" @@ -4662,7 +4667,7 @@ msgstr "" " Відображення розділів на сегмент:\n" " Розділи сегмента..." -#: src/readelf.c:1258 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1843 src/unstrip.c:1886 src/unstrip.c:1893 #, c-format msgid "cannot get program header: %s" msgstr "не вдалося отримати заголовок програми: %s" @@ -4711,8 +4716,8 @@ msgstr "<НЕКОРЕКТНИЙ СИМВОЛ>" msgid "<INVALID SECTION>" msgstr "<НЕКОРЕКТНИЙ РОЗДІЛ>" -#: src/readelf.c:1585 src/readelf.c:2188 src/readelf.c:2446 src/readelf.c:2516 -#: src/readelf.c:2798 src/readelf.c:2871 src/readelf.c:4474 +#: src/readelf.c:1585 src/readelf.c:2208 src/readelf.c:2466 src/readelf.c:2542 +#: src/readelf.c:2846 src/readelf.c:2920 src/readelf.c:4610 #, fuzzy, c-format msgid "invalid sh_link value in section %Zu" msgstr "некоректний розділ .debug_line" @@ -4769,7 +4774,7 @@ msgstr "Runpath бібліотеки: [%s]\n" msgid "%<PRId64> (bytes)\n" msgstr "%<PRId64> (байт)\n" -#: src/readelf.c:1770 src/readelf.c:1957 +#: src/readelf.c:1770 src/readelf.c:1960 #, c-format msgid "" "\n" @@ -4778,7 +4783,7 @@ msgstr "" "\n" "Некоректна таблиця символів за зміщенням %#0<PRIx64>\n" -#: src/readelf.c:1788 src/readelf.c:1974 +#: src/readelf.c:1788 src/readelf.c:1978 #, c-format msgid "" "\n" @@ -4801,7 +4806,7 @@ msgstr[2] "" "Розділ пересування [%2zu] «%s» для розділу [%2u] «%s» за зміщенням " "%#0<PRIx64> містить %d записів:\n" -#: src/readelf.c:1803 +#: src/readelf.c:1803 src/readelf.c:1993 #, c-format msgid "" "\n" @@ -4827,22 +4832,22 @@ msgstr " Зміщення Тип Значення На� msgid " Offset Type Value Name\n" msgstr " Зміщення Тип Значення Назва\n" -#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 -#: src/readelf.c:1922 src/readelf.c:2042 src/readelf.c:2054 src/readelf.c:2068 -#: src/readelf.c:2087 src/readelf.c:2100 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1913 +#: src/readelf.c:1925 src/readelf.c:2059 src/readelf.c:2071 src/readelf.c:2085 +#: src/readelf.c:2107 src/readelf.c:2120 msgid "<INVALID RELOC>" msgstr "<НЕКОРЕКТНЕ ПЕРЕМІЩЕННЯ>" -#: src/readelf.c:1986 +#: src/readelf.c:2003 msgid " Offset Type Value Addend Name\n" msgstr " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:1988 +#: src/readelf.c:2005 msgid " Offset Type Value Addend Name\n" msgstr "" " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:2196 +#: src/readelf.c:2216 #, c-format msgid "" "\n" @@ -4860,7 +4865,7 @@ msgstr[2] "" "\n" "Таблиця символів [%2u] «%s» містить %u записів:\n" -#: src/readelf.c:2201 +#: src/readelf.c:2221 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4868,33 +4873,33 @@ msgstr[0] " %lu лок. символ Таблиця символів: [%2u] « msgstr[1] " %lu лок. символи Таблиця символів: [%2u] «%s»\n" msgstr[2] " %lu лок. символів Таблиця символів: [%2u] «%s»\n" -#: src/readelf.c:2209 +#: src/readelf.c:2229 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2211 +#: src/readelf.c:2231 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2231 +#: src/readelf.c:2251 #, c-format msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" msgstr "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2319 +#: src/readelf.c:2339 #, c-format msgid "bad dynamic symbol" msgstr "помилковий динамічний символ" -#: src/readelf.c:2401 +#: src/readelf.c:2421 msgid "none" msgstr "немає" -#: src/readelf.c:2418 +#: src/readelf.c:2438 msgid "| <unknown>" msgstr "| <невідомо>" -#: src/readelf.c:2449 +#: src/readelf.c:2469 #, c-format msgid "" "\n" @@ -4917,17 +4922,17 @@ msgstr[2] "" "Розділ потреби у версіях [%2u] «%s», що містить %d записів:\n" " Адр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2470 +#: src/readelf.c:2490 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Версія: %hu Файл: %s Кть: %hu\n" -#: src/readelf.c:2483 +#: src/readelf.c:2503 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Назва: %s Прап: %s Версія: %hu\n" -#: src/readelf.c:2520 +#: src/readelf.c:2546 #, c-format msgid "" "\n" @@ -4950,17 +4955,17 @@ msgstr[2] "" "Розділ визначення версії [%2u] «%s», що містить %d записів:\n" " Адр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2548 +#: src/readelf.c:2574 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: Версія: %hd Прап.: %s Індекс: %hd К-ть: %hd Назва: %s\n" -#: src/readelf.c:2563 +#: src/readelf.c:2589 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: батьківський %d: %s\n" -#: src/readelf.c:2802 +#: src/readelf.c:2850 #, c-format msgid "" "\n" @@ -4983,15 +4988,15 @@ msgstr[2] "" "Розділ символів версій [%2u] «%s», що містить %d записів:\n" " Адр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> Посилання на розділ: [%2u] «%s»" -#: src/readelf.c:2830 +#: src/readelf.c:2878 msgid " 0 *local* " msgstr " 0 *локальний* " -#: src/readelf.c:2835 +#: src/readelf.c:2883 msgid " 1 *global* " msgstr " 1 *загальний* " -#: src/readelf.c:2876 +#: src/readelf.c:2925 #, c-format msgid "" "\n" @@ -5019,22 +5024,22 @@ msgstr[2] "" "блоками):\n" " Адр.: %#0*<PRIx64> Зміщ.: %#08<PRIx64> Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2898 +#: src/readelf.c:2947 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Довжина Номер % від загал. Покриття\n" -#: src/readelf.c:2900 +#: src/readelf.c:2949 #, c-format msgid " 0 %6<PRIu32> %5.1f%%\n" msgstr " 0 %6<PRIu32> %5.1f%%\n" -#: src/readelf.c:2907 +#: src/readelf.c:2956 #, c-format msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" msgstr "%7d %6<PRIu32> %5.1f%% %5.1f%%\n" -#: src/readelf.c:2920 +#: src/readelf.c:2969 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5043,12 +5048,27 @@ msgstr "" " Середня кількість тестів: успішний пошук: %f\n" "\t\t\t неуспішний пошук: %f\n" -#: src/readelf.c:2938 src/readelf.c:2980 src/readelf.c:3021 +#: src/readelf.c:2987 src/readelf.c:3042 src/readelf.c:3098 #, c-format msgid "cannot get data for section %d: %s" msgstr "не вдалося отримати дані для розділу %d: %s" -#: src/readelf.c:3075 +#: src/readelf.c:2995 +#, fuzzy, c-format +msgid "invalid data in sysv.hash section %d" +msgstr "некоректні дані у розділі [%zu] «%s»" + +#: src/readelf.c:3050 +#, fuzzy, c-format +msgid "invalid data in sysv.hash64 section %d" +msgstr "некоректні дані у розділі [%zu] «%s»" + +#: src/readelf.c:3106 +#, fuzzy, c-format +msgid "invalid data in gnu.hash section %d" +msgstr "некоректні дані у розділі [%zu] «%s»" + +#: src/readelf.c:3173 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5058,7 +5078,7 @@ msgstr "" " Розмір бітової маски: %zu байтів %<PRIuFAST32>%% встановлених бітів зсув " "2-го хешу: %u\n" -#: src/readelf.c:3150 +#: src/readelf.c:3248 #, c-format msgid "" "\n" @@ -5079,7 +5099,7 @@ msgstr[2] "" "Розділ списку бібліотек [%2zu] «%s» за зміщенням %#0<PRIx64> містить %d " "записів:\n" -#: src/readelf.c:3164 +#: src/readelf.c:3262 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5087,7 +5107,7 @@ msgstr "" " Бібліотека Часовий штамп Версія суми " "Прапорці" -#: src/readelf.c:3214 +#: src/readelf.c:3312 #, c-format msgid "" "\n" @@ -5098,140 +5118,140 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з %<PRIu64> байтів за зміщенням " "%#0<PRIx64>:\n" -#: src/readelf.c:3230 +#: src/readelf.c:3329 msgid " Owner Size\n" msgstr " Власник Розмір\n" -#: src/readelf.c:3256 +#: src/readelf.c:3358 #, c-format msgid " %-13s %4<PRIu32>\n" msgstr " %-13s %4<PRIu32>\n" -#: src/readelf.c:3288 +#: src/readelf.c:3397 #, c-format msgid " %-4u %12<PRIu32>\n" msgstr " %-4u %12<PRIu32>\n" -#: src/readelf.c:3293 +#: src/readelf.c:3402 #, c-format msgid " File: %11<PRIu32>\n" msgstr " Файл: %11<PRIu32>\n" -#: src/readelf.c:3328 +#: src/readelf.c:3451 #, c-format msgid " %s: %<PRId64>, %s\n" msgstr " %s: %<PRId64>, %s\n" -#: src/readelf.c:3331 +#: src/readelf.c:3454 #, c-format msgid " %s: %<PRId64>\n" msgstr " %s: %<PRId64>\n" -#: src/readelf.c:3334 +#: src/readelf.c:3457 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3341 +#: src/readelf.c:3467 #, c-format msgid " %u: %<PRId64>\n" msgstr " %u: %<PRId64>\n" -#: src/readelf.c:3344 +#: src/readelf.c:3470 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3389 +#: src/readelf.c:3515 #, c-format msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3392 +#: src/readelf.c:3518 #, c-format msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%s+%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3397 +#: src/readelf.c:3523 #, c-format msgid "%#<PRIx64> <%s+%#<PRIx64>>" msgstr "%#<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3400 +#: src/readelf.c:3526 #, c-format msgid "%#0*<PRIx64> <%s+%#<PRIx64>>" msgstr "%#0*<PRIx64> <%s+%#<PRIx64>>" -#: src/readelf.c:3406 +#: src/readelf.c:3532 #, c-format msgid "%s+%#<PRIx64> <%s>" msgstr "%s+%#<PRIx64> <%s>" -#: src/readelf.c:3409 +#: src/readelf.c:3535 #, c-format msgid "%s+%#0*<PRIx64> <%s>" msgstr "%s+%#0*<PRIx64> <%s>" -#: src/readelf.c:3413 +#: src/readelf.c:3539 #, c-format msgid "%#<PRIx64> <%s>" msgstr "%#<PRIx64> <%s>" -#: src/readelf.c:3416 +#: src/readelf.c:3542 #, c-format msgid "%#0*<PRIx64> <%s>" msgstr "%#0*<PRIx64> <%s>" -#: src/readelf.c:3421 +#: src/readelf.c:3547 #, c-format msgid "%s+%#<PRIx64>" msgstr "%s+%#<PRIx64>" -#: src/readelf.c:3424 +#: src/readelf.c:3550 #, c-format msgid "%s+%#0*<PRIx64>" msgstr "%s+%#0*<PRIx64>" -#: src/readelf.c:3806 +#: src/readelf.c:3932 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:3809 +#: src/readelf.c:3935 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:4203 +#: src/readelf.c:4332 #, c-format msgid "%*s[%4<PRIuMAX>] %s <TRUNCATED>\n" msgstr "%*s[%4<PRIuMAX>] %s <ОБРІЗАНО>\n" -#: src/readelf.c:4260 +#: src/readelf.c:4389 #, c-format msgid "%s %#<PRIx64> used with different address sizes" msgstr "%s %#<PRIx64> використано з різними розмірами адрес" -#: src/readelf.c:4267 +#: src/readelf.c:4396 #, c-format msgid "%s %#<PRIx64> used with different offset sizes" msgstr "%s %#<PRIx64> використано з різними розмірами зміщень" -#: src/readelf.c:4274 +#: src/readelf.c:4403 #, c-format msgid "%s %#<PRIx64> used with different base addresses" msgstr "%s %#<PRIx64> використано з різними базовими адресами" -#: src/readelf.c:4356 +#: src/readelf.c:4492 #, c-format msgid " [%6tx] <UNUSED GARBAGE IN REST OF SECTION>\n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4364 +#: src/readelf.c:4500 #, c-format msgid " [%6tx] <UNUSED GARBAGE> ... %<PRIu64> bytes ...\n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ> ... %<PRIu64> байтів ...\n" -#: src/readelf.c:4390 +#: src/readelf.c:4526 #, c-format msgid "" "\n" @@ -5242,7 +5262,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#<PRIx64>:\n" " [ Код]\n" -#: src/readelf.c:4398 +#: src/readelf.c:4534 #, c-format msgid "" "\n" @@ -5251,30 +5271,30 @@ msgstr "" "\n" "Розділ скорочень за зміщенням %<PRIu64>:\n" -#: src/readelf.c:4411 +#: src/readelf.c:4547 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під час читання скорочення: %s\n" -#: src/readelf.c:4427 +#: src/readelf.c:4563 #, c-format msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n" msgstr " [%5u] зміщення: %<PRId64>, дочірній: %s, мітка: %s\n" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "yes" msgstr "так" -#: src/readelf.c:4430 +#: src/readelf.c:4566 msgid "no" msgstr "ні" -#: src/readelf.c:4464 src/readelf.c:4537 +#: src/readelf.c:4600 src/readelf.c:4673 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалося отримати дані get .debug_aranges: %s" -#: src/readelf.c:4479 +#: src/readelf.c:4615 #, c-format msgid "" "\n" @@ -5292,12 +5312,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщенням %#<PRIx64> містить %zu записів:\n" -#: src/readelf.c:4510 +#: src/readelf.c:4646 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4512 +#: src/readelf.c:4648 #, c-format msgid "" " [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n" @@ -5305,8 +5325,8 @@ msgstr "" " [%*zu] початок: %0#*<PRIx64>, довжина: %5<PRIu64>, зміщення CU DIE: " "%6<PRId64>\n" -#: src/readelf.c:4542 src/readelf.c:4696 src/readelf.c:5217 src/readelf.c:6131 -#: src/readelf.c:6632 src/readelf.c:6752 src/readelf.c:6908 src/readelf.c:7331 +#: src/readelf.c:4678 src/readelf.c:4832 src/readelf.c:5408 src/readelf.c:6362 +#: src/readelf.c:6894 src/readelf.c:7014 src/readelf.c:7177 src/readelf.c:7602 #, c-format msgid "" "\n" @@ -5315,7 +5335,7 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщенням %#<PRIx64>:\n" -#: src/readelf.c:4555 src/readelf.c:6157 +#: src/readelf.c:4691 src/readelf.c:6388 #, c-format msgid "" "\n" @@ -5324,12 +5344,12 @@ msgstr "" "\n" "Таблиця за зміщенням %Zu:\n" -#: src/readelf.c:4559 src/readelf.c:5241 src/readelf.c:6166 +#: src/readelf.c:4695 src/readelf.c:5432 src/readelf.c:6399 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "некоректні дані у розділі [%zu] «%s»" -#: src/readelf.c:4575 +#: src/readelf.c:4711 #, c-format msgid "" "\n" @@ -5338,32 +5358,32 @@ msgstr "" "\n" " Довжина: %6<PRIu64>\n" -#: src/readelf.c:4587 +#: src/readelf.c:4723 #, c-format msgid " DWARF version: %6<PRIuFAST16>\n" msgstr " версія DWARF: %6<PRIuFAST16>\n" -#: src/readelf.c:4591 +#: src/readelf.c:4727 #, c-format msgid "unsupported aranges version" msgstr "непідтримувана версія aranges" -#: src/readelf.c:4602 +#: src/readelf.c:4738 #, c-format msgid " CU offset: %6<PRIx64>\n" msgstr " зміщення CU: %6<PRIx64>\n" -#: src/readelf.c:4608 +#: src/readelf.c:4744 #, c-format msgid " Address size: %6<PRIu64>\n" msgstr " Розмір адреси: %6<PRIu64>\n" -#: src/readelf.c:4612 +#: src/readelf.c:4748 #, c-format msgid "unsupported address size" msgstr "непідтримуваний розмір адреси" -#: src/readelf.c:4617 +#: src/readelf.c:4753 #, c-format msgid "" " Segment size: %6<PRIu64>\n" @@ -5372,62 +5392,67 @@ msgstr "" " Розмір сегмента: %6<PRIu64>\n" "\n" -#: src/readelf.c:4621 +#: src/readelf.c:4757 #, c-format msgid "unsupported segment size" msgstr "непідтримуваний розмір сегмента" -#: src/readelf.c:4661 +#: src/readelf.c:4797 #, c-format msgid " %s..%s (%<PRIx64>)\n" msgstr " %s..%s (%<PRIx64>)\n" -#: src/readelf.c:4664 +#: src/readelf.c:4800 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4673 +#: src/readelf.c:4809 #, c-format msgid " %Zu padding bytes\n" msgstr " %Zu байтів доповнення\n" -#: src/readelf.c:4691 +#: src/readelf.c:4827 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "не вдалося отримати дані .debug_ranges: %s" -#: src/readelf.c:4721 src/readelf.c:6659 +#: src/readelf.c:4857 src/readelf.c:6921 #, c-format msgid " [%6tx] <INVALID DATA>\n" msgstr " [%6tx] <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:4743 src/readelf.c:6681 +#: src/readelf.c:4879 src/readelf.c:6943 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] базова адреса %s\n" -#: src/readelf.c:4750 src/readelf.c:6688 +#: src/readelf.c:4886 src/readelf.c:6950 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній список\n" -#: src/readelf.c:4761 +#: src/readelf.c:4897 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4763 +#: src/readelf.c:4899 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:5196 +#: src/readelf.c:5078 +#, fuzzy +msgid " <INVALID DATA>\n" +msgstr " <НЕКОРЕКТНІ ДАНІ>\n" + +#: src/readelf.c:5387 #, c-format msgid "cannot get ELF: %s" msgstr "не вдалося отримати ELF: %s" -#: src/readelf.c:5213 +#: src/readelf.c:5404 #, c-format msgid "" "\n" @@ -5436,7 +5461,7 @@ msgstr "" "\n" "Розділ відомостей щодо вікна викликів [%2zu] «%s» за зміщенням %#<PRIx64>:\n" -#: src/readelf.c:5263 +#: src/readelf.c:5454 #, c-format msgid "" "\n" @@ -5445,50 +5470,50 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:5348 +#: src/readelf.c:5547 src/readelf.c:5702 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшення" -#: src/readelf.c:5360 +#: src/readelf.c:5562 msgid "FDE address encoding: " msgstr "Кодування адреси FDE: " -#: src/readelf.c:5366 +#: src/readelf.c:5568 msgid "LSDA pointer encoding: " msgstr "Кодування вказівника LSDA: " -#: src/readelf.c:5477 +#: src/readelf.c:5679 #, c-format msgid " (offset: %#<PRIx64>)" msgstr " (зміщення: %#<PRIx64>)" -#: src/readelf.c:5484 +#: src/readelf.c:5686 #, c-format msgid " (end offset: %#<PRIx64>)" msgstr " (зміщення від кінця: %#<PRIx64>)" -#: src/readelf.c:5511 +#: src/readelf.c:5723 #, c-format msgid " %-26sLSDA pointer: %#<PRIx64>\n" msgstr " %-26sвказівник LSDA: %#<PRIx64>\n" -#: src/readelf.c:5563 +#: src/readelf.c:5778 #, c-format msgid "cannot get attribute code: %s" msgstr "не вдалося отримати код атрибута: %s" -#: src/readelf.c:5572 +#: src/readelf.c:5787 #, c-format msgid "cannot get attribute form: %s" msgstr "не вдалося отримати форму атрибута: %s" -#: src/readelf.c:5587 +#: src/readelf.c:5802 #, c-format msgid "cannot get attribute value: %s" msgstr "не вдалося отримати значення атрибута: %s" -#: src/readelf.c:5880 +#: src/readelf.c:6101 #, c-format msgid "" "\n" @@ -5499,7 +5524,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщенням %#<PRIx64>:\n" " [Зміщення]\n" -#: src/readelf.c:5912 +#: src/readelf.c:6133 #, c-format msgid "" " Type unit at offset %<PRIu64>:\n" @@ -5512,7 +5537,7 @@ msgstr "" "Зміщення: %<PRIu8>\n" " Підпис типу: %#<PRIx64>, Зміщення типу: %#<PRIx64>\n" -#: src/readelf.c:5921 +#: src/readelf.c:6142 #, c-format msgid "" " Compilation unit at offset %<PRIu64>:\n" @@ -5523,33 +5548,33 @@ msgstr "" " Версія: %<PRIu16>, Зміщення розділу скорочень: %<PRIu64>, Адреса: %<PRIu8>, " "Зміщення: %<PRIu8>\n" -#: src/readelf.c:5946 +#: src/readelf.c:6167 #, c-format msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s" msgstr "не вдалося отримати DIE за зміщенням %<PRIu64> у розділі «%s»: %s" -#: src/readelf.c:5960 +#: src/readelf.c:6181 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалося отримати зміщення DIE: %s" -#: src/readelf.c:5969 +#: src/readelf.c:6190 #, c-format msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s" msgstr "" "не вдалося отримати мітку DIE за зміщенням %<PRIu64> у розділі «%s»: %s" -#: src/readelf.c:6001 +#: src/readelf.c:6222 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалося визначити наступний DIE: %s\n" -#: src/readelf.c:6009 +#: src/readelf.c:6230 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалося визначити наступний DIE: %s" -#: src/readelf.c:6045 +#: src/readelf.c:6266 #, c-format msgid "" "\n" @@ -5560,12 +5585,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#<PRIx64>:\n" "\n" -#: src/readelf.c:6144 +#: src/readelf.c:6375 #, c-format msgid "cannot get line data section data: %s" msgstr "не вдалося отримати дані розділу лінійних даних: %s" -#: src/readelf.c:6212 +#: src/readelf.c:6445 #, c-format msgid "" "\n" @@ -5594,12 +5619,12 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:6233 +#: src/readelf.c:6466 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщенням %tu у розділі [%zu] «%s»" -#: src/readelf.c:6248 +#: src/readelf.c:6481 #, c-format msgid " [%*<PRIuFAST8>] %hhu argument\n" msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n" @@ -5607,7 +5632,7 @@ msgstr[0] " [%*<PRIuFAST8>] %hhu аргумент\n" msgstr[1] " [%*<PRIuFAST8>] %hhu аргументи\n" msgstr[2] " [%*<PRIuFAST8>] %hhu аргументів\n" -#: src/readelf.c:6256 +#: src/readelf.c:6489 msgid "" "\n" "Directory table:" @@ -5615,7 +5640,7 @@ msgstr "" "\n" "Таблиця каталогу:" -#: src/readelf.c:6272 +#: src/readelf.c:6505 msgid "" "\n" "File name table:\n" @@ -5625,7 +5650,7 @@ msgstr "" "Таблиця назв файлів:\n" " Запис Кат Час Розмір Назва" -#: src/readelf.c:6301 +#: src/readelf.c:6540 msgid "" "\n" "Line number statements:" @@ -5633,115 +5658,120 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:6377 +#: src/readelf.c:6591 +#, fuzzy, c-format +msgid "invalid maximum operations per instruction is zero" +msgstr "некоректна мінімальна довжина розмірності рядка для порівняння" + +#: src/readelf.c:6627 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr "" " спеціальний код операції %u: адреса+%u = %s, індекс_оп = %u, рядок%+d = " "%zu\n" -#: src/readelf.c:6382 +#: src/readelf.c:6632 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " спеціальний код операції %u: адреса+%u = %s, рядок%+d = %zu\n" -#: src/readelf.c:6402 +#: src/readelf.c:6652 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:6407 +#: src/readelf.c:6657 msgid " end of sequence" msgstr " кінець послідовності" -#: src/readelf.c:6424 +#: src/readelf.c:6676 #, c-format msgid " set address to %s\n" msgstr " встановити адресу у значення %s\n" -#: src/readelf.c:6445 +#: src/readelf.c:6703 #, c-format msgid " define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n" msgstr "" " визначення нового файла: dir=%u, mtime=%<PRIu64>, довжина=%<PRIu64>, назва=" "%s\n" -#: src/readelf.c:6458 +#: src/readelf.c:6716 #, c-format msgid " set discriminator to %u\n" msgstr " встановити розрізнення для %u\n" -#: src/readelf.c:6463 +#: src/readelf.c:6721 msgid " unknown opcode" msgstr " невідомий код операції" -#: src/readelf.c:6475 +#: src/readelf.c:6733 msgid " copy" msgstr " копія" -#: src/readelf.c:6486 +#: src/readelf.c:6744 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr " збільшення адреси на %u до %s, індекс_оп до %u\n" -#: src/readelf.c:6490 +#: src/readelf.c:6748 #, c-format msgid " advance address by %u to %s\n" msgstr " збільшення адреси на %u до %s\n" -#: src/readelf.c:6501 +#: src/readelf.c:6759 #, c-format msgid " advance line by constant %d to %<PRId64>\n" msgstr " просувати рядок на сталу %d до %<PRId64>\n" -#: src/readelf.c:6509 +#: src/readelf.c:6767 #, c-format msgid " set file to %<PRIu64>\n" msgstr " встановити файл у %<PRIu64>\n" -#: src/readelf.c:6519 +#: src/readelf.c:6777 #, c-format msgid " set column to %<PRIu64>\n" msgstr " встановити значення стовпчика %<PRIu64>\n" -#: src/readelf.c:6526 +#: src/readelf.c:6784 #, c-format msgid " set '%s' to %<PRIuFAST8>\n" msgstr " встановити «%s» у %<PRIuFAST8>\n" -#: src/readelf.c:6532 +#: src/readelf.c:6790 msgid " set basic block flag" msgstr " встановити прапорець базового блоку" -#: src/readelf.c:6541 +#: src/readelf.c:6803 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr " збільшити адресу на сталу величину %u до %s, індекс_оп до %u\n" -#: src/readelf.c:6545 +#: src/readelf.c:6807 #, c-format msgid " advance address by constant %u to %s\n" msgstr " збільшити адресу на сталу величину %u до %s\n" -#: src/readelf.c:6563 +#: src/readelf.c:6825 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr " збільшити адресу на фіксовану величину %u до %s\n" -#: src/readelf.c:6572 +#: src/readelf.c:6834 msgid " set prologue end flag" msgstr " встановити прапорець кінця вступу" -#: src/readelf.c:6577 +#: src/readelf.c:6839 msgid " set epilogue begin flag" msgstr " встановити прапорець початку епілогу" -#: src/readelf.c:6586 +#: src/readelf.c:6848 #, c-format msgid " set isa to %u\n" msgstr " встановити isa у %u\n" -#: src/readelf.c:6595 +#: src/readelf.c:6857 #, c-format msgid " unknown opcode with %<PRIu8> parameter:" msgid_plural " unknown opcode with %<PRIu8> parameters:" @@ -5749,97 +5779,102 @@ msgstr[0] " невідомий код операції з %<PRIu8> параме� msgstr[1] " невідомий код операції з %<PRIu8> параметрами:" msgstr[2] " невідомий код операції з %<PRIu8> параметрами:" -#: src/readelf.c:6627 +#: src/readelf.c:6889 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалося отримати вміст .debug_loc: %s" -#: src/readelf.c:6702 +#: src/readelf.c:6964 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6704 +#: src/readelf.c:6966 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6711 +#: src/readelf.c:6973 src/readelf.c:7858 msgid " <INVALID DATA>\n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6763 src/readelf.c:6917 +#: src/readelf.c:7025 src/readelf.c:7186 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалося отримати дані розділу відомостей щодо макросів: %s" -#: src/readelf.c:6842 +#: src/readelf.c:7104 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений рядок наприкінці розділу" -#: src/readelf.c:6958 +#: src/readelf.c:7127 +#, fuzzy, c-format +msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" +msgstr "%*s*** незавершений рядок наприкінці розділу" + +#: src/readelf.c:7227 #, c-format msgid " Offset: 0x%<PRIx64>\n" msgstr " Зміщення: 0x%<PRIx64>\n" -#: src/readelf.c:6970 +#: src/readelf.c:7239 #, c-format msgid " Version: %<PRIu16>\n" msgstr " Версія: %<PRIu16>\n" -#: src/readelf.c:6976 src/readelf.c:7689 +#: src/readelf.c:7245 src/readelf.c:7968 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома версія, не вдалося обробити розділ\n" -#: src/readelf.c:6983 +#: src/readelf.c:7252 #, c-format msgid " Flag: 0x%<PRIx8>\n" msgstr " Прапорець: 0x%<PRIx8>\n" -#: src/readelf.c:6986 +#: src/readelf.c:7255 #, c-format msgid " Offset length: %<PRIu8>\n" msgstr " Довжина зміщення: %<PRIu8>\n" -#: src/readelf.c:6994 +#: src/readelf.c:7263 #, c-format msgid " .debug_line offset: 0x%<PRIx64>\n" msgstr " зміщення .debug_line: 0x%<PRIx64>\n" -#: src/readelf.c:7007 +#: src/readelf.c:7276 #, c-format msgid " extension opcode table, %<PRIu8> items:\n" msgstr " таблиця кодів операцій розширень, записів — %<PRIu8>:\n" -#: src/readelf.c:7014 +#: src/readelf.c:7283 #, c-format msgid " [%<PRIx8>]" msgstr " [%<PRIx8>]" -#: src/readelf.c:7026 +#: src/readelf.c:7295 #, c-format msgid " %<PRIu8> arguments:" msgstr " %<PRIu8> аргументів:" -#: src/readelf.c:7054 +#: src/readelf.c:7323 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:7289 +#: src/readelf.c:7560 #, c-format msgid "vendor opcode not verified?" msgstr "код операції постачальника не перевірено?" -#: src/readelf.c:7317 +#: src/readelf.c:7588 #, c-format msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n" msgstr "" " [%5d] зміщення DIE: %6<PRId64>, зміщення CU DIE: %6<PRId64>, назва: %s\n" -#: src/readelf.c:7358 +#: src/readelf.c:7629 #, c-format msgid "" "\n" @@ -5850,12 +5885,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#<PRIx64>:\n" " %*s Рядок\n" -#: src/readelf.c:7372 +#: src/readelf.c:7643 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** помилка під час читання рядків: %s\n" -#: src/readelf.c:7392 +#: src/readelf.c:7663 #, c-format msgid "" "\n" @@ -5864,7 +5899,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:7494 +#: src/readelf.c:7765 #, c-format msgid "" "\n" @@ -5873,22 +5908,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:7517 +#: src/readelf.c:7788 #, c-format msgid " LPStart encoding: %#x " msgstr " Кодування LPStart: %#x " -#: src/readelf.c:7529 +#: src/readelf.c:7800 #, c-format msgid " TType encoding: %#x " msgstr " Кодування TType: %#x " -#: src/readelf.c:7543 +#: src/readelf.c:7815 #, c-format msgid " Call site encoding: %#x " msgstr " Кодування місця виклику:%#x " -#: src/readelf.c:7556 +#: src/readelf.c:7828 msgid "" "\n" " Call site table:" @@ -5896,7 +5931,7 @@ msgstr "" "\n" " Таблиця місця виклику:" -#: src/readelf.c:7570 +#: src/readelf.c:7842 #, c-format msgid "" " [%4u] Call site start: %#<PRIx64>\n" @@ -5909,12 +5944,12 @@ msgstr "" " Місце застосування: %#<PRIx64>\n" " Дія: %u\n" -#: src/readelf.c:7630 +#: src/readelf.c:7909 #, c-format msgid "invalid TType encoding" msgstr "некоректне кодування TType" -#: src/readelf.c:7651 +#: src/readelf.c:7930 #, c-format msgid "" "\n" @@ -5923,37 +5958,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщенням %#<PRIx64> містить %<PRId64> байтів:\n" -#: src/readelf.c:7680 +#: src/readelf.c:7959 #, c-format msgid " Version: %<PRId32>\n" msgstr " Версія: %<PRId32>\n" -#: src/readelf.c:7698 +#: src/readelf.c:7977 #, c-format msgid " CU offset: %#<PRIx32>\n" msgstr " зміщення CU: %#<PRIx32>\n" -#: src/readelf.c:7705 +#: src/readelf.c:7984 #, c-format msgid " TU offset: %#<PRIx32>\n" msgstr " зміщення TU: %#<PRIx32>\n" -#: src/readelf.c:7712 +#: src/readelf.c:7991 #, c-format msgid " address offset: %#<PRIx32>\n" msgstr " зміщення адреси: %#<PRIx32>\n" -#: src/readelf.c:7719 +#: src/readelf.c:7998 #, c-format msgid " symbol offset: %#<PRIx32>\n" msgstr " зміщення символу: %#<PRIx32>\n" -#: src/readelf.c:7726 +#: src/readelf.c:8005 #, c-format msgid " constant offset: %#<PRIx32>\n" msgstr " стале зміщення: %#<PRIx32>\n" -#: src/readelf.c:7733 +#: src/readelf.c:8012 #, c-format msgid "" "\n" @@ -5962,7 +5997,7 @@ msgstr "" "\n" " Список CU зі зміщенням %#<PRIx32> містить %zu записів:\n" -#: src/readelf.c:7755 +#: src/readelf.c:8034 #, c-format msgid "" "\n" @@ -5971,7 +6006,7 @@ msgstr "" "\n" " Список TU зі зміщенням %#<PRIx32> містить %zu записів:\n" -#: src/readelf.c:7781 +#: src/readelf.c:8060 #, c-format msgid "" "\n" @@ -5980,7 +6015,7 @@ msgstr "" "\n" " Список адрес зі зміщенням %#<PRIx32> містить %zu записів:\n" -#: src/readelf.c:7810 +#: src/readelf.c:8089 #, c-format msgid "" "\n" @@ -5989,17 +6024,17 @@ msgstr "" "\n" " Таблиця символів за зміщенням %#<PRIx32> містить %zu позицій:\n" -#: src/readelf.c:7895 +#: src/readelf.c:8176 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "не вдалося отримати дескриптор контексту зневаджування: %s" -#: src/readelf.c:8053 src/readelf.c:8659 src/readelf.c:8770 src/readelf.c:8828 +#: src/readelf.c:8336 src/readelf.c:8942 src/readelf.c:9053 src/readelf.c:9111 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалося перетворити дані запису ядра: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8683 #, c-format msgid "" "\n" @@ -6008,21 +6043,21 @@ msgstr "" "\n" "%*s... <повторюється %u разів> ..." -#: src/readelf.c:8903 +#: src/readelf.c:9190 msgid " Owner Data size Type\n" msgstr " Власник Розм. даних Тип\n" -#: src/readelf.c:8921 +#: src/readelf.c:9208 #, c-format msgid " %-13.*s %9<PRId32> %s\n" msgstr " %-13.*s %9<PRId32> %s\n" -#: src/readelf.c:8971 +#: src/readelf.c:9258 #, c-format msgid "cannot get content of note section: %s" msgstr "не вдалося отримати вміст розділу записів: %s" -#: src/readelf.c:8998 +#: src/readelf.c:9285 #, c-format msgid "" "\n" @@ -6032,7 +6067,7 @@ msgstr "" "Розділ записів (note) [%2zu] «%s» з %<PRIu64> байтів за зміщенням " "%#0<PRIx64>:\n" -#: src/readelf.c:9021 +#: src/readelf.c:9308 #, c-format msgid "" "\n" @@ -6041,7 +6076,7 @@ msgstr "" "\n" "Сегмент записів з %<PRIu64> байтів за зміщенням %#0<PRIx64>:\n" -#: src/readelf.c:9067 +#: src/readelf.c:9354 #, c-format msgid "" "\n" @@ -6050,12 +6085,12 @@ msgstr "" "\n" "У розділі [%Zu] «%s» не міститься даних для створення дампу.\n" -#: src/readelf.c:9073 src/readelf.c:9096 +#: src/readelf.c:9360 src/readelf.c:9383 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "не вдалося отримати дані для розділу [%Zu] «%s»: %s" -#: src/readelf.c:9077 +#: src/readelf.c:9364 #, c-format msgid "" "\n" @@ -6064,7 +6099,7 @@ msgstr "" "\n" "Шіст. дамп розділу [%Zu] «%s», %<PRIu64> байтів за зміщенням %#0<PRIx64>:\n" -#: src/readelf.c:9090 +#: src/readelf.c:9377 #, c-format msgid "" "\n" @@ -6073,7 +6108,7 @@ msgstr "" "\n" "У розділі [%Zu] «%s» не міститься рядків для створення дампу.\n" -#: src/readelf.c:9100 +#: src/readelf.c:9387 #, c-format msgid "" "\n" @@ -6082,7 +6117,7 @@ msgstr "" "\n" "Розділ рядків [%Zu] «%s» містить %<PRIu64> байтів за зміщенням %#0<PRIx64>:\n" -#: src/readelf.c:9148 +#: src/readelf.c:9435 #, c-format msgid "" "\n" @@ -6091,7 +6126,7 @@ msgstr "" "\n" "розділу [%lu] не існує" -#: src/readelf.c:9177 +#: src/readelf.c:9464 #, c-format msgid "" "\n" @@ -6100,12 +6135,12 @@ msgstr "" "\n" "розділу «%s» не існує" -#: src/readelf.c:9234 +#: src/readelf.c:9521 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалося отримати покажчик символів архіву «%s»: %s" -#: src/readelf.c:9237 +#: src/readelf.c:9524 #, c-format msgid "" "\n" @@ -6114,7 +6149,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика символів\n" -#: src/readelf.c:9241 +#: src/readelf.c:9528 #, c-format msgid "" "\n" @@ -6123,12 +6158,12 @@ msgstr "" "\n" "Покажчик архіву «%s» містить %Zu записів:\n" -#: src/readelf.c:9259 +#: src/readelf.c:9546 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "не вдалося видобути елемент за зміщенням %Zu у «%s»: %s" -#: src/readelf.c:9264 +#: src/readelf.c:9551 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» містить:\n" @@ -6194,12 +6229,12 @@ msgstr "Некоректна основа числення: %s" msgid "%s: file format not recognized" msgstr "%s: не вдалося розпізнати формат файла" -#: src/size.c:438 src/size.c:571 +#: src/size.c:437 src/size.c:570 #, c-format msgid " (ex %s)" msgstr " (прикл. %s)" -#: src/size.c:596 +#: src/size.c:595 msgid "(TOTALS)\n" msgstr "(ЗАГАЛОМ)\n" @@ -6334,7 +6369,7 @@ msgstr "параметр -f вказано двічі" msgid "-F option specified twice" msgstr "параметр -F вказано двічі" -#: src/strip.c:249 src/unstrip.c:117 +#: src/strip.c:249 src/unstrip.c:121 #, c-format msgid "-o option specified twice" msgstr "параметр -o вказано двічі" @@ -6366,82 +6401,87 @@ msgstr "" msgid "cannot open EBL backend" msgstr "не вдалося відкрити канал сервера EBL" -#: src/strip.c:518 src/strip.c:542 +#: src/strip.c:508 +#, fuzzy, c-format +msgid "cannot get number of phdrs" +msgstr "не вдалося визначити кількість заголовків програми: %s" + +#: src/strip.c:523 src/strip.c:547 #, c-format msgid "cannot create new file '%s': %s" msgstr "не вдалося створити файл «%s»: %s" -#: src/strip.c:608 +#: src/strip.c:613 #, c-format msgid "illformed file '%s'" msgstr "помилкове форматування файла «%s»" -#: src/strip.c:930 src/strip.c:1019 +#: src/strip.c:935 src/strip.c:1024 #, c-format msgid "while generating output file: %s" msgstr "під час спроби створення файла з виведеними даними: %s" -#: src/strip.c:992 src/strip.c:1957 +#: src/strip.c:997 src/strip.c:1962 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під час створення заголовка ELF: %s" -#: src/strip.c:1006 +#: src/strip.c:1011 #, c-format msgid "while preparing output for '%s'" msgstr "під час приготування виведених даних для «%s»" -#: src/strip.c:1057 src/strip.c:1114 +#: src/strip.c:1062 src/strip.c:1119 #, c-format msgid "while create section header section: %s" msgstr "під час створення розділу заголовка розділу: %s" -#: src/strip.c:1063 +#: src/strip.c:1068 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалося розмістити дані розділу: %s" -#: src/strip.c:1123 +#: src/strip.c:1128 #, c-format msgid "while create section header string table: %s" msgstr "під час створення таблиці рядків заголовка розділу: %s" -#: src/strip.c:1752 +#: src/strip.c:1757 #, c-format msgid "bad relocation" msgstr "помилкове пересування" -#: src/strip.c:1869 src/strip.c:1979 +#: src/strip.c:1874 src/strip.c:1984 #, c-format msgid "while writing '%s': %s" msgstr "під час запису «%s»: %s" -#: src/strip.c:1880 +#: src/strip.c:1885 #, c-format msgid "while creating '%s'" msgstr "під час спроби створення «%s»" -#: src/strip.c:1902 +#: src/strip.c:1907 #, c-format msgid "while computing checksum for debug information" msgstr "під час обчислення контрольної суми для діагностичних даних" -#: src/strip.c:1965 +#: src/strip.c:1970 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під час читання файла: %s" -#: src/strip.c:2004 src/strip.c:2024 +#: src/strip.c:2009 src/strip.c:2029 #, c-format msgid "while writing '%s'" msgstr "під час спроби запису «%s»" -#: src/strip.c:2061 src/strip.c:2068 +#: src/strip.c:2066 src/strip.c:2073 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під час завершення «%s»: %s" -#: src/strip.c:2091 src/strip.c:2148 +#: src/strip.c:2096 src/strip.c:2153 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалося встановити права доступу та дату зміни «%s»" @@ -6480,211 +6520,220 @@ msgstr "Застосувати пересування до вмісту розд msgid "Only list module and file names, build IDs" msgstr "Вивести лише список назв модулів, файлів, побудувати ідентифікатори" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "параметр -d вказано двічі" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "можна використовувати лише один з параметрів: -o або -d" -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "" "-n не можна використовувати з файлами, заданими явно, або параметрами -o і -d" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "каталог виведення даних «%s»" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "як аргументи має бути вказано точно два файла" -#: src/unstrip.c:197 +#: src/unstrip.c:204 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" msgstr "" "для файлів, заданих явно, не можна використовувати параметри -m, -a, -R і -i" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "" "якщо використовуються файли, задані неявно, слід додавати параметр -o або -d" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "не вдалося створити заголовок ELF: %s" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "не вдалося скопіювати заголовок ELF: %s" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:262 src/unstrip.c:1832 src/unstrip.c:1876 +#, fuzzy, c-format +msgid "cannot get number of program headers: %s" +msgstr "не вдалося визначити кількість заголовків програми: %s" + +#: src/unstrip.c:267 src/unstrip.c:1836 #, c-format msgid "cannot create program headers: %s" msgstr "не вдалося створити заголовки програми: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:273 #, c-format msgid "cannot copy program header: %s" msgstr "не вдалося скопіювати заголовок програми: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:283 #, c-format msgid "cannot copy section header: %s" msgstr "не вдалося скопіювати заголовок розділу: %s" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:286 src/unstrip.c:1513 #, c-format msgid "cannot get section data: %s" msgstr "не вдалося отримати дані розділу: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:288 src/unstrip.c:1515 #, c-format msgid "cannot copy section data: %s" msgstr "не вдалося скопіювати дані розділу: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:312 #, c-format msgid "cannot create directory '%s'" msgstr "не вдалося створити каталог «%s»" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:352 src/unstrip.c:769 src/unstrip.c:1547 #, c-format msgid "cannot get symbol table entry: %s" msgstr "не вдалося отримати запис таблиці символів: %s" -#: src/unstrip.c:357 src/unstrip.c:575 src/unstrip.c:596 src/unstrip.c:608 -#: src/unstrip.c:1556 src/unstrip.c:1686 src/unstrip.c:1710 +#: src/unstrip.c:368 src/unstrip.c:586 src/unstrip.c:607 src/unstrip.c:619 +#: src/unstrip.c:1568 src/unstrip.c:1698 src/unstrip.c:1722 #, c-format msgid "cannot update symbol table: %s" msgstr "не вдалося оновити таблицю символів: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:378 #, c-format msgid "cannot update section header: %s" msgstr "не вдалося оновити заголовок розділу: %s" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:417 src/unstrip.c:428 #, c-format msgid "cannot update relocation: %s" msgstr "не вдалося оновити пересування: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:515 #, c-format msgid "cannot get symbol version: %s" msgstr "не вдалося отримати версію символу: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:527 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "неочікуваний тип розділу у [%Zu] з посиланням sh_link на symtab" -#: src/unstrip.c:764 +#: src/unstrip.c:775 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "некоректне зміщення рядка у символі [%Zu]" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:917 src/unstrip.c:1258 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "не вдалося прочитати назву розділу [%Zu]: %s" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:958 src/unstrip.c:977 src/unstrip.c:1010 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "не вдалося прочитати розділ «.gnu.prelink_undo»: %s" -#: src/unstrip.c:987 +#: src/unstrip.c:998 #, c-format msgid "invalid contents in '%s' section" msgstr "некоректний вміст розділу «%s»" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1053 src/unstrip.c:1378 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "не вдалося знайти відповідний розділ для [%Zu] «%s»" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1178 src/unstrip.c:1193 src/unstrip.c:1459 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалося додати назву розділу до таблиці рядків: %s" -#: src/unstrip.c:1190 +#: src/unstrip.c:1202 #, c-format msgid "cannot update section header string table data: %s" msgstr "не вдалося оновити дані заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1229 src/unstrip.c:1233 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "не вдалося визначити індекс розділу заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1237 src/unstrip.c:1241 src/unstrip.c:1474 #, c-format msgid "cannot get section count: %s" msgstr "не вдалося отримати кількість розділів: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1244 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "у очищеному файлі більше розділів ніж у файлі з даними для зневаджування — " "помилковий порядок параметрів?" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1303 src/unstrip.c:1393 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалося прочитати таблицю рядків заголовка розділу: %s" -#: src/unstrip.c:1441 +#: src/unstrip.c:1453 #, c-format msgid "cannot add new section: %s" msgstr "не вдалося додати новий розділ: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1555 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "символ [%Zu] має некоректний індекс розділу" -#: src/unstrip.c:1781 +#: src/unstrip.c:1793 #, c-format msgid "cannot read section data: %s" msgstr "не вдалося прочитати дані розділу: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1814 #, c-format msgid "cannot get ELF header: %s" msgstr "не вдалося отримати заголовок ELF: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1846 #, c-format msgid "cannot update program header: %s" msgstr "не вдалося оновити заголовок програми: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1851 src/unstrip.c:1934 #, c-format msgid "cannot write output file: %s" msgstr "не вдалося записати файл виведених даних: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1903 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Дані DWARF не скориговано відповідно до відхилення перед компонуванням; " "спробуйте виправити це командою prelink -u" -#: src/unstrip.c:1886 +#: src/unstrip.c:1906 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6692,57 +6741,76 @@ msgstr "" "Дані DWARF у «%s» не скориговано відповідно до відхилення перед " "компонуванням; спробуйте виправити це командою prelink -u" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1925 src/unstrip.c:1976 src/unstrip.c:1988 src/unstrip.c:2074 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "не вдалося створити дескриптор ELF: %s" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" -msgstr "«%s» і «%s» не відповідають одне одному" +#: src/unstrip.c:1967 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1969 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1992 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1995 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1998 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:2001 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:2031 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "не вдалося знайти очищений файл для модуля «%s»: %s" -#: src/unstrip.c:1998 +#: src/unstrip.c:2035 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "не вдалося відкрити очищений файл «%s» для модуля «%s»: %s" -#: src/unstrip.c:2013 +#: src/unstrip.c:2050 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "не вдалося знайти файл діагностичних даних для модуля «%s»: %s" -#: src/unstrip.c:2017 +#: src/unstrip.c:2054 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "не вдалося відкрити файл діагностичних даних «%s» для модуля «%s»: %s" -#: src/unstrip.c:2030 +#: src/unstrip.c:2067 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "у модулі «%s» файл «%s» не очищено strip" -#: src/unstrip.c:2061 +#: src/unstrip.c:2098 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалося кешувати адреси розділів для модуля «%s»: %s" -#: src/unstrip.c:2194 +#: src/unstrip.c:2231 #, c-format msgid "no matching modules found" msgstr "відповідних модулів не виявлено" -#: src/unstrip.c:2203 +#: src/unstrip.c:2240 #, c-format msgid "matched more than one module" msgstr "встановлено відповідність декількох модулів" -#: src/unstrip.c:2250 +#: src/unstrip.c:2287 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6750,7 +6818,7 @@ msgstr "" "ОЧИЩЕНИЙ-ФАЙЛ ФАЙЛ-DEBUG\n" "[МОДУЛЬ...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2288 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" @@ -6806,6 +6874,17 @@ msgstr "" "окремого файла діагностичних даних або «-», якщо файла діагностичних даних " "не вдалося знайти, і «.», якщо ФАЙЛ сам містить діагностичні дані." +#, fuzzy +#~ msgid "cannot attach to process" +#~ msgstr "не вдалося створити дерево пошуку" + +#, fuzzy +#~ msgid "cannot attach to core" +#~ msgstr "не вдалося створити дерево пошуку" + +#~ msgid "'%s' and '%s' do not seem to match" +#~ msgstr "«%s» і «%s» не відповідають одне одному" + #~ msgid "unknown tag %hx" #~ msgstr "невідомий теґ %hx" diff --git a/src/ChangeLog b/src/ChangeLog index 4197ccd9..0ae863ed 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,262 @@ +2014-12-18 Ulrich Drepper <[email protected]> + + * Makefile.am: Suppress output of textrel_check command. + +2014-12-17 Mark Wielaard <[email protected]> + + * readelf.c (print_cfa_program): Add bounds check before each op that + takes at least one argument. + +2014-12-16 Mark Wielaard <[email protected]> + + * readelf.c (print_decoded_line_section): Print dwarf_errmsg if + dwarf_onesrcline or dwarf_linesrc fails. + +2014-12-16 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_line_section): Correct overflow check for + unit_length. + (print_debug_aranges_section): Correct overflow check for length. + +2014-12-15 Mark Wielaard <[email protected]> + + * readelf.c (notice_listptr): Return false if offset doesn't fit + in 61-bits. + (attr_callback): Warn if loclist or rangelist offset doesn't fit. + +2014-12-15 Mark Wielaard <[email protected]> + + * readelf.c (print_ops): Don't assert when addr_size or ref_size + is not 4 or 8, just report invalid data. + +2014-12-15 Mark Wielaard <[email protected]> + + * readelf.c (print_gdb_index_section): Add more bounds checks. + +2014-12-15 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_line_section): Check there is enough room + for DW_LNE_set_address argument. Make sure there is enough room + for the the initial unit_length. + +2014-12-14 Mark Wielaard <[email protected]> + + * elflint.c (check_attributes): Call get_uleb128 with end pointer. + * readelf.c (print_attributes): Likewise. + (print_ops): Likewise and also for get_sleb128. + (print_cfa_program): Likewise and add more readp bounds checks. + (read_encoded): Likewise. + (print_debug_frame_section): Likewise. + (print_debug_line_section): Likewise. + (print_debug_macinfo_section): Likewise. + (print_debug_macro_section): Likewise. + (print_debug_exception_table): Likewise. + +2014-12-16 Mark Wielaard <[email protected]> + + * elfcmp.c (compare_Elf32_Word): Make sure (unsigned) Elf32_Word + difference doesn't wrap around before returning as int. + +2014-12-11 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_exception_table): Check TType base offset + and Action table are sane. + +2014-12-11 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_frame_section): Check number of augmentation + chars to print. + +2014-12-09 Mark Wielaard <[email protected]> + + * readelf.c (handle_file_note): Check count fits data section and + doesn't overflow fptr. + +2014-12-08 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_exception_table): Report invalid data if + action table doesn't immediately follow call site table. + +2014-12-10 Josh Stone <[email protected]> + + * addr2line.c (get_diename): New, get linkage_name or name. + * addr2line.c (print_dwarf_function): Use get_diename. + * addr2line.c (handle_address): Likewise. + * addr2line.c (print_diesym): Removed. + +2014-12-10 Josh Stone <[email protected]> + + * addr2line.c (handle_address): Find the proper inline parents. + +2014-12-07 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_line_section): max_ops_per_instr cannot + be zero. + +2014-12-07 Mark Wielaard <[email protected]> + + * readelf.c (print_ops): Handle zero ref_size for DW_OP_call_ref + and DW_OP_GNU_implicit_pointer. + +2014-12-04 Mark Wielaard <[email protected]> + + * objdump.c (show_relocs_x): Make sure destshdr exists. + (show_relocs_rel): Don't rely on shdr->sh_entsize, use gelf_fsize. + (show_relocs_rela): Likewise. + (show_relocs): Make sure destshdr, symshdr and symdata exists. + +2014-11-30 Mark Wielaard <[email protected]> + + * readelf.c (handle_sysv_hash64): Fix overflow check. + +2014-11-28 Mark Wielaard <[email protected]> + + * readelf.c (handle_relocs_rel): Don't reuse destshdr to store + section header of a relocation against a STT_SECTION symbol. Use + a new local variable secshdr. + (handle_relocs_rela): Likewise. + +2014-11-26 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_aranges_section): Cast Dwarf_Word length + to ptrdiff_t for comparison. + +2014-11-24 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_line_section): Check line_range is not zero + before usage. + +2014-11-23 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_aranges_section): Check length to catch + nexthdr overflow. + +2014-11-21 Mark Wielaard <[email protected]> + + * readelf.c (print_attributes): Guard against empty section. + Document attribute format. Break when vendor name isn't terminated. + Add overflow check for subsection_len. Handle both gnu and non-gnu + attribute tags. + +2014-11-22 Mark Wielaard <[email protected]> + + * elflint.c (check_sections): Call ebl_bss_plt_p without ehdr. + * findtextrel.c (process_file): Use elf_getphdrnum. + * readelf.c (process_elf_file): Remove redundant ehdr->e_phoff check. + (print_phdr): Check phnum. + * size.c (show_segments): Use elf_getphdrnum. + * strip.c (handle_elf): Likewise. + * unstrip.c (copy_elf): Likewise. + (copy_elided_sections): Likewise. + (handle_file): Likewise. + +2014-11-18 Mark Wielaard <[email protected]> + + * readelf.c (print_cfa_program): Fix sanity check of DW_FORM_block + length. + +2014-11-17 Mark Wielaard <[email protected]> + + * readelf.c (handle_verneed): Check vna_next and vn_next exist. + (handle_verdef): Check vda_next and vd_next exist. + (handle_versym): Check vd_next, vna_next and vn_next exist. + Check vername and filename are not NULL before use. + +2014-11-17 Mark Wielaard <[email protected]> + + * elfcmp.c (main): Check section names are NULL before use. + * objdump.c (section_match): Likewise. + * size.c (show_sysv): Likewise. + +2014-11-17 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_frame_section): Warn if ptr_size is not 4 + or 8 instead of just calling print_cfa_program. + +2014-11-16 Mark Wielaard <[email protected]> + + * readelf (process_elf_file): Set phnum to zero if there aren't + actually any pheaders. + (print_phdr): Check there actually is a phdr. + +2014-11-16 Mark Wielaard <[email protected]> + + * readelf.c (print_cfa_program): Check block len before calling + print_ops. + +2014-11-14 Mark Wielaard <[email protected]> + + * readelf.c (print_debug_frame_section): Sanity Check CIE + unit_length and augmentationlen. + +2014-11-14 Mark Wielaard <[email protected]> + + * readelf.c (handle_versym): Check def == NULL before use. + +2014-11-08 Mark Wielaard <[email protected]> + + * readelf.c (handle_versym): Initialize vername and filename array + elements. + +2014-11-07 Mark Wielaard <[email protected]> + + * readelf.c (handle_sysv_hash): Sanity check section contents. + (handle_sysv_hash64): Likewise. + (handle_gnu_hash): Likewise. + +2014-09-14 Petr Machata <[email protected]> + + * readelf.c (handle_relocs_rela): Typo fix, test DESTSHDR properly. + +2014-09-12 Petr Machata <[email protected]> + + * readelf.c (encoded_ptr_size): In the switch statement, change + magic constants 3 and 4 to DW_EH_PE_* counterparts. Still accept + 0. Print diagnostic for anything else. + +2014-08-25 Josh Stone <[email protected]> + + * Makefile.am: Prevent premature @AR@ replacement in a sed expression. + +2014-07-04 Menanteau Guy <[email protected]> + Mark Wielaard <[email protected]> + + * elflint (check_symtab): Add ".TOC." to the list of possibly + dangling symbols because of sourceware PR13621. + +2014-06-14 Mark Wielaard <[email protected]> + + * elflint (check_symtab): Use ebl_func_addr_mask on st_value. + +2014-05-27 Mark Wielaard <[email protected]> + + * readelf.c (print_debug): Skip section if name is NULL. + +2014-05-26 Mark Wielaard <[email protected]> + + * readelf.c (handle_relocs_rela): Print header like handle_relocs_rel + does, when sh_info == 0. + +2014-05-26 Mark Wielaard <[email protected]> + + * unstrip.c (find_alloc_sections_prelink): Allow non-split .bss + section when sh_size of the original and undo .bss section are equal. + +2014-05-26 Mark Wielaard <[email protected]> + + * unstrip.c (options): Add --force, -F. + (struct arg_info): Add bool force. + (parse_opt): Handle 'F', set force. + (handle_explicit_files): Add force argument, add warn function, + separate check ehdr field checks, use warn. + (handle_dwfl_module): Add force argument, pass on to + handle_explicit_files. + (handle_output_dir_module): Add force argument, pass on to + handle_dwfl_module. + (handle_implicit_modules): Pass info->force to handle_dwfl_module and + handle_output_dir_module. + (main): Pass info.force to handle_explicit_files. + 2014-05-19 Mark Wielaard <[email protected]> * elflint.c (check_reloc_shdr): Check ebl_check_reloc_target_type. diff --git a/src/Makefile.am b/src/Makefile.am index e744dc54..9276a3ea 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -128,7 +128,7 @@ libld_elf_i386.so: libld_elf_i386_pic.a libld_elf_i386.map $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ $(libelf) $(libeu) \ -Wl,--version-script,$(srcdir)/libld_elf_i386.map - $(textrel_check) + @$(textrel_check) endif # Special rule to make it possible to define libld_elf_a_SOURCES as we do. @@ -161,7 +161,7 @@ MAINTAINERCLEANFILES = ldlex.c ldscript.c ldscript.h make-debug-archive: $(srcdir)/make-debug-archive.in UNSTRIP=$(bindir)/`echo unstrip | sed '$(transform)'`; \ AR=$(bindir)/`echo ar | sed '$(transform)'`; \ - sed -e "s,@UNSTRIP@,$$UNSTRIP,g" -e "s,@AR@,$$AR,g" \ + sed -e "s,[@]UNSTRIP[@],$$UNSTRIP,g" -e "s,[@]AR[@],$$AR,g" \ -e "s%[@]PACKAGE_NAME[@]%$(PACKAGE_NAME)%g" \ -e "s%[@]PACKAGE_VERSION[@]%$(PACKAGE_VERSION)%g" \ $(srcdir)/make-debug-archive.in > [email protected] diff --git a/src/addr2line.c b/src/addr2line.c index 50fc2b38..de802941 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -258,6 +258,23 @@ parse_opt (int key, char *arg, struct argp_state *state) } +static const char * +get_diename (Dwarf_Die *die) +{ + Dwarf_Attribute attr; + const char *name; + + name = dwarf_formstring (dwarf_attr_integrate (die, DW_AT_MIPS_linkage_name, + &attr) + ?: dwarf_attr_integrate (die, DW_AT_linkage_name, + &attr)); + + if (name == NULL) + name = dwarf_diename (die) ?: "??"; + + return name; +} + static bool print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr) { @@ -274,7 +291,7 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr) { case DW_TAG_subprogram: { - const char *name = dwarf_diename (&scopes[i]); + const char *name = get_diename (&scopes[i]); if (name == NULL) return false; puts (name); @@ -283,7 +300,7 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr) case DW_TAG_inlined_subroutine: { - const char *name = dwarf_diename (&scopes[i]); + const char *name = get_diename (&scopes[i]); if (name == NULL) return false; printf ("%s inlined", name); @@ -395,23 +412,6 @@ print_addrsym (Dwfl_Module *mod, GElf_Addr addr) } } -static void -print_diesym (Dwarf_Die *die) -{ - Dwarf_Attribute attr; - const char *name; - - name = dwarf_formstring (dwarf_attr_integrate (die, DW_AT_MIPS_linkage_name, - &attr) - ?: dwarf_attr_integrate (die, DW_AT_linkage_name, - &attr)); - - if (name == NULL) - name = dwarf_diename (die) ?: "??"; - - puts (name); -} - static int see_one_module (Dwfl_Module *mod, void **userdata __attribute__ ((unused)), @@ -672,7 +672,23 @@ handle_address (const char *string, Dwfl *dwfl) continue; if (show_functions) - print_diesym (&scopes[i + 1]); + { + /* Search for the parent inline or function. It + might not be directly above this inline -- e.g. + there could be a lexical_block in between. */ + for (int j = i + 1; j < nscopes; j++) + { + Dwarf_Die *parent = &scopes[j]; + int tag = dwarf_tag (parent); + if (tag == DW_TAG_inlined_subroutine + || tag == DW_TAG_entry_point + || tag == DW_TAG_subprogram) + { + puts (get_diename (parent)); + break; + } + } + } src = NULL; lineno = 0; diff --git a/src/elfcmp.c b/src/elfcmp.c index 2d85f0b2..d1008b3c 100644 --- a/src/elfcmp.c +++ b/src/elfcmp.c @@ -1,5 +1,5 @@ /* Compare relevant content of two ELF files. - Copyright (C) 2005-2012 Red Hat, Inc. + Copyright (C) 2005-2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2005. @@ -355,7 +355,8 @@ main (int argc, char *argv[]) sym1->st_name); const char *name2 = elf_strptr (elf2, shdr2->sh_link, sym2->st_name); - if (unlikely (strcmp (name1, name2) != 0 + if (unlikely (name1 == NULL || name2 == NULL + || strcmp (name1, name2) != 0 || sym1->st_value != sym2->st_value || (sym1->st_size != sym2->st_size && sym1->st_shndx != SHN_UNDEF) @@ -810,8 +811,7 @@ compare_Elf32_Word (const void *p1, const void *p2) { const Elf32_Word *w1 = p1; const Elf32_Word *w2 = p2; - assert (sizeof (int) >= sizeof (*w1)); - return (int) *w1 - (int) *w2; + return *w1 < *w2 ? -1 : *w1 > *w2 ? 1 : 0; } static int diff --git a/src/elflint.c b/src/elflint.c index bf6d044b..7e732531 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -768,12 +768,18 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"), { GElf_Addr sh_addr = (ehdr->e_type == ET_REL ? 0 : destshdr->sh_addr); + GElf_Addr st_value; + if (GELF_ST_TYPE (sym->st_info) == STT_FUNC + || (GELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)) + st_value = sym->st_value & ebl_func_addr_mask (ebl); + else + st_value = sym->st_value; if (GELF_ST_TYPE (sym->st_info) != STT_TLS) { if (! ebl_check_special_symbol (ebl, ehdr, sym, name, destshdr)) { - if (sym->st_value - sh_addr > destshdr->sh_size) + if (st_value - sh_addr > destshdr->sh_size) { /* GNU ld has severe bugs. When it decides to remove empty sections it leaves symbols referencing them @@ -793,12 +799,13 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"), && strcmp (name, "__fini_array_end") != 0 && strcmp (name, "__bss_start") != 0 && strcmp (name, "__bss_start__") != 0 - && strcmp (name, "__TMC_END__") != 0)) + && strcmp (name, "__TMC_END__") != 0 + && strcmp (name, ".TOC.") != 0)) ERROR (gettext ("\ section [%2d] '%s': symbol %zu: st_value out of bounds\n"), idx, section_name (ebl, idx), cnt); } - else if ((sym->st_value - sh_addr + else if ((st_value - sh_addr + sym->st_size) > destshdr->sh_size) ERROR (gettext ("\ section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"), @@ -818,12 +825,12 @@ section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have SHF_ { /* For object files the symbol value must fall into the section. */ - if (sym->st_value > destshdr->sh_size) + if (st_value > destshdr->sh_size) ERROR (gettext ("\ section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n"), idx, section_name (ebl, idx), cnt, (int) xndx, section_name (ebl, xndx)); - else if (sym->st_value + sym->st_size + else if (st_value + sym->st_size > destshdr->sh_size) ERROR (gettext ("\ section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"), @@ -852,20 +859,20 @@ section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"), } else { - if (sym->st_value + if (st_value < destshdr->sh_offset - phdr->p_offset) ERROR (gettext ("\ section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%s'\n"), idx, section_name (ebl, idx), cnt, (int) xndx, section_name (ebl, xndx)); - else if (sym->st_value + else if (st_value > (destshdr->sh_offset - phdr->p_offset + destshdr->sh_size)) ERROR (gettext ("\ section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n"), idx, section_name (ebl, idx), cnt, (int) xndx, section_name (ebl, xndx)); - else if (sym->st_value + sym->st_size + else if (st_value + sym->st_size > (destshdr->sh_offset - phdr->p_offset + destshdr->sh_size)) ERROR (gettext ("\ @@ -3259,7 +3266,7 @@ section [%2d] '%s': offset %zu: unterminated vendor name string\n"), unsigned const char *chunk = q; unsigned int subsection_tag; - get_uleb128 (subsection_tag, q); + get_uleb128 (subsection_tag, q, p); if (q >= p) { @@ -3314,13 +3321,13 @@ section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"), while (chunk < q) { unsigned int tag; - get_uleb128 (tag, chunk); + get_uleb128 (tag, chunk, q); uint64_t value = 0; const unsigned char *r = chunk; if (tag == 32 || (tag & 1) == 0) { - get_uleb128 (value, r); + get_uleb128 (value, r, q); if (r > q) { ERROR (gettext ("\ @@ -3525,7 +3532,7 @@ cannot get section header for section [%2zu] '%s': %s\n"), GElf_Word good_type = special_sections[s].type; if (IS_KNOWN_SPECIAL (s, ".plt", false) - && ebl_bss_plt_p (ebl, ehdr)) + && ebl_bss_plt_p (ebl)) good_type = SHT_NOBITS; /* In a debuginfo file, any normal section can be SHT_NOBITS. diff --git a/src/findtextrel.c b/src/findtextrel.c index 9fd81633..264a06bd 100644 --- a/src/findtextrel.c +++ b/src/findtextrel.c @@ -1,5 +1,5 @@ /* Locate source files or functions which caused text relocations. - Copyright (C) 2005-2010, 2012 Red Hat, Inc. + Copyright (C) 2005-2010, 2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2005. @@ -324,14 +324,20 @@ process_file (const char *fname, bool more_than_one) if (segments == NULL) error (1, errno, gettext ("while reading ELF file")); - for (int i = 0; i < ehdr->e_phnum; ++i) + size_t phnum; + if (elf_getphdrnum (elf, &phnum) != 0) + error (1, 0, gettext ("cannot get program header count: %s"), + elf_errmsg (-1)); + + + for (size_t i = 0; i < phnum; ++i) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); if (phdr == NULL) { error (0, 0, - gettext ("cannot get program header index at offset %d: %s"), + gettext ("cannot get program header index at offset %zd: %s"), i, elf_errmsg (-1)); result = 1; goto next; @@ -349,7 +355,7 @@ process_file (const char *fname, bool more_than_one) if (segments == NULL) { error (0, 0, gettext ("\ -cannot get program header index at offset %d: %s"), +cannot get program header index at offset %zd: %s"), i, elf_errmsg (-1)); result = 1; goto next; diff --git a/src/objdump.c b/src/objdump.c index ebad25d5..87290ccb 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -1,5 +1,5 @@ /* Print information from ELF file in human-readable form. - Copyright (C) 2005, 2006, 2007, 2009, 2011, 2012 Red Hat, Inc. + Copyright (C) 2005, 2006, 2007, 2009, 2011, 2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <[email protected]>, 2005. @@ -389,7 +389,7 @@ show_relocs_x (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *symdata, ? xndx : sym->st_shndx), &destshdr_mem); - if (shdr == NULL) + if (shdr == NULL || destshdr == NULL) printf ("<%s %ld>", gettext ("INVALID SECTION"), (long int) (sym->st_shndx == SHN_XINDEX @@ -418,7 +418,8 @@ show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx) { - int nentries = shdr->sh_size / shdr->sh_entsize; + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_REL, 1, EV_CURRENT); + int nentries = shdr->sh_size / sh_entsize; for (int cnt = 0; cnt < nentries; ++cnt) { @@ -438,7 +439,8 @@ show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx) { - int nentries = shdr->sh_size / shdr->sh_entsize; + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_RELA, 1, EV_CURRENT); + int nentries = shdr->sh_size / sh_entsize; for (int cnt = 0; cnt < nentries; ++cnt) { @@ -460,13 +462,13 @@ section_match (Elf *elf, uint32_t scnndx, GElf_Shdr *shdr, size_t shstrndx) return true; struct section_list *runp = section_list; + const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); do { if (runp->is_name) { - if (strcmp (runp->name, - elf_strptr (elf, shstrndx, shdr->sh_name)) == 0) + if (name && strcmp (runp->name, name) == 0) return true; } else @@ -506,6 +508,8 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx) GElf_Shdr *destshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_info), &destshdr_mem); + if (unlikely (destshdr == NULL)) + continue; printf (gettext ("\nRELOCATION RECORDS FOR [%s]:\n" "%-*s TYPE VALUE\n"), @@ -522,6 +526,8 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx) GElf_Shdr symshdr_mem; GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem); Elf_Data *symdata = elf_getdata (symscn, NULL); + if (unlikely (symshdr == NULL || symdata == NULL)) + continue; /* Search for the optional extended section index table. */ Elf_Data *xndxdata = NULL; diff --git a/src/readelf.c b/src/readelf.c index 45b19105..df0a874d 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1157,7 +1157,7 @@ There are %d section headers, starting at offset %#" PRIx64 ":\n\ static void print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) { - if (ehdr->e_phnum == 0) + if (phnum == 0) /* No program header, this is OK in relocatable objects. */ return; @@ -1894,12 +1894,15 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name)); else { - destshdr = gelf_getshdr (elf_getscn (ebl->elf, - sym->st_shndx == SHN_XINDEX - ? xndx : sym->st_shndx), - &destshdr_mem); - - if (unlikely (destshdr == NULL)) + /* This is a relocation against a STT_SECTION symbol. */ + GElf_Shdr secshdr_mem; + GElf_Shdr *secshdr; + secshdr = gelf_getshdr (elf_getscn (ebl->elf, + sym->st_shndx == SHN_XINDEX + ? xndx : sym->st_shndx), + &secshdr_mem); + + if (unlikely (secshdr == NULL)) printf (" %#0*" PRIx64 " %-20s <%s %ld>\n", class == ELFCLASS32 ? 10 : 18, rel->r_offset, ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) @@ -1921,7 +1924,7 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) buf, sizeof (buf)) + 2 : gettext ("<INVALID RELOC>"), class == ELFCLASS32 ? 10 : 18, sym->st_value, - elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); + elf_strptr (ebl->elf, shstrndx, secshdr->sh_name)); } } } @@ -1971,7 +1974,8 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); - printf (ngettext ("\ + if (shdr->sh_info != 0) + printf (ngettext ("\ \nRelocation section [%2zu] '%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 entries:\n", @@ -1982,6 +1986,19 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) elf_strptr (ebl->elf, shstrndx, destshdr->sh_name), shdr->sh_offset, nentries); + else + /* The .rela.dyn section does not refer to a specific section but + instead of section index zero. Do not try to print a section + name. */ + printf (ngettext ("\ +\nRelocation section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n", + "\ +\nRelocation section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n", + nentries), + (unsigned int) elf_ndxscn (scn), + elf_strptr (ebl->elf, shstrndx, shdr->sh_name), + shdr->sh_offset, + nentries); fputs_unlocked (class == ELFCLASS32 ? gettext ("\ Offset Type Value Addend Name\n") @@ -2071,12 +2088,15 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name)); else { - destshdr = gelf_getshdr (elf_getscn (ebl->elf, - sym->st_shndx == SHN_XINDEX - ? xndx : sym->st_shndx), - &destshdr_mem); - - if (unlikely (shdr == NULL)) + /* This is a relocation against a STT_SECTION symbol. */ + GElf_Shdr secshdr_mem; + GElf_Shdr *secshdr; + secshdr = gelf_getshdr (elf_getscn (ebl->elf, + sym->st_shndx == SHN_XINDEX + ? xndx : sym->st_shndx), + &secshdr_mem); + + if (unlikely (secshdr == NULL)) printf (" %#0*" PRIx64 " %-15s <%s %ld>\n", class == ELFCLASS32 ? 10 : 18, rel->r_offset, ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) @@ -2100,7 +2120,7 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) : gettext ("<INVALID RELOC>"), class == ELFCLASS32 ? 10 : 18, sym->st_value, rel->r_addend, - elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); + elf_strptr (ebl->elf, shstrndx, secshdr->sh_name)); } } } @@ -2486,10 +2506,16 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) get_ver_flags (aux->vna_flags), (unsigned short int) aux->vna_other); + if (aux->vna_next == 0) + break; + auxoffset += aux->vna_next; } /* Find the next offset. */ + if (need->vn_next == 0) + break; + offset += need->vn_next; } } @@ -2564,10 +2590,15 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) auxoffset, cnt2, elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name)); + if (aux->vda_next == 0) + break; + auxoffset += aux->vda_next; } /* Find the next offset. */ + if (def->vd_next == 0) + break; offset += def->vd_next; } } @@ -2646,6 +2677,8 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) nvername = MAX (nvername, (size_t) (def->vd_ndx & 0x7fff)); + if (def->vd_next == 0) + break; offset += def->vd_next; } } @@ -2690,9 +2723,13 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) nvername = MAX (nvername, (size_t) (aux->vna_other & 0x7fff)); + if (aux->vna_next == 0) + break; auxoffset += aux->vna_next; } + if (need->vn_next == 0) + break; offset += need->vn_next; } } @@ -2702,7 +2739,9 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Allocate the array. */ vername = (const char **) alloca (nvername * sizeof (const char *)); + memset(vername, 0, nvername * sizeof (const char *)); filename = (const char **) alloca (nvername * sizeof (const char *)); + memset(filename, 0, nvername * sizeof (const char *)); /* Run through the data structures again and collect the strings. */ if (defscn != NULL) @@ -2728,17 +2767,22 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the data at the next offset. */ GElf_Verdef defmem; GElf_Verdef *def = gelf_getverdef (defdata, offset, &defmem); + if (unlikely (def == NULL)) + break; + GElf_Verdaux auxmem; GElf_Verdaux *aux = gelf_getverdaux (defdata, offset + def->vd_aux, &auxmem); - if (unlikely (def == NULL || aux == NULL)) + if (unlikely (aux == NULL)) break; vername[def->vd_ndx & 0x7fff] = elf_strptr (ebl->elf, defshdr->sh_link, aux->vda_name); filename[def->vd_ndx & 0x7fff] = NULL; + if (def->vd_next == 0) + break; offset += def->vd_next; } } @@ -2776,9 +2820,13 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) filename[aux->vna_other & 0x7fff] = elf_strptr (ebl->elf, needshdr->sh_link, need->vn_file); + if (aux->vna_next == 0) + break; auxoffset += aux->vna_next; } + if (need->vn_next == 0) + break; offset += need->vn_next; } } @@ -2839,10 +2887,11 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) default: n = printf ("%4d%c%s", *sym & 0x7fff, *sym & 0x8000 ? 'h' : ' ', - (unsigned int) (*sym & 0x7fff) < nvername + (vername != NULL + && (unsigned int) (*sym & 0x7fff) < nvername) ? vername[*sym & 0x7fff] : "???"); if ((unsigned int) (*sym & 0x7fff) < nvername - && filename[*sym & 0x7fff] != NULL) + && filename != NULL && filename[*sym & 0x7fff] != NULL) n += printf ("(%s)", filename[*sym & 0x7fff]); printf ("%*s", MAX (0, 33 - (int) n), " "); break; @@ -2940,8 +2989,21 @@ handle_sysv_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) return; } + if (unlikely (data->d_size < 2 * sizeof (Elf32_Word))) + { + invalid_data: + error (0, 0, gettext ("invalid data in sysv.hash section %d"), + (int) elf_ndxscn (scn)); + return; + } + Elf32_Word nbucket = ((Elf32_Word *) data->d_buf)[0]; Elf32_Word nchain = ((Elf32_Word *) data->d_buf)[1]; + + uint64_t used_buf = (2ULL + nchain + nbucket) * sizeof (Elf32_Word); + if (used_buf > data->d_size) + goto invalid_data; + Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[2]; Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + nbucket]; @@ -2982,8 +3044,23 @@ handle_sysv_hash64 (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) return; } + if (unlikely (data->d_size < 2 * sizeof (Elf64_Xword))) + { + invalid_data: + error (0, 0, gettext ("invalid data in sysv.hash64 section %d"), + (int) elf_ndxscn (scn)); + return; + } + Elf64_Xword nbucket = ((Elf64_Xword *) data->d_buf)[0]; Elf64_Xword nchain = ((Elf64_Xword *) data->d_buf)[1]; + + uint64_t maxwords = data->d_size / sizeof (Elf64_Xword); + if (maxwords < 2 + || maxwords - 2 < nbucket + || maxwords - 2 - nbucket < nchain) + goto invalid_data; + Elf64_Xword *bucket = &((Elf64_Xword *) data->d_buf)[2]; Elf64_Xword *chain = &((Elf64_Xword *) data->d_buf)[2 + nbucket]; @@ -3023,18 +3100,37 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) return; } + if (unlikely (data->d_size < 4 * sizeof (Elf32_Word))) + { + invalid_data: + error (0, 0, gettext ("invalid data in gnu.hash section %d"), + (int) elf_ndxscn (scn)); + return; + } + Elf32_Word nbucket = ((Elf32_Word *) data->d_buf)[0]; Elf32_Word symbias = ((Elf32_Word *) data->d_buf)[1]; /* Next comes the size of the bitmap. It's measured in words for the architecture. It's 32 bits for 32 bit archs, and 64 bits for - 64 bit archs. */ + 64 bit archs. There is always a bloom filter present, so zero is + an invalid value. */ Elf32_Word bitmask_words = ((Elf32_Word *) data->d_buf)[2]; if (gelf_getclass (ebl->elf) == ELFCLASS64) bitmask_words *= 2; + if (bitmask_words == 0) + goto invalid_data; + Elf32_Word shift = ((Elf32_Word *) data->d_buf)[3]; + /* Is there still room for the sym chain? + Use uint64_t calculation to prevent 32bit overlow. */ + uint64_t used_buf = (4ULL + bitmask_words + nbucket) * sizeof (Elf32_Word); + uint32_t max_nsyms = (data->d_size - used_buf) / sizeof (Elf32_Word); + if (used_buf > data->d_size) + goto invalid_data; + uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); Elf32_Word *bitmask = &((Elf32_Word *) data->d_buf)[4]; @@ -3054,6 +3150,8 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) ++nsyms; if (maxlength < ++lengths[cnt]) ++maxlength; + if (inner > max_nsyms) + goto invalid_data; } while ((chain[inner++] & 1) == 0); } @@ -3219,11 +3317,12 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) shdr->sh_size, shdr->sh_offset); Elf_Data *data = elf_rawdata (scn, NULL); - if (data == NULL) + if (unlikely (data == NULL || data->d_size == 0)) return; const unsigned char *p = data->d_buf; + /* There is only one 'version', A. */ if (unlikely (*p++ != 'A')) return; @@ -3234,8 +3333,10 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) return (const unsigned char *) data->d_buf + data->d_size - p; } + /* Loop over the sections. */ while (left () >= 4) { + /* Section length. */ uint32_t len; memcpy (&len, p, sizeof len); @@ -3245,25 +3346,29 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) if (unlikely (len > left ())) break; + /* Section vendor name. */ const unsigned char *name = p + sizeof len; p += len; unsigned const char *q = memchr (name, '\0', len); if (unlikely (q == NULL)) - continue; + break; ++q; printf (gettext (" %-13s %4" PRIu32 "\n"), name, len); + bool gnu_vendor = (q - name == sizeof "gnu" + && !memcmp (name, "gnu", sizeof "gnu")); + + /* Loop over subsections. */ if (shdr->sh_type != SHT_GNU_ATTRIBUTES - || (q - name == sizeof "gnu" - && !memcmp (name, "gnu", sizeof "gnu"))) + || gnu_vendor) while (q < p) { const unsigned char *const sub = q; unsigned int subsection_tag; - get_uleb128 (subsection_tag, q); + get_uleb128 (subsection_tag, q, p); if (unlikely (q >= p)) break; @@ -3276,7 +3381,10 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) if (MY_ELFDATA != ehdr->e_ident[EI_DATA]) CONVERT (subsection_len); - if (unlikely (p - sub < (ptrdiff_t) subsection_len)) + /* Don't overflow, ptrdiff_t might be 32bits, but signed. */ + if (unlikely (subsection_len == 0 + || subsection_len >= (uint32_t) PTRDIFF_MAX + || p - sub < (ptrdiff_t) subsection_len)) break; const unsigned char *r = q + sizeof subsection_len; @@ -3285,6 +3393,7 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) switch (subsection_tag) { default: + /* Unknown subsection, print and skip. */ printf (gettext (" %-4u %12" PRIu32 "\n"), subsection_tag, subsection_len); break; @@ -3296,20 +3405,34 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) while (r < q) { unsigned int tag; - get_uleb128 (tag, r); + get_uleb128 (tag, r, q); if (unlikely (r >= q)) break; + /* GNU style tags have either a uleb128 value, + when lowest bit is not set, or a string + when the lowest bit is set. + "compatibility" (32) is special. It has + both a string and a uleb128 value. For + non-gnu we assume 6 till 31 only take ints. + XXX see arm backend, do we need a separate + hook? */ uint64_t value = 0; const char *string = NULL; - if (tag == 32 || (tag & 1) == 0) + if (tag == 32 || (tag & 1) == 0 + || (! gnu_vendor && (tag > 5 && tag < 32))) { - get_uleb128 (value, r); + get_uleb128 (value, r, q); if (r > q) break; } - if (tag == 32 || (tag & 1) != 0) + if (tag == 32 + || ((tag & 1) != 0 + && (gnu_vendor + || (! gnu_vendor && tag > 32))) + || (! gnu_vendor && tag > 3 && tag < 6)) { + string = (const char *) r; r = memchr (r, '\0', q - r); if (r == NULL) break; @@ -3336,7 +3459,10 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) } else { - assert (tag != 32); + /* For "gnu" vendor 32 "compatibility" has + already been handled above. */ + assert (tag != 32 + || strcmp ((const char *) name, "gnu")); if (string == NULL) printf (gettext (" %u: %" PRId64 "\n"), tag, value); @@ -3855,11 +3981,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, NEED (addrsize); if (addrsize == 4) addr = read_4ubyte_unaligned (dbg, data); + else if (addrsize == 8) + addr = read_8ubyte_unaligned (dbg, data); else - { - assert (addrsize == 8); - addr = read_8ubyte_unaligned (dbg, data); - } + goto invalid; data += addrsize; CONSUME (addrsize); @@ -3873,14 +3998,13 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, case DW_OP_call_ref: /* Offset operand. */ + if (ref_size != 4 && ref_size != 8) + goto invalid; /* Cannot be used in CFA. */ NEED (ref_size); if (ref_size == 4) addr = read_4ubyte_unaligned (dbg, data); else - { - assert (ref_size == 8); - addr = read_8ubyte_unaligned (dbg, data); - } + addr = read_8ubyte_unaligned (dbg, data); data += ref_size; CONSUME (ref_size); @@ -3988,7 +4112,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, const unsigned char *start = data; uint64_t uleb; NEED (1); - get_uleb128 (uleb, data); /* XXX check overrun */ + get_uleb128 (uleb, data, data + len); printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 "\n", indent, "", (uintmax_t) offset, op_name, uleb); CONSUME (data - start); @@ -3998,9 +4122,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, case DW_OP_bit_piece: start = data; uint64_t uleb2; - NEED (2); - get_uleb128 (uleb, data); /* XXX check overrun */ - get_uleb128 (uleb2, data); /* XXX check overrun */ + NEED (1); + get_uleb128 (uleb, data, data + len); + NEED (1); + get_uleb128 (uleb2, data, data + len); printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 ", %" PRIu64 "\n", indent, "", (uintmax_t) offset, op_name, uleb, uleb2); CONSUME (data - start); @@ -4013,7 +4138,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, start = data; int64_t sleb; NEED (1); - get_sleb128 (sleb, data); /* XXX check overrun */ + get_sleb128 (sleb, data, data + len); printf ("%*s[%4" PRIuMAX "] %s %" PRId64 "\n", indent, "", (uintmax_t) offset, op_name, sleb); CONSUME (data - start); @@ -4022,9 +4147,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, case DW_OP_bregx: start = data; - NEED (2); - get_uleb128 (uleb, data); /* XXX check overrun */ - get_sleb128 (sleb, data); /* XXX check overrun */ + NEED (1); + get_uleb128 (uleb, data, data + len); + NEED (1); + get_sleb128 (sleb, data, data + len); printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 " %" PRId64 "\n", indent, "", (uintmax_t) offset, op_name, uleb, sleb); CONSUME (data - start); @@ -4063,7 +4189,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, case DW_OP_implicit_value: start = data; NEED (1); - get_uleb128 (uleb, data); /* XXX check overrun */ + get_uleb128 (uleb, data, data + len); printf ("%*s[%4" PRIuMAX "] %s: ", indent, "", (uintmax_t) offset, op_name); NEED (uleb); @@ -4076,17 +4202,17 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, case DW_OP_GNU_implicit_pointer: /* DIE offset operand. */ start = data; - NEED (ref_size + 1); + NEED (ref_size); + if (ref_size != 4 && ref_size != 8) + goto invalid; /* Cannot be used in CFA. */ if (ref_size == 4) addr = read_4ubyte_unaligned (dbg, data); else - { - assert (ref_size == 8); - addr = read_8ubyte_unaligned (dbg, data); - } + addr = read_8ubyte_unaligned (dbg, data); data += ref_size; /* Byte offset operand. */ - get_sleb128 (sleb, data); /* XXX check overrun */ + NEED (1); + get_sleb128 (sleb, data, data + len); printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "] %+" PRId64 "\n", indent, "", (intmax_t) offset, @@ -4099,7 +4225,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, /* Size plus expression block. */ start = data; NEED (1); - get_uleb128 (uleb, data); /* XXX check overrun */ + get_uleb128 (uleb, data, data + len); printf ("%*s[%4" PRIuMAX "] %s:\n", indent, "", (uintmax_t) offset, op_name); NEED (uleb); @@ -4114,10 +4240,11 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, /* uleb128 CU relative DW_TAG_base_type DIE offset, 1-byte unsigned size plus block. */ start = data; - NEED (2); - get_uleb128 (uleb, data); /* XXX check overrun */ + NEED (1); + get_uleb128 (uleb, data, data + len); if (! print_unresolved_addresses && cu != NULL) uleb += cu->start; + NEED (1); uint8_t usize = *(uint8_t *) data++; NEED (usize); printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "] ", @@ -4132,9 +4259,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, /* uleb128 register number, uleb128 CU relative DW_TAG_base_type DIE offset. */ start = data; - NEED (2); - get_uleb128 (uleb, data); /* XXX check overrun */ - get_uleb128 (uleb2, data); /* XXX check overrun */ + NEED (1); + get_uleb128 (uleb, data, data + len); + NEED (1); + get_uleb128 (uleb2, data, data + len); if (! print_unresolved_addresses && cu != NULL) uleb2 += cu->start; printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 " [%6" PRIx64 "]\n", @@ -4147,9 +4275,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, /* 1-byte unsigned size of value, uleb128 CU relative DW_TAG_base_type DIE offset. */ start = data; - NEED (2); + NEED (1); usize = *(uint8_t *) data++; - get_uleb128 (uleb, data); /* XXX check overrun */ + NEED (1); + get_uleb128 (uleb, data, data + len); if (! print_unresolved_addresses && cu != NULL) uleb += cu->start; printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 " [%6" PRIxMAX "]\n", @@ -4165,7 +4294,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, for conversion to untyped. */ start = data; NEED (1); - get_uleb128 (uleb, data); /* XXX check overrun */ + get_uleb128 (uleb, data, data + len); if (uleb != 0 && ! print_unresolved_addresses && cu != NULL) uleb += cu->start; printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", @@ -4297,7 +4426,8 @@ reset_listptr (struct listptr_table *table) table->n = table->alloc = 0; } -static void +/* Returns false if offset doesn't fit. See struct listptr. */ +static bool notice_listptr (enum section_e section, struct listptr_table *table, uint_fast8_t address_size, uint_fast8_t offset_size, struct Dwarf_CU *cu, Dwarf_Off offset) @@ -4323,8 +4453,14 @@ notice_listptr (enum section_e section, struct listptr_table *table, .offset = offset, .cu = cu }; - assert (p->offset == offset); + + if (p->offset != offset) + { + table->n--; + return false; + } } + return true; } static void @@ -4575,7 +4711,7 @@ print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)), printf (gettext ("\n Length: %6" PRIu64 "\n"), (uint64_t) length); - if (nexthdr > readendp) + if (unlikely (length > (size_t) (readendp - readp))) goto invalid_data; if (length == 0) @@ -4835,54 +4971,70 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, puts (" nop"); break; case DW_CFA_set_loc: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); op1 += vma_base; printf (" set_loc %" PRIu64 "\n", op1 * code_align); break; case DW_CFA_advance_loc1: + if ((uint64_t) (endp - readp) < 1) + goto invalid; printf (" advance_loc1 %u to %#" PRIx64 "\n", *readp, pc += *readp * code_align); ++readp; break; case DW_CFA_advance_loc2: + if ((uint64_t) (endp - readp) < 2) + goto invalid; op1 = read_2ubyte_unaligned_inc (dbg, readp); printf (" advance_loc2 %" PRIu64 " to %#" PRIx64 "\n", op1, pc += op1 * code_align); break; case DW_CFA_advance_loc4: + if ((uint64_t) (endp - readp) < 4) + goto invalid; op1 = read_4ubyte_unaligned_inc (dbg, readp); printf (" advance_loc4 %" PRIu64 " to %#" PRIx64 "\n", op1, pc += op1 * code_align); break; case DW_CFA_offset_extended: - // XXX overflow check - get_uleb128 (op1, readp); - get_uleb128 (op2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op2, readp, endp); printf (" offset_extended r%" PRIu64 " (%s) at cfa%+" PRId64 "\n", op1, regname (op1), op2 * data_align); break; case DW_CFA_restore_extended: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); printf (" restore_extended r%" PRIu64 " (%s)\n", op1, regname (op1)); break; case DW_CFA_undefined: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); printf (" undefined r%" PRIu64 " (%s)\n", op1, regname (op1)); break; case DW_CFA_same_value: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); printf (" same_value r%" PRIu64 " (%s)\n", op1, regname (op1)); break; case DW_CFA_register: - // XXX overflow check - get_uleb128 (op1, readp); - get_uleb128 (op2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op2, readp, endp); printf (" register r%" PRIu64 " (%s) in r%" PRIu64 " (%s)\n", op1, regname (op1), op2, regname (op2)); break; @@ -4893,86 +5045,123 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, puts (" restore_state"); break; case DW_CFA_def_cfa: - // XXX overflow check - get_uleb128 (op1, readp); - get_uleb128 (op2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op2, readp, endp); printf (" def_cfa r%" PRIu64 " (%s) at offset %" PRIu64 "\n", op1, regname (op1), op2); break; case DW_CFA_def_cfa_register: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); printf (" def_cfa_register r%" PRIu64 " (%s)\n", op1, regname (op1)); break; case DW_CFA_def_cfa_offset: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); printf (" def_cfa_offset %" PRIu64 "\n", op1); break; case DW_CFA_def_cfa_expression: - // XXX overflow check - get_uleb128 (op1, readp); /* Length of DW_FORM_block. */ + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); /* Length of DW_FORM_block. */ printf (" def_cfa_expression %" PRIu64 "\n", op1); + if ((uint64_t) (endp - readp) < op1) + { + invalid: + fputs (gettext (" <INVALID DATA>\n"), stdout); + return; + } print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, NULL, op1, readp); readp += op1; break; case DW_CFA_expression: - // XXX overflow check - get_uleb128 (op1, readp); - get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op2, readp, endp); /* Length of DW_FORM_block. */ printf (" expression r%" PRIu64 " (%s) \n", op1, regname (op1)); + if ((uint64_t) (endp - readp) < op2) + goto invalid; print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, NULL, op2, readp); readp += op2; break; case DW_CFA_offset_extended_sf: - // XXX overflow check - get_uleb128 (op1, readp); - get_sleb128 (sop2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_sleb128 (sop2, readp, endp); printf (" offset_extended_sf r%" PRIu64 " (%s) at cfa%+" PRId64 "\n", op1, regname (op1), sop2 * data_align); break; case DW_CFA_def_cfa_sf: - // XXX overflow check - get_uleb128 (op1, readp); - get_sleb128 (sop2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_sleb128 (sop2, readp, endp); printf (" def_cfa_sf r%" PRIu64 " (%s) at offset %" PRId64 "\n", op1, regname (op1), sop2 * data_align); break; case DW_CFA_def_cfa_offset_sf: - // XXX overflow check - get_sleb128 (sop1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_sleb128 (sop1, readp, endp); printf (" def_cfa_offset_sf %" PRId64 "\n", sop1 * data_align); break; case DW_CFA_val_offset: - // XXX overflow check - get_uleb128 (op1, readp); - get_uleb128 (op2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op2, readp, endp); printf (" val_offset %" PRIu64 " at offset %" PRIu64 "\n", op1, op2 * data_align); break; case DW_CFA_val_offset_sf: - // XXX overflow check - get_uleb128 (op1, readp); - get_sleb128 (sop2, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_sleb128 (sop2, readp, endp); 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. */ + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op2, readp, endp); /* Length of DW_FORM_block. */ printf (" val_expression r%" PRIu64 " (%s)\n", op1, regname (op1)); + if ((uint64_t) (endp - readp) < op2) + goto invalid; print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, NULL, op2, readp); readp += op2; break; case DW_CFA_MIPS_advance_loc8: + if ((uint64_t) (endp - readp) < 8) + goto invalid; op1 = read_8ubyte_unaligned_inc (dbg, readp); printf (" MIPS_advance_loc8 %" PRIu64 " to %#" PRIx64 "\n", op1, pc += op1 * code_align); @@ -4981,8 +5170,9 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, puts (" GNU_window_save"); break; case DW_CFA_GNU_args_size: - // XXX overflow check - get_uleb128 (op1, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (op1, readp, endp); printf (" args_size %" PRIu64 "\n", op1); break; default: @@ -4995,8 +5185,9 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, else if (opcode < DW_CFA_restore) { uint64_t offset; - // XXX overflow check - get_uleb128 (offset, readp); + if ((uint64_t) (endp - readp) < 1) + goto invalid; + get_uleb128 (offset, readp, endp); printf (" offset r%u (%s) at cfa%+" PRId64 "\n", opcode & 0x3f, regname (opcode & 0x3f), offset * data_align); } @@ -5012,15 +5203,17 @@ encoded_ptr_size (int encoding, unsigned int ptr_size) { switch (encoding & 7) { - case 2: - return 2; - case 3: + case DW_EH_PE_udata4: return 4; - case 4: + case DW_EH_PE_udata8: return 8; - default: + case 0: return ptr_size; } + + fprintf (stderr, "Unsupported pointer encoding: %#x, " + "assuming pointer size of %d.\n", encoding, ptr_size); + return ptr_size; } @@ -5133,12 +5326,10 @@ read_encoded (unsigned int encoding, const unsigned char *readp, switch (encoding & 0xf) { case DW_EH_PE_uleb128: - // XXX buffer overrun check - get_uleb128 (*res, readp); + get_uleb128 (*res, readp, endp); break; case DW_EH_PE_sleb128: - // XXX buffer overrun check - get_sleb128 (*res, readp); + get_sleb128 (*res, readp, endp); break; case DW_EH_PE_udata2: if (readp + 2 > endp) @@ -5264,6 +5455,10 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, continue; } + Dwarf_Word maxsize = dataend - readp; + if (unlikely (unit_length > maxsize)) + goto invalid_data; + unsigned int ptr_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ptrdiff_t start = readp - (unsigned char *) data->d_buf; @@ -5307,21 +5502,24 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, segment_size = *readp++; } - // XXX Check overflow - get_uleb128 (code_alignment_factor, readp); - // XXX Check overflow - get_sleb128 (data_alignment_factor, readp); + if (cieend - readp < 1) + goto invalid_data; + get_uleb128 (code_alignment_factor, readp, cieend); + if (cieend - readp < 1) + goto invalid_data; + get_sleb128 (data_alignment_factor, readp, cieend); /* In some variant for unwind data there is another field. */ if (strcmp (augmentation, "eh") == 0) readp += ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; unsigned int return_address_register; + if (cieend - readp < 1) + goto invalid_data; if (unlikely (version == 1)) return_address_register = *readp++; else - // XXX Check overflow - get_uleb128 (return_address_register, readp); + get_uleb128 (return_address_register, readp, cieend); printf ("\n [%6tx] CIE length=%" PRIu64 "\n" " CIE_id: %" PRIu64 "\n" @@ -5342,14 +5540,18 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (augmentation[0] == 'z') { unsigned int augmentationlen; - get_uleb128 (augmentationlen, readp); + get_uleb128 (augmentationlen, readp, cieend); - if (augmentationlen > (size_t) (dataend - readp)) - error (1, 0, gettext ("invalid augmentation length")); + if (augmentationlen > (size_t) (cieend - readp)) + { + error (0, 0, gettext ("invalid augmentation length")); + readp = cieend; + continue; + } const char *hdr = "Augmentation data:"; const char *cp = augmentation + 1; - while (*cp != '\0') + while (*cp != '\0' && cp < augmentation + augmentationlen + 1) { printf (" %-26s%#x ", hdr, *readp); hdr = ""; @@ -5441,9 +5643,9 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, const unsigned char *base = readp; // XXX There are sometimes relocations for this value - initial_location = read_ubyte_unaligned_inc (ptr_size, dbg, readp); + initial_location = read_addr_unaligned_inc (ptr_size, dbg, readp); Dwarf_Word address_range - = read_ubyte_unaligned_inc (ptr_size, dbg, readp); + = read_addr_unaligned_inc (ptr_size, dbg, readp); /* pcrel for an FDE address is relative to the runtime address of the start_address field itself. Sign extend @@ -5491,14 +5693,24 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (cie->augmentation[0] == 'z') { unsigned int augmentationlen; - get_uleb128 (augmentationlen, readp); + if (cieend - readp < 1) + goto invalid_data; + get_uleb128 (augmentationlen, readp, cieend); + + if (augmentationlen > (size_t) (cieend - readp)) + { + error (0, 0, gettext ("invalid augmentation length")); + readp = cieend; + continue; + } if (augmentationlen > 0) { const char *hdr = "Augmentation data:"; const char *cp = cie->augmentation + 1; unsigned int u = 0; - while (*cp != '\0') + while (*cp != '\0' + && cp < cie->augmentation + augmentationlen + 1) { if (*cp == 'L') { @@ -5528,9 +5740,12 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, } /* Handle the initialization instructions. */ - print_cfa_program (readp, cieend, vma_base, code_alignment_factor, - data_alignment_factor, version, ptr_size, - dwflmod, ebl, dbg); + if (ptr_size != 4 && ptr_size !=8) + printf ("invalid CIE pointer size (%u), must be 4 or 8.\n", ptr_size); + else + print_cfa_program (readp, cieend, vma_base, code_alignment_factor, + data_alignment_factor, version, ptr_size, + dwflmod, ebl, dbg); readp = cieend; } } @@ -5679,23 +5894,29 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) case DW_AT_GNU_call_site_data_value: case DW_AT_GNU_call_site_target: case DW_AT_GNU_call_site_target_clobbered: - notice_listptr (section_loc, &known_loclistptr, - cbargs->addrsize, cbargs->offset_size, - cbargs->cu, num); - if (!cbargs->silent) - printf (" %*s%-20s (%s) location list [%6" PRIxMAX "]\n", - (int) (level * 2), "", dwarf_attr_name (attr), - dwarf_form_name (form), (uintmax_t) num); + { + bool nlpt = notice_listptr (section_loc, &known_loclistptr, + cbargs->addrsize, cbargs->offset_size, + cbargs->cu, num); + if (!cbargs->silent) + printf (" %*s%-20s (%s) location list [%6" PRIxMAX "]%s\n", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form), (uintmax_t) num, + nlpt ? "" : " <WARNING offset too big>"); + } return DWARF_CB_OK; case DW_AT_ranges: - notice_listptr (section_ranges, &known_rangelistptr, - cbargs->addrsize, cbargs->offset_size, - cbargs->cu, num); - if (!cbargs->silent) - printf (" %*s%-20s (%s) range list [%6" PRIxMAX "]\n", - (int) (level * 2), "", dwarf_attr_name (attr), - dwarf_form_name (form), (uintmax_t) num); + { + bool nlpt = notice_listptr (section_ranges, &known_rangelistptr, + cbargs->addrsize, cbargs->offset_size, + cbargs->cu, num); + if (!cbargs->silent) + printf (" %*s%-20s (%s) range list [%6" PRIxMAX "]%s\n", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form), (uintmax_t) num, + nlpt ? "" : " <WARNING offset too big>"); + } return DWARF_CB_OK; case DW_AT_language: @@ -6073,9 +6294,19 @@ print_decoded_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, for (size_t n = 0; n < nlines; n++) { Dwarf_Line *line = dwarf_onesrcline (lines, n); + if (line == NULL) + { + printf (" dwarf_onesrcline: %s\n", dwarf_errmsg (-1)); + continue; + } Dwarf_Word mtime, length; const char *file = dwarf_linesrc (line, &mtime, &length); - if (strcmp (last_file, file) != 0) + if (file == NULL) + { + printf (" <%s> (mtime: ?, length: ?)\n", dwarf_errmsg (-1)); + last_file = ""; + } + else if (strcmp (last_file, file) != 0) { printf (" %s (mtime: %" PRIu64 ", length: %" PRIu64 ")\n", file, mtime, length); @@ -6156,6 +6387,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, printf (gettext ("\nTable at offset %Zu:\n"), start_offset); + if (unlikely (linep + 4 > lineendp)) + goto invalid_data; Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, linep); unsigned int length = 4; if (unlikely (unit_length == 0xffffffff)) @@ -6172,8 +6405,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, } /* Check whether we have enough room in the section. */ - if (unit_length < 2 + length + 5 * 1 - || unlikely (linep + unit_length > lineendp)) + if (unlikely (unit_length > (size_t) (lineendp - linep) + || unit_length < 2 + length + 5 * 1)) goto invalid_data; lineendp = linep + unit_length; @@ -6282,15 +6515,21 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, /* Then the index. */ unsigned int diridx; - get_uleb128 (diridx, linep); + if (lineendp - linep < 1) + goto invalid_unit; + get_uleb128 (diridx, linep, lineendp); /* Next comes the modification time. */ unsigned int mtime; - get_uleb128 (mtime, linep); + if (lineendp - linep < 1) + goto invalid_unit; + get_uleb128 (mtime, linep, lineendp); /* Finally the length of the file. */ unsigned int fsize; - get_uleb128 (fsize, linep); + if (lineendp - linep < 1) + goto invalid_unit; + get_uleb128 (fsize, linep, lineendp); printf (" %-5u %-5u %-9u %-9u %s\n", cnt, diridx, mtime, fsize, fname); @@ -6346,6 +6585,14 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, op_index = (op_index + op_advance) % max_ops_per_instr; } + if (max_ops_per_instr == 0) + { + error (0, 0, + gettext ("invalid maximum operations per instruction is zero")); + linep = lineendp; + continue; + } + while (linep < lineendp) { size_t offset = linep - (const unsigned char *) data->d_buf; @@ -6359,6 +6606,9 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, /* Is this a special opcode? */ if (likely (opcode >= opcode_base)) { + if (unlikely (line_range == 0)) + goto invalid_unit; + /* Yes. Handling this is quite easy since the opcode value is computed with @@ -6415,6 +6665,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, case DW_LNE_set_address: op_index = 0; + if (unlikely ((size_t) (lineendp - linep) < address_size)) + goto invalid_unit; if (address_size == 4) address = read_4ubyte_unaligned_inc (dbg, linep); else @@ -6436,11 +6688,17 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, linep = endp + 1; unsigned int diridx; - get_uleb128 (diridx, linep); + if (lineendp - linep < 1) + goto invalid_unit; + get_uleb128 (diridx, linep, lineendp); Dwarf_Word mtime; - get_uleb128 (mtime, linep); + if (lineendp - linep < 1) + goto invalid_unit; + get_uleb128 (mtime, linep, lineendp); Dwarf_Word filelength; - get_uleb128 (filelength, linep); + if (lineendp - linep < 1) + goto invalid_unit; + get_uleb128 (filelength, linep, lineendp); printf (gettext ("\ define new file: dir=%u, mtime=%" PRIu64 ", length=%" PRIu64 ", name=%s\n"), @@ -6454,7 +6712,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (unlikely (standard_opcode_lengths[opcode] != 1)) goto invalid_unit; - get_uleb128 (u128, linep); + get_uleb128 (u128, linep, lineendp); printf (gettext (" set discriminator to %u\n"), u128); break; @@ -6478,7 +6736,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, case DW_LNS_advance_pc: /* Takes one uleb128 parameter which is added to the address. */ - get_uleb128 (u128, linep); + get_uleb128 (u128, linep, lineendp); advance_pc (u128); { char *a = format_dwarf_addr (dwflmod, 0, address, address); @@ -6496,7 +6754,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, case DW_LNS_advance_line: /* Takes one sleb128 parameter which is added to the line. */ - get_sleb128 (s128, linep); + get_sleb128 (s128, linep, lineendp); line += s128; printf (gettext ("\ advance line by constant %d to %" PRId64 "\n"), @@ -6505,7 +6763,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, case DW_LNS_set_file: /* Takes one uleb128 parameter which is stored in file. */ - get_uleb128 (u128, linep); + get_uleb128 (u128, linep, lineendp); printf (gettext (" set file to %" PRIu64 "\n"), (uint64_t) u128); break; @@ -6515,7 +6773,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (unlikely (standard_opcode_lengths[opcode] != 1)) goto invalid_unit; - get_uleb128 (u128, linep); + get_uleb128 (u128, linep, lineendp); printf (gettext (" set column to %" PRIu64 "\n"), (uint64_t) u128); break; @@ -6534,6 +6792,10 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, case DW_LNS_const_add_pc: /* Takes no argument. */ + + if (unlikely (line_range == 0)) + goto invalid_unit; + advance_pc ((255 - opcode_base) / line_range); { char *a = format_dwarf_addr (dwflmod, 0, address, address); @@ -6582,7 +6844,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (unlikely (standard_opcode_lengths[opcode] != 1)) goto invalid_unit; - get_uleb128 (u128, linep); + get_uleb128 (u128, linep, lineendp); printf (gettext (" set isa to %u\n"), u128); break; } @@ -6598,7 +6860,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, standard_opcode_lengths[opcode]); for (int n = standard_opcode_lengths[opcode]; n > 0; --n) { - get_uleb128 (u128, linep); + get_uleb128 (u128, linep, lineendp); if (n != standard_opcode_lengths[opcode]) putc_unlocked (',', stdout); printf (" %u", u128); @@ -6834,7 +7096,7 @@ print_debug_macinfo_section (Dwfl_Module *dwflmod __attribute__ ((unused)), For the latter number, string. We can treat these cases together. */ - get_uleb128 (u128, readp); + get_uleb128 (u128, readp, readendp); endp = memchr (readp, '\0', readendp - readp); if (unlikely (endp == NULL)) @@ -6859,8 +7121,15 @@ print_debug_macinfo_section (Dwfl_Module *dwflmod __attribute__ ((unused)), case DW_MACINFO_start_file: /* The two parameters are line and file index, in this order. */ - get_uleb128 (u128, readp); - get_uleb128 (u128_2, readp); + get_uleb128 (u128, readp, readendp); + if (readendp - readp < 1) + { + printf (gettext ("\ +%*s*** missing DW_MACINFO_start_file argument at end of section"), + level, ""); + return; + } + get_uleb128 (u128_2, readp, readendp); /* Find the CU DIE for this file. */ size_t macoff = readp - (const unsigned char *) data->d_buf; @@ -7071,8 +7340,10 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), switch (opcode) { case DW_MACRO_GNU_start_file: - get_uleb128 (u128, readp); - get_uleb128 (u128_2, readp); + get_uleb128 (u128, readp, readendp); + if (readp >= readendp) + goto invalid_data; + get_uleb128 (u128_2, readp, readendp); /* Find the CU DIE that matches this line offset. */ const char *fname = "???"; @@ -7104,7 +7375,7 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), break; case DW_MACRO_GNU_define: - get_uleb128 (u128, readp); + get_uleb128 (u128, readp, readendp); endp = memchr (readp, '\0', readendp - readp); if (endp == NULL) goto invalid_data; @@ -7114,7 +7385,7 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), break; case DW_MACRO_GNU_undef: - get_uleb128 (u128, readp); + get_uleb128 (u128, readp, readendp); endp = memchr (readp, '\0', readendp - readp); if (endp == NULL) goto invalid_data; @@ -7124,7 +7395,7 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), break; case DW_MACRO_GNU_define_indirect: - get_uleb128 (u128, readp); + get_uleb128 (u128, readp, readendp); if (readp + offset_len > readendp) goto invalid_data; if (offset_len == 8) @@ -7136,7 +7407,7 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), break; case DW_MACRO_GNU_undef_indirect: - get_uleb128 (u128, readp); + get_uleb128 (u128, readp, readendp); if (readp + offset_len > readendp) goto invalid_data; if (offset_len == 8) @@ -7206,17 +7477,17 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), break; case DW_FORM_sdata: - get_sleb128 (val, readp); + get_sleb128 (val, readp, readendp); printf (" %" PRIx64, val); break; case DW_FORM_udata: - get_uleb128 (val, readp); + get_uleb128 (val, readp, readendp); printf (" %" PRIx64, val); break; case DW_FORM_block: - get_uleb128 (val, readp); + get_uleb128 (val, readp, readendp); printf (" block[%" PRIu64 "]", val); if (readp + val > readendp) goto invalid_data; @@ -7532,9 +7803,10 @@ print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), if (ttype_encoding != DW_EH_PE_omit) { unsigned int ttype_base_offset; - get_uleb128 (ttype_base_offset, readp); + get_uleb128 (ttype_base_offset, readp, dataend); printf (" TType base offset: %#x\n", ttype_base_offset); - ttype_base = readp + ttype_base_offset; + if ((size_t) (dataend - readp) > ttype_base_offset) + ttype_base = readp + ttype_base_offset; } if (unlikely (readp + 1 > dataend)) @@ -7543,7 +7815,7 @@ print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), 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); + get_uleb128 (call_site_table_len, readp, dataend); const unsigned char *const action_table = readp + call_site_table_len; if (unlikely (action_table > dataend)) @@ -7565,7 +7837,7 @@ print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), readp = read_encoded (call_site_encoding, readp, dataend, &landing_pad, dbg); unsigned int action; - get_uleb128 (action, readp); + get_uleb128 (action, readp, dataend); max_action = MAX (action, max_action); printf (gettext (" [%4u] Call site start: %#" PRIx64 "\n" " Call site length: %" PRIu64 "\n" @@ -7573,13 +7845,20 @@ print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), " Action: %u\n"), u++, call_site_start, call_site_length, landing_pad, action); } - assert (readp == action_table); + if (readp != action_table) + goto invalid_data; unsigned int max_ar_filter = 0; if (max_action > 0) { puts ("\n Action table:"); + if ((size_t) (dataend - action_table) < max_action + 1) + { + fputs (gettext (" <INVALID DATA>\n"), stdout); + return; + } + const unsigned char *const action_table_end = action_table + max_action + 1; @@ -7587,11 +7866,11 @@ print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), do { int ar_filter; - get_sleb128 (ar_filter, readp); + get_sleb128 (ar_filter, readp, action_table_end); if (ar_filter > 0 && (unsigned int) ar_filter > max_ar_filter) max_ar_filter = ar_filter; int ar_disp; - get_sleb128 (ar_disp, readp); + get_sleb128 (ar_disp, readp, action_table_end); printf (" [%4u] ar_filter: % d\n" " ar_disp: % -5d", @@ -7607,7 +7886,7 @@ print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), while (readp < action_table_end); } - if (max_ar_filter > 0) + if (max_ar_filter > 0 && ttype_base != NULL) { puts ("\n TType table:"); @@ -7823,21 +8102,23 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (name != 0 || vector != 0) { const unsigned char *sym = data->d_buf + const_off + name; - if (unlikely (sym > dataend)) + if (unlikely (sym > dataend + || memchr (sym, '\0', dataend - sym) == NULL)) goto invalid_data; printf (" [%4zu] symbol: %s, CUs: ", n, sym); const unsigned char *readcus = data->d_buf + const_off + vector; - if (unlikely (readcus + 8 > dataend)) + if (unlikely (readcus + 4 > dataend)) goto invalid_data; - uint32_t cus = read_4ubyte_unaligned (dbg, readcus); while (cus--) { uint32_t cu_kind, cu, kind; bool is_static; readcus += 4; + if (unlikely (readcus + 4 > dataend)) + goto invalid_data; cu_kind = read_4ubyte_unaligned (dbg, readcus); cu = cu_kind & ((1 << 24) - 1); kind = (cu_kind >> 28) & 7; @@ -7948,8 +8229,10 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) / sizeof (debug_sections[0])); const char *name = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); - int n; + if (name == NULL) + continue; + int n; for (n = 0; n < ndebug_sections; ++n) if (strcmp (name, debug_sections[n].name) == 0 #if USE_ZLIB @@ -8839,9 +9122,13 @@ handle_file_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) return; } + size_t addrsize = gelf_fsize (core, ELF_T_ADDR, 1, EV_CURRENT); + uint64_t maxcount = (size_t) (end - ptr) / (3 * addrsize); + if (count > maxcount) + goto fail; + /* Where file names are stored. */ - unsigned char const *const fstart - = ptr + 3 * count * gelf_fsize (core, ELF_T_ADDR, 1, EV_CURRENT); + unsigned char const *const fstart = ptr + 3 * count * addrsize; char const *fptr = (char *) fstart; printf (" %" PRId64 " files:\n", count); @@ -427,10 +427,9 @@ show_sysv (Elf *elf, const char *prefix, const char *fname, INTERNAL_ERROR (fullname); /* Ignore all sections which are not used at runtime. */ - if ((shdr->sh_flags & SHF_ALLOC) != 0) - maxlen = MAX (maxlen, - (int) strlen (elf_strptr (elf, shstrndx, - shdr->sh_name))); + const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); + if (name != NULL && (shdr->sh_flags & SHF_ALLOC) != 0) + maxlen = MAX (maxlen, (int) strlen (name)); } fputs_unlocked (fname, stdout); @@ -601,14 +600,13 @@ show_bsd_totals (void) static void show_segments (Elf *elf, const char *fullname) { - GElf_Ehdr ehdr_mem; - GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); - if (ehdr == NULL) + size_t phnum; + if (elf_getphdrnum (elf, &phnum) != 0) INTERNAL_ERROR (fullname); GElf_Off total = 0; bool first = true; - for (size_t cnt = 0; cnt < ehdr->e_phnum; ++cnt) + for (size_t cnt = 0; cnt < phnum; ++cnt) { GElf_Phdr phdr_mem; GElf_Phdr *phdr; diff --git a/src/strip.c b/src/strip.c index c9a1d8df..2b217996 100644 --- a/src/strip.c +++ b/src/strip.c @@ -502,6 +502,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); + /* Get the number of phdrs in the old file. */ + size_t phnum; + if (elf_getphdrnum (elf, &phnum) != 0) + error (EXIT_FAILURE, 0, gettext ("cannot get number of phdrs")); + /* We now create a new ELF descriptor for the same file. We construct it almost exactly in the same way with some information dropped. */ @@ -513,7 +518,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (unlikely (gelf_newehdr (newelf, gelf_getclass (elf)) == 0) || (ehdr->e_type != ET_REL - && unlikely (gelf_newphdr (newelf, ehdr->e_phnum) == 0))) + && unlikely (gelf_newphdr (newelf, phnum) == 0))) { error (0, 0, gettext ("cannot create new file '%s': %s"), output_fname, elf_errmsg (-1)); @@ -522,7 +527,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Copy over the old program header if needed. */ if (ehdr->e_type != ET_REL) - for (cnt = 0; cnt < ehdr->e_phnum; ++cnt) + for (cnt = 0; cnt < phnum; ++cnt) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (elf, cnt, &phdr_mem); @@ -537,7 +542,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, debugelf = elf_begin (debug_fd, ELF_C_WRITE_MMAP, NULL); if (unlikely (gelf_newehdr (debugelf, gelf_getclass (elf)) == 0) || (ehdr->e_type != ET_REL - && unlikely (gelf_newphdr (debugelf, ehdr->e_phnum) == 0))) + && unlikely (gelf_newphdr (debugelf, phnum) == 0))) { error (0, 0, gettext ("cannot create new file '%s': %s"), debug_fname, elf_errmsg (-1)); @@ -546,7 +551,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Copy over the old program header if needed. */ if (ehdr->e_type != ET_REL) - for (cnt = 0; cnt < ehdr->e_phnum; ++cnt) + for (cnt = 0; cnt < phnum; ++cnt) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (elf, cnt, &phdr_mem); diff --git a/src/unstrip.c b/src/unstrip.c index f6660a32..989ac5ff 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -1,5 +1,5 @@ /* Combine stripped files with separate symbols and debug information. - Copyright (C) 2007-2012 Red Hat, Inc. + Copyright (C) 2007-2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Roland McGrath <[email protected]>, 2007. @@ -82,6 +82,9 @@ static const struct argp_option options[] = N_("Apply relocations to section contents in ET_REL files"), 0 }, { "list-only", 'n', NULL, 0, N_("Only list module and file names, build IDs"), 0 }, + { "force", 'F', NULL, 0, + N_("Force combining files even if some ELF headers don't seem to match"), + 0 }, { NULL, 0, NULL, 0, NULL, 0 } }; @@ -97,6 +100,7 @@ struct arg_info bool modnames; bool match_files; bool relocate; + bool force; }; /* Handle program arguments. */ @@ -147,6 +151,9 @@ parse_opt (int key, char *arg, struct argp_state *state) case 'R': info->relocate = true; break; + case 'F': + info->force = true; + break; case ARGP_KEY_ARGS: case ARGP_KEY_NO_ARGS: @@ -234,7 +241,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ #define ELF_CHECK(call, msg) \ do \ { \ - if (!(call)) \ + if (unlikely (!(call))) \ error (EXIT_FAILURE, 0, msg, elf_errmsg (-1)); \ } while (0) @@ -250,13 +257,17 @@ copy_elf (Elf *outelf, Elf *inelf) ELF_CHECK (gelf_update_ehdr (outelf, ehdr), _("cannot copy ELF header: %s")); - if (ehdr->e_phnum > 0) + size_t phnum; + ELF_CHECK (elf_getphdrnum (inelf, &phnum) == 0, + _("cannot get number of program headers: %s")); + + if (phnum > 0) { - ELF_CHECK (gelf_newphdr (outelf, ehdr->e_phnum), + ELF_CHECK (gelf_newphdr (outelf, phnum), _("cannot create program headers: %s")); GElf_Phdr phdr_mem; - for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i) + for (size_t i = 0; i < phnum; ++i) ELF_CHECK (gelf_update_phdr (outelf, i, gelf_getphdr (inelf, i, &phdr_mem)), _("cannot copy program header: %s")); @@ -1118,10 +1129,11 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, && (sec->shdr.sh_type == undo_sec->shdr.sh_type || (sec->shdr.sh_type == SHT_PROGBITS && undo_sec->shdr.sh_type == SHT_NOBITS)) - && sec->shdr.sh_size < undo_sec->shdr.sh_size + && sec->shdr.sh_size <= undo_sec->shdr.sh_size && (!strcmp (sec->name, ".bss") || !strcmp (sec->name, ".sbss")) - && (split_bss = sec) > sections))) + && (sec->shdr.sh_size == undo_sec->shdr.sh_size + || (split_bss = sec) > sections)))) { sec->outscn = undo_sec->outscn; undo_sec = NULL; @@ -1815,12 +1827,16 @@ more sections in stripped file than debug file -- arguments reversed?")); } while (skip_reloc); - if (stripped_ehdr->e_phnum > 0) - ELF_CHECK (gelf_newphdr (unstripped, stripped_ehdr->e_phnum), + size_t phnum; + ELF_CHECK (elf_getphdrnum (stripped, &phnum) == 0, + _("cannot get number of program headers: %s")); + + if (phnum > 0) + ELF_CHECK (gelf_newphdr (unstripped, phnum), _("cannot create program headers: %s")); /* Copy each program header from the stripped file. */ - for (uint_fast16_t i = 0; i < stripped_ehdr->e_phnum; ++i) + for (size_t i = 0; i < phnum; ++i) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (stripped, i, &phdr_mem); @@ -1855,11 +1871,15 @@ handle_file (const char *output_file, bool create_dirs, Elf *stripped, const GElf_Ehdr *stripped_ehdr, Elf *unstripped) { + size_t phnum; + ELF_CHECK (elf_getphdrnum (stripped, &phnum) == 0, + _("cannot get number of program headers: %s")); + /* Determine the address bias between the debuginfo file and the main file, which may have been modified by prelinking. */ GElf_Addr bias = 0; if (unstripped != NULL) - for (uint_fast16_t i = 0; i < stripped_ehdr->e_phnum; ++i) + for (size_t i = 0; i < phnum; ++i) { GElf_Phdr phdr_mem; GElf_Phdr *phdr = gelf_getphdr (stripped, i, &phdr_mem); @@ -1935,9 +1955,20 @@ open_file (const char *file, bool writable) /* Handle a pair of files we need to open by name. */ static void -handle_explicit_files (const char *output_file, bool create_dirs, +handle_explicit_files (const char *output_file, bool create_dirs, bool force, const char *stripped_file, const char *unstripped_file) { + + /* Warn, and exit if not forced to continue, if some ELF header + sanity check for the stripped and unstripped files failed. */ + void warn (const char *msg) + { + error (force ? 0 : EXIT_FAILURE, 0, "%s'%s' and '%s' %s%s.", + force ? _("WARNING: ") : "", + stripped_file, unstripped_file, msg, + force ? "" : _(", use --force")); + } + int stripped_fd = open_file (stripped_file, false); Elf *stripped = elf_begin (stripped_fd, ELF_C_READ, NULL); GElf_Ehdr stripped_ehdr; @@ -1956,12 +1987,18 @@ handle_explicit_files (const char *output_file, bool create_dirs, ELF_CHECK (gelf_getehdr (unstripped, &unstripped_ehdr), _("cannot create ELF descriptor: %s")); - if (memcmp (stripped_ehdr.e_ident, unstripped_ehdr.e_ident, EI_NIDENT) - || stripped_ehdr.e_type != unstripped_ehdr.e_type - || stripped_ehdr.e_machine != unstripped_ehdr.e_machine - || stripped_ehdr.e_phnum != unstripped_ehdr.e_phnum) - error (EXIT_FAILURE, 0, _("'%s' and '%s' do not seem to match"), - stripped_file, unstripped_file); + if (memcmp (stripped_ehdr.e_ident, + unstripped_ehdr.e_ident, EI_NIDENT) != 0) + warn (_("ELF header identification (e_ident) different")); + + if (stripped_ehdr.e_type != unstripped_ehdr.e_type) + warn (_("ELF header type (e_type) different")); + + if (stripped_ehdr.e_machine != unstripped_ehdr.e_machine) + warn (_("ELF header machine type (e_machine) different")); + + if (stripped_ehdr.e_phnum < unstripped_ehdr.e_phnum) + warn (_("stripped program header (e_phnum) smaller than unstripped")); } handle_file (output_file, create_dirs, stripped, &stripped_ehdr, unstripped); @@ -1976,7 +2013,7 @@ handle_explicit_files (const char *output_file, bool create_dirs, /* Handle a pair of files opened implicitly by libdwfl for one module. */ static void -handle_dwfl_module (const char *output_file, bool create_dirs, +handle_dwfl_module (const char *output_file, bool create_dirs, bool force, Dwfl_Module *mod, bool all, bool ignore, bool relocate) { GElf_Addr bias; @@ -2048,7 +2085,7 @@ handle_dwfl_module (const char *output_file, bool create_dirs, (void) dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, &stripped_file, &unstripped_file); - handle_explicit_files (output_file, create_dirs, + handle_explicit_files (output_file, create_dirs, force, stripped_file, unstripped_file); return; } @@ -2068,7 +2105,7 @@ handle_dwfl_module (const char *output_file, bool create_dirs, /* Handle one module being written to the output directory. */ static void -handle_output_dir_module (const char *output_dir, Dwfl_Module *mod, +handle_output_dir_module (const char *output_dir, Dwfl_Module *mod, bool force, bool all, bool ignore, bool modnames, bool relocate) { if (! modnames) @@ -2089,7 +2126,7 @@ handle_output_dir_module (const char *output_dir, Dwfl_Module *mod, if (asprintf (&output_file, "%s/%s", output_dir, modnames ? name : file) < 0) error (EXIT_FAILURE, 0, _("memory exhausted")); - handle_dwfl_module (output_file, true, mod, all, ignore, relocate); + handle_dwfl_module (output_file, true, force, mod, all, ignore, relocate); } @@ -2201,12 +2238,12 @@ handle_implicit_modules (const struct arg_info *info) { if (next (offset) != 0) error (EXIT_FAILURE, 0, _("matched more than one module")); - handle_dwfl_module (info->output_file, false, mmi.found, + handle_dwfl_module (info->output_file, false, info->force, mmi.found, info->all, info->ignore, info->relocate); } else do - handle_output_dir_module (info->output_dir, mmi.found, + handle_output_dir_module (info->output_dir, mmi.found, info->force, info->all, info->ignore, info->modnames, info->relocate); while ((offset = next (offset)) > 0); @@ -2296,11 +2333,12 @@ or - if no debuginfo was found, or . if FILE contains the debug information.\ char *file; if (asprintf (&file, "%s/%s", info.output_dir, info.args[0]) < 0) error (EXIT_FAILURE, 0, _("memory exhausted")); - handle_explicit_files (file, true, info.args[0], info.args[1]); + handle_explicit_files (file, true, info.force, + info.args[0], info.args[1]); free (file); } else - handle_explicit_files (info.output_file, false, + handle_explicit_files (info.output_file, false, info.force, info.args[0], info.args[1]); } else diff --git a/tests/ChangeLog b/tests/ChangeLog index bb0ad0d4..59048f65 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,141 @@ +2014-12-19 Mark Wielaard <[email protected]> + + * run-deleted.sh: Don't check libfunc on ppc64. + +2014-12-19 Mark Wielaard <[email protected]> + + * vdsosyms.c (vdso_seen): Removed. + (vdso_syms): New global. + (module_callback): Set and check vdso_syms. + (main): Return value depends on vdso_syms. + +2014-12-19 Mark Wielaard <[email protected]> + + * backtrace-subr.sh (check_native_unsupported): Relax special ARM + grep a little. + * run-deleted.sh: Call check_native_unsupported. + +2014-12-18 Mark Wielaard <[email protected]> + + * Makefile.am (EXTRA_DIST): Add testfile-macros-0xff.bz2. + +2014-12-12 Mark Wielaard <[email protected]> + + * Makefile.am (deleted_lib_so_CFLAGS): Add + -fasynchronous-unwind-tables. + +2014-12-11 Josh Stone <[email protected]> + + * run-addr2line-i-lex-test.sh: New test. + * testfile-lex-inlines.bz2: New testfile. + * Makefile.am (EXTRA_DIST): Add run-addr2line-i-lex-test.sh and + testfile-lex-inlines.bz2. + (TESTS): Add run-addr2line-i-lex-test.sh. + +2014-12-10 Josh Stone <[email protected]> + + * run-addr2line-i-test.sh: Test 0x5f0 to make sure linkage_name is + preferred over the plain die name. + +2014-12-02 Petr Machata <[email protected]> + + * dwarf-getmacros.c (mac): Skip over DW_MACINFO_undef, + DW_MACRO_GNU_undef_indirect opcodes. Add a default branch. + (main): Initialize off to DWARF_GETMACROS_START when an extra + command line argument is passed. + * testfile-macros-0xff.bz2: New test case. + * testfile-macros-0xff.s: New file (source for the above). + * run-dwarf-getmacros.sh: Add two tests. + +2014-11-27 Mark Wielaard <[email protected]> + + * vdsosyms.c (main): Call dwfl_linux_proc_attach. + +2014-11-21 Mark Wielaard <[email protected]> + + * run-readelf-A.sh: New test. + * testfileppc32attrs.o.bz2: New test file. + * Makefile.am (TESTS): Add run-readelf-A.sh. + (EXTRA_DIST): Add run-readelf-A.sh and testfileppc32attrs.o.bz2. + +2014-11-10 Mark Wielaard <[email protected]> + + * vdsosyms.c: New test. + * Makefile.am (check_PROGRAMS): Add vdsosyms. + (TESTS): Likewise. + (vdsosyms_LDADD): New variable. + +2014-09-10 Petr Machata <[email protected]> + + * dwarf-getmacros.c: Update to use the new macro iteration + interfaces. + * run-dwarf-getmacros.sh: Adjust, add a test that uses + testfile-macros. + +2014-10-06 Mark Wielaard <[email protected]> + + * run-aggregate-size.sh: Add testfile-sizes3.o test case. + * testfile-sizes3.o.bz2: New test file. + * Makefile.am (EXTRA_DIST): Add testfile-sizes3.o.bz2. + +2014-10-02 Mark Wielaard <[email protected]> + + * run-deleted.sh: Unset VALGRIND_CMD before running deleted. + +2014-10-02 Mark Wielaard <[email protected]> + + * Makefile.am (check_PROGRAMS): Add aggregate_size.c. + (TESTS): Add run-aggregate-size.sh. + (EXTRA_DIST): Add run-aggregate-size.sh, testfile-sizes1.o.bz2 + and testfile-sizes2.o.bz2. + (aggregate_size_LDADD): New variable. + * aggregate_size.c: New file. + * run-aggregate-size.sh: New test. + * testfile-sizes1.o.bz2: New test file. + * testfile-sizes2.o.bz2: Likewise. + +2014-09-26 Jan Kratochvil <[email protected]> + + Support NT_FILE for locating files. + * Makefile.am (TESTS): Add run-linkmap-cut.sh. + (EXTRA_DIST): Add run-linkmap-cut.sh, linkmap-cut-lib.so.bz2, + linkmap-cut.bz2 and linkmap-cut.core.bz2 . + * linkmap-cut-lib.so.bz2: New file. + * linkmap-cut.bz2: New file. + * linkmap-cut.core.bz2: New file. + * run-linkmap-cut.sh: New file. + * run-unstrip-n.sh: Update its expected output. + +2014-08-28 Jan Kratochvil <[email protected]> + + * Makefile.am (check_PROGRAMS): Add deleted and deleted-lib.so. + (TESTS, EXTRA_DIST): Add run-deleted.sh. + (deleted_LDADD, deleted_lib_so_LDFLAGS, deleted_lib_so_CFLAGS): New. + * deleted-lib.c: New file. + * deleted.c: New file. + * run-deleted.sh: New file. + +2014-06-15 Mark Wielaard <[email protected]> + + * backtrace.c (frame_callback): Error on seeing more than 16 frames. + +2014-06-13 Mark Wielaard <[email protected]> + + * backtrace.c (callback_verify): Accept "__libc_do_syscall" as first + frame symname. + +2014-06-13 Mark Wielaard <[email protected]> + + * backtrace-subr.sh (check_native_unsupported): New function. + (check_native): Call it. + (check_native_core): Likewise. + * run-backtrace-dwarf.sh: Likewise. + +2014-06-11 Mark Wielaard <[email protected]> + + * backtrace.c (main): Check that Dwfl was attached by calling + dwfl_pid and printing the error when it is not. + 2014-05-18 Mark Wielaard <[email protected]> * testfile-backtrace-demangle.cc (cxxfunc): Make non-static. diff --git a/tests/Makefile.am b/tests/Makefile.am index cd811a2c..ce25aa3a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -50,7 +50,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ test-elf_cntl_gelf_getshdr dwflsyms dwfllines \ dwfl-report-elf-align varlocs backtrace backtrace-child \ backtrace-data backtrace-dwarf debuglink debugaltlink \ - buildid + buildid deleted deleted-lib.so aggregate_size vdsosyms asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ asm-tst6 asm-tst7 asm-tst8 asm-tst9 @@ -101,7 +101,8 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-test-archive64.sh run-readelf-vmcoreinfo.sh \ run-readelf-mixed-corenote.sh run-dwfllines.sh \ run-dwfl-report-elf-align.sh run-addr2line-test.sh \ - run-addr2line-i-test.sh run-varlocs.sh run-funcretval.sh \ + run-addr2line-i-test.sh run-addr2line-i-lex-test.sh \ + run-varlocs.sh run-funcretval.sh \ run-backtrace-native.sh run-backtrace-data.sh run-backtrace-dwarf.sh \ run-backtrace-native-biarch.sh run-backtrace-native-core.sh \ run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \ @@ -109,7 +110,8 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ run-backtrace-core-aarch64.sh \ run-backtrace-demangle.sh run-stack-d-test.sh run-stack-i-test.sh \ - run-readelf-dwz-multi.sh run-allfcts-multi.sh + run-readelf-dwz-multi.sh run-allfcts-multi.sh run-deleted.sh \ + run-linkmap-cut.sh run-aggregate-size.sh vdsosyms run-readelf-A.sh if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 @@ -187,6 +189,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \ testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \ testfile49.bz2 testfile50.bz2 testfile51.bz2 \ + testfile-macros-0xff.bz2 \ run-readelf-macro.sh testfilemacro.bz2 \ run-readelf-loc.sh testfileloc.bz2 \ run-readelf-aranges.sh run-readelf-line.sh testfilefoobarbaz.bz2 \ @@ -242,6 +245,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfilenolines.bz2 test-core-lib.so.bz2 test-core.core.bz2 \ test-core.exec.bz2 run-addr2line-test.sh \ run-addr2line-i-test.sh testfile-inlines.bz2 \ + run-addr2line-i-lex-test.sh testfile-lex-inlines.bz2 \ testfileppc32.bz2 testfileppc64.bz2 \ testfiles390.bz2 testfiles390x.bz2 \ testfilearm.bz2 testfileaarch64.bz2 \ @@ -271,7 +275,12 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile-backtrace-demangle.core.bz2 \ run-stack-d-test.sh run-stack-i-test.sh \ testfiledwarfinlines.bz2 testfiledwarfinlines.core.bz2 \ - run-readelf-zdebug.sh testfile-debug.bz2 testfile-zdebug.bz2 + run-readelf-zdebug.sh testfile-debug.bz2 testfile-zdebug.bz2 \ + run-deleted.sh run-linkmap-cut.sh linkmap-cut-lib.so.bz2 \ + linkmap-cut.bz2 linkmap-cut.core.bz2 \ + run-aggregate-size.sh testfile-sizes1.o.bz2 testfile-sizes2.o.bz2 \ + testfile-sizes3.o.bz2 \ + run-readelf-A.sh testfileppc32attrs.o.bz2 if USE_VALGRIND valgrind_cmd='valgrind -q --error-exitcode=1 --run-libc-freeres=no' @@ -408,6 +417,11 @@ backtrace_dwarf_LDADD = $(libdw) $(libelf) debuglink_LDADD = $(libdw) $(libelf) debugaltlink_LDADD = $(libdw) $(libelf) buildid_LDADD = $(libdw) $(libelf) +deleted_LDADD = ./deleted-lib.so +deleted_lib_so_LDFLAGS = -shared -rdynamic +deleted_lib_so_CFLAGS = -fPIC -fasynchronous-unwind-tables +aggregate_size_LDADD = $(libdw) $(libelf) +vdsosyms_LDADD = $(libdw) $(libelf) if GCOV check: check-am coverage diff --git a/tests/aggregate_size.c b/tests/aggregate_size.c new file mode 100644 index 00000000..930eafa7 --- /dev/null +++ b/tests/aggregate_size.c @@ -0,0 +1,83 @@ +/* Test program for dwarf_aggregate_size. Prints size of top-level vars. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <assert.h> +#include <argp.h> +#include <inttypes.h> +#include <fcntl.h> +#include ELFUTILS_HEADER(dw) +#include ELFUTILS_HEADER(dwfl) +#include <stdio.h> +#include <unistd.h> +#include <dwarf.h> + +void +print_var_type_size (Dwarf_Die *var) +{ + Dwarf_Attribute attr_mem; + Dwarf_Die type_mem; + Dwarf_Die *type; + const char *name = dwarf_diename (var); + + type = dwarf_formref_die (dwarf_attr (var, DW_AT_type, &attr_mem), + &type_mem); + if (type != NULL) + { + Dwarf_Word size; + if (dwarf_aggregate_size (type, &size) < 0) + printf ("%s no size: %s\n", name, dwarf_errmsg (-1)); + else + printf ("%s size %" PRIu64 "\n", name, size); + } + else + printf ("%s has no type.\n", name); +} + +int +main (int argc, char *argv[]) +{ + + int remaining; + Dwfl *dwfl; + (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining, + &dwfl); + assert (dwfl != NULL); + + Dwarf_Die *cu = NULL; + Dwarf_Addr dwbias; + while ((cu = dwfl_nextcu (dwfl, cu, &dwbias)) != NULL) + { + Dwarf_Die die_mem; + Dwarf_Die *die = &die_mem; + dwarf_child (cu, &die_mem); + + while (1) + { + if (dwarf_tag (die) == DW_TAG_variable) + print_var_type_size (die); + + if (dwarf_siblingof (die, &die_mem) != 0) + break; + } + } + + dwfl_end (dwfl); +} diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh index 875e0b68..f04721cf 100644 --- a/tests/backtrace-subr.sh +++ b/tests/backtrace-subr.sh @@ -74,13 +74,20 @@ check_unsupported() echo >&2 $testname: arch not supported exit 77 fi +} + +check_native_unsupported() +{ + err=$1 + testname=$2 + check_unsupported $err $testname # ARM is special. It is supported, but it doesn't use .eh_frame by default # making the native tests fail unless debuginfo (for glibc) is installed # and we can fall back on .debug_frame for the CFI. case "`uname -m`" in arm* ) - if grep 'dwfl_thread_getframes: No DWARF information found' $1; then + if egrep 'dwfl_thread_getframes(.*)No DWARF information found' $err; then echo >&2 $testname: arm needs debuginfo installed for all libraries exit 77 fi @@ -109,7 +116,7 @@ check_native() tempfiles $child.{bt,err} (set +ex; testrun ${abs_builddir}/backtrace --backtrace-exec=${abs_builddir}/$child 1>$child.bt 2>$child.err; true) cat $child.{bt,err} - check_unsupported $child.err $child + check_native_unsupported $child.err $child check_all $child.{bt,err} $child } @@ -140,6 +147,6 @@ check_native_core() tempfiles $core{,.{bt,err}} (set +ex; testrun ${abs_builddir}/backtrace -e ${abs_builddir}/$child --core=$core 1>$core.bt 2>$core.err; true) cat $core.{bt,err} - check_unsupported $core.err $child-$core + check_native_unsupported $core.err $child-$core check_all $core.{bt,err} $child-$core } diff --git a/tests/backtrace.c b/tests/backtrace.c index 1a4709b9..331ba0f2 100644 --- a/tests/backtrace.c +++ b/tests/backtrace.c @@ -1,5 +1,5 @@ /* Test program for unwinding of frames. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -98,7 +98,8 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, { case 0: if (! reduce_frameno && symname - && strcmp (symname, "__kernel_vsyscall") == 0) + && (strcmp (symname, "__kernel_vsyscall") == 0 + || strcmp (symname, "__libc_do_syscall") == 0)) reduce_frameno = true; else assert (symname && strcmp (symname, "raise") == 0); @@ -147,6 +148,13 @@ frame_callback (Dwfl_Frame *state, void *frame_arg) int *framenop = frame_arg; Dwarf_Addr pc; bool isactivation; + + if (*framenop > 16) + { + error (0, 0, "Too many frames: %d\n", *framenop); + return DWARF_CB_ABORT; + } + if (! dwfl_frame_pc (state, &pc, &isactivation)) { error (0, 0, "%s", dwfl_errmsg (-1)); @@ -459,6 +467,9 @@ main (int argc __attribute__ ((unused)), char **argv) }; (void) argp_parse (&argp, argc, argv, 0, NULL, &dwfl); assert (dwfl != NULL); + /* We want to make sure the dwfl was properly attached. */ + if (dwfl_pid (dwfl) < 0) + error (2, 0, "dwfl_pid: %s", dwfl_errmsg (-1)); dump (dwfl); dwfl_end (dwfl); return 0; diff --git a/tests/deleted-lib.c b/tests/deleted-lib.c new file mode 100644 index 00000000..1ff411b7 --- /dev/null +++ b/tests/deleted-lib.c @@ -0,0 +1,27 @@ +/* Test program for opening already deleted running binaries. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> +#include <unistd.h> + +void +libfunc (void) +{ + sleep (60000); + /* Avoid tail call optimization for the sleep call. */ + asm volatile (""); +} diff --git a/tests/deleted.c b/tests/deleted.c new file mode 100644 index 00000000..32a310b6 --- /dev/null +++ b/tests/deleted.c @@ -0,0 +1,50 @@ +/* Test program for opening already deleted running binaries. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> +#include <locale.h> +#include <stdlib.h> +#include <unistd.h> +#include <assert.h> +#include <stdio.h> +#include <error.h> +#include <errno.h> + +extern void libfunc (void); + +int +main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) +{ + /* Set locale. */ + (void) setlocale (LC_ALL, ""); + + pid_t pid = fork (); + assert (pid != -1); + if (pid == 0) + { + int err = close (0); + assert (!err); + err = close (1); + assert (!err); + err = close (2); + assert (!err); + libfunc (); + abort (); + } + printf ("%d\n", pid); + return EXIT_SUCCESS; +} diff --git a/tests/dwarf-getmacros.c b/tests/dwarf-getmacros.c index 7972edc9..92e093ca 100644 --- a/tests/dwarf-getmacros.c +++ b/tests/dwarf-getmacros.c @@ -1,5 +1,5 @@ -/* Test program for dwfl_module_return_value_location. - Copyright (C) 2009 Red Hat, Inc. +/* Test program for dwarf_getmacros and related + Copyright (C) 2009, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -24,33 +24,121 @@ #include <stdio.h> #include <stdint.h> #include <stdlib.h> +#include <assert.h> +#include <inttypes.h> + +static void include (Dwarf *dbg, Dwarf_Off macoff, ptrdiff_t token); + +static int +mac (Dwarf_Macro *macro, void *dbg) +{ + static int level = 0; + + unsigned int opcode; + dwarf_macro_opcode (macro, &opcode); + switch (opcode) + { + case DW_MACRO_GNU_transparent_include: + { + Dwarf_Attribute at; + int r = dwarf_macro_param (macro, 0, &at); + assert (r == 0); + + Dwarf_Word w; + r = dwarf_formudata (&at, &w); + assert (r == 0); + + printf ("%*sinclude %#" PRIx64 "\n", level, "", w); + ++level; + include (dbg, w, DWARF_GETMACROS_START); + --level; + printf ("%*s/include\n", level, ""); + break; + } + + case DW_MACRO_GNU_start_file: + { + Dwarf_Files *files; + size_t nfiles; + if (dwarf_macro_getsrcfiles (dbg, macro, &files, &nfiles) < 0) + printf ("dwarf_macro_getsrcfiles: %s\n", + dwarf_errmsg (dwarf_errno ())); + + Dwarf_Word w = 0; + dwarf_macro_param2 (macro, &w, NULL); + + const char *name = dwarf_filesrc (files, (size_t) w, NULL, NULL); + printf ("%*sfile %s\n", level, "", name); + ++level; + break; + } + + case DW_MACRO_GNU_end_file: + { + --level; + printf ("%*s/file\n", level, ""); + break; + } + + case DW_MACINFO_define: + case DW_MACRO_GNU_define_indirect: + { + const char *value; + dwarf_macro_param2 (macro, NULL, &value); + printf ("%*s%s\n", level, "", value); + break; + } + + case DW_MACINFO_undef: + case DW_MACRO_GNU_undef_indirect: + break; + + default: + { + size_t paramcnt; + dwarf_macro_getparamcnt (macro, ¶mcnt); + printf ("%*sopcode %u with %zd arguments\n", + level, "", opcode, paramcnt); + break; + } + } + + return DWARF_CB_ABORT; +} + +static void +include (Dwarf *dbg, Dwarf_Off macoff, ptrdiff_t token) +{ + while ((token = dwarf_getmacros_off (dbg, macoff, mac, dbg, token)) != 0) + if (token == -1) + { + puts (dwarf_errmsg (dwarf_errno ())); + break; + } +} int -main (int argc __attribute__ ((unused)), char *argv[]) +main (int argc, char *argv[]) { + assert (argc >= 3); const char *name = argv[1]; ptrdiff_t cuoff = strtol (argv[2], NULL, 0); + bool new_style = argc > 3; int fd = open (name, O_RDONLY); Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); Dwarf_Die cudie_mem, *cudie = dwarf_offdie (dbg, cuoff, &cudie_mem); - int mac (Dwarf_Macro *macro, void *data __attribute__ ((unused))) - { - unsigned int opcode; - dwarf_macro_opcode (macro, &opcode); - if (opcode == DW_MACINFO_define) + + for (ptrdiff_t off = new_style ? DWARF_GETMACROS_START : 0; + (off = dwarf_getmacros (cudie, mac, dbg, off)); ) + if (off == -1) { - const char *value; - dwarf_macro_param2 (macro, NULL, &value); - puts (value); + puts (dwarf_errmsg (dwarf_errno ())); + break; } - return DWARF_CB_ABORT; - } - ptrdiff_t off = 0; - while ((off = dwarf_getmacros (cudie, mac, NULL, off)) > 0) - ; + dwarf_end (dbg); return 0; } diff --git a/tests/linkmap-cut-lib.so.bz2 b/tests/linkmap-cut-lib.so.bz2 Binary files differnew file mode 100644 index 00000000..a1bda5c0 --- /dev/null +++ b/tests/linkmap-cut-lib.so.bz2 diff --git a/tests/linkmap-cut.bz2 b/tests/linkmap-cut.bz2 Binary files differnew file mode 100644 index 00000000..f2ccd7ca --- /dev/null +++ b/tests/linkmap-cut.bz2 diff --git a/tests/linkmap-cut.core.bz2 b/tests/linkmap-cut.core.bz2 Binary files differnew file mode 100644 index 00000000..b55b2f21 --- /dev/null +++ b/tests/linkmap-cut.core.bz2 diff --git a/tests/run-addr2line-i-lex-test.sh b/tests/run-addr2line-i-lex-test.sh new file mode 100755 index 00000000..c391fd99 --- /dev/null +++ b/tests/run-addr2line-i-lex-test.sh @@ -0,0 +1,71 @@ +#! /bin/sh +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# // g++ x.cpp -g -fPIC -olibx.so -shared -O3 -fvisibility=hidden +# +# void foobar() +# { +# __asm__ ( "nop" ::: ); +# } +# +# void foo() +# { +# { +# void (*bar) () = foobar; +# bar(); +# } +# } + +testfiles testfile-lex-inlines + +testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000680 <<\EOF +/tmp/x.cpp:5 +EOF + +testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000681 <<\EOF +/tmp/x.cpp:5 +EOF + +testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000690 <<\EOF +/tmp/x.cpp:5 +/tmp/x.cpp:12 +EOF + +testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000691 <<\EOF +/tmp/x.cpp:5 +/tmp/x.cpp:12 +EOF + +# All together now (plus function names). +testrun_compare ${abs_top_builddir}/src/addr2line -f -i -e testfile-lex-inlines 0x0000000000000680 0x0000000000000681 0x0000000000000690 0x0000000000000691 <<\EOF +_Z6foobarv +/tmp/x.cpp:5 +_Z6foobarv +/tmp/x.cpp:5 +foobar inlined at /tmp/x.cpp:12 in _Z3foov +/tmp/x.cpp:5 +_Z3foov +/tmp/x.cpp:12 +foobar inlined at /tmp/x.cpp:12 in _Z3foov +/tmp/x.cpp:5 +_Z3foov +/tmp/x.cpp:12 +EOF + +exit 0 diff --git a/tests/run-addr2line-i-test.sh b/tests/run-addr2line-i-test.sh index e98adda3..183916c7 100755 --- a/tests/run-addr2line-i-test.sh +++ b/tests/run-addr2line-i-test.sh @@ -103,7 +103,7 @@ testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000 EOF # All together now (plus function names). -testrun_compare ${abs_top_builddir}/src/addr2line -f -i -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f1 0x00000000000005f2 <<\EOF +testrun_compare ${abs_top_builddir}/src/addr2line -f -i -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF foobar /tmp/x.cpp:5 foobar @@ -132,6 +132,8 @@ baz /tmp/x.cpp:20 _Z3foov /tmp/x.cpp:26 +_Z2fuv +/tmp/x.cpp:31 fubar inlined at /tmp/x.cpp:32 in _Z2fuv /tmp/x.cpp:10 _Z2fuv diff --git a/tests/run-aggregate-size.sh b/tests/run-aggregate-size.sh new file mode 100755 index 00000000..42b0742b --- /dev/null +++ b/tests/run-aggregate-size.sh @@ -0,0 +1,105 @@ +#! /bin/sh +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# char c; +# int i; +# long l; +# +# void *v; +# +# struct s +# { +# char *a; +# int i; +# } s; +# +# char ca[16]; +# int ia[32]; +# void *va[64]; +# struct s sa[8]; + +# On x86_64 (LP64): +# gcc -g -c -o testfile-sizes1.o sizes.c +# clang -g -c -o testfile-sizes2.o sizes.c + +# const char c; +# volatile int i; +# const volatile long l; +# +# void * restrict v; +# +# struct s +# { +# const char *a; +# volatile int i; +# } s; +# +# const char ca[16]; +# volatile int ia[32]; +# const volatile void * const volatile restrict va[64]; +# struct s sa[8]; +# +# typedef const int foo; +# typedef volatile foo bar; +# foo f; +# bar b; +# +# gcc -std=c99 -g -c -o testfile-sizes3.o sizes.c + +testfiles testfile-sizes1.o testfile-sizes2.o testfile-sizes3.o + +testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes1.o <<\EOF +c size 1 +i size 4 +l size 8 +v size 8 +s size 16 +ca size 16 +ia size 128 +va size 512 +sa size 128 +EOF + +testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes2.o <<\EOF +c size 1 +i size 4 +l size 8 +v size 8 +s size 16 +ca size 16 +ia size 128 +va size 512 +sa size 128 +EOF + +testrun_compare ${abs_builddir}/aggregate_size -e testfile-sizes3.o <<\EOF +c size 1 +i size 4 +l size 8 +v size 8 +s size 16 +ca size 16 +ia size 128 +va size 512 +sa size 128 +f size 4 +b size 4 +EOF + +exit 0 diff --git a/tests/run-backtrace-dwarf.sh b/tests/run-backtrace-dwarf.sh index a133b32d..8834048a 100755 --- a/tests/run-backtrace-dwarf.sh +++ b/tests/run-backtrace-dwarf.sh @@ -26,5 +26,5 @@ unset VALGRIND_CMD tempfiles dwarf.{bt,err} (set +ex; testrun ${abs_builddir}/backtrace-dwarf 1>dwarf.bt 2>dwarf.err; true) cat dwarf.{bt,err} -check_unsupported dwarf.err dwarf +check_native_unsupported dwarf.err dwarf check_main dwarf.bt dwarf diff --git a/tests/run-deleted.sh b/tests/run-deleted.sh new file mode 100755 index 00000000..2b5a9a84 --- /dev/null +++ b/tests/run-deleted.sh @@ -0,0 +1,48 @@ +#! /bin/bash +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/backtrace-subr.sh + +tempfiles deleted deleted-lib.so +cp -p ${abs_builddir}/deleted ${abs_builddir}/deleted-lib.so . + +# We don't want to run the deleted process under valgrind then +# stack will see the valgrind process backtrace. +OLD_VALGRIND_CMD="$VALGRIND_CMD" +unset VALGRIND_CMD + +pid=$(testrun ${abs_builddir}/deleted) +sleep 1 +rm -f deleted deleted-lib.so +tempfiles bt bt.err + +set VALGRIND_CMD="$OLD_VALGRIND_CMD" +# It may have non-zero exit code with: +# .../elfutils/src/stack: dwfl_thread_getframes tid 26376 at 0x4006c8 in .../elfutils/tests/deleted: no matching address range +testrun ${abs_top_builddir}/src/stack -p $pid 1>bt 2>bt.err || true +cat bt bt.err +kill -9 $pid +wait +check_native_unsupported bt.err deleted +# For PPC64 we need access to the OPD table which we get through the shdrs +# (see backends/ppc64_init.c) but for the deleted-lib we only have phdrs. +# So we don't have the name of the function. But since we should find +# the EH_FRAME through phdrs just fine, we can unwind into main. +if test "`uname -m`" != "ppc64"; then + grep -qw libfunc bt +fi +grep -qw main bt diff --git a/tests/run-dwarf-getmacros.sh b/tests/run-dwarf-getmacros.sh index ddb58e83..0a488fa3 100755 --- a/tests/run-dwarf-getmacros.sh +++ b/tests/run-dwarf-getmacros.sh @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2009 Red Hat, Inc. +# Copyright (C) 2009, 2014 Red Hat, Inc. # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify @@ -20,103 +20,294 @@ testfiles testfile51 testrun_compare ${abs_builddir}/dwarf-getmacros testfile51 0xb <<\EOF +file /home/petr/proj/elfutils/pending/elfutils/tests/decom/x.c + __STDC__ 1 + __STDC_HOSTED__ 1 + __GNUC__ 4 + __GNUC_MINOR__ 3 + __GNUC_PATCHLEVEL__ 2 + __GNUC_RH_RELEASE__ 7 + __SIZE_TYPE__ long unsigned int + __PTRDIFF_TYPE__ long int + __WCHAR_TYPE__ int + __WINT_TYPE__ unsigned int + __INTMAX_TYPE__ long int + __UINTMAX_TYPE__ long unsigned int + __GXX_ABI_VERSION 1002 + __SCHAR_MAX__ 127 + __SHRT_MAX__ 32767 + __INT_MAX__ 2147483647 + __LONG_MAX__ 9223372036854775807L + __LONG_LONG_MAX__ 9223372036854775807LL + __WCHAR_MAX__ 2147483647 + __CHAR_BIT__ 8 + __INTMAX_MAX__ 9223372036854775807L + __FLT_EVAL_METHOD__ 0 + __DEC_EVAL_METHOD__ 2 + __FLT_RADIX__ 2 + __FLT_MANT_DIG__ 24 + __FLT_DIG__ 6 + __FLT_MIN_EXP__ (-125) + __FLT_MIN_10_EXP__ (-37) + __FLT_MAX_EXP__ 128 + __FLT_MAX_10_EXP__ 38 + __FLT_MAX__ 3.40282347e+38F + __FLT_MIN__ 1.17549435e-38F + __FLT_EPSILON__ 1.19209290e-7F + __FLT_DENORM_MIN__ 1.40129846e-45F + __FLT_HAS_DENORM__ 1 + __FLT_HAS_INFINITY__ 1 + __FLT_HAS_QUIET_NAN__ 1 + __DBL_MANT_DIG__ 53 + __DBL_DIG__ 15 + __DBL_MIN_EXP__ (-1021) + __DBL_MIN_10_EXP__ (-307) + __DBL_MAX_EXP__ 1024 + __DBL_MAX_10_EXP__ 308 + __DBL_MAX__ 1.7976931348623157e+308 + __DBL_MIN__ 2.2250738585072014e-308 + __DBL_EPSILON__ 2.2204460492503131e-16 + __DBL_DENORM_MIN__ 4.9406564584124654e-324 + __DBL_HAS_DENORM__ 1 + __DBL_HAS_INFINITY__ 1 + __DBL_HAS_QUIET_NAN__ 1 + __LDBL_MANT_DIG__ 64 + __LDBL_DIG__ 18 + __LDBL_MIN_EXP__ (-16381) + __LDBL_MIN_10_EXP__ (-4931) + __LDBL_MAX_EXP__ 16384 + __LDBL_MAX_10_EXP__ 4932 + __DECIMAL_DIG__ 21 + __LDBL_MAX__ 1.18973149535723176502e+4932L + __LDBL_MIN__ 3.36210314311209350626e-4932L + __LDBL_EPSILON__ 1.08420217248550443401e-19L + __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L + __LDBL_HAS_DENORM__ 1 + __LDBL_HAS_INFINITY__ 1 + __LDBL_HAS_QUIET_NAN__ 1 + __DEC32_MANT_DIG__ 7 + __DEC32_MIN_EXP__ (-95) + __DEC32_MAX_EXP__ 96 + __DEC32_MIN__ 1E-95DF + __DEC32_MAX__ 9.999999E96DF + __DEC32_EPSILON__ 1E-6DF + __DEC32_DEN__ 0.000001E-95DF + __DEC64_MANT_DIG__ 16 + __DEC64_MIN_EXP__ (-383) + __DEC64_MAX_EXP__ 384 + __DEC64_MIN__ 1E-383DD + __DEC64_MAX__ 9.999999999999999E384DD + __DEC64_EPSILON__ 1E-15DD + __DEC64_DEN__ 0.000000000000001E-383DD + __DEC128_MANT_DIG__ 34 + __DEC128_MIN_EXP__ (-6143) + __DEC128_MAX_EXP__ 6144 + __DEC128_MIN__ 1E-6143DL + __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL + __DEC128_EPSILON__ 1E-33DL + __DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL + __REGISTER_PREFIX__ + __USER_LABEL_PREFIX__ + __VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" + __GNUC_GNU_INLINE__ 1 + _LP64 1 + __LP64__ 1 + __NO_INLINE__ 1 + __FINITE_MATH_ONLY__ 0 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 + __SIZEOF_INT__ 4 + __SIZEOF_LONG__ 8 + __SIZEOF_LONG_LONG__ 8 + __SIZEOF_SHORT__ 2 + __SIZEOF_FLOAT__ 4 + __SIZEOF_DOUBLE__ 8 + __SIZEOF_LONG_DOUBLE__ 16 + __SIZEOF_SIZE_T__ 8 + __SIZEOF_WCHAR_T__ 4 + __SIZEOF_WINT_T__ 4 + __SIZEOF_PTRDIFF_T__ 8 + __SIZEOF_POINTER__ 8 + __amd64 1 + __amd64__ 1 + __x86_64 1 + __x86_64__ 1 + __k8 1 + __k8__ 1 + __MMX__ 1 + __SSE__ 1 + __SSE2__ 1 + __SSE_MATH__ 1 + __SSE2_MATH__ 1 + __gnu_linux__ 1 + __linux 1 + __linux__ 1 + linux 1 + __unix 1 + __unix__ 1 + unix 1 + __ELF__ 1 + __DECIMAL_BID_FORMAT__ 1 + macro1 ble +/file +EOF + +testrun_compare ${abs_builddir}/dwarf-getmacros testfile51 0x84 <<\EOF +file /home/petr/proj/elfutils/pending/elfutils/tests/decom/y.c + __STDC__ 1 + __STDC_HOSTED__ 1 + __GNUC__ 4 + __GNUC_MINOR__ 3 + __GNUC_PATCHLEVEL__ 2 + __GNUC_RH_RELEASE__ 7 + __SIZE_TYPE__ long unsigned int + __PTRDIFF_TYPE__ long int + __WCHAR_TYPE__ int + __WINT_TYPE__ unsigned int + __INTMAX_TYPE__ long int + __UINTMAX_TYPE__ long unsigned int + __GXX_ABI_VERSION 1002 + __SCHAR_MAX__ 127 + __SHRT_MAX__ 32767 + __INT_MAX__ 2147483647 + __LONG_MAX__ 9223372036854775807L + __LONG_LONG_MAX__ 9223372036854775807LL + __WCHAR_MAX__ 2147483647 + __CHAR_BIT__ 8 + __INTMAX_MAX__ 9223372036854775807L + __FLT_EVAL_METHOD__ 0 + __DEC_EVAL_METHOD__ 2 + __FLT_RADIX__ 2 + __FLT_MANT_DIG__ 24 + __FLT_DIG__ 6 + __FLT_MIN_EXP__ (-125) + __FLT_MIN_10_EXP__ (-37) + __FLT_MAX_EXP__ 128 + __FLT_MAX_10_EXP__ 38 + __FLT_MAX__ 3.40282347e+38F + __FLT_MIN__ 1.17549435e-38F + __FLT_EPSILON__ 1.19209290e-7F + __FLT_DENORM_MIN__ 1.40129846e-45F + __FLT_HAS_DENORM__ 1 + __FLT_HAS_INFINITY__ 1 + __FLT_HAS_QUIET_NAN__ 1 + __DBL_MANT_DIG__ 53 + __DBL_DIG__ 15 + __DBL_MIN_EXP__ (-1021) + __DBL_MIN_10_EXP__ (-307) + __DBL_MAX_EXP__ 1024 + __DBL_MAX_10_EXP__ 308 + __DBL_MAX__ 1.7976931348623157e+308 + __DBL_MIN__ 2.2250738585072014e-308 + __DBL_EPSILON__ 2.2204460492503131e-16 + __DBL_DENORM_MIN__ 4.9406564584124654e-324 + __DBL_HAS_DENORM__ 1 + __DBL_HAS_INFINITY__ 1 + __DBL_HAS_QUIET_NAN__ 1 + __LDBL_MANT_DIG__ 64 + __LDBL_DIG__ 18 + __LDBL_MIN_EXP__ (-16381) + __LDBL_MIN_10_EXP__ (-4931) + __LDBL_MAX_EXP__ 16384 + __LDBL_MAX_10_EXP__ 4932 + __DECIMAL_DIG__ 21 + __LDBL_MAX__ 1.18973149535723176502e+4932L + __LDBL_MIN__ 3.36210314311209350626e-4932L + __LDBL_EPSILON__ 1.08420217248550443401e-19L + __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L + __LDBL_HAS_DENORM__ 1 + __LDBL_HAS_INFINITY__ 1 + __LDBL_HAS_QUIET_NAN__ 1 + __DEC32_MANT_DIG__ 7 + __DEC32_MIN_EXP__ (-95) + __DEC32_MAX_EXP__ 96 + __DEC32_MIN__ 1E-95DF + __DEC32_MAX__ 9.999999E96DF + __DEC32_EPSILON__ 1E-6DF + __DEC32_DEN__ 0.000001E-95DF + __DEC64_MANT_DIG__ 16 + __DEC64_MIN_EXP__ (-383) + __DEC64_MAX_EXP__ 384 + __DEC64_MIN__ 1E-383DD + __DEC64_MAX__ 9.999999999999999E384DD + __DEC64_EPSILON__ 1E-15DD + __DEC64_DEN__ 0.000000000000001E-383DD + __DEC128_MANT_DIG__ 34 + __DEC128_MIN_EXP__ (-6143) + __DEC128_MAX_EXP__ 6144 + __DEC128_MIN__ 1E-6143DL + __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL + __DEC128_EPSILON__ 1E-33DL + __DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL + __REGISTER_PREFIX__ + __USER_LABEL_PREFIX__ + __VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" + __GNUC_GNU_INLINE__ 1 + _LP64 1 + __LP64__ 1 + __NO_INLINE__ 1 + __FINITE_MATH_ONLY__ 0 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 + __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 + __SIZEOF_INT__ 4 + __SIZEOF_LONG__ 8 + __SIZEOF_LONG_LONG__ 8 + __SIZEOF_SHORT__ 2 + __SIZEOF_FLOAT__ 4 + __SIZEOF_DOUBLE__ 8 + __SIZEOF_LONG_DOUBLE__ 16 + __SIZEOF_SIZE_T__ 8 + __SIZEOF_WCHAR_T__ 4 + __SIZEOF_WINT_T__ 4 + __SIZEOF_PTRDIFF_T__ 8 + __SIZEOF_POINTER__ 8 + __amd64 1 + __amd64__ 1 + __x86_64 1 + __x86_64__ 1 + __k8 1 + __k8__ 1 + __MMX__ 1 + __SSE__ 1 + __SSE2__ 1 + __SSE_MATH__ 1 + __SSE2_MATH__ 1 + __gnu_linux__ 1 + __linux 1 + __linux__ 1 + linux 1 + __unix 1 + __unix__ 1 + unix 1 + __ELF__ 1 + __DECIMAL_BID_FORMAT__ 1 + macro2 ble +/file +EOF + +testfiles testfile-macros + +testrun_compare ${abs_builddir}/dwarf-getmacros testfile-macros 0xb <<\EOF __STDC__ 1 __STDC_HOSTED__ 1 __GNUC__ 4 -__GNUC_MINOR__ 3 -__GNUC_PATCHLEVEL__ 2 -__GNUC_RH_RELEASE__ 7 -__SIZE_TYPE__ long unsigned int -__PTRDIFF_TYPE__ long int -__WCHAR_TYPE__ int -__WINT_TYPE__ unsigned int -__INTMAX_TYPE__ long int -__UINTMAX_TYPE__ long unsigned int -__GXX_ABI_VERSION 1002 -__SCHAR_MAX__ 127 -__SHRT_MAX__ 32767 -__INT_MAX__ 2147483647 -__LONG_MAX__ 9223372036854775807L -__LONG_LONG_MAX__ 9223372036854775807LL -__WCHAR_MAX__ 2147483647 -__CHAR_BIT__ 8 -__INTMAX_MAX__ 9223372036854775807L -__FLT_EVAL_METHOD__ 0 -__DEC_EVAL_METHOD__ 2 -__FLT_RADIX__ 2 -__FLT_MANT_DIG__ 24 -__FLT_DIG__ 6 -__FLT_MIN_EXP__ (-125) -__FLT_MIN_10_EXP__ (-37) -__FLT_MAX_EXP__ 128 -__FLT_MAX_10_EXP__ 38 -__FLT_MAX__ 3.40282347e+38F -__FLT_MIN__ 1.17549435e-38F -__FLT_EPSILON__ 1.19209290e-7F -__FLT_DENORM_MIN__ 1.40129846e-45F -__FLT_HAS_DENORM__ 1 -__FLT_HAS_INFINITY__ 1 -__FLT_HAS_QUIET_NAN__ 1 -__DBL_MANT_DIG__ 53 -__DBL_DIG__ 15 -__DBL_MIN_EXP__ (-1021) -__DBL_MIN_10_EXP__ (-307) -__DBL_MAX_EXP__ 1024 -__DBL_MAX_10_EXP__ 308 -__DBL_MAX__ 1.7976931348623157e+308 -__DBL_MIN__ 2.2250738585072014e-308 -__DBL_EPSILON__ 2.2204460492503131e-16 -__DBL_DENORM_MIN__ 4.9406564584124654e-324 -__DBL_HAS_DENORM__ 1 -__DBL_HAS_INFINITY__ 1 -__DBL_HAS_QUIET_NAN__ 1 -__LDBL_MANT_DIG__ 64 -__LDBL_DIG__ 18 -__LDBL_MIN_EXP__ (-16381) -__LDBL_MIN_10_EXP__ (-4931) -__LDBL_MAX_EXP__ 16384 -__LDBL_MAX_10_EXP__ 4932 -__DECIMAL_DIG__ 21 -__LDBL_MAX__ 1.18973149535723176502e+4932L -__LDBL_MIN__ 3.36210314311209350626e-4932L -__LDBL_EPSILON__ 1.08420217248550443401e-19L -__LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L -__LDBL_HAS_DENORM__ 1 -__LDBL_HAS_INFINITY__ 1 -__LDBL_HAS_QUIET_NAN__ 1 -__DEC32_MANT_DIG__ 7 -__DEC32_MIN_EXP__ (-95) -__DEC32_MAX_EXP__ 96 -__DEC32_MIN__ 1E-95DF -__DEC32_MAX__ 9.999999E96DF -__DEC32_EPSILON__ 1E-6DF -__DEC32_DEN__ 0.000001E-95DF -__DEC64_MANT_DIG__ 16 -__DEC64_MIN_EXP__ (-383) -__DEC64_MAX_EXP__ 384 -__DEC64_MIN__ 1E-383DD -__DEC64_MAX__ 9.999999999999999E384DD -__DEC64_EPSILON__ 1E-15DD -__DEC64_DEN__ 0.000000000000001E-383DD -__DEC128_MANT_DIG__ 34 -__DEC128_MIN_EXP__ (-6143) -__DEC128_MAX_EXP__ 6144 -__DEC128_MIN__ 1E-6143DL -__DEC128_MAX__ 9.999999999999999999999999999999999E6144DL -__DEC128_EPSILON__ 1E-33DL -__DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL -__REGISTER_PREFIX__ -__USER_LABEL_PREFIX__ -__VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" -__GNUC_GNU_INLINE__ 1 +__GNUC_MINOR__ 7 +__GNUC_PATCHLEVEL__ 0 +__VERSION__ "4.7.0 20120507 (Red Hat 4.7.0-5)" +__GNUC_RH_RELEASE__ 5 +__ATOMIC_RELAXED 0 +__ATOMIC_SEQ_CST 5 +__ATOMIC_ACQUIRE 2 +__ATOMIC_RELEASE 3 +__ATOMIC_ACQ_REL 4 +__ATOMIC_CONSUME 1 +__FINITE_MATH_ONLY__ 0 _LP64 1 __LP64__ 1 -__NO_INLINE__ 1 -__FINITE_MATH_ONLY__ 0 -__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 -__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 -__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 -__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 __SIZEOF_INT__ 4 __SIZEOF_LONG__ 8 __SIZEOF_LONG_LONG__ 8 @@ -125,46 +316,49 @@ __SIZEOF_FLOAT__ 4 __SIZEOF_DOUBLE__ 8 __SIZEOF_LONG_DOUBLE__ 16 __SIZEOF_SIZE_T__ 8 -__SIZEOF_WCHAR_T__ 4 -__SIZEOF_WINT_T__ 4 -__SIZEOF_PTRDIFF_T__ 8 +__CHAR_BIT__ 8 +__BIGGEST_ALIGNMENT__ 16 +__ORDER_LITTLE_ENDIAN__ 1234 +__ORDER_BIG_ENDIAN__ 4321 +__ORDER_PDP_ENDIAN__ 3412 +__BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +__FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ __SIZEOF_POINTER__ 8 -__amd64 1 -__amd64__ 1 -__x86_64 1 -__x86_64__ 1 -__k8 1 -__k8__ 1 -__MMX__ 1 -__SSE__ 1 -__SSE2__ 1 -__SSE_MATH__ 1 -__SSE2_MATH__ 1 -__gnu_linux__ 1 -__linux 1 -__linux__ 1 -linux 1 -__unix 1 -__unix__ 1 -unix 1 -__ELF__ 1 -__DECIMAL_BID_FORMAT__ 1 -macro1 ble -EOF - -testrun_compare ${abs_builddir}/dwarf-getmacros testfile51 0x84 <<\EOF -__STDC__ 1 -__STDC_HOSTED__ 1 -__GNUC__ 4 -__GNUC_MINOR__ 3 -__GNUC_PATCHLEVEL__ 2 -__GNUC_RH_RELEASE__ 7 __SIZE_TYPE__ long unsigned int __PTRDIFF_TYPE__ long int __WCHAR_TYPE__ int __WINT_TYPE__ unsigned int __INTMAX_TYPE__ long int __UINTMAX_TYPE__ long unsigned int +__CHAR16_TYPE__ short unsigned int +__CHAR32_TYPE__ unsigned int +__SIG_ATOMIC_TYPE__ int +__INT8_TYPE__ signed char +__INT16_TYPE__ short int +__INT32_TYPE__ int +__INT64_TYPE__ long int +__UINT8_TYPE__ unsigned char +__UINT16_TYPE__ short unsigned int +__UINT32_TYPE__ unsigned int +__UINT64_TYPE__ long unsigned int +__INT_LEAST8_TYPE__ signed char +__INT_LEAST16_TYPE__ short int +__INT_LEAST32_TYPE__ int +__INT_LEAST64_TYPE__ long int +__UINT_LEAST8_TYPE__ unsigned char +__UINT_LEAST16_TYPE__ short unsigned int +__UINT_LEAST32_TYPE__ unsigned int +__UINT_LEAST64_TYPE__ long unsigned int +__INT_FAST8_TYPE__ signed char +__INT_FAST16_TYPE__ long int +__INT_FAST32_TYPE__ long int +__INT_FAST64_TYPE__ long int +__UINT_FAST8_TYPE__ unsigned char +__UINT_FAST16_TYPE__ long unsigned int +__UINT_FAST32_TYPE__ long unsigned int +__UINT_FAST64_TYPE__ long unsigned int +__INTPTR_TYPE__ long int +__UINTPTR_TYPE__ long unsigned int __GXX_ABI_VERSION 1002 __SCHAR_MAX__ 127 __SHRT_MAX__ 32767 @@ -172,8 +366,51 @@ __INT_MAX__ 2147483647 __LONG_MAX__ 9223372036854775807L __LONG_LONG_MAX__ 9223372036854775807LL __WCHAR_MAX__ 2147483647 -__CHAR_BIT__ 8 +__WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +__WINT_MAX__ 4294967295U +__WINT_MIN__ 0U +__PTRDIFF_MAX__ 9223372036854775807L +__SIZE_MAX__ 18446744073709551615UL __INTMAX_MAX__ 9223372036854775807L +__INTMAX_C(c) c ## L +__UINTMAX_MAX__ 18446744073709551615UL +__UINTMAX_C(c) c ## UL +__SIG_ATOMIC_MAX__ 2147483647 +__SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +__INT8_MAX__ 127 +__INT16_MAX__ 32767 +__INT32_MAX__ 2147483647 +__INT64_MAX__ 9223372036854775807L +__UINT8_MAX__ 255 +__UINT16_MAX__ 65535 +__UINT32_MAX__ 4294967295U +__UINT64_MAX__ 18446744073709551615UL +__INT_LEAST8_MAX__ 127 +__INT8_C(c) c +__INT_LEAST16_MAX__ 32767 +__INT16_C(c) c +__INT_LEAST32_MAX__ 2147483647 +__INT32_C(c) c +__INT_LEAST64_MAX__ 9223372036854775807L +__INT64_C(c) c ## L +__UINT_LEAST8_MAX__ 255 +__UINT8_C(c) c +__UINT_LEAST16_MAX__ 65535 +__UINT16_C(c) c +__UINT_LEAST32_MAX__ 4294967295U +__UINT32_C(c) c ## U +__UINT_LEAST64_MAX__ 18446744073709551615UL +__UINT64_C(c) c ## UL +__INT_FAST8_MAX__ 127 +__INT_FAST16_MAX__ 9223372036854775807L +__INT_FAST32_MAX__ 9223372036854775807L +__INT_FAST64_MAX__ 9223372036854775807L +__UINT_FAST8_MAX__ 255 +__UINT_FAST16_MAX__ 18446744073709551615UL +__UINT_FAST32_MAX__ 18446744073709551615UL +__UINT_FAST64_MAX__ 18446744073709551615UL +__INTPTR_MAX__ 9223372036854775807L +__UINTPTR_MAX__ 18446744073709551615UL __FLT_EVAL_METHOD__ 0 __DEC_EVAL_METHOD__ 2 __FLT_RADIX__ 2 @@ -183,10 +420,11 @@ __FLT_MIN_EXP__ (-125) __FLT_MIN_10_EXP__ (-37) __FLT_MAX_EXP__ 128 __FLT_MAX_10_EXP__ 38 -__FLT_MAX__ 3.40282347e+38F -__FLT_MIN__ 1.17549435e-38F -__FLT_EPSILON__ 1.19209290e-7F -__FLT_DENORM_MIN__ 1.40129846e-45F +__FLT_DECIMAL_DIG__ 9 +__FLT_MAX__ 3.40282346638528859812e+38F +__FLT_MIN__ 1.17549435082228750797e-38F +__FLT_EPSILON__ 1.19209289550781250000e-7F +__FLT_DENORM_MIN__ 1.40129846432481707092e-45F __FLT_HAS_DENORM__ 1 __FLT_HAS_INFINITY__ 1 __FLT_HAS_QUIET_NAN__ 1 @@ -196,10 +434,11 @@ __DBL_MIN_EXP__ (-1021) __DBL_MIN_10_EXP__ (-307) __DBL_MAX_EXP__ 1024 __DBL_MAX_10_EXP__ 308 -__DBL_MAX__ 1.7976931348623157e+308 -__DBL_MIN__ 2.2250738585072014e-308 -__DBL_EPSILON__ 2.2204460492503131e-16 -__DBL_DENORM_MIN__ 4.9406564584124654e-324 +__DBL_DECIMAL_DIG__ 17 +__DBL_MAX__ ((double)1.79769313486231570815e+308L) +__DBL_MIN__ ((double)2.22507385850720138309e-308L) +__DBL_EPSILON__ ((double)2.22044604925031308085e-16L) +__DBL_DENORM_MIN__ ((double)4.94065645841246544177e-324L) __DBL_HAS_DENORM__ 1 __DBL_HAS_INFINITY__ 1 __DBL_HAS_QUIET_NAN__ 1 @@ -218,50 +457,51 @@ __LDBL_HAS_DENORM__ 1 __LDBL_HAS_INFINITY__ 1 __LDBL_HAS_QUIET_NAN__ 1 __DEC32_MANT_DIG__ 7 -__DEC32_MIN_EXP__ (-95) -__DEC32_MAX_EXP__ 96 +__DEC32_MIN_EXP__ (-94) +__DEC32_MAX_EXP__ 97 __DEC32_MIN__ 1E-95DF __DEC32_MAX__ 9.999999E96DF __DEC32_EPSILON__ 1E-6DF -__DEC32_DEN__ 0.000001E-95DF +__DEC32_SUBNORMAL_MIN__ 0.000001E-95DF __DEC64_MANT_DIG__ 16 -__DEC64_MIN_EXP__ (-383) -__DEC64_MAX_EXP__ 384 +__DEC64_MIN_EXP__ (-382) +__DEC64_MAX_EXP__ 385 __DEC64_MIN__ 1E-383DD __DEC64_MAX__ 9.999999999999999E384DD __DEC64_EPSILON__ 1E-15DD -__DEC64_DEN__ 0.000000000000001E-383DD +__DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD __DEC128_MANT_DIG__ 34 -__DEC128_MIN_EXP__ (-6143) -__DEC128_MAX_EXP__ 6144 +__DEC128_MIN_EXP__ (-6142) +__DEC128_MAX_EXP__ 6145 __DEC128_MIN__ 1E-6143DL __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL __DEC128_EPSILON__ 1E-33DL -__DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL +__DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL __REGISTER_PREFIX__ __USER_LABEL_PREFIX__ -__VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" __GNUC_GNU_INLINE__ 1 -_LP64 1 -__LP64__ 1 __NO_INLINE__ 1 -__FINITE_MATH_ONLY__ 0 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 -__SIZEOF_INT__ 4 -__SIZEOF_LONG__ 8 -__SIZEOF_LONG_LONG__ 8 -__SIZEOF_SHORT__ 2 -__SIZEOF_FLOAT__ 4 -__SIZEOF_DOUBLE__ 8 -__SIZEOF_LONG_DOUBLE__ 16 -__SIZEOF_SIZE_T__ 8 +__GCC_ATOMIC_BOOL_LOCK_FREE 2 +__GCC_ATOMIC_CHAR_LOCK_FREE 2 +__GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +__GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +__GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +__GCC_ATOMIC_SHORT_LOCK_FREE 2 +__GCC_ATOMIC_INT_LOCK_FREE 2 +__GCC_ATOMIC_LONG_LOCK_FREE 2 +__GCC_ATOMIC_LLONG_LOCK_FREE 2 +__GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +__GCC_ATOMIC_POINTER_LOCK_FREE 2 +__GCC_HAVE_DWARF2_CFI_ASM 1 +__PRAGMA_REDEFINE_EXTNAME 1 +__SIZEOF_INT128__ 16 __SIZEOF_WCHAR_T__ 4 __SIZEOF_WINT_T__ 4 __SIZEOF_PTRDIFF_T__ 8 -__SIZEOF_POINTER__ 8 __amd64 1 __amd64__ 1 __x86_64 1 @@ -282,7 +522,189 @@ __unix__ 1 unix 1 __ELF__ 1 __DECIMAL_BID_FORMAT__ 1 -macro2 ble +file /home/mark/src/tests/macro.c + file /usr/include/string.h + _STRING_H 1 + file /usr/include/features.h + include 0x5d8 + _FEATURES_H 1 + __KERNEL_STRICT_NAMES + __USE_ANSI 1 + __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) + _BSD_SOURCE 1 + _SVID_SOURCE 1 + _POSIX_SOURCE 1 + _POSIX_C_SOURCE 200809L + __USE_POSIX_IMPLICITLY 1 + __USE_POSIX 1 + __USE_POSIX2 1 + __USE_POSIX199309 1 + __USE_POSIX199506 1 + __USE_XOPEN2K 1 + __USE_ISOC95 1 + __USE_ISOC99 1 + __USE_XOPEN2K8 1 + _ATFILE_SOURCE 1 + __USE_MISC 1 + __USE_BSD 1 + __USE_SVID 1 + __USE_ATFILE 1 + __USE_FORTIFY_LEVEL 0 + /include + file /usr/include/stdc-predef.h + include 0x733 + _STDC_PREDEF_H 1 + __STDC_IEC_559__ 1 + __STDC_IEC_559_COMPLEX__ 1 + __STDC_ISO_10646__ 201103L + __STDC_NO_THREADS__ 1 + /include + /file + include 0x755 + __GNU_LIBRARY__ 6 + __GLIBC__ 2 + __GLIBC_MINOR__ 15 + __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min)) + __GLIBC_HAVE_LONG_LONG 1 + /include + file /usr/include/sys/cdefs.h + include 0x783 + _SYS_CDEFS_H 1 + __LEAF , __leaf__ + __LEAF_ATTR __attribute__ ((__leaf__)) + __THROW __attribute__ ((__nothrow__ __LEAF)) + __THROWNL __attribute__ ((__nothrow__)) + __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct + __P(args) args + __PMT(args) args + __CONCAT(x,y) x ## y + __STRING(x) #x + __ptr_t void * + __long_double_t long double + __BEGIN_DECLS + __END_DECLS + __BEGIN_NAMESPACE_STD + __END_NAMESPACE_STD + __USING_NAMESPACE_STD(name) + __BEGIN_NAMESPACE_C99 + __END_NAMESPACE_C99 + __USING_NAMESPACE_C99(name) + __bounded + __unbounded + __ptrvalue + __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) + __bos0(ptr) __builtin_object_size (ptr, 0) + __fortify_function __extern_always_inline __attribute_artificial__ + __warndecl(name,msg) extern void name (void) __attribute__((__warning__ (msg))) + __warnattr(msg) __attribute__((__warning__ (msg))) + __errordecl(name,msg) extern void name (void) __attribute__((__error__ (msg))) + __flexarr [] + __REDIRECT(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) + __REDIRECT_NTH(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) __THROW + __REDIRECT_NTHNL(name,proto,alias) name proto __asm__ (__ASMNAME (#alias)) __THROWNL + __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) + __ASMNAME2(prefix,cname) __STRING (prefix) cname + __attribute_malloc__ __attribute__ ((__malloc__)) + __attribute_pure__ __attribute__ ((__pure__)) + __attribute_const__ __attribute__ ((__const__)) + __attribute_used__ __attribute__ ((__used__)) + __attribute_noinline__ __attribute__ ((__noinline__)) + __attribute_deprecated__ __attribute__ ((__deprecated__)) + __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) + __attribute_format_strfmon__(a,b) __attribute__ ((__format__ (__strfmon__, a, b))) + __nonnull(params) __attribute__ ((__nonnull__ params)) + __attribute_warn_unused_result__ __attribute__ ((__warn_unused_result__)) + __wur + __always_inline __inline __attribute__ ((__always_inline__)) + __attribute_artificial__ __attribute__ ((__artificial__)) + __extern_inline extern __inline + __extern_always_inline extern __always_inline + __va_arg_pack() __builtin_va_arg_pack () + __va_arg_pack_len() __builtin_va_arg_pack_len () + __restrict_arr __restrict + __glibc_unlikely(cond) __builtin_expect((cond), 0) + /include + file /usr/include/bits/wordsize.h + include 0x8fa + __WORDSIZE 64 + __WORDSIZE_TIME64_COMPAT32 1 + __SYSCALL_WORDSIZE 64 + /include + /file + include 0x910 + __LDBL_REDIR1(name,proto,alias) name proto + __LDBL_REDIR(name,proto) name proto + __LDBL_REDIR1_NTH(name,proto,alias) name proto __THROW + __LDBL_REDIR_NTH(name,proto) name proto __THROW + __LDBL_REDIR_DECL(name) + __REDIRECT_LDBL(name,proto,alias) __REDIRECT (name, proto, alias) + __REDIRECT_NTH_LDBL(name,proto,alias) __REDIRECT_NTH (name, proto, alias) + /include + /file + file /usr/include/gnu/stubs.h + file /usr/include/gnu/stubs-64.h + include 0x945 + __stub_bdflush + __stub_chflags + __stub_fattach + __stub_fchflags + __stub_fdetach + __stub_getmsg + __stub_gtty + __stub_lchmod + __stub_putmsg + __stub_revoke + __stub_setlogin + __stub_sigreturn + __stub_sstk + __stub_stty + /include + /file + /file + /file + include 0x99d + __need_size_t + __need_NULL + /include + file /usr/lib/gcc/x86_64-redhat-linux/4.7.0/include/stddef.h + include 0x9ad + __size_t__ + __SIZE_T__ + _SIZE_T + _SYS_SIZE_T_H + _T_SIZE_ + _T_SIZE + __SIZE_T + _SIZE_T_ + _BSD_SIZE_T_ + _SIZE_T_DEFINED_ + _SIZE_T_DEFINED + _BSD_SIZE_T_DEFINED_ + _SIZE_T_DECLARED + ___int_size_t_h + _GCC_SIZE_T + _SIZET_ + __size_t + NULL ((void *)0) + /include + /file + file /usr/include/xlocale.h + _XLOCALE_H 1 + /file + /file + HELLO "world" +/file +EOF + +testfiles testfile-macros-0xff +testrun_compare ${abs_builddir}/dwarf-getmacros testfile-macros-0xff 0xb <<\EOF +invalid opcode +EOF +testrun_compare ${abs_builddir}/dwarf-getmacros testfile-macros-0xff 0xb '' <<\EOF +opcode 255 with 0 arguments +file /home/petr/proj/elfutils/master/elfutils/x.c + FOO 0 +/file EOF exit 0 diff --git a/tests/run-linkmap-cut.sh b/tests/run-linkmap-cut.sh new file mode 100755 index 00000000..de2bc7cc --- /dev/null +++ b/tests/run-linkmap-cut.sh @@ -0,0 +1,32 @@ +#! /bin/bash +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# The core file has patched: +# * _r_debug.r_map.l_next.l_next (vma 0x3fdf621718, offset 0x7718) = NULL, +# therefore all libraries after the main executable and vDSO are removed. +# * NT_FILE absolute filenames are relativized to: ./////basename + +testfiles linkmap-cut-lib.so linkmap-cut linkmap-cut.core +tempfiles bt +# It may have non-zero exit code with: +# .../elfutils/src/stack: dwfl_thread_getframes tid 3130 at 0x3fdf821d64 in /usr/lib64/libc-2.18.so: no matching address range +testrun ${abs_top_builddir}/src/stack --core=linkmap-cut.core -e linkmap-cut -m >bt || true +cat bt +grep -q '^#0 0x00007f08bc24d681 libfunc - .////////////////////////////////////linkmap-cut-lib\.so$' bt +grep -q '^#1 0x00000000004006b4 main - linkmap-cut$' bt diff --git a/tests/run-readelf-A.sh b/tests/run-readelf-A.sh new file mode 100755 index 00000000..6ca9be89 --- /dev/null +++ b/tests/run-readelf-A.sh @@ -0,0 +1,65 @@ +#! /bin/sh +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# See run-addrcfi.sh for testfilearm. + +# = testfileppc32attrs.s = +# .gnu_attribute 8,1 +# .gnu_attribute 12,1 +# +# gcc -m32 -c testfileppc32attrs.s + +testfiles testfilearm testfileppc32attrs.o + +testrun_compare ${abs_top_builddir}/src/readelf -A testfilearm <<\EOF + +Object attributes section [27] '.ARM.attributes' of 53 bytes at offset 0x718: + Owner Size + aeabi 52 + File: 42 + CPU_name: 7-A + CPU_arch: v7 + CPU_arch_profile: Application + ARM_ISA_use: Yes + THUMB_ISA_use: Thumb-2 + VFP_arch: VFPv3-D16 + ABI_PCS_wchar_t: 4 + ABI_FP_rounding: Needed + ABI_FP_denormal: Needed + ABI_FP_exceptions: Needed + ABI_FP_number_model: IEEE 754 + ABI_align8_needed: Yes + ABI_align8_preserved: Yes, except leaf SP + ABI_enum_size: int + ABI_HardFP_use: SP and DP + ABI_VFP_args: VFP registers + CPU_unaligned_access: v6 +EOF + +testrun_compare ${abs_top_builddir}/src/readelf -A testfileppc32attrs.o <<\EOF + +Object attributes section [ 4] '.gnu.attributes' of 18 bytes at offset 0x34: + Owner Size + gnu 17 + File: 9 + GNU_Power_ABI_Vector: Generic + GNU_Power_ABI_Struct_Return: r3/r4 +EOF + +exit 0 diff --git a/tests/run-unstrip-n.sh b/tests/run-unstrip-n.sh index 12c38229..37cbd607 100755 --- a/tests/run-unstrip-n.sh +++ b/tests/run-unstrip-n.sh @@ -67,7 +67,7 @@ remove_files="$remove_files $outfile2" grep -v libc.so.6 $outfile | sort >$outfile2 diff -u $outfile2 - <<EOF 0x400000+0x202038 - test-core.exec - test-core.exec -0x7f67f2aaf000+0x202000 - . - test-core-lib.so +0x7f67f2aaf000+0x202000 - . - /home/jkratoch/redhat/elfutils-libregr/test-core-lib.so 0x7fff1596c000+0x1000 a9cf37f53897b5468ee018655760be61b8633d3c@0x7fff1596c340 . - linux-vdso.so.1 EOF diff --git a/tests/testfile-lex-inlines.bz2 b/tests/testfile-lex-inlines.bz2 Binary files differnew file mode 100755 index 00000000..716e7927 --- /dev/null +++ b/tests/testfile-lex-inlines.bz2 diff --git a/tests/testfile-macros-0xff.bz2 b/tests/testfile-macros-0xff.bz2 Binary files differnew file mode 100755 index 00000000..a19662a3 --- /dev/null +++ b/tests/testfile-macros-0xff.bz2 diff --git a/tests/testfile-macros-0xff.s b/tests/testfile-macros-0xff.s new file mode 100644 index 00000000..7fdd35c2 --- /dev/null +++ b/tests/testfile-macros-0xff.s @@ -0,0 +1,153 @@ + .file "x.c" + .text +.Ltext0: + .globl main + .type main, @function +main: +.LFB0: + .file 1 "x.c" + .loc 1 3 0 + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + .loc 1 3 0 + movl $0, %eax + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE0: + .size main, .-main +.Letext0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .long 0x52 + .value 0x4 + .long .Ldebug_abbrev0 + .byte 0x8 + .uleb128 0x1 + .long .LASF244 + .byte 0x4 + .string "x.c" + .long .LASF245 + .quad .Ltext0 + .quad .Letext0-.Ltext0 + .long .Ldebug_line0 + .long .Ldebug_macro0 + .uleb128 0x2 + .long .LASF246 + .byte 0x1 + .byte 0x3 + .long 0x4e + .quad .LFB0 + .quad .LFE0-.LFB0 + .uleb128 0x1 + .byte 0x9c + .uleb128 0x3 + .byte 0x4 + .byte 0x5 + .string "int" + .byte 0 + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x1b + .uleb128 0xe + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x7 + .uleb128 0x10 + .uleb128 0x17 + .uleb128 0x2119 + .uleb128 0x17 + .byte 0 + .byte 0 + .uleb128 0x2 + .uleb128 0x2e + .byte 0 + .uleb128 0x3f + .uleb128 0x19 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x7 + .uleb128 0x40 + .uleb128 0x18 + .uleb128 0x2117 + .uleb128 0x19 + .byte 0 + .byte 0 + .uleb128 0x3 + .uleb128 0x24 + .byte 0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0x8 + .byte 0 + .byte 0 + .byte 0 + .section .debug_aranges,"",@progbits + .long 0x2c + .value 0x2 + .long .Ldebug_info0 + .byte 0x8 + .byte 0 + .value 0 + .value 0 + .quad .Ltext0 + .quad .Letext0-.Ltext0 + .quad 0 + .quad 0 + .section .debug_macro,"",@progbits +.Ldebug_macro0: + .value 0x4 + .byte 0x6 + .long .Ldebug_line0 + .byte 0x1 + .byte 0xff + .uleb128 0 + .byte 0xff + .byte 0x3 + .uleb128 0 + .uleb128 0x1 + .byte 0x5 + .uleb128 0x1 + .long .LASF243 + .byte 0x4 + .byte 0 + .section .debug_line,"",@progbits +.Ldebug_line0: + .section .debug_str,"MS",@progbits,1 +.LASF245: + .string "/home/petr/proj/elfutils/master/elfutils" +.LASF244: + .string "GNU C++ 4.9.0 20140422 (Red Hat 4.9.0-1) -mtune=generic -march=x86-64 -g3" +.LASF243: + .string "FOO 0" +.LASF246: + .string "main" + .ident "GCC: (GNU) 4.9.0 20140422 (Red Hat 4.9.0-1)" + .section .note.GNU-stack,"",@progbits diff --git a/tests/testfile-sizes1.o.bz2 b/tests/testfile-sizes1.o.bz2 Binary files differnew file mode 100644 index 00000000..479ecb20 --- /dev/null +++ b/tests/testfile-sizes1.o.bz2 diff --git a/tests/testfile-sizes2.o.bz2 b/tests/testfile-sizes2.o.bz2 Binary files differnew file mode 100644 index 00000000..7bd7b47f --- /dev/null +++ b/tests/testfile-sizes2.o.bz2 diff --git a/tests/testfile-sizes3.o.bz2 b/tests/testfile-sizes3.o.bz2 Binary files differnew file mode 100644 index 00000000..7fa6a8a5 --- /dev/null +++ b/tests/testfile-sizes3.o.bz2 diff --git a/tests/testfileppc32attrs.o.bz2 b/tests/testfileppc32attrs.o.bz2 Binary files differnew file mode 100644 index 00000000..c8d80a99 --- /dev/null +++ b/tests/testfileppc32attrs.o.bz2 diff --git a/tests/vdsosyms.c b/tests/vdsosyms.c new file mode 100644 index 00000000..c1f8d89f --- /dev/null +++ b/tests/vdsosyms.c @@ -0,0 +1,109 @@ +/* Test program for getting symbol table from vdso module. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> +#include <assert.h> +#include <errno.h> +#include <error.h> +#include <inttypes.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> +#include ELFUTILS_HEADER(dwfl) + +#ifndef __linux__ +int +main (int argc __attribute__ ((unused)), char **argv) +{ + printf ("Getting the vdso is unsupported.\n"); + return 77; +} +#else /* __linux__ */ +static int vdso_syms = 0; + +static int +module_callback (Dwfl_Module *mod, void **userdata __attribute__((unused)), + const char *name, Dwarf_Addr start __attribute__((unused)), + void *arg __attribute__((unused))) +{ + /* We can only recognize the vdso by inspecting the "magic name". */ + printf ("module name: %s\n", name); + if (strncmp ("[vdso: ", name, 7) == 0) + { + vdso_syms = dwfl_module_getsymtab (mod); + printf ("vdso syms: %d\n", vdso_syms); + if (vdso_syms < 0) + error (2, 0, "dwfl_module_getsymtab: %s", dwfl_errmsg (-1)); + + for (int i = 0; i < vdso_syms; i++) + { + GElf_Sym sym; + GElf_Addr addr; + const char *sname = dwfl_module_getsym_info (mod, i, &sym, &addr, + NULL, NULL, NULL); + assert (sname != NULL); + printf ("%d: '%s' %" PRIx64 " (%" PRIx64 ")\n", + i, sname, sym.st_value, addr); + } + } + + return DWARF_CB_OK; +} + +int +main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) +{ + static char *debuginfo_path; + static const Dwfl_Callbacks proc_callbacks = + { + .find_debuginfo = dwfl_standard_find_debuginfo, + .debuginfo_path = &debuginfo_path, + + .find_elf = dwfl_linux_proc_find_elf, + }; + Dwfl *dwfl = dwfl_begin (&proc_callbacks); + if (dwfl == NULL) + error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1)); + + /* Take our parent as "arbitrary" process to inspect. */ + pid_t pid = getppid(); + + int result = dwfl_linux_proc_report (dwfl, pid); + if (result < 0) + error (2, 0, "dwfl_linux_proc_report: %s", dwfl_errmsg (-1)); + else if (result > 0) + error (2, result, "dwfl_linux_proc_report"); + + /* Also explicitly attach for older kernels (cannot read vdso otherwise). */ + result = dwfl_linux_proc_attach (dwfl, pid, false); + if (result < 0) + error (2, 0, "dwfl_linux_proc_attach: %s", dwfl_errmsg (-1)); + else if (result > 0) + error (2, result, "dwfl_linux_proc_attach"); + + if (dwfl_report_end (dwfl, NULL, NULL) != 0) + error (2, 0, "dwfl_report_end: %s", dwfl_errmsg (-1)); + + if (dwfl_getmodules (dwfl, module_callback, NULL, 0) != 0) + error (1, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1)); + + /* No symbols is ok, then we haven't seen the vdso at all on this arch. */ + return vdso_syms >= 0 ? 0 : -1; +} + +#endif /* ! __linux__ */ |
